How to ping for reachability of remote host in Rub

2020-07-03 03:37发布

问题:

I tried using

Ping.pingecho("10.102.52.42", 30)

for reachability of the remote host. This statement returns null even if I'm able to ping the IP manually. Is there an efficient way to determine the reachability of the remote machine in Ruby?

回答1:

I use the net-ping gem which you need to install. Then the code is easy:

#!/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


回答2:

If you're on a *nix machine (OSX/Linux/BSD...), you can always tell Ruby (by using back ticks) to use the command line and save the results.

x = `ping -c 1 10.102.52.42`
# do whatever with X

The -c 1 parameter tells it to run once. You can set this to any number you find fit. If you don't set -c, it'll run until it's interrupted which will cause your program to stall.



回答3:

Ping with External, UDP, HTTP, etc. Modify as you see fit. You can read more at ping-net git-repo.

1.

########################################################################
# example_pingexternal.rb
#
# A short sample program demonstrating an external ping. You can run
# this program via the example:external task. Modify as you see fit.
########################################################################
require 'net/ping'

good = 'www.rubyforge.org'
bad  = 'foo.bar.baz'

p1 = Net::Ping::External.new(good)
p p1.ping?

p2 = Net::Ping::External.new(bad)
p p2.ping?

2.

########################################################################
# example_pinghttp.rb
#
# A short sample program demonstrating an http ping. You can run
# this program via the example:http task. Modify as you see fit.
########################################################################
require 'net/ping'

good = 'http://www.google.com/index.html'
bad  = 'http://www.ruby-lang.org/index.html'

puts "== Good ping, no redirect"

p1 = Net::Ping::HTTP.new(good)
p p1.ping?

puts "== Bad ping"

p2 = Net::Ping::HTTP.new(bad)
p p2.ping?
p p2.warning
p p2.exception

3.

########################################################################
# example_pingtcp.rb
#
# A short sample program demonstrating a tcp ping. You can run
# this program via the example:tcp task. Modify as you see fit.
########################################################################
require 'net/ping'

good = 'www.google.com'
bad  = 'foo.bar.baz'

p1 = Net::Ping::TCP.new(good, 'http')
p p1.ping?

p2 = Net::Ping::TCP.new(bad)
p p2.ping?

4.

ping-1.7.8/examples/example_pingudp.rb
########################################################################
# example_pingudp.rb
#
# A short sample program demonstrating a UDP ping. You can run
# this program via the example:udp task. Modify as you see fit.
########################################################################
require 'net/ping'

host = 'www.google.com'

u = Net::Ping::UDP.new(host)
p u.ping?


标签: ruby