2009-06-16 61 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签名。]

相关问题