【问题标题】:How do I get the IPv4 subnetmask on interface with both v4 and v6 address?如何在具有 v4 和 v6 地址的接口上获取 IPv4 子网掩码?
【发布时间】:2010-06-14 14:34:54
【问题描述】:

我有一个返回 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
    }
}

【问题讨论】:

    标签: java ipv4 subnet


    【解决方案1】:

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

    设置此属性后问题就解决了,

    java.net.preferIPv4Stack=true
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      • 2013-06-21
      • 2014-12-31
      • 2012-04-08
      • 1970-01-01
      相关资源
      最近更新 更多