LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 652|回复: 0

求关于gethostbuaddr的问题

[复制链接]
发表于 2010-4-17 23:01:58 | 显示全部楼层 |阅读模式
使用gethostbyaddr无法得到host的信息,代码如下:

#include<netinet/in.h>
#include<netdb.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>


int main(int argc, char * argv[])
{
struct hostent * hp;
char * hostname;
char **p;
struct in_addr in2;

if(argc!=2){
printf("usage: %s host_name\n",argv[0]);
exit(1);
}
//这一部分使用域名得到的信息正确
hp=gethostbyname(argv[1]);

if(hp==NULL){
printf("host information for %s not found\n",argv[0]);
exit(2);
}
for(p=hp->h_addr_list;*p!=NULL;p++){
struct in_addr in;
char **q;
memcpy(&in.s_addr,*p,sizeof(in.s_addr));
printf("%s\t%s",inet_ntoa(in),hp->h_name);
in2=in;
for(q=hp->h_aliases;*q!=0;q++)
printf(" %s",*q);
putchar('\n');
}
//到此均正确,下面使用ip得到host信息的部分有错误,找了半天也没解决
hp=gethostbyaddr(&in2,4,AF_INET);

printf("\n\n gethostbyaddr:\n ") ;
for(p=hp->h_addr_list;*p!=NULL;p++){
struct in_addr in;
char **q;
memcpy(&in.s_addr,*p,sizeof(in.s_addr));
printf("%s\t%s",inet_ntoa(in),hp->h_name);
in2=in;
for(q=hp->h_aliases;*q!=0;q++)
printf(" %s",*q);
putchar('\n');
}
exit(0);
}

执行结果如下:
第一次: lee@ubuntu:~/socket$ ./hostname www.baidu.com
202.108.22.5        www.a.shifen.com www.baidu.com
202.108.22.142        www.a.shifen.com www.baidu.com
gethostbyaddr:
202.108.22.142        xd-22-142-a8.bta.net.cn

第二此: lee@ubuntu:~/socket$ ./hostname www.sina.com.cn
202.108.33.73        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.74        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.75        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.76        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.77        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.78        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.79        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.80        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.81        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.82        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.83        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.84        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.85        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.86        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.87        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn
202.108.33.72        libra.sina.com.cn www.sina.com.cn jupiter.sina.com.cn


gethostbyaddr:
Segmentation fault
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表