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
---------------------
作者:kangyucheng
来源:CSDN
原文:https://blog.csdn.net/Kangyucheng/article/details/86497891
版权声明:本文为博主原创文章,转载请附上博文链接!