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

2022-09-03 03:57:00

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

是否可以使用 Java 将 IPv6 地址转换为 IPv4?


答案 1

虽然 IPv4 地址范围有 IPv6 等效项,但您无法将所有 IPv6 地址转换为 IPv4 - IPv6 地址比 IPv4 地址多。

解决此问题的唯一合理方法是更新应用程序,以便能够理解和存储 IPv6 地址。


答案 2

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 可在链接上找到。