这是方法 -
public static String getHostByAddr(byte[] addr) throws UnknownHostException {
Name name = ReverseMap.fromAddress(InetAddress.getByAddress(addr));
final String[] servers = new String[] {"208.67.220.220", "208.67.222.222"};
final Resolver res = new ExtendedResolver(servers);
final Lookup lookUp = new Lookup(name, Type.PTR);
lookUp.setResolver(res);
Record[] records = lookUp.run();
if (records == null) {
throw new UnknownHostException();
}
return ((PTRRecord) records[0]).getTarget().toString();
}
这是对上述方法的调用 -
final InetAddress ip = InetAddress.getByName("198.154.218.168");
final byte[] bytes = ip.getAddress();
final String host = getHostByAddr(bytes);
System.out.println("Host - " + host);
对于大多数情况都可以正常工作,但是当IP映射到多个域时会失败(???)
以下是示例 -
是否可以使用DNSJava执行此操作?
答案 0 :(得分:4)
一般情况下,你不能。正如域名securonix.com的所有者在其DNS服务器上创建了一个将securonix.com转换为198.154.218.168的条目,IP地址198.154.218.168的所有者维护着一个“反向”DNS记录(通常在单独的服务器上)将IP地址映射到默认DNS名称。有关反向DNS查找的详细信息,请参阅维基百科上的“Reverse DNS lookup”页面,并注意反向DNS查找 - 从IP地址到名称 - 通常由与域名所有者不同的所有者维护,它不仅仅是通过交换名称和IP地址“自动”创建的。
此外,您提到的网站似乎没有该IP地址的反向DNS条目,因此您将无法从标准DNS查询中获得198.154.218.168的答案; 198.154.218.168没有(反向)DNS条目,上面的代码失败。
作为正向和反向DNS查找之间差异的一个示例,当我第一次分配我的静态IP地址时,我的提供商(Comcast)将IP地址映射到某些通用名称,如75-148 - ### - # ## - Houston.hfc.comcastbusiness.net(随机IP地址示例)我曾要求他们修改反向DNS条目以映射到我的域名,以便正向和反向查找IP地址和域名匹配。他们在他们的 DNS服务器上维护了IP地址的查询,并在我的 DNS服务器上维护了域名的查找。
yougetsignal.com上的页面必须一直在对名称进行DNS(转发)查找,并将其存储在可供购买的庞大数据库中,这样可以让网页找到具有相同IP的所有名称。但是,通过查询DNS服务器,没有简单的方法可以为任意IP地址执行此操作,除非您有大量额外信息或已经完成了数百万次查找,例如该站点。
答案 1 :(得分:0)
我发现有两个网站提供此功能。但是我不知道他们是如何实现这个功能的。
更新: domaintools提供api调用。也许你可以调用domaintools api来获得单个IP的多个域名。