Unix检索并打印一个DNS主机条目

#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结果不一样。这个是为什么呢?

你可能感兴趣的:(c,unix,dns)