Mostrando entradas con la etiqueta Python. Mostrar todas las entradas
Mostrando entradas con la etiqueta Python. Mostrar todas las entradas

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)

Continuar leyendo

martes, 19 de agosto de 2008

Respuesta al Ejercicio BH 63

Eddy [delvalle@otepr.co.cu]

Enunciado:

Hay M soldados en un cerco y tienen un solo caballo. Para salir forman circularmente y comienzan a contar inicialmente por un soldado elegido al azar. Cada N soldados uno sale y el último se queda con el caballo.
Hacer un programa que permita imprimir que soldado saldrá del cerco eon el caballo si se conoce la cantidad de soldados (M) y el incremento (N) en el conteo.

#!/usr/bin/env python
cant_soldados = int(raw_input("Entre la cantidad soldados: "))
iteraciones = int(raw_input("Entre el numero escogido: "))

soldados = range(1, cant_soldados+1)

i = 0
n = 1
while len(soldados) > 1:
if i == len(soldados):
i = 0
if n == iteraciones:
del soldados[i]
n = 1
else:
n = n + 1
i = i + 1

print soldados[0]

Continuar leyendo

Extraer elementos de tipo específico de una lista

Eddy [delvalle@otepr.co.cu]

Esta es una función a la que se le pasa como parámetro un tipo y una colección, y ella devuelve sólo los elementos que son del tipo que se le pasó como parámetro, este puede ser, por su puesto, una clase definina por ti.
La sección de código bajo la definición de la función es para probar la función con un ejemplo.

#!/usr/bin/env python
def extraerPorTipo(tipo, coleccion):
lista = []
for elemento in coleccion:
if isinstance(elemento, tipo):
lista.append(elemento)
return lista

#esta seccion hace la comprobacion de la función
cadena = "esta es una cadena"
milista = ["asd", 3, "hola", 5.0, 4, cadena]
print "de la lista "+str(milista)+" son de tipo entero:"
print extraerPorTipo(int, milista)
raw_input("presione enter para continuar")

#esto devolvera:
# de la lista ['asd', 3, 'hola', 5.0, 4, 'esta es una cadena'] son de tipo entero:
# [3, 4]

Continuar leyendo