标签:
程序源于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 else17 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,这就提供了收集用户信息的手段。
标签:
原文地址:http://www.cnblogs.com/farbeyond/p/5196832.html