如何将IPV6地址转换为IPV4地址?
我有使用IPv4
地址的应用程序(它存储它们很长),因此它只能理解IPv4
地址。
是否可以使用Java
将IPv6
地址转换为IPv4
?
虽然IPv4地址范围有IPv6等价物,但您无法将所有IPv6地址转换为IPv4 – IPv6地址多于IPv4地址。
解决此问题的唯一方法是更新您的应用程序以便能够理解和存储IPv6地址。
IPAddress Java库可以完成您在此处描述的内容。
IPv6地址是16个字节。 使用该库,如果您从16字节数组开始,则可以构造IPv6地址对象:
IPv6Address addr = new IPv6Address(bytes); //bytes is byte[16]
从那里,您可以检查地址是IPv4映射,IPv4兼容,IPv4转换等等(IPv6表示IPv4地址的方式有很多种)。 在大多数情况下,如果IPv6地址表示IPv4地址,则ipv4地址位于较低的4个字节中,因此您可以按如下方式获取派生的IPv4地址。 之后,您可以转换回字节,这对于IPv4来说只有4个字节。
if(addr.isIPv4Compatible() || addr.isIPv4Mapped()) { IPv4Address derivedIpv4Address = addr.getEmbeddedIPv4Address(); byte ipv4Bytes[] = derivedIpv4Address.getBytes(); ... }
链接中提供了javadoc。
这是您在javascript中寻找的代码。 嗯,你知道你无法转换所有的ipv6地址
IPv4和IPv6地址之间没有1-1对应关系(IP地址和设备之间也没有),因此通常无法满足您的要求。
有一个特定范围的IPv6地址实际上代表IPv4地址空间,但是一般的IPv6地址不会来自此范围。
一些谷歌搜索引导我到以下post:
http://www.developerweb.net/forum/showthread.php?t=3434
post中提供的代码是C语言,但将其重写为Java应该不会太难。