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地址格式