LinuxSir.cn,穿越时空的Linuxsir!

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

gethostbyaddr函数为什么总是返回NULL?

[复制链接]
发表于 2005-6-25 00:07:09 | 显示全部楼层 |阅读模式

  1. main(int argc,char *argv[])
  2. {
  3.         struct        hostent        *hent;
  4.                 unsigned long lng=inet_addr(argv[1]);
  5.         hent=gethostbyaddr((const char *)&lng,sizeof(unsigned long),AF_INET);
  6.         printf("%s\n",hent->h_name);

  7. }
复制代码

测试本机  网关 以及局域网内没开防火墙的虚拟机都失败 是为什么?
发表于 2005-6-25 12:16:59 | 显示全部楼层
Post by hawfeng

  1. main(int argc,char *argv[])
  2. {
  3.         struct        hostent        *hent;
  4.                 unsigned long lng=inet_addr(argv[1]);
  5.         hent=gethostbyaddr((const char *)&lng,sizeof(unsigned long),AF_INET);
  6.         printf("%s\n",hent->h_name);

  7. }
复制代码

测试本机  网关 以及局域网内没开防火墙的虚拟机都失败 是为什么?

如果gethostbyaddr返回null,printf肯定异常的呀
回复 支持 反对

使用道具 举报

发表于 2005-6-25 13:00:12 | 显示全部楼层
程序看起来没有问题,你的操作?
dns有名有设置对?
hosts有没有设置好?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-25 13:10:48 | 显示全部楼层
这是本来的程序 后来加上了

  1. if(hent==NULL)printf("null\n");
  2. printf("%d\n",h_errno);
复制代码

结果是
null
1
如果h_errn0为1,表示找不到制定主机。
问题是我的DNS应该没错,是前几天刚设置的,一直都能上网
回复 支持 反对

使用道具 举报

发表于 2005-6-25 20:27:07 | 显示全部楼层
程序我运行了,没有问题。是不是程序中没有包含必要的头文件?

  1. #include <netdb.h>
  2. #include <netinet/in.h>
  3. #include <arpa/inet.h>
  4. #include <sys/socket.h>

  5. int main(int argc,char *argv[])
  6. {
  7.         struct  hostent *hent;
  8.         unsigned long lng=inet_addr(argv[1]);
  9.         hent=gethostbyaddr((const char *)&lng,sizeof(unsigned long),AF_INET);
  10.         printf("%s\n",hent->h_name);

  11. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-25 23:16:42 | 显示全部楼层
还是不行  我是在虚拟机测试的。
估计是哪里有点问题。
回复 支持 反对

使用道具 举报

发表于 2005-6-26 20:19:52 | 显示全部楼层
用tcpdump把包抓下来看看吧。
回复 支持 反对

使用道具 举报

发表于 2005-6-28 13:16:05 | 显示全部楼层
Post by kj501
用tcpdump把包抓下来看看吧。

我正想这么说   
另:nslookup可以用么?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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