java ipv6校验_IPV6地址校验(java)
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)相关推荐
- 如何校验 email 地址以提高邮件送达率
背景 在发送 email 的时候,如果邮件收件人是一个不存在的 email 账号.或者收件人账号存在问题.收件箱无法接收 email, 那么 email server 就会将该无法接收的信息响应回来, ...
- 全套Java教程--打包下载地址
[全套Java教程--打包下载地址] Java基础阶段 一.20天横扫Java基础(课堂实录) https://pan.baidu.com/s/1htTzZRQ 二.尚硅谷Java基础实战--Bank ...
- 我的世界java路径_我的世界java路径在哪 路径有误怎么设置
我的世界的各个版本中java都是十分重要的东西,许多玩家都会遇到Java路径有误的问题,并且不知道该如何解决,其实Java的路径这个东西在每个人的电脑中都是不太一样的,一般以你安装时的位置为准,在这里 ...
- IPV6地址校验(java)
IPv6介绍 IPV6的长度是128位,相比于ipv4的32位,极大的扩展了ip地址可用空间.ipv4地址现在被视为一种稀缺资源,而ipv6地址相当充足,在可以预见的未来是用不完的.这有一段描述:如果 ...
- java ipv6校验_Java对IPv6的支持详解:支持情况、相关API、演示代码等
本文由朱益盛.杨晖.傅啸分享,来自IBM Developer社区,原题"使用 Java 开发兼容 IPv6 的网络应用程序",本次收录时有改动. 1.引言 前几天,有个群友跟我讨论 ...
- java判断ipv6地址类型_IPv6地址类型与格式
十六进制数字系统 在介绍IPv6的地址格式之前,我们将探讨十六进制数字系统.十六进制是位置的数字系统,它使用16进制(基).来表示可读格式的值,本系统采用0-9符号来表示的值从0到9和AF符号来表示数 ...
- Java实现微信小程序校验图片是否含有违法违规内容
文章目录 1.Java实现微信小程序校验图片是否含有违法违规内容(security.imgSecCheck) 2.接口文档简述 3.Java实现对接接口 4.压缩图片(Thumbnails) 5.整合 ...
- java 数据校验框架_自己写的基于java Annotation(注解)的数据校验框架
JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方 ...
- java存储音频文件及校验与读取
java存储音频文件及校验与读取 音频存储为音频流 前端部分 后端部分 音频流转换为文件 后端读取音频流-controller 音频存储为音频流 前端部分 前端html 注意:前端使用的是Angula ...
最新文章
- 漏答题、偏科、多次复读,30 位互联网大佬考上啥大学了?
- htmljavascript 事件触发机制
- 剑指offer 算法 (综合)
- centos java程序_刚得到一台centos7服务器,作为Java程序员应该做的事
- 09 ORA系列:ORA-06553 PLS-306
- redis的redisvCommand的%b
- vue从入门到精通之进阶篇(三)axios
- uniapp使用colorUI 组件
- 10款最佳项目管理工具推荐
- 电池SOC估计-EKF UKF
- 中国176个AAAAA级景区,存起来吧!下一站你去哪里?
- Factory method 'springSecurityFilterChain' threw exception
- php创蓝253四要素认证_PHP短信接口分享:适用于创蓝253平台下的短信验证码、短信服务接口...
- 鲲鹏与江西才俊的七夕之约
- JS 调用打印机,打印HTML中的部分内容
- Tesra超算网络,解决AI开发困境
- c#实现qq音乐爬虫
- fatal error LNK1104: 无法打开文件“opencv_calib3dXXXX.lib”
- Spring Cloud 加密encrypt和解密decrypt
- 计算机启动的基本过程
热门文章
- 龟兔赛跑编程c语言蓝桥,龟兔赛跑
- 【英语-同义词汇词组】therefore、hence、thus的用法及区别
- 解决:Word在试图打开文件时遇到错误。请尝试下列方法……
- Ubuntu软件更新时出错问题解决
- 小程序发布线上接口请求失败,开发者工具请求正常,体验版和开发版要打开调试才可以正常请求解决办法
- 参考文献起止页码怎么写_期刊作为参考文献要求有年卷期和起止页码,怎么查这些页码什么的...
- 获取公众号关注页面链接
- Android SDK接口封装自动化测试
- SEM竞价和SEO优化有哪些区别?
- flutter doctor --android-licenses命令之后出现JAVA_HOME错误