2013-10-25 34 views
1

使用gethostbyname()並不總是返回一個IP地址。相反,它會再次返回相同的主機名。這是什麼原因?起初我以爲這是一個虛假的主機名。然後在一個試圖捕獲一些機器人的函數中使用它,它會讓百度使用一個虛假的主機名,這在我測試的時候是錯誤的。php gethostbyname()函數

例如:

echo gethostbyname('baiduspider-123-125-71-12.crawl.baidu.com'); 

返回

baiduspider-123-125-71-12.crawl.baidu.com 

echo gethostbyname('201-35-178-134.cslce701.dsl.brasiltelecom.net.br'); 

返回

201.35.178.134 

任何幫助理解這更好的讚賞。

回答

2

查看文檔: 返回IPv4地址或包含未修改的主機名的字符串失敗。

如果沒有找到域或沒有相應的A-Record,它將返回未修改的主機名。

在你的榜樣,百度還沒有建立一個A記錄他們的機器人,在Linux中host命令打印:

Host baiduspider-123-125-71-12.crawl.baidu.com not found: 3(NXDOMAIN) 
+0

正是我所得到的控制檯也對在線服務。而缺失的A-Record也是我的另一個想法。但是,在這種情況下,如何獲得IP進行反向DNS檢查?謝謝 – durduvakis

+0

你只能在一個方向上做(當我編寫一個殭屍程序阻止系統時,我也做了這個經驗)。您需要區分殭屍程序,例如百度只能執行向後檢查,您無法解析主機名。對此你無能爲力。您只能將RDNS與某些正則表達式匹配,試圖找出它是否至少是* .baidu.com。如果有人僞造這個,如果你不想用網絡塊來操作,就不可能區分他和合法的百度殭屍機器人。但這不是好的做法。 – Lorenz

+0

我害怕我會聽到所有這些,不幸的是,我將不得不列出特殊情況的機器人列表。是的,這是一個糟糕的機器人檢測機制。我很容易檢查主機名的結尾部分是否與'.baidu.com'匹配,因爲我已經作爲第一個快速檢查虛假的googlebot了。至少我可以記錄那些不解決IP問題的機器人案例,並隨後添加排除項。再次感謝。 – durduvakis