【问题标题】:How to reverse IPv6 address for DNS lookup - C++如何反转 IPv6 地址以进行 DNS 查找 - C++
【发布时间】:2020-03-08 14:30:34
【问题描述】:

在我的项目中,我需要反转 IPv6 IP 地址以便将来进行 DNS 查找。

例子:

来自: 2001:db8:85a3:0:0:8a2e:370:7334

到: 7334:370:8a2e:0:0:85a3:db8:2001

如何用 c++ 做到这一点? 谢谢你的回答:)

PS: 对于 IPv4,我正在使用此解决方案:

        int a,b,c,d;
        char ip2[32];
        sscanf(pageAddress, "%d.%d.%d.%d", &a, &b, &c, &d);
        sprintf(ip2, "%d.%d.%d.%d", d, c, b, a);
        std::cout << ip2 << "\n";

有没有更好的解决方案?

【问题讨论】:

  • 这不是反向 DNS 查找所做的。为将来的 DNS 查找反向 IP 地址不是标准做法。 “反向 DNS”正在获取一个 IP 地址并找出它映射到的主机名。示例:查找 151.101.1.69 并发现它映射到 www.stackoverflow.com。 你真正想做什么?
  • 我正在尝试从参数中获取一些信息,即用户传递给程序的信息(ipv4 地址、ipv6 地址、主机名)。老师告诉我,我可以反转 ip 地址并执行以下操作:5.2.0.192.in-addr.arpa。然后使用res_query函数获取信息(ptr, mx, soa, a, aaaa, ...)
  • 除了@selbie 重要的评论,请注意,IPv6 地址可以用多种方式编写,因此在使用它之前,您需要将其规范化为以后操作所需的一些通用格式。请参阅 RFC5952 了解这方面的开始。
  • in-addr.arpa 专用于 IPv4,不适用于 IPv6。看tools.ietf.org/html/rfc3596#section-2.5

标签: c++ dns lookup ipv6 ipv4


【解决方案1】:

我知道这不是您所需要的,但我只是想回答您的问题,而不是您需要的!

几个月前,我为 ipv4 和 ipv6 编写了一整套课程。相信我,你不想以字符串格式进行 ipv6 操作。您可以将 ipv4 放在 ipv6 中;所以这并不容易;特别是关于短格式和类似内容的所有规则。

我觉得里面还有一些没用的代码,不过你可以轻松清理一下。

ipv4 类中也有 ipv4 版本的 reversed 方法。还有一些 ipv4 和 ipv6 验证以及子网掩码验证。

这里:https://godbolt.org/z/S9SEDh

我会把代码放在这里,但是太长了。

【讨论】:

    猜你喜欢
    • 2012-01-06
    • 2014-06-09
    • 1970-01-01
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多