继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Java IPv6 怎么支持00压缩

小强聊架构
关注TA
已关注
手记 40
粉丝 9454
获赞 241

Java 本身的API对于ipv6的支持并不够。
一般情况下我们用Java的API解析,输出IP地址是:2300:0:0:0:0:0:0:1 而不是:2300::1
但是参照RFC5952,ipv6格式的地址表示是:

  1. 处理16-bit 字段中的前导零

前导零不允许出现。例如,2001:0db8::0001是不能接受的,必须表示为2001:db8::1。一个16 -位0000字段必须表示为0。

  1. “::”使用,ip地址要尽可能的缩短

例如,2001:db8:0:0:0:0:2:1必须缩短为2001:db8::2:1。同样,2001:db8::0:1也不能接受,因为符号“::”本可以用于生成更短的表示2001:db8::1。

  1. 处理一个16-bit 0字段

符号“::”不能仅用于缩短一个16-bit 0字段。例如,2001:db8:0:1:1:1:1:1是正确的,但是2001:db8::1:1:1:1:1是不正确的。

  1. “::”位置的选择

“::” 只能出现一次,所以有时需要做出选择,
例如: 2001:0:0:1:0:0:0:1, 需要缩短最长的连续0, 缩短为: 2001:0:0:1::1)。
当连续0的数量相等时,缩短第一个连续0,
例如: 2001:db8:0:0:1:0:0:1 缩短为 2001:db8::1:0:0:1

  1. 小写字母表示

IPv6地址中的字符“a”、“b”、“c”、“d”、“e”和“f”, 必须用小写字母表示。

基于上面的标准,java自身提供的API并不能满足要求。
需要使用google提供的API.

使用方法:

  1. 添加Maven依赖
<dependency>
    <groupId>com.googlecode.java-ipv6</groupId>
    <artifactId>java-ipv6</artifactId>
    <version>0.17</version>
</dependency>
  1. 代码示例
final IPv6Address iPv6Address = IPv6Address.fromString("fe80::226:2dff:fefa:cd1f");
final IPv6Address iPv4MappedIPv6Address = IPv6Address.fromString("::ffff:192.168.0.1");

详细的使用手册参见官网,本文只提供一种思路和方法。

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP