如何在v4和v6地址的接口上获取IPv4子网掩码?

时间:2010-06-14 14:34:54

标签: java ipv4 subnet

我有一个返回ipv4地址(4个八位字节)的InterfaceAddress。但是,网络前缀长度似乎是与接口关联的ipv6地址(它返回128)。如何找到正确的网络前缀长度?

Enumeration<NetworkInterface> NetworkInterface.getNetworkInterfaces()
for (; interfaces.hasMoreElements();) {
    final List<InterfaceAddress>interfaceAddresses =
        interfaces.nextElement().getInterfaceAddresses();
    for (final InterfaceAddress address : interfaceAddresses) {
        assert(address.getAddress().getAddress().length == 4); // [sic]
        assert(address.getNetworkPrefixLength() < 32); // <- Fails. Actually equals 128
    }
}

1 个答案:

答案 0 :(得分:3)

就个人而言,我认为这是JVM本机代码中的一个错误。如果同一接口同时拥有v4和v6地址,则会感到困惑。

设置此属性后,问题就消失了,

java.net.preferIPv4Stack=true