时间:2021-05-19
这篇文章主要介绍了基于Java检查IPv6地址的合法性,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
由于IPv4资源即将耗尽,IPv6将要正式启用,这是大势所趋。
一些现有的服务和应用逐步要对IPv6支持,目前还处在过渡阶段。
提前了解一些IPv6的知识,还是有必要的。
如何判断一个IP地址,是否为IPv6地址呢?
以下代码是用Java实现的,用于校验IPv6地址合法性。
代码如下:
import java.text.Normalizer;import java.text.Normalizer.Form;import java.util.regex.Matcher;import java.util.regex.Pattern;public class IPV6Check { public static void main(String[] args) { String ipv6_1 = "2019:db8:a583:64:c68c:d6df:600c:ee9a"; String ipv6_2 = "2019:db8:a583::9e42:be55:53a7"; String ipv6_3 = "2019:db8:a583:::9e42:be55:53a7"; String ipv6_4 = "1:2:3:4:5::192.168.254.254"; String ipv6_5 = "ABCD:910A:2222:5498:8475:1111:3900:2020"; String ipv6_6 = "1030::C9B4:FF12:48AA:1A2B"; String ipv6_7 = "2019:0:0:0:0:0:0:1"; String ipv6_8 = "::0:0:0:0:0:0:1"; String ipv6_9 = "2019:0:0:0:0::"; String ipv6_10= "2048:877e:31::7"; String resultLine = "\n==> "; String splitLine = "\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地址的合法性 * @param ipAddr * @return */ 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 address 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 address = " + ipAddr); } return match; } }运行结果如下:
2019:db8:a583:64:c68c:d6df:600c:ee9a==> true----------------------------------------------------2019:db8:a583::9e42:be55:53a7==> true----------------------------------------------------Invalid IPv6 address = 2019:db8:a583:::9e42:be55:53a72019: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----------------------------------------------------以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
IPV4地址对于一般人来说非常熟悉,而且基本都会设置,但是对于IPV6地址来说,应该会设置的人不多,下面我们就来看看设置IPV6的方法。概念介绍:IPv6(In
随着IPv4地址即将用尽,全球已经加速进入IPv6时代,目前我们的电脑中也可以查看到IPv6地址信息,不过很多朋友对于IPv6是什么不太了解,下面小编通过ipv
IPv6的地址长度为128位,是IPv4地址长度的四倍,同时也是IPv4地址空间的1024倍。 IPv6是互联网工程任务组设计的用于替代IPv4的下一代IP协
ipv6地址是由128位二进制数组成,是IPv4地址长度的4倍,于是IPv4点分十进制格式不再适用,采用十六进制表示。 IPv6的优势就在于它大大地扩展了地址
0.前言IP地址目前存在两个版本:IPv4和IPv6,平常我们见到最多的就是IPv4了,如192.168.1.1/24,当然,IPv4地址池资源紧缺,IPv6已