为什么InetAddress.getByName(“1.2”)是有效的IP地址?

时间:2012-03-04 17:09:45

标签: java

public class InetAddresTest {
    public static void main(String ... agrs) {
        try {
            InetAddress inet = InetAddress.getByName("1.2");
            System.out.println("Good ip address");
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}   

BTW InetAddress生成的ip地址返回为“1.0.0.2”。我无法从InetAddress的javadoc中找到合理的答案。你能解释一下这种行为吗?

1 个答案:

答案 0 :(得分:8)

来自Javadoc中的Javadoc for InetAddress(链接在“{3}}中的”IP地址的文字表示“中:

  

当提供两部分地址时,最后一部分被解释为24位数量并放在网络地址的最右边三个字节中。这使得两部分地址格式便于将A类网络地址指定为net.host。

编辑添加:如果24位部分让您感到困惑:

24位的

2看起来像:00000000 00000000 00000010

然后将其映射到IPv4地址中右边的3个八位字节:.0.0.2

再一次:正如CoolBeans在对你的问题的评论中提到的那样,来自Apache公共的InetAddressValidator就可以了。话虽这么说,如果你只是想验证IP地址而没有外部依赖,你可以使用Regular Expressions to check IP addresses as well