IPv6介绍

IPV6的长度是128位,相比于ipv4的32位,极大的扩展了ip地址可用空间。ipv4地址现在被视为一种稀缺资源,而ipv6地址相当充足,在可以预见的未来是用不完的。这有一段描述:如果地球表面(含陆地和水面)都覆盖着计算机,那么IPv6允许每平方米拥有7*10^23个IP地址;如果地址分配的速率是每微秒100万个,那么需要10^19年才能将所有的地址分配完毕。

IPv6地址

IPv6的128位地址通常写成8组,每组为四个十六进制数的形式。比如:

AD80:0000:0000:0000:ABAA:0000:00C2:0002

是一个合法的IPv6地址。这个地址比较长,看起来不方便也不易于书写。零压缩法可以用来缩减其长度。如果几个连续段位的值都是0,那么这些0就可以简单的以::来表示,上述地址就可写成:

AD80::ABAA:0000:00C2:0002

这个简化只能用一次,在上例中的ABAA后面的0000就不能再次简化。当然也可以在ABAA后面使用::,这样的话前面的12个0就不能压缩了。这个限制的目的是为了能准确还原被压缩的0,不然就无法确定每个::代表了多少个0。例如,下面是一些合法的IPv6地址:

CDCD:910A:2222:5498:8475:1111:3900:2020

1030::C9B4:FF12:48AA:1A2B

2000:0:0:0:0:0:0:1

::0:0:0:0:0:0:1

2000:0:0:0:0::

校验代码:

import java.text.Normalizer;

import java.text.Normalizer.Form;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class IPV6Test {

public static void main(String[] args) {

String ipv61 = "2001:db8:a583:64:c68c:d6df:600c:ee9a";

String ipv62 = "2001:db8:a583::9e42:be55:53a7";

String ipv63 = "2001:db8:a583:::9e42:be55:53a7";

String ipv64 = "1:2:3:4:5::";

String ipv65 = "CDCD:910A:2222:5498:8475:1111:3900:2020";

String ipv66 = "1030::C9B4:FF12:48AA:1A2B";

String ipv67 = "2000:0:0:0:0:0:0:1";

String ipv68 = "::0:0:0:0:0:0:1";

String ipv69 = "2000:0:0:0:0::";

System.out.println("check > " + ipv61 + " > " + isValidIpv6Addr(ipv61));

System.out.println("check > " + ipv62 + " > " + isValidIpv6Addr(ipv62));

System.out.println("check > " + ipv63 + " > " + isValidIpv6Addr(ipv63));

System.out.println("check > " + ipv64 + " > " + isValidIpv6Addr(ipv64));

System.out.println("check > " + ipv65 + " > " + isValidIpv6Addr(ipv65));

System.out.println("check > " + ipv66 + " > " + isValidIpv6Addr(ipv66));

System.out.println("check > " + ipv67 + " > " + isValidIpv6Addr(ipv67));

System.out.println("check > " + ipv68 + " > " + isValidIpv6Addr(ipv68));

System.out.println("check > " + ipv69 + " > " + isValidIpv6Addr(ipv69));

}

public static boolean isValidIpv6Addr(String ipAddr) {

String regex = "(^((([0-9A-Fa-f]{1,4}:){7}(([0-9A-Fa-f]{1,4}){1}|:))"

+ "|(([0-9A-Fa-f]{1,4}:){6}((:[0-9A-Fa-f]{1,4}){1}|"

+ "((22[0-3]|2[0-1][0-9]|[0-1][0-9][0-9]|"

+ "([0-9]){1,2})([.](25[0-5]|2[0-4][0-9]|"

+ "[0-1][0-9][0-9]|([0-9]){1,2})){3})|:))|"

+ "(([0-9A-Fa-f]{1,4}:){5}((:[0-9A-Fa-f]{1,4}){1,2}|"

+ ":((22[0-3]|2[0-1][0-9]|[0-1][0-9][0-9]|"

+ "([0-9]){1,2})([.](25[0-5]|2[0-4][0-9]|"

+ "[0-1][0-9][0-9]|([0-9]){1,2})){3})|:))|"

+ "(([0-9A-Fa-f]{1,4}:){4}((:[0-9A-Fa-f]{1,4}){1,3}"

+ "|:((22[0-3]|2[0-1][0-9]|[0-1][0-9][0-9]|"

+ "([0-9]){1,2})([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|"

+ "([0-9]){1,2})){3})|:))|(([0-9A-Fa-f]{1,4}:){3}((:[0-9A-Fa-f]{1,4}){1,4}|"

+ ":((22[0-3]|2[0-1][0-9]|[0-1][0-9][0-9]|"

+ "([0-9]){1,2})([.](25[0-5]|2[0-4][0-9]|"

+ "[0-1][0-9][0-9]|([0-9]){1,2})){3})|:))|"

+ "(([0-9A-Fa-f]{1,4}:){2}((:[0-9A-Fa-f]{1,4}){1,5}|"

+ ":((22[0-3]|2[0-1][0-9]|[0-1][0-9][0-9]|"

+ "([0-9]){1,2})([.](25[0-5]|2[0-4][0-9]|"

+ "[0-1][0-9][0-9]|([0-9]){1,2})){3})|:))"

+ "|(([0-9A-Fa-f]{1,4}:){1}((:[0-9A-Fa-f]{1,4}){1,6}"

+ "|:((22[0-3]|2[0-1][0-9]|[0-1][0-9][0-9]|"

+ "([0-9]){1,2})([.](25[0-5]|2[0-4][0-9]|"

+ "[0-1][0-9][0-9]|([0-9]){1,2})){3})|:))|"

+ "(:((:[0-9A-Fa-f]{1,4}){1,7}|(:[fF]{4}){0,1}:((22[0-3]|2[0-1][0-9]|"

+ "[0-1][0-9][0-9]|([0-9]){1,2})"

+ "([.](25[0-5]|2[0-4][0-9]|[0-1][0-9][0-9]|([0-9]){1,2})){3})|:)))$)";

if (ipAddr == null) {

System.out.println("ipv6 addresss is null ");

return false;

}

ipAddr = Normalizer.normalize(ipAddr, Form.NFKC);

Pattern pattern = Pattern.compile(regex);

Matcher matcher = pattern.matcher(ipAddr);

boolean match = matcher.matches();

if (!match) {

// System.out.println("invalid ipv6 addresss = " + ipAddr);

}

return match;

}

}

测试结果:

check > 2001:db8:a583:64:c68c:d6df:600c:ee9a > true

check > 2001:db8:a583::9e42:be55:53a7 > true

check > 2001:db8:a583:::9e42:be55:53a7 > false

check > 1:2:3:4:5:: > true

check > CDCD:910A:2222:5498:8475:1111:3900:2020 > true

check > 1030::C9B4:FF12:48AA:1A2B > true

check > 2000:0:0:0:0:0:0:1 > true

check > ::0:0:0:0:0:0:1 > true

check > 2000:0:0:0:0:: > true

java ipv6校验_IPV6地址校验(java)相关推荐

  1. 如何校验 email 地址以提高邮件送达率

    背景 在发送 email 的时候,如果邮件收件人是一个不存在的 email 账号.或者收件人账号存在问题.收件箱无法接收 email, 那么 email server 就会将该无法接收的信息响应回来, ...

  2. 全套Java教程--打包下载地址

    [全套Java教程--打包下载地址] Java基础阶段 一.20天横扫Java基础(课堂实录) https://pan.baidu.com/s/1htTzZRQ 二.尚硅谷Java基础实战--Bank ...

  3. 我的世界java路径_我的世界java路径在哪 路径有误怎么设置

    我的世界的各个版本中java都是十分重要的东西,许多玩家都会遇到Java路径有误的问题,并且不知道该如何解决,其实Java的路径这个东西在每个人的电脑中都是不太一样的,一般以你安装时的位置为准,在这里 ...

  4. IPV6地址校验(java)

    IPv6介绍 IPV6的长度是128位,相比于ipv4的32位,极大的扩展了ip地址可用空间.ipv4地址现在被视为一种稀缺资源,而ipv6地址相当充足,在可以预见的未来是用不完的.这有一段描述:如果 ...

  5. java ipv6校验_Java对IPv6的支持详解:支持情况、相关API、演示代码等

    本文由朱益盛.杨晖.傅啸分享,来自IBM Developer社区,原题"使用 Java 开发兼容 IPv6 的网络应用程序",本次收录时有改动. 1.引言 前几天,有个群友跟我讨论 ...

  6. java判断ipv6地址类型_IPv6地址类型与格式

    十六进制数字系统 在介绍IPv6的地址格式之前,我们将探讨十六进制数字系统.十六进制是位置的数字系统,它使用16进制(基).来表示可读格式的值,本系统采用0-9符号来表示的值从0到9和AF符号来表示数 ...

  7. Java实现微信小程序校验图片是否含有违法违规内容

    文章目录 1.Java实现微信小程序校验图片是否含有违法违规内容(security.imgSecCheck) 2.接口文档简述 3.Java实现对接接口 4.压缩图片(Thumbnails) 5.整合 ...

  8. java 数据校验框架_自己写的基于java Annotation(注解)的数据校验框架

    JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方 ...

  9. java存储音频文件及校验与读取

    java存储音频文件及校验与读取 音频存储为音频流 前端部分 后端部分 音频流转换为文件 后端读取音频流-controller 音频存储为音频流 前端部分 前端html 注意:前端使用的是Angula ...

最新文章

  1. 漏答题、偏科、多次复读,30 位互联网大佬考上啥大学了?
  2. htmljavascript 事件触发机制
  3. 剑指offer 算法 (综合)
  4. centos java程序_刚得到一台centos7服务器,作为Java程序员应该做的事
  5. 09 ORA系列:ORA-06553 PLS-306
  6. redis的redisvCommand的%b
  7. vue从入门到精通之进阶篇(三)axios
  8. uniapp使用colorUI 组件
  9. 10款最佳项目管理工具推荐
  10. 电池SOC估计-EKF UKF
  11. 中国176个AAAAA级景区,存起来吧!下一站你去哪里?
  12. Factory method 'springSecurityFilterChain' threw exception
  13. php创蓝253四要素认证_PHP短信接口分享:适用于创蓝253平台下的短信验证码、短信服务接口...
  14. 鲲鹏与江西才俊的七夕之约
  15. JS 调用打印机,打印HTML中的部分内容
  16. Tesra超算网络,解决AI开发困境
  17. c#实现qq音乐爬虫
  18. fatal error LNK1104: 无法打开文件“opencv_calib3dXXXX.lib”
  19. Spring Cloud 加密encrypt和解密decrypt
  20. 计算机启动的基本过程

热门文章

  1. 龟兔赛跑编程c语言蓝桥,龟兔赛跑
  2. 【英语-同义词汇词组】therefore、hence、thus的用法及区别
  3. 解决:Word在试图打开文件时遇到错误。请尝试下列方法……
  4. Ubuntu软件更新时出错问题解决
  5. 小程序发布线上接口请求失败,开发者工具请求正常,体验版和开发版要打开调试才可以正常请求解决办法
  6. 参考文献起止页码怎么写_期刊作为参考文献要求有年卷期和起止页码,怎么查这些页码什么的...
  7. 获取公众号关注页面链接
  8. Android SDK接口封装自动化测试
  9. SEM竞价和SEO优化有哪些区别?
  10. flutter doctor --android-licenses命令之后出现JAVA_HOME错误