Domanda

Sono relativamente nuovo su Python e ho problemi di programmazione con Scapy, lo strumento di manipolazione della rete Python. Tuttavia, non posso dire se sia tanto un problema Scapy quanto un problema di essere un principiante Python. Sul sito di scapy , offrono un programma di esempio che non sono in grado di eseguire sul mio computer:

#! /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 cui ottengo:

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

Quindi la mia domanda è: quando installo le librerie Python, devo cambiare il mio percorso o qualcosa di simile? Inoltre, c'è qualcosa che posso eseguire nell'interprete per dirmi il contenuto del pacchetto scapy? Posso eseguire dall'importazione di scapy * , ma dato che non ho idea di cosa ci sia dentro, è difficile usarlo.

È stato utile?

Soluzione

Con l'avvertenza di Federico Ramponi " Dovresti usare scapy come suo interprete, non come libreria " ;, voglio rispondere alle parti non-scapy specifiche della domanda.

Q: quando installo le librerie Python, devo cambiare il mio percorso o qualcosa di simile?

A: Penso che tu stia parlando di cambiare PYTHONPATH a livello di sistema. Questo di solito non è richiesto o una buona idea.

Le librerie Python di terze parti devono essere installate nelle directory di sistema, come /usr/lib/python2.5/site-packages , oppure installate localmente, nel qual caso potresti voler impostare < code> PYTHONPATH nel tuo Makefile o uno script nella shell del driver.

Q: Inoltre, c'è qualcosa che posso eseguire nell'interprete per dirmi il contenuto del pacchetto scapy?

A: Puoi fare qualcosa del genere:

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

O ancora meglio:

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

Domanda bonus posta in un commento.

Q: 'import scapy' è uguale a 'from scapy import *'?

A: import scapy associa il nome dello scapy nello spazio dei nomi locale all'oggetto del modulo scapy. OTOH, dall'importazione scapy * non associa il nome del modulo, ma tutti i nomi pubblici definiti nel modulo scapy sono associati allo spazio dei nomi locale.

Vedi i paragrafi 6 e 7 del Manuale di riferimento di Python, 6.12 The dichiarazione di importazione .

Altri suggerimenti

Ho avuto lo stesso problema, nell'uso di scapy v2.x

 from scapy.all import * 

invece di v1.x

 from scapy import *

come scritto qui

Divertiti =)

Ti dice che non riesce a trovare SR1 in Scapy. Non sono sicuro di quanto tu sia newbite, ma l'interprete è sempre tuo amico. Accendi l'interprete (digita semplicemente " python " dalla riga di comando) e al prompt (> > >) digita (ma non digita > ;, appariranno da soli):

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

L'ultima riga dovrebbe stampare molte cose. Vedete 'sr1', 'IP' e 'ICMP' lì ovunque? In caso contrario, l'esempio è in errore.

Prova anche aiuto (scapy)

Riguarda quanto posso aiutarti senza installare Scapy e guardare tu stesso il tuo vero file sorgente.

Il pacchetto scapy è uno strumento per la manipolazione e il monitoraggio della rete. Sono curioso di sapere cosa stai cercando di farci. È scortese spiare i tuoi amici. : -)

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):

Secondo l'ultima riga, sr1 è una funzione definita in scapy.sendrecv . Qualcuno dovrebbe presentare un bug di documentazione con l'autore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top