2008-10-23 20 views
6

Soy relativamente nuevo en Python y tengo problemas para programar con Scapy, la herramienta de manipulación de red de Python. Sin embargo, no puedo decir si es tanto un problema de Scapy como un problema de ser un Python-novato. Por scapy site, dan un ejemplo de programa que yo no soy capaz de correr en mi propia máquina:Python - Problemas de biblioteca

#! /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 lo que me sale:

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

Así que mi pregunta es, entonces: al instalar Python bibliotecas, ¿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 from scapy import * bien, pero como no tengo idea de lo que contiene, es difícil usarlo.

+0

Compruebe su instalación scapy. En mi máquina, su ejemplo funciona tanto como lo publicó como con el intérprete como ... –

Respuesta

6

Con la advertencia de Federico Ramponi "Deberías usar scapy como intérprete por sí mismo, no como biblioteca", quiero responder a las partes específicas de la pregunta que no sean escatológicas.

Q: al instalar las bibliotecas de Python, ¿tengo que cambiar mi ruta o algo similar?

A: Creo que estás hablando de cambiar PYTHONPATH en todo el sistema. Esto generalmente no es necesario o 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 PYTHONPATH en su archivo Makefile o en un script del shell del controlador.

Q: Además, ¿hay algo que pueda ejecutar en el intérprete para decirme el contenido del paquete scapy?

A: Puede hacer algo como esto:

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

O aún mejor: pregunta

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

Bono se le preguntó en un comentario.

Q: ¿Es 'import scapy' lo mismo que 'from scapy imported *'?

A:import scapy vincula el nombre del scapy en el espacio de nombres local al objeto del 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.

Véanse los párrafos 6 y 7 del Manual de referencia de Python, 6.12 The import statement.

+0

¡Gracias por la ayuda! Pregunta lateral rápida: ¿es 'import scapy' lo mismo que 'from scapy import *'? –

+0

el contenido del paquete no siempre se puede contar por dir (nombre_paquete) debido a la recuperación diferida. –

3

Le dice que no puede encontrar sr1 en scapy. No estoy seguro de qué tan nuevo eres, pero el intérprete siempre es tu amigo. Encienda el intérprete (simplemente escriba "python" en la línea de comandos), y en el indicador (>>>) escriba (pero no escriba los>, se mostrarán solos):

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

La última línea debería imprimir muchas cosas.¿Ves 'sr1', 'IP' e 'ICMP' allí en alguna parte? Si no, el ejemplo es culpable.

Proveedores Ayuda (scapy)

Eso es en lo mucho que te puedo ayudar sin necesidad de instalar scapy y mirando a su fuente-presentar a mí mismo real.

1

El paquete scapy es una herramienta para la manipulación y el control de la red. Tengo curiosidad sobre lo que estás tratando de hacer con eso. Es grosero espiar a tus amigos. :-)

[email protected]:~/src$ wget -q http://www.secdev.org/projects/scapy/files/scapy-latest.zip 
[email protected]:~/src$ unzip -qq scapy-latest.zip 
warning [scapy-latest.zip]: 61 extra bytes at beginning or within zipfile 
    (attempting to process anyway) 
[email protected]:~/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): 

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

+0

Ya que me preguntó, en realidad necesito aprender a usarlo efectivamente como tarea para mi clase de seguridad :) –

4

que tenían el mismo problema, en el uso scapy v2.xy

from scapy.all import * 

lugar el v1.x

from scapy import * 

como escrita here

Disfrútalo =)

+0

¡Excelente hallazgo! –