2010-06-14 4 views
1

ipv4 주소 (4 옥텟)를 반환하는 InterfaceAddress가 있습니다. 그러나 네트워크 접두사 길이는 인터페이스와 관련된 ipv6 주소의 것 같습니다 (128로 반환 됨). 올바른 네트워크 접두사 길이는 어떻게 찾습니까?v4 및 v6 주소로 인터페이스에서 IPv4 서브넷 마스크를 얻으려면 어떻게해야합니까?

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 
    } 
} 

답변

3

개인적으로 이것은 JVM의 기본 코드에있는 버그라고 생각합니다. 동일한 인터페이스에 v4 및 v6 주소가 모두있는 경우 혼란 스럽습니다. 문제는이 속성을 설정 한 후 우리를 위해 멀리 갔다

,

java.net.preferIPv4Stack=true 
관련 문제