gpt4 book ai didi

c++ - gethostbyaddr() 返回 null

转载 作者:太空宇宙 更新时间:2023-11-04 04:07:32 25 4
gpt4 key购买 nike

我知道这个问题之前在这里被问过,我阅读了所有答案,但无法自己解决这个问题。这是交易:我必须编写一个程序,它需要一堆互联网地址(例如 google.com、www.root.cz)并打印出正式名称、备用名称以及 IP 地址和别名域名。我们有 1 个地址的示例代码,没有别名域名,所以我使用了它,然后进行了一些更改以满足我的需求。代码如下所示:

#include <iostream>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>

int main (int argc, char *argv[])
{

for (int i = 1; i < argc; ++i){
hostent *H = gethostbyname(argv[i]);
if (H == NULL)
{
std::cerr << "Nepodařilo se zjistit adresu" << std::endl;
return -1;
}
std::cout << "Oficiální jméno: " << H->h_name << std::endl;
std::cout << "Alternativy: " << std::endl;
/* Budeme procházet pole H->h_aliases. Pole je ukončené NULL.*/
char **alternativy = H->h_aliases;
while(*alternativy != NULL)
{
std::cout << "\t" << *(alternativy++) << std::endl;
}
/* Budeme procházet pole H->h_addr_list. Pole je ukončené NULL.
Zvolíme jiný postup než v předchozím případě.*/
std::cout << "Adresy: " << std::endl;
for(int i = 0; H->h_addr_list[i] != NULL; ++i)
{
/* H->h_addr_list je binární forma IP adresy. Pro převod na
tečkovou konvenci použijeme inet_ntoa.*/
const char* addr = inet_ntoa(*(in_addr *)H->h_addr_list[i]);
hostent *name = gethostbyaddr(addr, sizeof(addr), AF_INET);
std::cout<<addr<<"->"<<name<<std::endl;
}
std::cout<<std::endl;
}
return 0;
}

一切正常。只有名称始终为空。我尝试在笔记本电脑上的 ubuntu 12.04 和虚拟 Debian Squeeze(不记得编号)上运行它。我检查了前面问题中所述的一些配置文件。还尝试配置更多 DNS 服务器。什么都不起作用。我也尝试过使用 getnameinfo,但由于某种原因它总是只返回给定的 IP 地址。任何帮助将不胜感激。

最佳答案

您传递的 IP 格式错误,您希望将其转换回主机名。

像这样改变你的。

for(int i = 0; H->h_addr_list[i] != NULL; ++i)
{
/* H->h_addr_list je binární forma IP adresy. Pro převod na tečkovou konvenci použijeme inet_ntoa.*/
const char* addr = inet_ntoa(*(in_addr *)H->h_addr_list[i]);
hostent *name = gethostbyaddr((in_addr *)H->h_addr_list[i], sizeof(in_addr), AF_INET);
std::cout<<addr<<"->"<<name->h_name<<std::endl;
}

还要查找getaddrinfo(),因为gethotbyname()、gethostbyaddr()是过时的函数

关于c++ - gethostbyaddr() 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20553378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com