我必须测试“IPv4 映射地址”是否与某些 ipv6 网络前缀匹配,例如 2001:db8::/32。
我已阅读 related link 1和 related 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/