|
使用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 |
|