VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 694|回复: 3

用gethostbyaddr获取搜狐主机时遇到的奇怪问题

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-17 05:40:01 | 显示全部楼层 |阅读模式
主程序

void GetHostInfoByAddr(const char *addr)
{
        hostent *phost=NULL;
        unsigned long u_ip=inet_addr(addr);
        phost=gethostbyaddr((char *)&u_ip,4,AF_INET);
        cout<<WSAGetLastError()<<endl;
        if (phost==NULL)
        {
                cerr<<"get host info                  failed----"<<GetLastError()<<endl;
                return;
        }
        cout<<phost->h_name<<endl;//报错
        return;
}


int main()
{
        WSADATA wsadata;
        WSAStartup(MAKEWORD(2,2),&wsadata);
    //GetHostInfoByAddr("202.102.14.141");
        GetHostInfoByAddr("218.30.66.201");//搜狐IP,PING得到
        WSACleanup();
        system("pause");
        return 0;
}

WSAGetLastError()返回值为0,且phost也不为空,表明函数调用成功。
但输出主机名时却报“0x00421940指令引用的'0xffff305c'内存,该内存不能为"read"
这是为什么啊?
如果说gethostbyaddr只能获取局域网的主机名,但我用202.102.14.141却又能正确取到主机,请验证一下我的代码,多谢。
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-21 21:36:01 | 显示全部楼层
PING到的搜狐IP应该是221.236.12.205或者221.236.12.214。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-17 13:30:01 | 显示全部楼层
请看 MSDN 文档资料,WSAGetLastError()返回值为0 并不意味着所请求的地址一定有对应的 host name,如果 WSAGetLastError() == 11001,则表明没有host name, 所以有访问违例.

请看 msdn example code:


//----------------------
// Declare and initialize variables
hostent* remoteHost;
char* host_name;
unsigned int addr;

//----------------------
// User inputs name of host
printf("Input name of host: ");
host_name = (char*) malloc(sizeof(char*)*16);
fgets(host_name, 16, stdin);

// If the user input is an alpha name for the host, use gethostbyname()
// If not, get host by addr (assume IPv4)
if (isalpha(host_name[0])) {   /* host address is a name */
  host_name[strlen(host_name)-1] = '\0'; /* NULL TERMINATED */
  remoteHost = gethostbyname(host_name);
}
else  {
  addr = inet_addr(host_name);
  remoteHost = gethostbyaddr((char *) &addr, 4, AF_INET);
}

if (WSAGetLastError() != 0) {
  if (WSAGetLastError() == 11001)
  printf("Host not found...\nExiting.\n");
}
else
  printf("error#:%ld\n", WSAGetLastError());

// The remoteHost structure can now be used to
// access information about the host
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-8-17 16:45:01 | 显示全部楼层
3Ks
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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