Как получить маску подсети IPv4 на интерфейсе с адресами v4 и v6? - PullRequest
1 голос
/ 14 июня 2010

У меня есть InterfaceAddress, который возвращает адрес ipv4 (4 октета).Однако длина сетевого префикса, по-видимому, соответствует адресу 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 Ответ

3 голосов
/ 14 июня 2010

Лично я думаю, что это ошибка в нативном коде JVM.Если у вас есть адреса v4 и v6 для одного и того же интерфейса, это приводит к путанице.

Проблема исчезла после установки этого свойства,

java.net.preferIPv4Stack=true
...