基于Java检查IPv6地址的合法性

作者:龙凌云端 时间:2022-08-05 12:17:17 

这篇文章主要介绍了基于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: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
----------------------------------------------------

来源:https://www.cnblogs.com/miracle-luna/p/12041780.html

标签:Java,检查,IPv6,地址
0
投稿

猜你喜欢

  • java中Vector类的常用方法详解

    2023-11-26 10:29:07
  • 原来Java中有两个ArrayList

    2023-06-27 11:49:40
  • 解决RabbitMq消息队列Qos Prefetch消息堵塞问题

    2021-11-17 17:36:13
  • Spring使用@Autowired为抽象父类注入依赖代码实例

    2023-02-01 09:30:35
  • linux下C语言中的mkdir函数与rmdir函数

    2023-07-07 14:16:16
  • java判断http地址是否连通(示例代码)

    2023-08-05 03:24:05
  • 深入解析Spring Cloud内置的Zuul过滤器

    2022-05-16 12:49:04
  • Flutter Widgets MediaQuery控件屏幕信息适配

    2023-06-29 04:48:21
  • Java中Function的使用及说明

    2023-08-12 03:04:29
  • 使用Swing绘制动态时钟

    2023-11-24 07:05:12
  • java关键字static的使用详解

    2023-09-24 05:04:11
  • java实现单词小游戏

    2023-11-25 05:03:33
  • Java String转换时为null的解决方法

    2022-08-25 08:16:00
  • Eclipse+Webservice简单开发实例

    2023-04-10 08:55:29
  • spring boot微服务场景下apollo加载过程解析

    2022-05-20 13:55:32
  • Java SpringMVC数据响应超详细讲解

    2022-04-08 15:10:26
  • Android 在程序运行时申请权限的实例讲解

    2023-08-04 17:35:57
  • spring的jdbctemplate的crud的基类dao

    2022-05-30 13:05:17
  • SpringBoot之如何指定配置文件启动

    2023-11-17 15:17:48
  • Java基础学习之关键字和变量数据类型的那些事

    2023-09-17 04:31:24
  • asp之家 软件编程 m.aspxhome.com