基于Java检查IPv6地址的合法性
这篇文章主要介绍了基于Java检查IPv6地址的合法性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
由于IPv4资源即将耗尽,IPv6将要正式启用,这是大势所趋。
一些现有的服务和应用逐步要对IPv6支持,目前还处在过渡阶段。
提前了解一些IPv6的知识,还是有必要的。
如何判断一个IP地址,是否为IPv6地址呢?
以下代码是用Java实现的,用于校验IPv6地址合法性。
代码如下:
importjava.text.Normalizer;
importjava.text.Normalizer.Form;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassIPV6Check{
publicstaticvoidmain(String[]args){
Stringipv6_1="2019:db8:a583:64:c68c:d6df:600c:ee9a";
Stringipv6_2="2019:db8:a583::9e42:be55:53a7";
Stringipv6_3="2019:db8:a583:::9e42:be55:53a7";
Stringipv6_4="1:2:3:4:5::192.168.254.254";
Stringipv6_5="ABCD:910A:2222:5498:8475:1111:3900:2020";
Stringipv6_6="1030::C9B4:FF12:48AA:1A2B";
Stringipv6_7="2019:0:0:0:0:0:0:1";
Stringipv6_8="::0:0:0:0:0:0:1";
Stringipv6_9="2019:0:0:0:0::";
Stringipv6_10="2048:877e:31::7";
StringresultLine="\n==>";
StringsplitLine="\n----------------------------------------------------\n";
System.out.println(ipv6_1+resultLine+isValidIpv6Addr(ipv6_1)+splitLine);
System.out.println(ipv6_2+resultLine+isValidIpv6Addr(ipv6_2)+splitLine);
System.out.println(ipv6_3+resultLine+isValidIpv6Addr(ipv6_3)+splitLine);
System.out.println(ipv6_4+resultLine+isValidIpv6Addr(ipv6_4)+splitLine);
System.out.println(ipv6_5+resultLine+isValidIpv6Addr(ipv6_5)+splitLine);
System.out.println(ipv6_6+resultLine+isValidIpv6Addr(ipv6_6)+splitLine);
System.out.println(ipv6_7+resultLine+isValidIpv6Addr(ipv6_7)+splitLine);
System.out.println(ipv6_8+resultLine+isValidIpv6Addr(ipv6_8)+splitLine);
System.out.println(ipv6_9+resultLine+isValidIpv6Addr(ipv6_9)+splitLine);
System.out.println(ipv6_10+resultLine+isValidIpv6Addr(ipv6_10)+splitLine);
}
/**
*校验IPv6地址的合法性
*@paramipAddr
*@return
*/
publicstaticbooleanisValidIpv6Addr(StringipAddr){
Stringregex="(^((([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("IPv6addressisnull");
returnfalse;
}
ipAddr=Normalizer.normalize(ipAddr,Form.NFKC);
Patternpattern=Pattern.compile(regex);
Matchermatcher=pattern.matcher(ipAddr);
booleanmatch=matcher.matches();
if(!match){
System.out.println("InvalidIPv6address="+ipAddr);
}
returnmatch;
}
}
运行结果如下:
2019:db8:a583:64:c68c:d6df:600c:ee9a ==>true ---------------------------------------------------- 2019:db8:a583::9e42:be55:53a7 ==>true ---------------------------------------------------- InvalidIPv6address=2019:db8:a583:::9e42:be55:53a7 2019:db8:a583:::9e42:be55:53a7 ==>false ---------------------------------------------------- 1:2:3:4:5::192.168.254.254 ==>true ---------------------------------------------------- ABCD:910A:2222:5498:8475:1111:3900:2020 ==>true ---------------------------------------------------- 1030::C9B4:FF12:48AA:1A2B ==>true ---------------------------------------------------- 2019:0:0:0:0:0:0:1 ==>true ---------------------------------------------------- ::0:0:0:0:0:0:1 ==>true ---------------------------------------------------- 2019:0:0:0:0:: ==>true ---------------------------------------------------- 2048:877e:31::7 ==>true ----------------------------------------------------
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。