以何种方式查找IPAddress是否属于私有范围

时间:2012-03-09 00:25:33

标签: java

我正在编写代码,我需要查找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循环中需要传递的地址是什么。

3 个答案:

答案 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是否为私有: enter image description here