2013-04-03 249 views
65

我有DNS服務器IP地址和主機名。解析主機名的ip地址

使用Java,如何找到由該DNS服務器使用IP地址和主機名返回的主機名的IP地址?

+2

'dig '在命令行? – ceejayoz

+0

如何在java代碼中做同樣的事情,我應該在哪裏使用DNS服務器IP地址和主機名。 –

+0

另一個查詢將需要在任何情況下提供DNS服務器IP地址,或者它會默認找到它。我在這裏有點困惑,我們是否只需要使用主機名或主機名+ DNS服務器IP地址? –

回答

86

看看InetAddressgetHostAddress()方法。

InetAddress address = InetAddress.getByName("www.example.com"); 
System.out.println(address.getHostAddress()); 
+0

說如果我有一個dns ip地址10.37.221.152和主機名稱爲「www.student.com」,那麼我怎樣才能找到ip地址。 –

+2

@DarkMatter:當你詢問'getHostAddress()'時,'InetAddress'應該得到DNS解析的地址。我不確定是否可以強制它使用*特定的* DNS服務器。 – thegrinner

+0

所以它必須自己理想地解決而沒有明確指定DNS服務器地址的程序員? –

8

您可以爲此使用InetAddress。試試下面的代碼,

InetAddress address = InetAddress.getByName("www.yahoo.com"); 
System.out.println(address.getHostAddress()); 
System.out.println(address.getHostName()); 
22

你可以這樣說:

for(InetAddress addr : InetAddress.getAllByName("stackoverflow.com")) 
    System.out.println(addr.getHostAddress()); 
4

用如上述的所有建議,您可以使用 InetAddress.getByName("hostName")但是這可以給你一個緩存的IP,閱讀Java文檔對於相同的。 如果你想從一個DNS IP,你可以使用:

InetAddress[] ipAddress = DNSNameService.lookupAllHostAddr("hostName"); 
+0

出於某種原因,這個調用只給出任何主機名的正面結果。我以爲我默認我的IP,但不,它給了我一些特定的IP爲任何未知的主機。 – Imaskar

2

除了@daksh指出的是什麼,你可以禁用DNS響應緩存的建議here但要注意禁用緩存的時機以及如操作系統here所示,緩存由您的操作系統以及其他DNS服務器所做的DNS響應。希望這可以幫助