2012-11-28 12 views
7

Quindi, ho scritto un piccolo script in Ubuntu per lo scapy.Importazione Scapy.all * non funziona

#!/usr/bin/env python 
import sys 
#from scapy.all import * 
try 
    import scapy 
    except ImportError: 
    del scapy 
    from scapy import all as scapy 
i= IP() 
t= TCP() 
i.dst='192.168.56.100' 
t.dport=22 
pakket=i/t 
answered,unanswered=sr(pakket) 
answered.nsummary() 

ho scritto il 'provare' a causa di un altro argomento qui (provato come una soluzione). La mia uscita in corrente con questo codice è il seguente

Traceback (most recent call last): 
File "./scapy.py", line 5, in <module> 
import scapy 
File "/home/nicholas/scapy.py", line 9, in <module> 
i=IP() 
NameError: name 'IP' is not defined 

quando si cerca solo con da scapy.all import * tecnico senza il 'provare'.

Traceback (most recent call last): 
File "./scapy.py", line 3, in <module> 
from scapy.all import * 
File "/home/nicholas/scapy.py", line 3, in <module> 
from scapy.all import * 
ImportError: No module named all 

Ho provato diversi modi di importazione trovati su Google ma non funziona ancora. Qualcuno potrebbe dirmi cosa sto sbagliando? (Non mente il rientro di questo post)

+2

Si prega di correggere i trattini, che contano. – Tadeck

+0

prova qualcosa come * da scapy.all importa IP, TCP, sr * se non stai usando altro (senza il try-except) –

+0

Sto ancora ricevendo 'Nessun modulo chiamato all' quando provi che – Nicholas

risposta

2

Guardando alla fonte Scapy, il pacchetto Scapy non sembra import qualcosa o definire un __all__ in __init__. Di conseguenza, è necessario esplicitamente import scapy.all (o from scapy import all) prima che sia possibile effettuare lo from scapy.all import altro da esso, poiché non sarà ancora disponibile in sys.modules. Si noti che questo deve accadere solo una volta nel flusso del programma, poiché, dopo che l'interprete ha importato il modulo, sarà disponibile per tutto il codice che verrà eseguito da quel momento in poi, indipendentemente da dove si trova. Dai un'occhiata allo Python docs on modules e come import, e in particolare all'importazione di un pacchetto, funziona per maggiori dettagli.

Modifica: Penso di vedere il problema ora, stavo solo prestando attenzione alla parte sbagliata della traccia dello stack. Abbastanza sicuro di cosa hai a che fare qui è una collisione di nome. Il file è denominato scapy.py, quindi quando si esegue il file import scapy dal contesto di quel file, si sta effettivamente importando il file stesso come modulo. Dal momento che il tuo file non ha un sottomodulo chiamato all (non può, dal momento che non è un pacchetto), ottieni l'errore di importazione che stai vedendo. Prova a cambiare il nome del tuo file in qualcosa che non sia in conflitto con pacchetti o moduli che desideri importare al suo interno, e vedere se funziona meglio.

A proposito, nota nelle tracce dello stack che la tua importazione in realtà è in pratica in modo ricorsivo chiamando il tuo unico file. Questo dovrebbe essere un indizio del fatto che qualcosa è andato in tilt nel processo di importazione.

+1

Questo non lo fa davvero aiutarmi, ancora ottenere qualcosa come 'Nessun modulo chiamato tutto' – Nicholas

+0

Modificato la mia risposta, penso che dovrebbe risolvere il tuo problema. –

+0

Beh, stiamo arrivando da qualche parte. Ma quando ho cambiato il nome mi sono lamentato di un "numero magico di cattivi". Ho cancellato scapy.pyc come in http://stackoverflow.com/questions/514371/whats-the-bad-magic-number-error. Ma come si fa a riprenderlo con il giusto numero magico? * EDIT, sembra funzionare ora! Ho messo python3 davanti all'esecuzione dello script ma non sembrava necessario, grazie! – Nicholas

0

L'ho visto quando avevo un scapy.py nella directory corrente. scapy.all import * sembra cercare prima nella directory corrente.

1

Abbastanza vecchio post. Per i più ancora alla ricerca, l'importazione corretta con le versioni attuali sarebbe:

from scapy.all import *

Problemi correlati