为了账号安全,请及时绑定邮箱和手机立即绑定

Java IPv6 怎么支持00压缩

标签:
Java

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");

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

点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消