Pregunta

Soy relativamente nuevo en Python y tengo problemas para programar con Scapy, la herramienta de manipulación de redes de Python. Sin embargo, no puedo decir si es tanto un problema de Scapy como un problema de ser un Python-newbie. En el sitio web de Scapy , ofrecen un programa de muestra que no puedo Ejecutar en mi propia máquina:

#! /usr/bin/env python

import sys
from scapy import sr1,IP,ICMP

p=sr1(IP(dst=sys.argv[1])/ICMP())
if p:
    p.show()

A la que llego:

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    from scapy import sr1,IP,ICMP
ImportError: cannot import name sr1

Entonces, mi pregunta es: al instalar las bibliotecas de Python, ¿necesito cambiar mi ruta o algo similar? Además, ¿hay algo que pueda ejecutar en el intérprete para decirme el contenido del paquete scapy? Puedo ejecutar desde scapy import * simplemente bien, pero como no tengo idea de lo que contiene, es difícil de usar.

¿Fue útil?

Solución

Con la advertencia de Federico Ramponi "Debería usar scapy como intérprete por sí mismo, no como una biblioteca", quiero responder a las partes no específicas de scaps de la pregunta.

P: al instalar bibliotecas de Python, ¿necesito cambiar mi ruta o algo similar?

A: Creo que estás hablando de cambiar PYTHONPATH en todo el sistema. Esto generalmente no es obligatorio o es una buena idea.

Las bibliotecas de Python de terceros deben instalarse en los directorios del sistema, como /usr/lib/python2.5/site-packages , o instalarse localmente, en cuyo caso es posible que desee establecer < código> PYTHONPATH en su Makefile o en un script de shell del controlador.

P: También, ¿hay algo que pueda ejecutar en el intérprete para decirme el contenido del paquete scapy?

A: Puedes hacer algo como esto:

>>> import scapy
>>> dir(scapy)

O incluso mejor:

>>> import scapy
>>> help(scapy)

Pregunta de bonificación hecha en un comentario.

P: ¿'Importar scapy' es lo mismo que 'desde Scapy Import *'?

A: import scapy vincula el nombre de scapy en el espacio de nombres local al objeto de módulo scapy. OTOH, from scapy import * no vincula el nombre del módulo, pero todos los nombres públicos definidos en el módulo scapy están vinculados en el espacio de nombres local.

Consulte los párrafos 6 y 7 del Manual de referencia de Python, 6.12 declaración de importación .

Otros consejos

Tuve el mismo problema, en el uso de scapy v2.x

 from scapy.all import * 

en lugar de la v1.x

 from scapy import *

tal como está escrito aquí

Disfrútalo =)

Te dice que no puede encontrar sr1 en scapy. No estoy seguro de lo nuevo que eres, pero el intérprete siempre es tu amigo. Encienda el intérprete (solo escriba " python " en la línea de comandos), y en el tipo de solicitud (> > >) (pero no escriba los > 's, aparecerán por sí mismos):

>>> import scapy
>>> from pprint import pformat
>>> pformat(dir(scapy))

La última línea debería imprimir muchas cosas. ¿Ve 'sr1', 'IP' e 'ICMP' en cualquier lugar? Si no, el ejemplo está en falta.

Prueba también ayuda (scapy)

Eso es todo lo que puedo ayudarte sin instalar scapy y mirar tu archivo de origen real.

El paquete scapy es una herramienta para la manipulación y supervisión de redes. Tengo curiosidad por saber qué intentas hacer con eso. Es grosero espiar a tus amigos. :-)

coventry@metta:~/src$ wget -q http://www.secdev.org/projects/scapy/files/scapy-latest.zip
coventry@metta:~/src$ unzip -qq scapy-latest.zip 
warning [scapy-latest.zip]:  61 extra bytes at beginning or within zipfile
  (attempting to process anyway)
coventry@metta:~/src$ find scapy-2.0.0.10 -name \*.py | xargs grep sr1
scapy-2.0.0.10/scapy/layers/dns.py:    r=sr1(IP(dst=nameserver)/UDP()/DNS(opcode=5,
scapy-2.0.0.10/scapy/layers/dns.py:    r=sr1(IP(dst=nameserver)/UDP()/DNS(opcode=5,
scapy-2.0.0.10/scapy/layers/inet6.py:from scapy.sendrecv import sr,sr1,srp1
scapy-2.0.0.10/scapy/layers/snmp.py:            r = sr1(IP(dst=dst)/UDP(sport=RandShort())/SNMP(community=community, PDU=SNMPnext(varbindlist=[SNMPvarbind(oid=oid)])),timeout=2, chainCC=1, verbose=0, retry=2)
scapy-2.0.0.10/scapy/layers/inet.py:from scapy.sendrecv import sr,sr1,srp1
scapy-2.0.0.10/scapy/layers/inet.py:            p = sr1(IP(dst=target, options="\x00"*40, proto=200)/"XXXXYYYYYYYYYYYY",timeout=timeout,verbose=0)
scapy-2.0.0.10/scapy/sendrecv.py:def sr1(x,filter=None,iface=None, nofilter=0, *args,**kargs):

Según la última línea, sr1 es una función definida en scapy.sendrecv . Alguien debería presentar un error de documentación con el autor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top