测试ip是否是公共的?

时间:2014-10-02 14:05:36

标签: java ip

我想检查用户提交的地址是否是有效的公共IP(非环回,非本地,非保留)。

为此目的,我提出了这种方法,但我想知道这是否足够,或者我是否错过了一些测试。

感谢您的帮助:)

private boolean isValidPublicIp(String ip) {
    try
    {
        Inet4Address address = (Inet4Address) InetAddress.getByAddress(ip.getBytes());
        if (!address.isSiteLocalAddress() && !address.isAnyLocalAddress() && !address.isLinkLocalAddress() && !address.isLoopbackAddress() && !address.isMulticastAddress()) {
            return true;
        }
    }
    catch (UnknownHostException exception) {}

    return false;
}

1 个答案:

答案 0 :(得分:0)

没有太多的Java答案,但提供IP验证检查的方法: 那么使用WHOIS呢?

这将克服制作未使用/私有地址的列表,并可以根据现实世界进行检查。

由于WHOIS提供了大量信息,我建议您只检查具体项目,例如:

whois 192.168.0.1 | grep NetName: NetName:PRIVATE-ADDRESS-CBLK-RFC1918-IANA-RESERVED

whois 80.85.32.1 | grep NetName: NetName:80-RIPE

whois 1.1.0.1 | grep NetName: 网名:APNIC-1

由于所有保留地址的网名都有RESERVED,因此这是一个简单的方法。 例外是测试网,例如:

whois 192.0.2.1 | grep NetName: 网名:TEST-NET-1

和多播网类似:

whois 224.0.0.1 | grep NetName: 网名:MCAST-NET

所以回复检查仅限于三个选项,通过匹配显示该地址不公开。