2013-11-26 49 views
1

我有下面的代碼,我用它來獲取服務器的完整規範主機名,然後再繼續前進。 這是我的服務器上返回一個值(特別不同的域)。命令行上的nslookup返回正確的值。Inetaddress返回意外的主機名

我想了解究竟是什麼java.inet內部解決正確的完整規範名稱。 它是否查詢DNS服務器?

import java.net.InetAddress; 

public class IpLookup { 

    public static void main(String[] args) { 

     try{ 

      String REQUESTSERVER = args[0]; 
      InetAddress in = InetAddress.getByName(REQUESTSERVER); 
      REQUESTSERVER = in.getCanonicalHostName(); 
      System.out.println("Canonical REQUESTSERVER "+ REQUESTSERVER); 
     } catch(Exception e) { 
      System.out.println("lookup failed"); 
     } 
    } 
} 

回答

1

正在發生的事情是,NSLOOKUP正在恢復你與它的IP地址(ES)一起輸入主機名,而Java代碼首先查找該IP,然後利用基於返回的IP地址反向DNS。 rDNS可能未配置爲返回您認爲的「規範」地址。

我NSLOOKUP跑www.google.com

> www.google.com 
Non-authoritative answer: 
Server: perseus.jhmg.pvt 
Address: 192.168.10.254 

Name: www.google.com 
Addresses: 2607:f8b0:400a:801::1010 
      173.194.33.146 
      173.194.33.144 
      173.194.33.148 
      173.194.33.147 
      173.194.33.145 

然後我跑www.google.com程序,並得到了這樣的結果:

Canonical REQUESTSERVER sea09s17-in-f17.1e100.net 

否則由NSLOOKUP返回的第一個地址的DNS反向搜索得出:

> 173.194.33.146 
Server: perseus.jhmg.pvt 
Address: 192.168.10.254 

Name: sea09s17-in-f18.1e100.net 
Address: 173.194.33.146 

(順便提一句,note 1e100是10 或稱爲「googol」的數字...可愛:-)

這證明這就是發生了什麼。

+0

Jim,感謝您的關注。我得到了答案。 –