2009-06-16 66 views
1

截至目前,我使用下面的代碼來獲取給定IPAddress的DNS名稱。我不想爲網絡中的每個IP地址獲取它,而是想一次性從DNS服務器獲取所有DNS條目(IP地址 - 主機名映射)。可能嗎?如果是這樣,該怎麼辦?如何從JAVA應用程序獲取所有DNS條目?

InetAddress addr = InetAddress.getByName(address); 
dnsname = addr.getCanonicalHostName().trim(); 
+0

取決於DNS服務器如何設置,它可能會或可能是不可能的。你所追求的是一個DNS AXFR請求。 – Stobor 2009-06-16 05:47:35

+0

如何定義「網絡中的每個IP地址」?你真的在尋找一個區域轉移,或者是什麼? – 2009-06-16 05:56:43

回答

2

從公共DNS服務器,沒有辦法拉出它所擁有的所有數據。枚舉所有IP地址是唯一的解決方案。

如果您與DNS服務器有特殊關係(例如,它由您的僱主管理),您可以向DNS管理員請求傳輸整個區域(稱爲AXFR的DNS請求)的權利。他們可能授權您的IP地址或給您一個TSIG密鑰來驗證您自己。

然後,您將不得不找到一種方法來在Java中執行區域傳輸(可能使用TSIG身份驗證)。使用這些關鍵字,我發現some codedocumentation。使用代碼搜索引擎(如Google Code SearchKrugle)查找使用示例。

[DNS專家可能會尖叫「使用區走在NSEC」,但大多數DNS區域不與NSEC簽名。]

相關問題