标签:
#include<stdio.h> #include<stdlib.h> #include<netdb.h> #include<arpa/inet.h> int main(int argc,char *argv[]) { char **pp; /*指向字符串的指针*/ struct in_addr addr; /*存储IP地址的结构体*/ struct hostent *hostp; /*地址结构体*/ /*如果参数小于2,就报错*/ if(argc!=2) { fprintf(stderr,"usage: %s <domain name or dotted-decimal>\n",argv[0]); exit(0); /*正常退出程序*/ } /*如果运行参数为一个点分十进制IP地址,则去根据它检索地址结构体;否则,根据域名检索地址结构体*/ if(inet_aton(argv[1],&addr)!=0) hostp = gethostbyaddr((const char *)&addr ,sizeof(addr),AF_INET); else hostp = gethostbyname(argv[1]); /*打印官方域名*/ printf("official hostname: %s\n",hostp->h_name); /*打印域名的别名*/ for(pp = hostp->h_aliases;*pp!=NULL;pp++) { printf("alias: %s\n",*pp); } /*打印域名的IP地址,十进制点分形式*/ for(pp = hostp->h_addr_list;*pp!=NULL;pp++) { addr.s_addr=((struct in_addr *)*pp)->s_addr; printf("address: %s\n",inet_ntoa(addr)); } /*程序正常退出*/ exit(0); }
这里面存在一个问题,当我连续调用两次 ./hostinfo.o google.com时,两次返回的IP结果不一样。这个是为什么呢?
标签:
原文地址:http://my.oschina.net/zzw922cn/blog/475421