Ruby net/ping返回false谷歌?(从命令行工作)



我可以从我的本地机器ping谷歌,但谁能告诉我为什么我可能得到"假"当我在同一台机器上运行以下IRB ?真的很沮丧,因为ping应该是最简单的网络操作,我只是不能让它工作!

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 > 

下面的不是一个有效的主机/域名(尽管它是一个有效的URL):

http://www.google.com

因此,DNS解析将失败,并且没有目标IP,无法发送ping。

我确定您没有使用确切的主机作为命令行ping:)正如Gareth指出的那样,这样做看起来类似于:

<>之前$ ping http://www.google.comping:无法解析http://www.google.com:未知主机

此处尝试的"正常ping"one_answers"HTTP ping"是不同的。将此用法与Net::Ping::HTTP进行对比,例如,接受URL。

幸福的编码。


("google.com"或"www.google.com"都是合适的主机名)

如果你想检查一个网站是否正常,那么我不会使用ping。Ping将告诉你主机是否启动(除非路由器或防火墙阻止ICMP),但它不会告诉你你的web服务器或web应用程序是否正确响应。

如果是这种情况,我建议使用标准库中的Net::HTTP,或者任何其他HTTP库。一种方法是:

def up?(site)
  Net::HTTP.new(site).head('/').kind_of? Net::HTTPOK
end
up? 'www.google.com' #=> true

最新更新