基于Java檢查IPv6地址的合法性
這篇文章主要介紹了基于Java檢查IPv6地址的合法性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
由于IPv4資源即將耗盡,IPv6將要正式啟用,這是大勢所趨。
一些現(xiàn)有的服務(wù)和應(yīng)用逐步要對IPv6支持,目前還處在過渡階段。
提前了解一些IPv6的知識(shí),還是有必要的。
如何判斷一個(gè)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)文章
SpringBoot整合spring-data-jpa的方法
這篇文章主要介紹了SpringBoot整合spring-data-jpa的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06Java9新特性對HTTP2協(xié)議支持與非阻塞HTTP?API
這篇文章主要為大家介紹了Java9新特性對HTTP2協(xié)議的支持與非阻塞HTTP?API,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03詳解Java8的groupBy實(shí)現(xiàn)集合的分組
這篇文章主要介紹了詳解Java8的groupBy實(shí)現(xiàn)集合的分組,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03elasticsearch節(jié)點(diǎn)的transport請求發(fā)送處理分析
這篇文章主要為大家介紹了elasticsearch節(jié)點(diǎn)的transport請求發(fā)送處理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04java開發(fā)分布式服務(wù)框架Dubbo調(diào)用過程
這篇文章主要為大家介紹了java開發(fā)分布式服務(wù)框架Dubbo調(diào)用過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11java實(shí)現(xiàn)的二級(jí)聯(lián)動(dòng)菜單效果
這篇文章主要介紹了java實(shí)現(xiàn)的二級(jí)聯(lián)動(dòng)菜單效果,結(jié)合實(shí)例形式分析了java前臺(tái)頁面布局及與后臺(tái)交互構(gòu)造聯(lián)動(dòng)菜單的相關(guān)技巧,需要的朋友可以參考下2016-08-08Spring Boot 2.4版本前后的分組配置變化及對多環(huán)境配置結(jié)構(gòu)的影響(推薦)
這篇文章主要介紹了Spring Boot 2.4版本前后的分組配置變化及對多環(huán)境配置結(jié)構(gòu)的影響,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12Java中獲取時(shí)間戳的三種方式對比實(shí)現(xiàn)
這篇文章主要介紹了Java中獲取時(shí)間戳的三種方式對比實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01微信小程序獲取手機(jī)號(hào)的完整實(shí)例(Java后臺(tái)實(shí)現(xiàn))
我們在做小程序開發(fā)的過程中,經(jīng)常會(huì)涉及到用戶身份的問題,最普遍的就是我們要獲取用戶的手機(jī)號(hào)碼,下面這篇文章主要給大家介紹了關(guān)于微信小程序獲取手機(jī)號(hào)的完整實(shí)例,后臺(tái)由Java實(shí)現(xiàn),需要的朋友可以參考下2022-06-06