我目前正在制作一份"列出本地网络中的内容" -tool,现在我被困在" gimme主机名为这个IP" -part。
我已经尝试了getnameinfo和gethostbyaddr,但第一个返回(几乎)总是给定的IP而不是主机名,第二个返回一些奇怪的东西,如ANantes-651-1-49-net.w2-0.abo.wanadoo.fr
......
我的问题是:我怎样才能做到这一点?
注意:并不是没有与至少一个IP关联的主机名,例如dig +short -x 192.168.178.1
应该返回fritz.box.
,host 192.168.178.1
给出了正确答案
1.178.168.192.in-addr.arpa domain name pointer fritz.box.
补充说明:在我的研究中,我偶然发现了一个名为" adns"的图书馆,但却被"偶然发现"我的意思是"几乎完全偶然发现",因为没有丝毫的文档痕迹,例子等......所以,如果有人真的有一个如何使用" adns& #34;,那会很棒......
答案 0 :(得分:0)
Oookay ......似乎,我把几件东西搞砸了几乎是“猴子想要香蕉”式......
1号:
我用过这个:
...
sockaddr_in address;
memset(&address, 0, sizeof(address));
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("192.168.178.1");
struct hostent *h =gethostbyaddr((const void *)&address, sizeof(address), AF_INET);
...
而不是正确的:
...
in_addr address;
inet_aton("192.168.178.1",&address);
struct hostent *h = gethostbyaddr((const void *)&address, sizeof(address), AF_INET);
...
2号:
我检查了一行,如果返回的主机名为空,则用占位符替换它,具体取决于所选的“报告格式”(纯文本/ xml / csv)。但无论出于何种原因,我都是以某种方式写的,它总是用所谓的占位符替换主机名(当然!它有点显而易见,但我一直没看到它......)。
但最终:是的!它有效......