Java 如何在同时具有v4和v6地址的接口上获取IPv4子网掩码?
我有一个InterfaceAddress,它返回ipv4地址(4个八位字节)。但是,网络前缀长度似乎是与接口关联的ipv6地址的长度(返回为128)。如何找到正确的网络前缀长度Java 如何在同时具有v4和v6地址的接口上获取IPv4子网掩码?,java,ipv4,subnet,Java,Ipv4,Subnet,我有一个InterfaceAddress,它返回ipv4地址(4个八位字节)。但是,网络前缀长度似乎是与接口关联的ipv6地址的长度(返回为128)。如何找到正确的网络前缀长度 Enumeration<NetworkInterface> NetworkInterface.getNetworkInterfaces() for (; interfaces.hasMoreElements();) { final List<InterfaceAddress>interfa
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
}
}
枚举NetworkInterface.getNetworkInterfaces()
对于(;interfaces.hasMoreElements();){
最后的名单=
interfaces.nextElement().getInterfaceAddresses();
用于(最终接口地址:接口地址){
断言(address.getAddress().getAddress().length==4);//[sic]
assert(address.getNetworkPrefixLength()<32);//就个人而言,我认为这是JVM本机代码中的一个错误。当同一个接口同时具有v4和v6地址时,它会变得混乱 设置此属性后,问题就消失了
java.net.preferIPv4Stack=true