基于Java檢查IPv6地址的合法性
這篇文章主要介紹了基于Java檢查IPv6地址的合法性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
由于IPv4資源即將耗盡,IPv6將要正式啟用,這是大勢所趨。
一些現(xiàn)有的服務(wù)和應(yīng)用逐步要對IPv6支持,目前還處在過渡階段。
提前了解一些IPv6的知識,還是有必要的。
如何判斷一個IP地址,是否為IPv6地址呢?
以下代碼是用Java實(shí)現(xiàn)的,用于校驗(yàn)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);
}
/**
* 校驗(yàn)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;
}
}
運(yùn)行結(jié)果如下:
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 ----------------------------------------------------
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Javax Validation自定義注解進(jìn)行身份證號校驗(yàn)
這篇文章主要為大家詳細(xì)介紹了如何通過Javax Validation自定義注解進(jìn)行身份證號校驗(yàn),文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2024-10-10
java?面向?qū)ο蟠a塊及不同位置對屬性賦值的執(zhí)行順序
這篇文章主要介紹了java面向?qū)ο蟠a塊及不同位置對屬性賦值的執(zhí)行順序,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09
tomcat connection-timeout連接超時源碼解析
這篇文章主要為大家介紹了tomcat connection-timeout連接超時源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
maven項(xiàng)目無法讀取到resource文件夾的問題
這篇文章主要介紹了maven項(xiàng)目無法讀取到resource文件夾的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

