lunes, 25 de agosto de 2008

Ping a IP por rango

Eddy [delvalle@otepr.co.cu]

Hace algun tiempo en BlackHat presentaron un código que hacía ping a un número restringido de IPs escrito en Python el cual a mí me pareció que se podía mejorar mucho y me dediqué a escribir una versión mejorada que permite hacer ping por rango.


Este código se puede ejecutar de la siguiente manera
En Linux: luego de darle permisos de ejecución, tecleamos en el terminal:
$ ./ipPinger.py 10.208.0.0 10.208.10.5
y el programa hara ping a acada una de las IPs en el rango especificado

En Windows:
> python ipPinger.py 10.208.0.0 10.208.10.5
y se obtiene el mismo resultado

Cualquier duda pueden preguntar sin pena.

#!/usr/bin/env python
import os
import sys

def Acarreo(IP, iByte = 3):
  if iByte == -1:
    return IP
  if IP[iByte] > 255:
    IP[iByte] = 0
    IP[iByte-1] = IP[iByte-1] + 1
    Acarreo(IP, iByte - 1)
  return IP

def GenerarRango(StartIP, EndIP):
  #verificar que StartIP es menor que EndIP
  StartIP = map(int,StartIP.split('.'))
  EndIP = map(int,EndIP.split('.'))
  for i in range(0,4):
        if StartIP[i] > EndIP[i]:
          #swap values
          StartIP , EndIP = EndIP, StartIP
          break
  rango = []
  while not( StartIP[0] == EndIP[0] and \
             StartIP[1] == EndIP[1] and \
             StartIP[2] == EndIP[2] and \
             StartIP[3] == EndIP[3] ):
    #acarreo de suma
    StartIP = Acarreo(StartIP)
    rango.append(str(StartIP[0])+"."+str(StartIP[1])+"."+str(StartIP[2])+"."+str(StartIP[3]))
    StartIP[3] = StartIP[3] + 1
  return rango

for ip in GenerarRango(sys.argv[1],sys.argv[2]):
  os.system("ping "+ip)


Artículos relacionados


2 comentarios:

epsilon dijo...

hola muy interesante la aplicacion, sirve de mucho, sin embargo creo que tiene un error en la ultima parte, ya que si lo ejecutamos asi se quedara en la primera ip, se puede solucionar añadiendo al comando ping -c 3 donde 3 es el numero de veces que mandara los paquetes... quedara algo asi

for ip in GenerarRango(sys.argv[1],sys.argv[2]):
os.system("ping -c 3 "+ip)

Frivy dijo...

Gracias hermano me servido tu codigo para algo bueno, mas adelante subire el proyecto completo.