日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IPV6地址校验(java)

發布時間:2025/3/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IPV6地址校验(java) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

IPv6介紹

IPV6的長度是128位,相比于ipv4的32位,極大的擴展了ip地址可用空間。ipv4地址現在被視為一種稀缺資源,而ipv6地址相當充足,在可以預見的未來是用不完的。這有一段描述:如果地球表面(含陸地和水面)都覆蓋著計算機,那么IPv6允許每平方米擁有7*10^23個IP地址;如果地址分配的速率是每微秒100萬個,那么需要10^19年才能將所有的地址分配完畢。

IPv6地址

IPv6的128位地址通常寫成8組,每組為四個十六進制數的形式。比如:

AD80:0000:0000:0000:ABAA:0000:00C2:0002

是一個合法的IPv6地址。這個地址比較長,看起來不方便也不易于書寫。零壓縮法可以用來縮減其長度。如果幾個連續段位的值都是0,那么這些0就可以簡單的以::來表示,上述地址就可寫成:

AD80::ABAA:0000:00C2:0002

這個簡化只能用一次,在上例中的ABAA后面的0000就不能再次簡化。當然也可以在ABAA后面使用::,這樣的話前面的12個0就不能壓縮了。這個限制的目的是為了能準確還原被壓縮的0,不然就無法確定每個::代表了多少個0。例如,下面是一些合法的IPv6地址:

CDCD:910A:2222:5498:8475:1111:3900:2020

1030::C9B4:FF12:48AA:1A2B

2000:0:0:0:0:0:0:1

::0:0:0:0:0:0:1

2000:0:0:0:0::

校驗代碼:

import java.text.Normalizer; import java.text.Normalizer.Form; import java.util.regex.Matcher; import java.util.regex.Pattern;public class IPV6Test {public static void main(String[] args) {String ipv61 = "2001:db8:a583:64:c68c:d6df:600c:ee9a";String ipv62 = "2001:db8:a583::9e42:be55:53a7";String ipv63 = "2001:db8:a583:::9e42:be55:53a7";String ipv64 = "1:2:3:4:5::";String ipv65 = "CDCD:910A:2222:5498:8475:1111:3900:2020";String ipv66 = "1030::C9B4:FF12:48AA:1A2B";String ipv67 = "2000:0:0:0:0:0:0:1";String ipv68 = "::0:0:0:0:0:0:1";String ipv69 = "2000:0:0:0:0::";System.out.println("check > " + ipv61 + " > " + isValidIpv6Addr(ipv61));System.out.println("check > " + ipv62 + " > " + isValidIpv6Addr(ipv62));System.out.println("check > " + ipv63 + " > " + isValidIpv6Addr(ipv63));System.out.println("check > " + ipv64 + " > " + isValidIpv6Addr(ipv64));System.out.println("check > " + ipv65 + " > " + isValidIpv6Addr(ipv65));System.out.println("check > " + ipv66 + " > " + isValidIpv6Addr(ipv66));System.out.println("check > " + ipv67 + " > " + isValidIpv6Addr(ipv67));System.out.println("check > " + ipv68 + " > " + isValidIpv6Addr(ipv68));System.out.println("check > " + ipv69 + " > " + isValidIpv6Addr(ipv69));}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 addresss 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 addresss = " + ipAddr);}return match;}}

測試結果:

check > 2001:db8:a583:64:c68c:d6df:600c:ee9a > true
check > 2001:db8:a583::9e42:be55:53a7 > true
check > 2001:db8:a583:::9e42:be55:53a7 > false
check > 1:2:3:4:5:: > true
check > CDCD:910A:2222:5498:8475:1111:3900:2020 > true
check > 1030::C9B4:FF12:48AA:1A2B > true
check > 2000:0:0:0:0:0:0:1 > true
check > ::0:0:0:0:0:0:1 > true
check > 2000:0:0:0:0:: > true

?

總結

以上是生活随笔為你收集整理的IPV6地址校验(java)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。