程序源于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,这就提供了收集用户信息的手段。

 

posted on 2016-02-17 23:15  farbeyond  阅读(1169)  评论(0编辑  收藏  举报