写了两个程序,大家帮我看一下
(1)
int main(int argc, char *argv[])
{
struct in_addr addr;
struct hostent *host;
inet_aton(argv[1], &addr);
host = gethostbyaddr(&addr, sizeof(struct in_addr), AF_INET);
printf( "host is %s\n ", host-> h_name);
}
------------------------------------
(2)
int main(int argc, char **argv)
{
struct hostent *hptr;
char **pptr;
char hostname[32];
char str[32];
if((hptr = gethostbyname(argv[1])) == NULL){
fprintf(stderr, "gethostbyname calling error %s\n ",strerror(h_errno));
return 1;
}
pptr=hptr-> h_addr_list;
for(;*pptr!=NULL;pptr++){
inet_ntop(hptr-> h_addrtype, *pptr, str, sizeof(str));
printf( " address:%s\n ", str);
}
return 0;
}
第一个是把主机ip转化成name,第二个是把主机name转化成ip
我的问题是:为什么一个名字可以转化出多个ip,但是一个ip却只能转化出来一个主机名字,还有就是为什么用名字(www.sohu.com)转化出来的ip,再将他转化成名字,结果是断错误,请各位高手指点一下,谢谢了
------解决方案--------------------对于第一个问题,一台主机只能有一个主机名,其它的都是别名,但是一台主机可以有多个IP地址。
对于第二个问题,由主机名转成IP多数情况下是可以的,只要是DNS能查到,但是由IP去求主机名,
这个有时候会不成功能,这个是因为DNS反向查找,可能会查不到。如果取不到的话,
就说明你的gethostbyaddr可能会返回NULL,这时你没有判断返回的指针是否是NULL,直接对它解引用,
就会发生段错误。