2011-12-11 50 views
0

我可以從本地機器ping Google,但任何人都可以告訴我爲什麼我在同一臺機器上的IRB中運行以下內容時可能會出現「錯誤」?真正令人沮喪的是ping應該是最簡單的網絡操作,我無法實現它的工作!Ruby net/ping返回false爲谷歌? (從命令行工作)

1.9.2-p290 :001 > require "net/ping" 
=> true 
1.9.2-p290 :003 > pinger = Net::Ping::External.new("http://www.google.com") 
=> #<Net::Ping::External:0x88eac30 @host="http://www.google.com", @port=7, @timeout=5, @exception=nil, @warning=nil, @duration=nil> 
1.9.2-p290 :004 > pinger.ping 
=> false 
1.9.2-p290 :005 > 

回答

4

以下是有效host/domain name(雖然它是一個有效的URL):

http://www.google.com 

因此,DNS解析將失敗,並且,不具有目標IP,不進行ping可以是發送。

我敢肯定你沒有使用確切host的命令行ping :)至於加雷指出,這樣做會類似於:

 
$ ping http://www.google.com 
ping: cannot resolve http://www.google.com: Unknown host

一個"normal ping",正在嘗試在這裏,和「HTTP ping」是不同的。例如,將此用法與Net::Ping::HTTP對比,確實用作爲URL。

快樂編碼。


(無論是「google.com」或「www.google.com」將是合適的主機名。)

+1

'$ ping http://www.google.com#=> ping:無法解析http://www.google.com:未知的主機' – Gareth

2

如果你想檢查網站是否達到那麼我就不會使用ping。 Ping會告訴你主機是否啓動(除非路由器或防火牆阻止了ICMP),但它不會告訴你網絡服務器或Web應用程序是否正確響應。

如果是這樣的話,我建議從標準庫或任何其他HTTP庫的Net :: HTTP。一種方法是:

def up?(site) 
    Net::HTTP.new(site).head('/').kind_of? Net::HTTPOK 
end 

up? 'www.google.com' #=> true