我可以从我的本地机器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"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