Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 测试给定ip是否为公共ip?_Java_Ip - Fatal编程技术网

Java 测试给定ip是否为公共ip?

Java 测试给定ip是否为公共ip?,java,ip,Java,Ip,我想检查用户提交的地址ip是否是有效的公共ip(非环回、非本地、非保留) 为此,我提出了这个方法,但我想知道这是否足够,或者我是否错过了一些测试 谢谢你的帮助:) java答案不多,但提供了一种IP验证检查方法: 用WHOIS怎么样 这将克服列出未使用/私有地址的问题,并且可以对照真实世界进行检查 由于WHOIS提供了大量信息,我建议您只查看特定项目,如: whois 192.168.0.1 | grep网络名: 网络名称:PRIVATE-ADDRESS-CBLK-RFC1918-IANA-RE

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

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

谢谢你的帮助:)


java答案不多,但提供了一种IP验证检查方法: 用WHOIS怎么样

这将克服列出未使用/私有地址的问题,并且可以对照真实世界进行检查

由于WHOIS提供了大量信息,我建议您只查看特定项目,如:

whois 192.168.0.1 | grep网络名: 网络名称:PRIVATE-ADDRESS-CBLK-RFC1918-IANA-RESERVED

whois 80.85.32.1 | grep网络名: 网名:80-100

whois 1.1.0.1 | grep网络名: 网络名称:APNIC-1

由于所有保留的地址都将保留在其网络名称上,因此这是一个简单的解决方法。 测试网络除外,如:

whois 192.0.2.1 | grep网络名: 网络名称:TEST-NET-1

和多播网络类似:

whois 224.0.0.1 | grep网络名: 网络名称:MCAST-NET

因此回复检查仅限于三个选项,通过匹配显示地址不公开

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;
}