2013-04-10 92 views
0

這裏的方法 -如何獲得單個IP的多個域?

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. 獲取的IP securonix.comhere,它是198.154.218.168
  2. 如果我通過這個IP上面的方法提示錯誤
  3. 但如果我嘗試相同的IP here,它列出了下來4個領域

任何幫助獲得類似的結果使用DNSJava將不勝感激。謝謝。

+0

[一個垃圾郵件答案](http://stackoverflow.com/review/first-posts/12938324)和問題得到保護...我真的很喜歡社區用戶的工作方式。 – dorukayhan 2016-07-08 19:49:52

回答

4

一般來說,你不能。正如域名securonix.com的所有者在他們的DNS服務器上創建一個將securonix.com轉換爲198.154.218.168的條目,IP地址198.154.218.168的所有者維護一個「反向」DNS記錄(通常位於一臺單獨的服務器上)將IP地址映射到默認的DNS名稱。請參閱wikipedia上的「Reverse DNS lookup」頁面以獲取有關反向DNS查找的更多信息,並注意反向DNS查找 - 從IP地址到名稱 - 通常由不同於域名所有者的所有者維護,並且不僅僅是通過交換名稱和IP地址「自動」創建。

此外,,您提到的網站似乎沒有該IP地址的反向DNS條目,因此您不會從標準DNS查詢獲得198.154.218.168的答案;沒有(反向)DNS條目爲198.154.218.168和上面的代碼失敗。

作爲正向和反向DNS查找之間的區別的示例,當我第一次分配我的靜態IP地址時,我的提供程序(Comcast)將IP地址映射到一些通用名稱,如75-148 - ### - ### - Houston.hfc.comcastbusiness.net(隨機IP地址示例),我要求他們修改反向DNS條目以映射到我的域名,以便正向和反向查找IP地址和域名稱匹配。他們維護了他們的 DNS服務器上的IP地址查詢,並且我維護了我的 DNS服務器上的域名查詢。

yougetsignal.com上的頁面必須一直在進行DNS(轉發)名稱查找並將它們存儲在可供購買的龐大數據庫中,這使得網頁可以找到具有相同IP的所有名稱。但是,除非您有相當多的附加信息,或者已經完成了數百萬個查找,否則通過查詢DNS服務器,沒有簡單的方法可以爲任意IP地址執行此操作。