当前位置: 技术问答>linux和unix
写了两个程序,大家帮我看一下
来源: 互联网 发布时间:2016-02-07
本文导语: (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...
(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 %sn", 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 %sn",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:%sn", str);
}
return 0;
}
第一个是把主机ip转化成name,第二个是把主机name转化成ip
我的问题是:为什么一个名字可以转化出多个ip,但是一个ip却只能转化出来一个主机名字,还有就是为什么用名字(www.sohu.com)转化出来的ip,再将他转化成名字,结果是断错误,请各位高手指点一下,谢谢了
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 %sn", 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 %sn",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:%sn", str);
}
return 0;
}
第一个是把主机ip转化成name,第二个是把主机name转化成ip
我的问题是:为什么一个名字可以转化出多个ip,但是一个ip却只能转化出来一个主机名字,还有就是为什么用名字(www.sohu.com)转化出来的ip,再将他转化成名字,结果是断错误,请各位高手指点一下,谢谢了
|
对于第一个问题,一台主机只能有一个主机名,其它的都是别名,但是一台主机可以有多个IP地址。
对于第二个问题,由主机名转成IP多数情况下是可以的,只要是DNS能查到,但是由IP去求主机名,
这个有时候会不成功能,这个是因为DNS反向查找,可能会查不到。如果取不到的话,
就说明你的gethostbyaddr可能会返回NULL,这时你没有判断返回的指针是否是NULL,直接对它解引用,
就会发生段错误。
对于第二个问题,由主机名转成IP多数情况下是可以的,只要是DNS能查到,但是由IP去求主机名,
这个有时候会不成功能,这个是因为DNS反向查找,可能会查不到。如果取不到的话,
就说明你的gethostbyaddr可能会返回NULL,这时你没有判断返回的指针是否是NULL,直接对它解引用,
就会发生段错误。