2012-05-11 230 views
9

在我的Java應用程序中,如果用戶輸入IP,我們需要顯示主機名,如果給出主機名,那麼我們需要顯示主機的IP。將IP地址轉換爲主機名

例如,如果用戶輸入類似173.194.36.37的IP地址,則應用程序應顯示google.com,反之亦然。

是否有任何工具可用於執行此操作?

+0

你知道一個IP號碼可能有幾個主機名嗎?例如127.0.0.1 * * localhost和localhost.localdomain – vidstige

+0

@vidstige不與反向DNS。這裏IP被映射到一個主機名,即所謂的「規範主機名」。 – glglgl

+1

您無法獲得唯一的結果,請參閱http://aruljohn.com/ip2hostname.html,網址爲173.194.36.37請參閱bom04s02-in-f5.1e100.net而非google.com! – SjB

回答

17

如果您在Java編碼,請嘗試使用InetAddress

InetAddress addr = InetAddress.getByName("173.194.36.37"); 
String host = addr.getHostName(); 
System.out.println(host); 
+4

顯然,不要忘記UnknownHostException的異常處理。 – ccKep

2

你在找什麼叫做DNSThis project似乎是你在找什麼。

+0

如果存在'InetAddress.getHostName()',則不需要引入第三方庫。 –

+2

@PhilippReichart問題說「有沒有可用的實用程序」,所以我想爲什麼不開源第三方庫。 –

+0

@PrakashK簡單。爲什麼要通過調用現有方法來實現所有你想要的* 100 *以上的類?更少的運動部件,更不用說出錯了。 –

0

在域名方面,有沒有內置的實用工具,沒有。你可以通過在InetAddress上使用getCanonicalHostName()獲得主機的名稱(但不是域名) - 這應該有效。這裏的最佳答案與DNS Java項目有關,它將爲您提供域名。

示例代碼來連接,並獲取主機的名稱來自谷歌的服務器之一如下:

public class GetHostName { 
public static void main(String[] args) throws Exception { 
    InetAddress address = InetAddress.getByAddress(new byte[]{74, 125,(byte) 227, 7}); 
    System.out.println(address.getCanonicalHostName()); 
} 
} 
2

稱你的項目SomeKittens看起來像用Java編寫的一個完整的DNS服務器,這可能比你需要的更多。看看java.net.InetAddress

java.net.InetAddress.getByName("example.com").getHostAddress(); 
+0

對於Google.com,此代碼給了我「74.125.237.100」作爲結果。 – Jon

+0

這是正確的,對吧?如果我去http://74.125.237.100/,我最終會在google.com上。 – Brian

+0

不是.OP要求的東西會給你一個IP地址的域名。上面的代碼給出了完整的反向 - 給定域名的IP地址。 – Jon