是否有任何JAVA或LINUX方式来提取十进制格式化的IPV6 IP地址。 要么 是否有任何JAVA或LINUX方式将IPV6 ip转换为IPV4格式。
感谢。 Dnyanesh。
答案 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
}