[Python-es] ayuda con scapy

Boris Perez Canedo inf200523 en ucf.edu.cu
Mie Feb 24 20:16:09 CET 2010




>> import os,re 
>> from multiprocessing import Process, Lock 
>> 
>> def ping(lck, host): 
>>     options
= '-n 1 -w 2 ' 
>>     f = os.popen('ping ' + options + host)

>>     data = f.read() 
>>    
match = re.search(r"\b(?:\d{1,3}\.){3}\d{1,3}\b(?=.+TTL)", data) # 
>> machea una direccion ip utilizada 
>>     if match:

>>         ip = match.group() 
>>         lck.acquire() 
>>
        print ip 
>>
        lck.release() 
>> 
>>

>> if __name__ == '__main__': 
>>     lock =
Lock() 
>> 
>>     for host in
['10.14.16.5','10.14.19.12']: 
>>        
Process(target=ping, args=(lock, host)).start() 
>> 
>> Que parece
funcionar bien. Pero aqui el problema es como a partir de una 
>> direccion
de red (10.14.16.0/22) generar una lista de ip similar a la que 
>>
utilizo arriba (pero con todos). 
>> 
>> Saludos. 
>>
Boris 
 
> 
> También puedes usar scapy para eso. En el
propio manual de scapy 
> tienes un ejemplo [1] 
> 
>>>> net = IP(dst="10.14.16.0/22") 
>>>> [pkt
for pkt in net] 
> [<IP dst=10.14.16.0 |>, <IP dst=10.14.17.0 |>,
<IP dst=10.14.18.0 
> |>, <IP dst=10.14.19.0 |>, <IP
dst=10.14.16.1 |>, <IP 
> dst=10.14.17.1 |>, <IP dst=10.14.18.1
|>, <IP dst=10.14.19.1 |>, <IP 
> dst=10.14.16.2 |>, <IP
dst=10.14.17.2 |>, <IP dst=10.14.18.2 |>, 
> <IP dst=10.14.19.2
|>,... 
> 
> Intenta hacer funcionar scapy porque él ya
implementa todo lo que 
> puedas necesitar. 
> 
> Esto
sería más o menos lo que buscas. Lista las IP de los host que 
>
respondan a "ping". 
> 
> ans, unans =
sr(IP(dst="10.14.18.0/22")/ICMP(), timeout=10) 
> for pkt in ans: 
> print pkt[0].dst 
> 
> 
> Saludos 
> 
Hola,
Ok, eso hare.
El problema es que para el trabajo que tengo que hacer
me gustaria no tener que instalar scapy, digamos que es algo problematico para Windows
ya que fue pensado para Linux  y lo que tengo que hacer debe funcionar en Windows y
Linux, ademas scapy es un "monstruo" en el buen sentido de la palabra, yo lo
usaria en un proyecto que realmente explotara sus posibilidades, claro si no me queda
otra opcion lo voy a usar.

El script que mostre arriba me funciona y ya
resolvi lo de generar las ip a partir de la direccion de red. Lo que no puedo resolver
es que en vez de imprimir en pantalla los ip me los ponga en una lista y la devuelva.

Si hago algo asi:

import os,re, hosts
 from multiprocessing
import Process, Lock 

ipList  = []      #
la lista de ips

def ping(lck, host):
     
...etc, etc


lck.acquire()
ipList.append(ip)  #Cambie
"print ip" por append(ip) 
 lck.release()

........etc,
etc

for host in hosts.GetList():
      
se
cuelga.



---
La mejor vacuna contra el virus A(H1N1) es la higiene personal
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100224/5cc8fe69/attachment.html>
------------ próxima parte ------------



>> import os,re 
>> from multiprocessing import Process, Lock 
>> 
>> def ping(lck, host): 
>> ??? options
= '-n 1 -w 2 ' 
>> ??? f = os.popen('ping ' + options + host)

>> ??? data = f.read() 
>> ???
match = re.search(r"\b(?:\d{1,3}\.){3}\d{1,3}\b(?=.+TTL)", data) # 
>> machea una direccion ip utilizada 
>> ??? if match:

>> ??????? ip = match.group() 
>> ??????? lck.acquire() 
>>
??????? print ip 
>>
??????? lck.release() 
>> 
>>

>> if __name__ == '__main__': 
>> ??? lock =
Lock() 
>> 
>> ??? for host in
['10.14.16.5','10.14.19.12']: 
>> ???????
Process(target=ping, args=(lock, host)).start() 
>> 
>> Que parece
funcionar bien. Pero aqui el problema es como a partir de una 
>> direccion
de red (10.14.16.0/22) generar una lista de ip?similar a la que 
>>
utilizo arriba (pero con todos). 
>> 
>> Saludos. 
>>
Boris?
 
> 
> Tambi?puedes usar scapy para eso. En el
propio manual de scapy 
> tienes un ejemplo [1] 
> 
>>>> net = IP(dst="10.14.16.0/22") 
>>>> [pkt
for pkt in net] 
> [<IP dst=10.14.16.0 |>, <IP dst=10.14.17.0 |>,
<IP dst=10.14.18.0 
> |>, <IP dst=10.14.19.0 |>, <IP
dst=10.14.16.1 |>, <IP 
> dst=10.14.17.1 |>, <IP dst=10.14.18.1
|>, <IP dst=10.14.19.1 |>, <IP 
> dst=10.14.16.2 |>, <IP
dst=10.14.17.2 |>, <IP dst=10.14.18.2 |>, 
> <IP dst=10.14.19.2
|>,... 
> 
> Intenta hacer funcionar scapy porque ?ya
implementa todo lo que 
> puedas necesitar. 
> 
> Esto
ser?m?o menos lo que buscas. Lista las IP de los host que 
>
respondan a "ping". 
> 
> ans, unans =
sr(IP(dst="10.14.18.0/22")/ICMP(), timeout=10) 
> for pkt in ans: 
> print pkt[0].dst 
> 
> 
> Saludos 
> 
Hola,
Ok, eso hare.
El problema es que para el trabajo que tengo que hacer
me gustaria no tener que instalar scapy, digamos que es algo problematico para Windows
ya que fue pensado para Linux ?y lo que tengo que hacer debe funcionar en Windows y
Linux, ademas scapy es un "monstruo" en el buen sentido de la palabra, yo lo
usaria en un proyecto que realmente explotara sus posibilidades, claro si no me queda
otra opcion lo voy a usar.

El script que mostre arriba me funciona y ya
resolvi lo de generar las ip a partir de la direccion de red. Lo que no puedo resolver
es que en vez de imprimir en pantalla los ip me los ponga en una lista y la devuelva.

Si hago algo asi:

import os,re,?hosts
 from multiprocessing
import Process, Lock?

ipList? = []????? #
la lista de ips

def ping(lck, host):
?????
...etc, etc


lck.acquire()
ipList.append(ip)? #Cambie
"print ip" por append(ip)?
 lck.release()

........etc,
etc

for host in hosts.GetList():
?
se cuelga.

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100224/5cc8fe69/attachment-0001.html>


Más información sobre la lista de distribución Python-es