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?
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?
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
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.
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?