利用正则表达式判断给定IP地址是否是内网IP。
利用InetAddress全面判断给定IP是否是内网IP(支持IPv6) 详见https://blog.terrynow.com/2021/10/25/java-inetaddress-check-given-ip-is-local-address-support-ipv6/
说明下,内网IP一般是这么几个地址段:
10.0.0.0/8 10.0.0.0--10.255.255.255
172.16.0.0/12 172.16.0.0--172.31.255.255
192.168.0.0/16 192.168.0.0--192.168.255.255
127.0.0.1/8 127.0.0.1-- 127.255.255.255
localhost
所以正则表达式是: ^(127\.\d{1,3}\.\d{1,3}\.\d{1,3})|(localhost)|(10\.\d{1,3}\.\d{1,3}\.\d{1,3})|(172\.((1[6-9])|(2\d)|(3[01]))\.\d{1,3}\.\d{1,3})|(192\.168\.\d{1,3}\.\d{1,3})$
Java判断内网IP示例:
public static boolean isInnerIp(String ip) { Pattern pattern = Pattern.compile("^(127\\.0\\.0\\.\\d{1,3})|(localhost)|(10\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|(172\\.((1[6-9])|(2\\d)|(3[01]))\\.\\d{1,3}\\.\\d{1,3})|(192\\.168\\.\\d{1,3}\\.\\d{1,3})$"); return pattern.matcher(ip).matches(); }
文章评论