#!/usr/bin/ruby -w #======================================================= # ipscan.rb - script para detectar ip activas #------------------------------------------------------- # ipscan usa fping - http://fping.sourceforge.net/ #======================================================= # FJA - neocipres@gmail.com Marzo de 2010 #======================================================= info = "\t Algunas opciones de fping: \n" << "\t #{"-"*70} \n" << "\t -cn -> para establecer el número n de ping que enviamos\n" << "\t -rn -> número n de reintentos \n" << "\t -bn -> cantidad de datos para enviar, n en bytes\n" << "\t -e -> muestra el tiempo transcurrido de los paquetes de vuelta \n" << "\t -s -> muestra un informe \n" << "\t -n -> muestra los host por nombre \n" << "\t -A -> muestra la IP asociada a la dirección de un host \n" cmd = '' listaop = '' listah = [] salida = '' begin raise if ARGV.size < 2 ip0 = ARGV[0] ip1 = ARGV[1] opfping = ARGV[2..-1] opfping.each{|opcion| listaop << opcion << " "} listaop = listaop.sub('-u','') if listaop.include?('-u') listaop = listaop.sub('-a','') if listaop.include?('-a') cmd << "fping #{listaop} -g #{ip0} #{ip1}" salida = `#{cmd}` # En sustitución de system(cmd). Nos permite recoger la salida del comando y analizarla. salida.each{|host| listah << host.sub('is alive','') if host.include?('alive')} puts "\n IPs activas:" puts "#{"="*61} " if listaop.include?('-c') puts salida else print "\t", listah.join("\t") end puts "#{"="*61} " rescue if ARGV.size < 2 puts "\n\t #{"="*70} " puts "\t > Uso: ipscan <IP inicial> <IP final> [opciones de fping] \n" puts "\n #{info}" puts "\t #{"="*70} \n\n" else print "\n\t Error-> ", $!, "\n\n" end end