#!/usr/bin/ruby1.8 # # NAME # multi-ping - IPv4 and IPv6 ping tool # # # SYNOPSIS # multi-ping [ -h | --help ] [-m | --manual] hostname1 # # # OPTIONS # # -h, --help Show a help message, and exit. # # -m, --manual Show this manual, and exit. # # # ABOUT # # The multi-ping tool is designed to be IPv4/IPv6-agnostic ping tool, # which removes the need to know if you're pinging an IPv4 host or an # IPv6 host. # # The tool works by resolving the hostname specified upon the command line, # and invoking "ping" or "ping6" upon the result - using the correct one for # the address family which has been returned. # # # AUTHOR # # Steve Kemp # require 'getoptlong' require 'custodian/util/ping' # # Options set by the command-line. These are all global. # $help = false $manual = false opts = GetoptLong.new( [ '--help', '-h', GetoptLong::NO_ARGUMENT ], [ '--manual', '-m', GetoptLong::NO_ARGUMENT ] ) begin opts.each do |opt,arg| case opt when '--help' then $help = true when '--manual' then $manual = true end end rescue => err # any errors, show the help warn err.to_s $help = true end # # CAUTION! Here be quality kode. # if $manual or $help # Open the file, stripping the shebang line lines = File.open(__FILE__){|fh| fh.readlines}[1..-1] found_synopsis = false lines.each do |line| line.chomp! break if line.empty? if $help and !found_synopsis found_synopsis = (line =~ /^#\s+SYNOPSIS\s*$/) next end puts line[2..-1].to_s break if $help and found_synopsis and line =~ /^#\s*$/ end exit 0 end # # Get the address to ping. # hostname = ARGV.shift # # Abort if we don't have a hostname # if ( hostname.nil? ) puts "Usage: #{$0} hostname" exit 1 end # # Create the object # helper = Custodian::Util::Ping.new( hostname ) # # Ping the host, via the helper # if ( helper.run_ping() ) puts "#{hostname} - #{helper.address} - is alive." exit 0 else exit 1 end