linux下获取主机信息

程序源于linux程序设计这本书,个人利用这本书学习,本文作为一个知识点来学习.

这里首先介绍几个结构体:

1
2
3
4
5
6
7
struct hostent{
char * h_name; //主机名称
char * h_aliases; //主机别名
short h_addrtype; //主机地址类型
short h_length; //主机地址长度
char **h_addr_list; //主机地址列表
}
 

 

 

 

 

其中,主机地址类型h_addrtype为AF_INET;地址列表为字符串,长度不定.

1
2
3
4
5
6
struct servent {
    char  *s_name;       /* 服务名 */
    char **s_aliases;    /* 服务别名列表 */
    int    s_port;       /* 端口号 */
    char  *s_proto;      /* 使用的协议 */
};
 

 

 

 

下面来点干活,直接插入代码:

1 #include<unistd.h>
2 #include<netinet/in.h>
3 #include<arpa/inet.h>
4 #include<netdb.h>
5 #include<stdio.h>
6
7 int main( int argc, char *argv[]){
8     char *host, **names,**addrs;
9     struct hostent *hostinfo;
10
11     if (argc==1){ //若没有主机名陈,则获取本机信息
12         char myname[256];
13         gethostname(myname,255);
14         host = myname;
15     }
16     else
17         host = argv[1];
18
19     hostinfo = gethostbyname(host);//获取主机信息
20     if (!hostinfo){
21         fprintf (stderr, "cannot get info host:%s\n" ,host);                  
22         exit (1);
23     }
24
25     printf ( "resluts for host %s:\n" ,host);
26     printf ( "Name:%s\n" ,hostinfo -> h_name); //主机名
27     printf ( "Aliases:" );
28     names = hostinfo -> h_aliases; //主机别名
29     while (*names){//输出全部主机别名
30         printf ( " %s" ,*names);
31         names++;
32     }
33
34     printf ( "\n" );
35
36     if (hostinfo -> h_addrtype !=AF_INET){//主机地址类型判断
37         fprintf (stderr, "not an IP host!\n" );
38         exit (1);
39     }
40
41     addrs = hostinfo -> h_addr_list;
42     while (*addrs){//转换主机地址格式
43         printf ( " %s" ,inet_ntoa(*( struct in_addr *)*addrs));
44         addrs++;
45     }
46     printf ( "\n" );
47     exit (0);
48 }

程序运行结果: linux下相册不好传图片,这里直接传文字了。

./getname resluts for host farbeyond-Aspire-4741:

Name:farbeyond-Aspire-4741

Aliases: 127.0.1.1

./getname baidu.com resluts for host baidu.com:

Name:baidu.com

Aliases:

220.181.57.217 220.181.57.216 123.125.114.144       

      上面这三个ip地址,大家均可以用于访问百度。而谷歌同时有十几个ip在使用,依据公司规模不同而不同。

这是客户端来查询服务器端,当然服务器端也可以查看访问者的来源ip,这就提供了收集用户信息的手段。

 

你可能感兴趣的:(linux下获取主机信息)