Java 检查IPv6地址的合法性
Java 检查IPv6地址的合法性
由于IPv4资源即将耗尽,IPv6将要正式启用,这是大势所趋。
一些现有的服务和应用逐步要对IPv6支持,目前还处在过渡阶段。
提前了解一些IPv6的知识,还是有必要的。
如何判断一个IP地址,是否为IPv6地址呢?
以下代码是用Java实现的,用于校验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);
} /**
* 校验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;
} }
运行结果如下:
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
----------------------------------------------------
PS:
Java 实现 bash命令
https://www.cnblogs.com/miracle-luna/p/12050728.html
Java 实现 ssh命令 登录主机执行shell命令
https://www.cnblogs.com/miracle-luna/p/12050367.html
Java 实现 telnet命令 验证主机端口的连通性
https://www.cnblogs.com/miracle-luna/p/12049658.html
Java 检查IPv6地址的合法性
https://www.cnblogs.com/miracle-luna/p/12041780.html
Java 实现判断 主机是否能 ping 通
https://www.cnblogs.com/miracle-luna/p/12026797.html
Java 检查IPv6地址的合法性的更多相关文章
- 判断IPv6地址合法性
在 <netinet/in.h> 头文件下有下列这些宏用于判断IPv6地址合法性 返回0代表true,返回非零值代表ipv6地址为非指定类型的的地址(false) int IN6_IS_A ...
- Java支持IPv6研究
1.Java对IPv6的支持 相对其他开发语言而言,Java对IPv6的支持是比较透明的, 如果全部采用域名(主机名)的方式进行通信,那么基本不需要修改也无需编译原来的代码就可以直接在IPv6上运行. ...
- IP地址(IPv4)/IPv6地址的正则表达式
原地址:http://pfeishao.blog.163.com/blog/static/18162337020112113130453/ Pv4地址正则表达式:^((25[0-5]|2[0-4]\d ...
- 利用DNS AAAA记录和IPv6地址传输后门
0x00 前言 在本文中,我想解释如何在DNS流量中利用IPv6地址(AAAA)记录传输Payload.在我之前的文章中,我解释了如何利用DNS和PTR记录,现在我们将讨论AAAA记录. 本文分为两部 ...
- java 获取ip地址和网络接口
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- 在 Linux 中自动配置 IPv6 地址
在 Linux 中自动配置 IPv6 地址 在本文中,我们将学习如何为 ULA 自动配置 IP 地址. 何时使用唯一本地地址 唯一本地地址unique local addresses(ULA)使用 f ...
- 在centos服务器上启用ipv6地址
随着互联网世界日新月异的发展,ipv6好像已经成为一种必不可少的趋势,但是当前国内机房大部分还不能支持ipv6,腾讯云亦如此.同时,现在有部分程序在服务器上运行的时候,需要服务器能监听一个ipv6地址 ...
- 浏览器访问IPv6地址
http://[IPv6]:port/index.html http://[3ffe:3201:1200:1::91]:8080/index.html 目前现在的网络运营商基本都不支持基于IPv6地址 ...
- IPv6地址存储
import java.util.Arrays; /** * @author: 何其有静 * @date: 2019/4/2 * @description: IPv6地址存储 * https://mp ...
随机推荐
- 用js刷剑指offer(调整数组顺序使奇数位于偶数前面)
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 牛客网链接 js代码 ...
- post和get的在测试眼里的区别大概就是post比get安全吧……
get将请求数据放在url中,而post将请求数据放在request body中 http://www.cnblogs.com/logsharing/p/8448446.html
- [转载]es6 Promise.resolve()方法
es6 Promise.resolve()方法 2018-01-27 22:29:06 ixygj197875 阅读数 16925更多 分类专栏: ES6标准入门 (阮一峰) ES6标准入门 Pr ...
- mybatis-oracle 新增序列
1.参考 https://blog.csdn.net/qq_29001173/article/details/82106853 2.思考: 2.1获取序列下一个值:seq_car.nextval 2. ...
- stm32焊接心得
早上焊接了一块朋友给的stm32f103zet6的开发板,起初,烙铁怎么都焊补上去,原来是烙铁头已经氧化,只能作罢! 那里一个新的焊接,温度打到450,基本上,焊接就非常顺利,当然温度不要太高,以免弄 ...
- Python 13--数据库
- Python 10.2.1
- php注意事项|要点
1. 用单引号代替双引号来包含字符串,这样做会更快一些.因为 PHP 会在双引号包围的 字符串中搜寻变量,单引号则不会,注意:只有 echo 能这么做,它是一种可以把多个字符 串当作参数的“函数”(译 ...
- Asia-Jakarata 2018
目录 Contest Info Solutions Problem A. Edit Distance Problem C. Smart Thief Problem D.Icy Land Problem ...
- chrome出现“由贵单位管理”原因及解决方法
谷歌Google在声明里表示: 由贵单位管理指的是由设备或者账户管理员例如企业管理器可以用来强制更改谷歌浏览器配置的企业级策略.例如可以直接通过远程方式向所有受控用户添加书签,当管理员有进行这类操作时 ...