[Java]利用InetAddress全面判断给定IP是否是内网IP(支持IPv6)

2021-10-25 1734点热度 0人点赞 0条评论

之前的文章有介绍如何利用正则表达式判断给定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;
}

这样判断出来的结果更加全面和有效!

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论