是否可以在同时使用 IPv4 和 IPv6 的双栈环境中测试 IP 地址的等效性?如果是这样,怎么做?
我的应用程序在 Boost ASIO 之上使用websocket++ 。
例如,在我的 LAN 上,一个应用程序连接到另一个正在侦听的应用程序192.168.1.2
,但使用此答案的 IP 地址获取器
std::string s = socket.remote_endpoint().address().to_string();
给出::ffff:192.168.1.3
作为客户的地址。
问题是.2
它将有自己的节点列表和原始 v4 地址,因此通过简单的字符串比较上面的 getter 与磁盘上保存的 v4 版本,即使已经连接.3
,它也会寻找冗余连接。.3
我进一步读到,事情可能会变得更复杂,因为通过这种虚线四边形表示法,::ffff:192.0.2.128
也是::ffff:c000:0280
。
我正在构建一个 p2p 应用程序,该应用程序接受来自不受信任来源的地址,因此为了防止冗余连接,我需要能够绝对测试等效性。
我的意图可以实现吗?如果是这样,怎么做?如果没有,我应该只使用 v4 吗?我宁愿现在就包含未来的功能,而不是担心以后的集成。