From 6b777872b8d0ec8506ef90bc121eb70a8099db80 Mon Sep 17 00:00:00 2001 From: Steve Kemp Date: Thu, 22 Nov 2012 06:42:07 +0000 Subject: Renamed. --- lib/custodian/util/ping.rb | 88 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 lib/custodian/util/ping.rb (limited to 'lib/custodian/util/ping.rb') diff --git a/lib/custodian/util/ping.rb b/lib/custodian/util/ping.rb new file mode 100644 index 0000000..b3fa7f4 --- /dev/null +++ b/lib/custodian/util/ping.rb @@ -0,0 +1,88 @@ + +require 'custodian/util/dns' + + + +# +# This class has methods to determine whether the target +# of a hostname/IP address is IPv4 or IPv6. +# +# Assuming the address resolves to one of those two types +# it can invoke on of /usr/bin/ping or /usr/bin/ping6 appropriately. +# +module Custodian + module Util + class Ping + + # + # The hostname we'll ping, and the resolved address. + # + attr_reader :hostname, :resolved + + # + # Save the hostname away, resolve it if possible. + # + def initialize( hostname ) + @hostname = hostname + @resolved = Custodian::Util::DNS.hostname_to_ip( hostname ) + end + + + # + # Return the resolved address + # + def address + @resolved + end + + + + # + # Does the hostname resolve to an IPv4 address? + # + def is_ipv4? + if ( ( ! @resolved.nil? ) && ( @resolved =~ /^([0-9]+).([0-9]+).([0-9]+).([0-9]+)$/ ) ) + true + else + false + end + end + + + # + # Does the hostname resolve to an IPv6 address? + # + def is_ipv6? + if ( ( ! @resolved.nil? ) && ( @resolved =~ /^([a-f0-9:]+)$/i ) ) + true + else + false + end + end + + + + # + # Run the ping - if it succeeds return "true". + # + # Return false on error. + # + def run_ping + if ( is_ipv6? ) + if ( system( "ping6 -c 1 #{@resolved} 2>/dev/null >/dev/null" ) == true ) + return true + end + elsif( is_ipv4? ) + if ( system( "ping -c 1 #{@resolved} 2>/dev/null >/dev/null" ) == true ) + return true + end + else + puts "ERROR: Resolved to neither an IPv6 or IPv4 address." + end + return false + end + + end + + end +end -- cgit v1.2.1