C++ 反向 dns 查找(在本地网络上)

C++ reverse dns lookup (on local network)

我目前正在开发 "list what's up in the local network"-工具,现在我被困在 "gimme a hostname for this IP"-部分。

我已经尝试过 getnameinfo 和 gethostbyaddr,但是第一个 returns(几乎)总是给定的 IP 而不是主机名,第二个 returns 一些奇怪的东西,比如 ANantes-651-1-49-net.w2-0.abo.wanadoo.fr...

我的问题是:我怎样才能完成这项工作?

注意:这并不是说没有主机名与至少一个 IP 相关联,例如 dig +short -x 192.168.178.1 return fritz.box.host 192.168.178.1给出正确答案 1.178.168.192.in-addr.arpa domain name pointer fritz.box.

补充说明:在我的研究中,我偶然发现了一个名为 "adns" 的库,但是 "stumbled upon" 我的意思是 "almost literally stumbled upon",因为没有丝毫文档、示例的痕迹等等...所以如果有人真的有关于如何使用 "adns" 的示例,那就太好了...

Oookay...好像我以几乎 "monkey wanna banana" 的方式搞砸了几件事...

第一名:

我用过这个:

...
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名:

我检查了一行,如果返回的主机名是空的,则用占位符替换它,具体取决于所选 "report format"(普通 text/xml/csv)。但无论出于何种原因,我以某种方式编写它,它总是用所述占位符替换主机名(该死!这有点明显,但我一直没有看到它......)。

但最后:耶!有效...