【问题标题】:C++ reverse dns lookup (on local network)C++ 反向 dns 查找(在本地网络上)
【发布时间】:2016-02-19 20:57:57
【问题描述】:

我目前正在使用“列出本地网络中的内容”工具,现在我被困在“给我这个 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”的例子,那就太好了......

【问题讨论】:

  • 您能否说明如何将用作参数的地址设置为gethostbyaddr()?您意识到此“ANantes-651-1-49-net.w2-0.abo.wanadoo.fr”解析为 2.0.0.0,反之亦然,不是吗。所以你的论点有可能是错误的。
  • ... 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); ...
  • 当...我如何在 cmets 中使用换行符?是的,我用dig检查了“主机名”,看到了这个奇怪的2.0.0.0...

标签: c++ networking dns reverse-dns


【解决方案1】:

Oookay... 好像我在“猴子想要香蕉”的风格中搞砸了几件事...

第一名:

我用过这个:

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

但最后:耶!它有效...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    • 2011-10-09
    • 2014-06-09
    • 2021-07-08
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多