十进制格式化IPV6 IP地址或从IPV6中提取IPV4

时间:2012-12-14 06:38:49

标签: java linux ip-address ipv6 ipv4

是否有任何JAVA或LINUX方式来提取十进制格式化的IPV6 IP地址。 要么 是否有任何JAVA或LINUX方式将IPV6 ip转换为IPV4格式。

感谢。 Dnyanesh。

3 个答案:

答案 0 :(得分:4)

  

是否有任何JAVA或LINUX方式来提取十进制格式化的IPV6 IP地址。

没有。 IPv6地址始终以十六进制表示。

  

或者是否有任何JAVA或LINUX方式将IPV6 IP转换为IPV4格式。

没有。它们是完全不同的地址类型。

答案 1 :(得分:1)

嗯,IPv6地址只有16个字节(和一个网络掩码),就像IPv4地址是4个字节一样。因此,以十进制打印它们当然是可能的。但问题是,为什么你想这样做,因为每个人都用十六进制写这些地址。

虽然IPv6中有一个特定的地址范围用于嵌入IPv4地址(并且您可以在自己的基础架构中自由创建新地址),但这显然不是一般的。

如果您真正的问题是“如果我只有IPv4,我该如何与IPv6主机通信”,那么答案就更复杂,并且涉及在IPv4中隧道传输IPv6流量。 http://www.networkworld.com/news/2010/050610-ipv6-tunnel-basics.html全面概述了可用的选项。 TLDR摘要:您可能应该使用Teredo临时访问IPv6(Linux客户端:http://www.remlab.net/miredo/)。如果您想连接服务器并且无法从您的提供商处获得IPv6服务,那么最好的答案是6to4(根据我的经验),但是现在告诉您的提供商一起采取行动会更有用。或者改变提供者。

答案 2 :(得分:0)

取决于提取物的含义。

The IPAddress Java library会做你所要求的部分或全部内容。链接中提供了javadoc。免责声明:我是项目经理。

该库解析IPv4和IPv6。它允许您生成不同格式的各种字符串,并且可以调用toNormalizedString(IPStringOptions)方法来生成具有十进制格式的IPv6字符串,即使IPv6通常是十六进制的。

该库允许您使用IPAddress.getEmbeddedIPv4Address()从IPv6地址中提取IPv4地址,如下所示:

    String str = "1::1";//ipv6 address
    IPAddressString addrString = new IPAddressString(str);
    try {
         IPAddress addr = addrString.toAddress();//parse the ipv6 address
         IPAddress addr2 = addr.getEmbeddedIPv4Address()//extract the ipv4 address 0.0.0.1 from the terminating bytes
         ...
    } catch(AddressStringException e) {
        //e.getMessage provides validation issue
    }