之前的文章有介绍如何利用正则表达式判断给定IP地址字符串是否是内网IP,详见:https://blog.terrynow.com/2021/10/24/java-regex-check-if-given-ip-is-inner-ip/,不过有个问题,类似0:0:0:0:0:0:0:1/::1这样的ipv6地址,需要重新写正则表达式。
Java里有一个InetAddress,可以不用正则表达式,利用InetAddress.isSiteLocalAddress直接进行判断:
public static boolean isInnerIp(String ipAddress) { InetAddress ia = null; try { InetAddress ad = InetAddress.getByName(ipAddress); byte[] ip = ad.getAddress(); ia = InetAddress.getByAddress(ip); } catch (UnknownHostException e) { e.printStackTrace(); } if (ia == null) return false; if (ia.isSiteLocalAddress() || ia.isLoopbackAddress()) { return true; } return false; }
这样判断出来的结果更加全面和有效!
文章评论