Advertisement
kr1shn4murt1

encontrar_Hosts_Vivos.py

Jun 7th, 2013
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.72 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #-*-coding:utf-8-*-
  3. # Autor: kr1shn4murt1
  4. # Este script encuentra hosts vivos en un segmento de red creando un manualmente un paquete icmp con scapy y esperando
  5. # una respuesta para determinar si el host esta arriba haciendo uso del modulo y hace uso del modulos pp
  6. # parallell python para optimizar el tiempo de ejecucion, el script recibe como parametro el numero de procesos
  7. # a ejecutar paralelamente, de no proporcionarle dicho parametro empieza la ejecucion con el numero de cores del
  8. # procesador, en el caso de un core i5 son 4 procesos pero se puede aumentar en numero hasta 64 o mas dependiendo de
  9. # la capacidad de la maquina
  10.  
  11. # Importacion de los modulos a usar en el script
  12. import time #  Para imprimir el tiempo de ejecucion
  13. #from scapy.all import * # Al usar pp (parallel python) los modulos usados dentro de la funcion a paralelizar
  14. # deben importarse dentro de la funcion al parecer por que se crea una instancia independiente del interprete
  15. # de python y dicha instancia creada debe importar los modulos cada vez
  16. import pp, sys # Se importa el modulo pp (parallel python) para ejecucion rapida del codigo, si no se tiene instalado
  17. # se instala ejecutando en terminal easy_install pp
  18.  
  19.  
  20. horaInicio= time.time()
  21. print '\t Hora de inicio del script: ',time.ctime(horaInicio)
  22.  
  23. def ping_Hosts(ip):
  24.     import logging # Esta importacion y la linea siguiente es solo para que scapy no muestre el error de
  25.     # cuando no encuentra ruteo para ipv6
  26.     logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
  27.     # Se importan los modulos a usar de scapy, como se mencion al inicio del script debe hacerse aqui
  28.     from scapy.all import IP, ICMP, sr1
  29.     # Se crea un paquete icmp con la sintaxis de scapy en la ip de destino se toma la variable ingresada
  30.     # a la funcion, el string 'testeo de ping' es un payload cualquiera que se le puede poner
  31.     paquete_ICMP= IP(dst= ip)/ICMP()/'Testeo de ping'
  32.     # El paquete se envia con el metodo sr1 y se captura la respuesta (un echo-reply) en el caso del paquete
  33.     #icmp en una variable
  34.     respuesta= sr1(paquete_ICMP, timeout= .2, verbose= False) # Se puede agregar el parametro retry= 1
  35.     #para intentar enviar otro paquete si no hay respuesta
  36.     # Si hubo respuesta del host se retorna la ip para al final del script imprimir todas las ips encontradas
  37.     #arriba
  38.     if respuesta:
  39.         return 'ip arriba: '+ip
  40.  
  41. # Tupla de todos los servidores que se repartiran la carga de los trabajos
  42. ppservers = ()
  43. #ppservers = ("10.0.0.1",)
  44.  
  45. if len(sys.argv) > 1:
  46.     ncpus = int(sys.argv[1])
  47.     # Se crea el servidor de trabajos con ncpus trabajadores (procesos al tiempo)
  48.     job_server = pp.Server(ncpus, ppservers=ppservers)
  49. else:
  50.     # Se crea el servidor de trabajos con el numero de procesos automaticamente detectado
  51.     job_server = pp.Server(ppservers=ppservers)
  52.  
  53. print "\t Script iniciado con", job_server.get_ncpus(), "procesos paralelos\n"
  54.  
  55. jobs = []
  56.  
  57. #ip_Prueba= '192.168.111.21'
  58.  
  59. for i in xrange(254):
  60.    
  61.     # Se crean las ips en este rango
  62.     ip= '192.168.111.'+ str(i)
  63.     # Se envian la funcion con el ping_Hosts con parametro ip, ya que lo que se paraleliza del codigo es la
  64.     #funcion a ejecutar, habra una instancia de la funcion por cada ip
  65.     jobs.append(job_server.submit(ping_Hosts,(ip,), (), ()))
  66.  
  67. for job in jobs:
  68.     # Forma correcta de obtener los resultados del array de trabajos
  69.     result= job()
  70.     # Si la funcion retorno un resultado o sea una ip que esta arriba  
  71.     if result:
  72.     print '\t ',result
  73.  
  74. horaFin= time.time()
  75. print '\n'
  76. print '\t Hora de inicio del script: ',time.ctime(horaInicio)
  77. print '\t Hora de finalización del script: ',time.ctime(horaFin)
  78.  
  79. tiempoEjecucion= horaFin-horaInicio
  80. print '\t La ejecución tomó %s segundos'%str(tiempoEjecucion),'\n'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement