Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- #-*-coding:utf-8-*-
- # Autor: kr1shn4murt1
- # Este script encuentra hosts vivos en un segmento de red creando un manualmente un paquete icmp con scapy y esperando
- # una respuesta para determinar si el host esta arriba haciendo uso del modulo y hace uso del modulos pp
- # parallell python para optimizar el tiempo de ejecucion, el script recibe como parametro el numero de procesos
- # a ejecutar paralelamente, de no proporcionarle dicho parametro empieza la ejecucion con el numero de cores del
- # procesador, en el caso de un core i5 son 4 procesos pero se puede aumentar en numero hasta 64 o mas dependiendo de
- # la capacidad de la maquina
- # Importacion de los modulos a usar en el script
- import time # Para imprimir el tiempo de ejecucion
- #from scapy.all import * # Al usar pp (parallel python) los modulos usados dentro de la funcion a paralelizar
- # deben importarse dentro de la funcion al parecer por que se crea una instancia independiente del interprete
- # de python y dicha instancia creada debe importar los modulos cada vez
- import pp, sys # Se importa el modulo pp (parallel python) para ejecucion rapida del codigo, si no se tiene instalado
- # se instala ejecutando en terminal easy_install pp
- horaInicio= time.time()
- print '\t Hora de inicio del script: ',time.ctime(horaInicio)
- def ping_Hosts(ip):
- import logging # Esta importacion y la linea siguiente es solo para que scapy no muestre el error de
- # cuando no encuentra ruteo para ipv6
- logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
- # Se importan los modulos a usar de scapy, como se mencion al inicio del script debe hacerse aqui
- from scapy.all import IP, ICMP, sr1
- # Se crea un paquete icmp con la sintaxis de scapy en la ip de destino se toma la variable ingresada
- # a la funcion, el string 'testeo de ping' es un payload cualquiera que se le puede poner
- paquete_ICMP= IP(dst= ip)/ICMP()/'Testeo de ping'
- # El paquete se envia con el metodo sr1 y se captura la respuesta (un echo-reply) en el caso del paquete
- #icmp en una variable
- respuesta= sr1(paquete_ICMP, timeout= .2, verbose= False) # Se puede agregar el parametro retry= 1
- #para intentar enviar otro paquete si no hay respuesta
- # Si hubo respuesta del host se retorna la ip para al final del script imprimir todas las ips encontradas
- #arriba
- if respuesta:
- return 'ip arriba: '+ip
- # Tupla de todos los servidores que se repartiran la carga de los trabajos
- ppservers = ()
- #ppservers = ("10.0.0.1",)
- if len(sys.argv) > 1:
- ncpus = int(sys.argv[1])
- # Se crea el servidor de trabajos con ncpus trabajadores (procesos al tiempo)
- job_server = pp.Server(ncpus, ppservers=ppservers)
- else:
- # Se crea el servidor de trabajos con el numero de procesos automaticamente detectado
- job_server = pp.Server(ppservers=ppservers)
- print "\t Script iniciado con", job_server.get_ncpus(), "procesos paralelos\n"
- jobs = []
- #ip_Prueba= '192.168.111.21'
- for i in xrange(254):
- # Se crean las ips en este rango
- ip= '192.168.111.'+ str(i)
- # Se envian la funcion con el ping_Hosts con parametro ip, ya que lo que se paraleliza del codigo es la
- #funcion a ejecutar, habra una instancia de la funcion por cada ip
- jobs.append(job_server.submit(ping_Hosts,(ip,), (), ()))
- for job in jobs:
- # Forma correcta de obtener los resultados del array de trabajos
- result= job()
- # Si la funcion retorno un resultado o sea una ip que esta arriba
- if result:
- print '\t ',result
- horaFin= time.time()
- print '\n'
- print '\t Hora de inicio del script: ',time.ctime(horaInicio)
- print '\t Hora de finalización del script: ',time.ctime(horaFin)
- tiempoEjecucion= horaFin-horaInicio
- print '\t La ejecución tomó %s segundos'%str(tiempoEjecucion),'\n'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement