#! /usr/bin/env python # -*- coding: utf-8 -*- #============================================================================== # ipscan: ping a una red usando fping #------------------------------------------------------------------------------ # FJA - fja@neocipres.com Septiembre 2017 #============================================================================== import sys import subprocess __uso__ = ''' ============================================================ ipscan <IP inicio> <IP final> [opciones de fping] ============================================================ \n''' __info__ = ''' Algunas opciones de fping: ----------------------------------------------------------------- -cn -> para establecer el número n de ping que enviamos -rn -> número n de reintentos -bn -> cantidad de datos para enviar, n en bytes -e -> muestra el tiempo transcurrido de los paquetes de vuelta -s -> muestra un informe -n -> muestra los host por nombre -A -> muestra la IP asociada a la dirección de un host ----------------------------------------------------------------- \n''' if len(sys.argv) <= 2: print __uso__ print __info__ sys.exit(1) try: ip0 = sys.argv[1] ip1 = sys.argv[2] listaop = '' if len(sys.argv) == 3: listaop = '-c1 -r1 -s' elif len(sys.argv) > 3: opfping = sys.argv[3:] for op in opfping: listaop = listaop + op + ' ' if listaop.find('-u') != -1: listaop = listaop.replace('-u', '') cmd = 'fping' + ' ' + listaop + ' -g ' + ip0 + ' ' + ip1 proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, # PIPE STDOUT universal_newlines=True) out, err = proc.communicate() err = err.splitlines() for linea in err: if ('ICMP' not in linea) and ('loss' not in linea): print linea print '\n IPs activas:' print '-' * 60 print out except KeyboardInterrupt, ki: subprocess.call('clear', shell=True) print "\n\tError:", repr(ki) print("\n\t script interrumpido por el usuario.") print "\n", __uso__, "\n" sys.exit(1) except Exception as e: print '\n\t' print '\t Error: ', e, sys.exc_info()[0], '\n' print __uso__