在Ruby中ping远程主机的可达性

Bin*_*ndu 13 ruby

我试过用

Ping.pingecho("10.102.52.42", 30)
Run Code Online (Sandbox Code Playgroud)

用于远程主机的可达性.即使我能够手动ping ip,此语句也会返回null.是否有任何有效的方法来确定远程机器在ruby中的可达性.

atm*_*osx 34

我使用net-ping你需要安装的gem.然后代码很简单:

#!/usr/bin/env ruby

require 'net/ping'

def up?(host)
    check = Net::Ping::External.new(host)
    check.ping?
end

chost = '10.0.0.1'
puts up?(chost) # prints "true" if ping replies
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这是更好的答案,因为它与平台无关.back tick运算符的使用非常依赖于平台. (2认同)

sun*_*eja 5

如果您使用的是 *nix 机器(OSX/Linux/BSD...),您始终可以告诉 Ruby(通过使用反引号)使用命令行并保存结果。

x = `ping -c 1 10.102.52.42`
# do whatever with X
Run Code Online (Sandbox Code Playgroud)

-c 1参数告诉它运行一次。您可以将其设置为您认为合适的任何数字。如果您不设置-c,它将运行直到被中断,这将导致您的程序停止。