用于将长IPv6地址转换为压缩形式的Java库

lei*_*ifg 5 java ipv6

我想知道,是否有一个库可用于将长IPv6地址(例如2002:9876:57AB:0000:0000:0000:0000:0001)的表示转换为压缩的IPv6格式(在这种情况:2002:9876:57AB :: 1).

我找不到这样的图书馆.此库不应使用任何IP Api,不得进行网络连接.

我已经试过了

return Inet6Address.getByName(longAdress).toString();
Run Code Online (Sandbox Code Playgroud)

但这只是将4个零替换为1(在本例中为2002:9876:57AB:0:0:0:0:1).

有什么建议?

Han*_*örr 5

java-ipv6是一个非常体面的库.它还可以很好地处理地址范围.


Jam*_*uis 2

public class Ipv6AddressCompressor {
    public static String getCompressedAddress(String longAddress) throws UnknownHostException {
        longAddress = Inet6Address.getByName(longAddress).getHostAddress();
        return longAddress.replaceFirst("(^|:)(0+(:|$)){2,8}", "::");
    }
}
Run Code Online (Sandbox Code Playgroud)

这应该可以保护您免受无效地址的影响(抛出 UnknownHostException),并且会正确压缩尾随 ipv4 地址(即 0:0:0:0:0:0:255.255.255.255 -> ::FFFF:FFFF)。这也将防止已经压缩的地址。

  • 但它不会删除多余的零,例如,`0000:0000:0001`应该是`::1`,但变成`::0001` - 可以通过执行`replaceAll("(:|^)0+(不过,结果上有 \\d)", "$1$2")`。 (2认同)