java - 如何测试 ipv6 地址是否与网络前缀匹配

标签 java networking ipv6

我必须测试“IPv4 映射地址”是否与某些 ipv6 网络前缀匹配,例如 2001:db8::/32。

我已阅读 related link 1related link 2我了解如何测试地址是否位于子网中。

我不知道这些链接是否与我的上下文相关。根据我的理解,我们可以使用“映射”地址的有​​线格式创建一个 128 位 IPv6 地址,并在 IPv6 数据包 header 中传输它。然而,Java 的 InetAddress 创建方法似乎顽固地遵循“映射”地址的初衷:所有“映射”地址都返回 Inet4Address 对象。

如果我想像这样运行 isInSubnet 测试:

 boolean inSubnet = (ip ^ subnet) & netmask == 0;

对于这种测试,我必须将 ip、子网和网络掩码转换为整数或长整型。但是,如果子网和网络掩码表示为 IPV6 值并且 ip 被强制为 Inet4Address 值,此测试是否有效?

最佳答案

如果您有能力这样做,我建议您使用 google inetaddresses类(class)。它提供了一些不错的功能,您可以使用它们来强制使用 IPv4 以及其他功能。

关于java - 如何测试 ipv6 地址是否与网络前缀匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27449407/

相关文章:

java - 可扩展 float 操作按钮

java - Cassandra 映射器未映射到该类

c# - 在服务器之间快速传输大数据

java - 在任何情况下(在实践中),在 catch block 中抛出 Exception 是有用的吗?

java - 在RecyclerView-AndroidX中的项目之间添加不同的布局

networking - 如何调试Websocket?

c# - 如何设置 TcpClient 的超时时间?

linux - 在Linux上检索eth0 ipv6地址

ios - 使用 OSX 10.11 Beta 5 (El Capitan) 设置 IPv6 环境

node.js - 使用 Node.js 进行 IPv6 多播