2011-06-12 63 views
0

下面的代碼片段只返回一個單一的InetAddress與我的主機名和環回地址127.0.1.1:InetAddress.getAllByName()不能像廣告一樣工作?

InetAddress[] allAddresses = InetAddress.getAllByName(host); 
assert allAddresses.length == 1; 
assert allAddresses[0].isLoopbackAddress(); 

不過,我能找到我的非環回網絡,像這樣:

Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces(); 
for (Enumeration<NetworkInterface> e = networkInterfaces; e.hasMoreElements();) { 
    NetworkInterface networkInterface = e.nextElement(); 
    Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses(); 
    for (Enumeration<InetAddress> eAddresses = inetAddresses; eAddresses.hasMoreElements();) { 
    InetAddress address = eAddresses.nextElement(); 
    if (!address.isLoopbackAddress()) { 
     return address; 
    } 
    } 
} 

另外,我可以使用nslookup將我的主機名解析爲非回送IP。

InetAddress.getAllByName()聲明「給定主機的名稱,根據系統上配置的名稱服務返回其IP地址的數組。我是否缺少配置步驟?

+1

** assert allAddresses.length == 1; **你爲什麼要這樣做? – 2011-06-12 17:09:11

+0

只是爲了說明getAllByName()只返回長度爲1的數組。 – Damon 2011-06-12 17:13:04

回答

0

對於這種方法,至少在Linux上,操作系統將讀取/ etc/hosts中的值,如果它發現任何東西,它將返回它。 和/ etc/hosts可能只在您的系統上有

127.0.0.1 yourhostname 

+0

謝謝,我可以證實此行爲。如果我將另一個IP地址添加到/ etc/hosts,它會顯示出來。但是,基於javadoc,聽起來我應該能夠獲得與使用nslookup找到的相同的IP信息。 – Damon 2011-06-12 17:34:25

+0

是的,這看起來像一個文檔錯誤。 – 2011-06-12 17:59:58

+0

它可能會要求操作系統(基於系統上配置的名稱服務)。 OS返回它認爲正確的東西。但是「系統上配置的名稱服務」不一定是nslookup。如果操作系統已經有了答案,那麼操作系統無法進行查找。 – 2011-06-12 18:00:43

相關問題