Pergunta

Eu sou relativamente novo para Python e estou tendo problemas de programação com scapy, a ferramenta de manipulação de rede Python. No entanto, não posso dizer se é tanto o problema de um scapy, pois é um problema estar-a-Python-novato. Na scapy local , eles dão um exemplo de programa que eu não sou capaz de correr na minha própria 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()

Para que eu recebo:

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

Assim, a minha pergunta então é: ao instalar bibliotecas Python, eu preciso mudar meu caminho ou algo semelhante? Além disso, existe algo que eu possa executar no interpretador para me dizer o conteúdo do pacote scapy? Eu posso correr from scapy import * muito bem, mas desde que eu não tenho idéia o que está dentro dele, é difícil usá-lo.

Foi útil?

Solução

Com a ressalva de Federico Ramponi "Você deve usar scapy como intérprete por conta própria, não como uma biblioteca", eu quero responder as partes específicas não scapy-da questão.

Q:? ao instalar bibliotecas Python, eu preciso mudar meu caminho ou qualquer coisa semelhante

A: Eu acho que você está falando sobre a mudança PYTHONPATH em todo o sistema. Isso geralmente não é necessária ou uma boa idéia.

bibliotecas de terceiros Python deve ser instalado em diretórios do sistema, tais como /usr/lib/python2.5/site-packages, ou instalado localmente, caso em que você pode querer PYTHONPATH set em seu Makefile ou um script shell no motorista.

Q:? Além disso, existe algo que eu possa executar no interpretador para me dizer o conteúdo do pacote scapy

A: Você pode fazer algo como isto:

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

Ou melhor ainda:

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

Bônus pergunta perguntou em um comentário.

Q:? é 'importação scapy' o mesmo que 'a partir de importação scapy *'

A: se liga import scapy o nome scapy no namespace local ao objeto módulo scapy. OTOH, from scapy import * não vincula o nome do módulo, mas todos os nomes públicos definidos no módulo scapy são obrigados no namespace local.

Veja n.os 6 e 7 do Python Reference Manual, 6,12 A declaração de importação .

Outras dicas

Eu tive o mesmo problema, no uso scapy v2.x

 from scapy.all import * 

em vez do v1.x

 from scapy import *

aqui

Enjoy it =)

Ele diz-lhe que ele não pode encontrar sr1 no scapy. Não tenho certeza o quão newbite você é, mas o intérprete é sempre seu amigo. Fogo até o intérprete (basta digitar "python" na linha de comando), e ao (>>>) prompt (mas não digitar a> 's, eles vão aparecer por si só):

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

A última linha deve imprimir um monte de coisas. Você vê 'sr1', 'IP', e 'ICMP' existe em qualquer lugar? Se não, o exemplo é a culpa.

Tentar também ajuda (scapy)

Isso é sobre o quanto eu posso ajudá-lo sem instalar scapy e olhando para o seu arquivo-fonte real mim.

O scapy pacote é uma ferramenta para manipular rede e monitoramento. Estou curioso para saber o que você está tentando fazer com ele. É rude para espionar seus 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):

De acordo com a última linha, sr1 é uma função definida em scapy.sendrecv. Alguém deve arquivar um bug documentação com o autor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top