0

我目前正在研究“列出本地网络中的内容”-工具,现在我被困在“给我这个 IP 的主机名”部分。

我已经尝试过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”的例子,那太好了......

4

1 回答 1

0

哎呀......似乎,就像我在一个几乎“猴子想要香蕉”的风格中搞砸了几件事......

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)。但无论出于何种原因,我以某种方式编写了它,它总是用所述占位符替换主机名(该死!这有点明显,但我一直没有看到它......)。

但最后:耶!有用...

于 2016-02-20T12:51:12.043 回答