2011-07-02 95 views
0

我在寫因爲我發現了一些自己的PC的正確SubnetMask問題。 我已經閱讀問題How to get subnet mask of local system using java?但如果我嘗試:使用Java獲取ipv4子網掩碼

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可能代表! 任何人都可以幫助我嗎?

+0

也許你得到的IPv6的東西.. +您的arent使用同一類 – GorillaApe

回答

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 
+0

你的方法回答我: /FE80:0:0:0:E416:af9b:f0b9:f57f%64分之10 /192.168.1.2/128 – Wallkan

+0

是的,這是我所做的。 NetworkInterface.getByInetAddress()將返回接口(在大多數情況下,它可以同時支持ipv6和ipv4)。我覺得有趣的是192.168.1.2給你一個/ 128(這應該被:: 1 ipv6地址列出)。我不是很瞭解你如何獲得/ 128的IPv4地址。 – Suroot

+0

我不理解它!這是我的問題!我無法在任何地方找到255.255.255.240或16 – Wallkan