如何规范化 Java 中的 IPv6 地址?
How to normalise IPv6 address in Java?
给定一个包含其中一种格式的 IPv6 地址的字符串,是否有 Java 标准方法对其进行规范化,使相同地址的不同格式的相同规范化值相同?
即
normalise("2001:db8:0:0:1:0:0:1") = x
normalise("2001:db8::1:0:0:1") = x
normalise("2001:db8:0:0:1::1") = x
你可以轻松做到这一点
通过使用 InetAddress.getByName(String)
解析字符串
然后使用 getHostAddress()
:
转换回字符串
public static String normalize(String s) throws UnknownHostException {
return InetAddress.getByName(s).getHostAddress();
}
此方法 returns "2001:db8:0:0:1:0:0:1"
适用于所有 3 个示例。
顺便说一句:上面的代码可以规范化 IPv6 和 IPv4 地址。
open-source IPAddress Java library为不同的字符串格式提供了多种方法。有几个可用于生成规范化字符串。免责声明:我是 IPAddress 库的项目经理。
两个非常适合考虑的 "standardized" 字符串是规范字符串和规范化字符串。
规范字符串是 RFC 5952
定义的 IPv6 地址的推荐书写方式
标准化字符串是由 class java.net.InetAddress.
生成的格式
static void printNormalized(String strs[]) {
for (String str : strs) {
System.out.println(new IPAddressString(str).getAddress().toNormalizedString());
}
}
static void printCanonical(String strs[]) {
for (String str : strs) {
System.out.println(new IPAddressString(str).getAddress().toCanonicalString());
}
}
String strs[] = {
"2001:db8:0:0:1:0:0:1",
"2001:db8::1:0:0:1",
"2001:db8:0:0:1::1"};
printCanonical(strs);
System.out.println();
printNormalized(strs);
输出:
2001:db8::1:0:0:1
2001:db8::1:0:0:1
2001:db8::1:0:0:1
2001:db8:0:0:1:0:0:1
2001:db8:0:0:1:0:0:1
2001:db8:0:0:1:0:0:1
给定一个包含其中一种格式的 IPv6 地址的字符串,是否有 Java 标准方法对其进行规范化,使相同地址的不同格式的相同规范化值相同?
即
normalise("2001:db8:0:0:1:0:0:1") = x
normalise("2001:db8::1:0:0:1") = x
normalise("2001:db8:0:0:1::1") = x
你可以轻松做到这一点
通过使用 InetAddress.getByName(String)
解析字符串
然后使用 getHostAddress()
:
public static String normalize(String s) throws UnknownHostException {
return InetAddress.getByName(s).getHostAddress();
}
此方法 returns "2001:db8:0:0:1:0:0:1"
适用于所有 3 个示例。
顺便说一句:上面的代码可以规范化 IPv6 和 IPv4 地址。
open-source IPAddress Java library为不同的字符串格式提供了多种方法。有几个可用于生成规范化字符串。免责声明:我是 IPAddress 库的项目经理。
两个非常适合考虑的 "standardized" 字符串是规范字符串和规范化字符串。
规范字符串是 RFC 5952
定义的 IPv6 地址的推荐书写方式标准化字符串是由 class java.net.InetAddress.
生成的格式static void printNormalized(String strs[]) {
for (String str : strs) {
System.out.println(new IPAddressString(str).getAddress().toNormalizedString());
}
}
static void printCanonical(String strs[]) {
for (String str : strs) {
System.out.println(new IPAddressString(str).getAddress().toCanonicalString());
}
}
String strs[] = {
"2001:db8:0:0:1:0:0:1",
"2001:db8::1:0:0:1",
"2001:db8:0:0:1::1"};
printCanonical(strs);
System.out.println();
printNormalized(strs);
输出:
2001:db8::1:0:0:1
2001:db8::1:0:0:1
2001:db8::1:0:0:1
2001:db8:0:0:1:0:0:1
2001:db8:0:0:1:0:0:1
2001:db8:0:0:1:0:0:1