首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试ipv6地址是否与网络前缀匹配

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

Stack Overflow用户
提问于 2014-12-13 01:57:35
回答 2查看 1K关注 0票数 1

我必须测试"IPv4映射地址“是否与类似于2001:db8::/32的ipv6网络前缀匹配。

我读过related link 1related link 2,我理解如何测试地址是否位于子网中。

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

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

代码语言:javascript
复制
 boolean inSubnet = (ip ^ subnet) & netmask == 0;

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

EN

回答 2

Stack Overflow用户

发布于 2014-12-13 03:47:07

如果你有这样做的机会,我建议你使用google的inetaddresses类。它提供了一些很好的特性,您可以使用这些特性来强制转换为IPv4等等。

票数 0
EN

Stack Overflow用户

发布于 2017-03-05 15:38:38

给定ipv4地址1.2.3.4,ipv4映射地址为::ffff:1.2.3.4,其前缀始终为0::ffff:0:0/96

在任何情况下,通常为了测试ipv6地址是否在给定子网中,您可以使用open-source IPAddress Java library,它可以执行ip地址操作,例如在ipv4/ipv6和子网检查之间的转换。免责声明:我是项目经理。

示例代码:

代码语言:javascript
复制
    String ipv6 = "2001:db8:57AB:0000:0000:0000:0000:0001";
    String ipv6subnet = "2001:db8::/32";
    String ipv4 = "1.2.3.4";
    try {
        IPAddressString ipv6addrstr = new IPAddressString(ipv6);
        IPAddressString ipv6addrsubnetstr = new IPAddressString(ipv6subnet);
        IPAddressString ipv4addrstr = new IPAddressString(ipv4);

        IPAddress ipv6addr = ipv6addrstr.toAddress();
        IPAddress ipv6addrsubnet = ipv6addrsubnetstr.toAddress();
        IPAddress ipv4mappedaddr = ipv4addrstr.toAddress().toIPv6();

        System.out.println(ipv6addrsubnet + " contains " + ipv6addr + " is " + ipv6addrsubnet.contains(ipv6addr)); //
        System.out.println(ipv6addrsubnet + " contains " + ipv4mappedaddr + " is " + ipv6addrsubnet.contains(ipv4mappedaddr)); //

    } catch(AddressStringException e) {
        //e.getMessage has validation error
    }

输出:

代码语言:javascript
复制
2001:db8:0:0:0:0:0:0/32 contains 2001:db8:57ab:0:0:0:0:1 is true
2001:db8:0:0:0:0:0:0/32 contains 0:0:0:0:0:ffff:102:304 is false
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27449407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档