免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8428 | 回复: 16
打印 上一主题 下一主题

gethostbyaddr总是返回null [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-16 22:18 |只看该作者 |倒序浏览
10可用积分
char * host_name="220.181.38.82";///百度音乐盒网址http://220.181.38.82
struct in_addr addr;

if(inet_pton(AF_INET,host_name,(void*)&addr)==-1)
{
                        perror("phost");
                        exit(1);
}

if((host = gethostbyaddr((char *)&addr, 4, AF_INET))==NULL)
{
                        perror("gethostbyaddr");
                        exit(1);
}

失败。为什么啊?

即是解析主机IP地址都是失败的。
说明一下,我在虚拟机下的linux系统下做的。

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
2 [报告]
发表于 2008-07-16 22:26 |只看该作者
if((host = gethostbyaddr((char *)&addr, 4, AF_INET))==NULL)

你试一下将4改为sizeof(addr),即:
if((host = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET))==NULL)

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2008-07-16 23:22 |只看该作者
按理说4也是对的。
要么LZ打印sizeof(addr)的结果看一下。

论坛徽章:
0
4 [报告]
发表于 2008-07-16 23:39 |只看该作者
也不行,sizeof(addr)也是4.
用herror("gethostbyaddr")输出错误消息,是unkown host.
难道在linux下做网络编程还要配置DNS吗?用域名即是gethostbyname是可以的。DNS反向解析出问题?

论坛徽章:
0
5 [报告]
发表于 2008-07-16 23:45 |只看该作者
vi /etc/hosts

论坛徽章:
0
6 [报告]
发表于 2008-07-16 23:56 |只看该作者
原帖由 ivhb 于 2008-7-16 23:45 发表
vi /etc/hosts


只有127.0.0.1 和 主机名
难道要把每个要解析的IP地址对应的域名全部都添加上去吗?
这样不是很麻烦?

论坛徽章:
0
7 [报告]
发表于 2008-07-17 00:54 |只看该作者
对方的设置不支持这种查询而已。如果换一个 ip


  1. #include <stdio.h>
  2. #include <netdb.h>
  3. #include <stdlib.h>

  4. int main ()
  5. {
  6.   //char * host_name="220.181.38.82";                                                         
  7.   char * host_name="64.233.189.104";

  8.   struct in_addr addr;
  9.   struct hostent *host;

  10.   if(inet_pton(AF_INET,host_name,(void*)&addr)==-1)
  11.     {
  12.       perror("phost");
  13.       exit(1);
  14.     }

  15.   if((host = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET))==NULL)
  16.     {
  17.       perror("gethostbyaddr");
  18.       exit(1);
  19.     }
  20.   printf("%s\n", host->h_name);
  21. }
复制代码


输出为:
hk-in-f104.google.com

[ 本帖最后由 win_hate 于 2008-7-17 00:55 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-07-17 01:06 |只看该作者
通常情况下不会只去读 hosts 文件的。如果你抓一下包,就会发现有 DNS 查询,并且对方给你发回一个  NXDomain.

论坛徽章:
0
9 [报告]
发表于 2008-07-17 10:04 |只看该作者
原帖由 win_hate 于 2008-7-17 00:54 发表
对方的设置不支持这种查询而已。如果换一个 ip


#include
#include
#include

int main ()
{
  //char * host_name="220.181.38.82";                                                          ...



还是不行的,返回unknow host。
我连自己的ip都无法正确返回。
但域名解析是可以的。是不是和dns的设置有关呢?

论坛徽章:
0
10 [报告]
发表于 2008-07-17 11:07 |只看该作者
原帖由 greatho1507 于 2008-7-17 10:04 发表



还是不行的,返回unknow host。
我连自己的ip都无法正确返回。
但域名解析是可以的。是不是和dns的设置有关呢?

需要用到DNS的,还有,你的服务器能上网不?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP