Java 檢查IPv6地址的合法性


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
----------------------------------------------------

 

 

 

PS:

Java 實現 bash命令
https://www.cnblogs.com/miracle-luna/p/12050728.html

 

Java 實現 ssh命令 登錄主機執行shell命令
https://www.cnblogs.com/miracle-luna/p/12050367.html

 

Java 實現 telnet命令 驗證主機端口的連通性
https://www.cnblogs.com/miracle-luna/p/12049658.html

 

Java 檢查IPv6地址的合法性
https://www.cnblogs.com/miracle-luna/p/12041780.html

 

Java 實現判斷 主機是否能 ping 通
https://www.cnblogs.com/miracle-luna/p/12026797.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM