我想检查用户提交的地址是否是有效的公共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;
}
答案 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
所以回复检查仅限于三个选项,通过匹配显示该地址不公开。