2014-07-09 180 views
0

我想從IP地址的主機名,但我總是得到如下錯誤:如何從IP地址獲取主機名?

err couln't get hostnames,err lookup 220.220.103.65.in-addr.arpa.: no such host,ip 65.103.220.220 

代碼:

var hostname string 
hostnames, err := net.LookupAddr(c.ip) 
if err != nil { 
    glog.Errorf("err couln't get hostnames,err %v,ip %v", err, c.ip) 
    } else { 
    hostname = strings.Join(hostnames, " ") 
} 

回答

7

這不是錯誤,但是一個簡單的聲明中表示,IP地址,您'尋找沒有PTR記錄。沒有要求Internet上的每臺計算機都有PTR記錄,並且不保證試圖從IP地址找到名稱將會成功。

簡而言之,您的代碼不會總是返回一個名稱,並且您無能爲力。

無論你使用機器名稱,你都不能依賴它。找到一種不同的方式。

+0

nmap實際上獲取主機名例如'nmap掃描報告host81-135-23-115.range81-135.btcentralplus.com(81.135.23.115)'所以我想知道爲什麼不能這樣做 – hey

+0

這不是你使用哪個工具或系統調用你做。這是關於全球DNS中可用的信息。有些地址會給出迴應,其他則不會。這不是你的控制,也不是可預測的。不要依賴它。 –

+0

問題是,永遠不會提供任何'回覆'信息。到目前爲止,我有2500個IP地址,所以我猜這是一個Go問題。對於同一個IP,nmap提供主機名,而Go不提供。 – hey