IPv6 addresses to check the legality of Java

Because IPv4 resources running out, IPv6 will be officially opened, this is the trend.

Some existing services and applications gradually To support IPv6, it is still in the transition phase.

Some advance knowledge of IPv6, there are still necessary.

How to determine an IP address, whether the IPv6 address?

The following code is implemented in Java, used to verify the legitimacy of the IPv6 address.

 

code show as below:

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

 

Results are as follows:

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

 

Guess you like

Origin www.cnblogs.com/miracle-luna/p/12041780.html