【发布时间】:2014-06-12 22:03:12
【问题描述】:
是否可以在同时使用 IPv4 和 IPv6 的双栈环境中测试 IP 地址的等效性?如果有,怎么做?
我的应用程序在 Boost ASIO 之上使用 websocket++。
例如,在我的 LAN 上,一个应用程序连接到另一个侦听 192.168.1.2,但使用 this answer's IP address getter
std::string s = socket.remote_endpoint().address().to_string();
将::ffff:192.168.1.3 作为客户端地址。
问题是.2 将拥有自己的节点列表,其中包含.3 的原始 v4 地址,因此通过简单的字符串比较上面的 getter 与磁盘上保存的 v4 版本,它将寻找冗余连接到.3 即使已经连接。
我进一步了解到事情会变得更复杂,因为dotted quad notation,::ffff:192.0.2.128 也是 ::ffff:c000:0280。
我正在构建一个 p2p 应用程序,它接受来自不受信任来源的地址,因此为了防止冗余连接,我需要能够绝对地测试等效性。
我的意图可以实现吗?如果是这样,怎么做?如果没有,我应该只使用 v4 吗?我宁愿现在就包含未来的功能,而不是担心以后的集成。
【问题讨论】:
-
你想限制协议吗?
标签: c++ boost-asio ip-address equivalence websocket++