基于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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。