程序源于linux程序设计这本书,个人利用这本书学习,本文作为一个知识点来学习.
这里首先介绍几个结构体:
|
其中,主机地址类型h_addrtype为AF_INET;地址列表为字符串,长度不定.
|
下面来点干活,直接插入代码:
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;
1011 if(argc==1){//若没有主机名陈,则获取本机信息
12 char myname[256];
13 gethostname(myname,255);14 host = myname;15 }16 else
17 host = argv[1];1819 hostinfo = gethostbyname(host);//获取主机信息20 if(!hostinfo){
21 fprintf(stderr,"cannot get info host:%s\n",host);
22 exit(1);
23 }2425 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 }3334 printf("\n");
3536 if(hostinfo -> h_addrtype !=AF_INET){//主机地址类型判断
37 fprintf(stderr,"not an IP host!\n");
38 exit(1);
39 }4041 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,这就提供了收集用户信息的手段。