如何将IPV6地址转换为IPV4地址?

我有使用IPv4地址的应用程序(它存储它们很长),因此它只能理解IPv4地址。

是否可以使用JavaIPv6地址转换为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应该不会太难。