0

我正在写作是因为我在为自己的 PC 找到正确的 SubnetMask 时遇到了一些问题。我已经阅读了如何使用 java 获取本地系统的子网掩码的问题?但如果我尝试:

InetAddress thiscomputer = InetAddress.getLocalHost();
NetworkInterface thisNetworkInterface = NetworkInterface.getByInetAddress(thiscomputer);
int thiscomputerSubnetMask = thisNetworkInterface.getInterfaceAddresses().get(0).getNetworkPrefixLength();
System.out.println("This pc subnetmask: "+thiscomputerSubnetMask);

它会写 64。该对象thisNetworkInterface.getInterfaceAddresses()只有一个元素,它是 128。

现在,我正在寻找一个可以在 ipv4 协议中使用的数字,而我的实际子网掩码是 255.255.255.240,所以我正在寻找一个 16(256-240),但我无法从我知道的方法。

另外我什至不明白 64 或 128 可能代表什么!谁能帮我?

4

1 回答 1

1

使用下面的代码查看/64 中的地址是什么(答案会让你大吃一惊)。答案是 .getInterfaceAddresses().get(0) 不可扩展,并且可能不会始终返回您期望的答案。

InetAddress localHost = Inet4Address.getLocalHost();
NetworkInterface networkInterface = NetworkInterface.getByInetAddress(localHost);

for (InterfaceAddress address : networkInterface.getInterfaceAddresses()) {
    System.out.println(address.getAddress() + "/" + address.getNetworkPrefixLength());
}

编辑:这是我的机器(Mac)的输出。

/fe80:0:0:0:5ab0:35ff:fe6e:cdc3%6/64
/172.31.255.21/28
于 2011-07-02T13:41:55.773 回答