如何获得单个IP的多个域?

时间:2013-04-10 07:17:11

标签: java dnsjava

这是方法 -

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映射到多个域时会失败(???)

以下是示例 -

  1. securonix.com获取here的IP,为198.154.218.168
  2. 如果我将此IP传递给上述方法,则会出错
  3. 但如果我尝试使用相同的IP here,则会列出4个域名
  4. 是否可以使用DNSJava执行此操作?

2 个答案:

答案 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的多个域名。