我正在编写代码,我需要查找ipAddress是否属于Private Range。任何建议将不胜感激。
更新 -
这是我的方法 -
if(isPrivateIPAddress(ipAddress)) {
//do whatever you want
}
private static boolean isPrivateIPAddress(InetAddress address, String range) {
// TODO Auto-generated method stub
String ipAddress = address.getHostAddress();
return ipAddress.startsWith( range );
}
所以我不确定在上面的if循环中需要传递的地址是什么。
答案 0 :(得分:1)
看一下这个方法,你可以确定一个IP地址是否以定义的私有范围开始:
public static boolean isInPrivateRange(InetAddress address, String range)
{
String ipAddress = address.getHostAddress();
return ipAddress.startsWith( range );
}
示例调用:
isInPrivateRange( address, "192.168." );
isInPrivateRange( address, "172.16." );
isInPrivateRange( address, "127.0." );
示例程序:
try
{
InetAddress ipAddress = InetAddress.getByName( "google.com" );
String range = "192.168";
System.out.println(isInPrivateRange( ipAddress, range ));
}
catch ( UnknownHostException e )
{
e.printStackTrace();
}
答案 1 :(得分:1)
Inet4Address有测试地址是否为私有的方法。如果地址是10 / 8,172.16 / 12和192.168 / 16之一,则isSiteLocalAddress()返回true。
答案 2 :(得分:0)
嗯,一般情况下,如果IP地址以10.,127.0,192.168开头,那么我的头脑中就会出现问题。 ,或172.16。 ,那么你可能会认为它是私人的。虽然可能有一些警告,所以不要把我的答案当作福音。
24-bit block 10.0.0.0 – 10.255.255.255 16,777,216 single class A 10.0.0.0/8 (255.0.0.0) 24 bits
20-bit block 172.16.0.0 – 172.31.255.255 1,048,576 16 contiguous class Bs 172.16.0.0/12 (255.240.0.0) 20 bits
16-bit block 192.168.0.0 – 192.168.255.255 65,536 256 contiguous class Cs 192.168.0.0/16 (255.255.0.0) 16 bits
此外,http://networking.ringofsaturn.com/IP/subnets.php
我不知道该怎么做,但您可能能够以编程方式将标准子网掩码应用于IP地址,查看结果,并确定ip是否为私有: