1.說明
一個IPv6地址可以有多種文本格式,
如下所示:
2001:db8:0:0:1:0:0:1
2001:0db8:0:0:1:0:0:1
2001:db8::1:0:0:1
2001:db8::0:1:0:0:1
2001:0db8::1:0:0:1
2001:db8:0:0:1::1
2001:db8:0000:0:1::1
2001:DB8:0:0:1::1
這種靈活性給運營商客戶、系統工程師等,
帶來了很多問題。
下面將介紹一個工具類,
將不同的IPv6地址格式統一爲一種格式,
該格式滿足如下RFC5952標準:
RFC5952 IPv6地址文本格式的建議規範
2.工具類
tomcat的IPv6Utils提供了轉換工具類,
新建IPv6UtilsDemo.java如下:
package org.apache.tomcat.util.net;
public class IPv6UtilsDemo {
public static void main(String[] args) {
String ipv6Address = "2022:0006:0004:0003:0000:0000:0000:0002";
String canonize = IPv6Utils.canonize(ipv6Address);
System.out.println("before=" + ipv6Address);
System.out.println("after=" + canonize);
}
}
工具類所在的POM依賴:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>9.0.36</version>
</dependency>
3.測試結果
運行上述代碼後,
輸出結果如下:
before=2022:0006:0004:0003:0000:0000:0000:0002
after=2022:6:4:3::2
可以改變IPv6的地址格式,
查看輸出的結果是否正確,
測試結果如下:
---------------------------
before=2001:db8:0:0:1:0:0:1
after=2001:db8::1:0:0:1
---------------------------
before=2001:0db8:0:0:1:0:0:1
after=2001:db8::1:0:0:1
---------------------------
before=2001:db8::1:0:0:1
after=2001:db8::1:0:0:1
---------------------------
before=2001:db8::0:1:0:0:1
after=2001:db8::1:0:0:1
---------------------------
before=2001:0db8::1:0:0:1
after=2001:db8::1:0:0:1
---------------------------
before=2001:db8:0:0:1::1
after=2001:db8::1:0:0:1
---------------------------
before=2001:db8:0000:0:1::1
after=2001:db8::1:0:0:1
---------------------------
before=2001:DB8:0:0:1::1
after=2001:db8::1:0:0:1
---------------------------
分析上述測試結果,
發現文章開始給出的一個IPv6多種格式地址,
被統一爲2001:db8::1:0:0:1了,
這些IPv6地址都被統一爲壓縮格式了,
包括省略前導零,使用雙冒號::壓縮多個連續0
所謂壓縮格式可以參考如下文章:
IPv6地址格式