Scapy.весь импорт * не работает

Итак, я написал небольшой скрипт в Ubuntu для scapy.

#!/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()

Я написал "попробовать" из-за другой темы здесь (попробовал это как решение). Мой текущий результат с этим кодом следующий

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

при попытке просто с scapy.весь импорт * без "try".

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

Я пробовал разные способы импорта, найденные в Google, но он все еще не работает. Кто-нибудь может сказать мне, что я делаю не так? (не возражайте против отступа этот пост)

3 ответов


глядя на источник scapy, пакет scapy не кажется import что-нибудь или определить __all__ на __init__. В результате вам нужно явно import scapy.all (или from scapy import all) до from scapy.all import что-нибудь еще из него, так как его не будет в sys.modules еще. Обратите внимание, что это должно произойти только один раз в потоке программы, хотя, как и после импорта интерпретатора модуля, он будет доступен для всего кода, который выполняется с этого момента, независимо от того, где он находится. Взгляните на документы Python на модулях и как import и, в частности, импорт пакета, работает для получения более подробной информации.

изменить: Думаю, теперь я вижу проблему,я просто обратил внимание на неправильную часть вашего стека. Уверен, что вы имеете дело с столкновением имен. Ваш файл называется scapy.py, поэтому, когда вы import scapy из контекста этого файла вы фактически импортируете сам файл в качестве модуля. Поскольку в вашем файле нет подмодуля с именем all (это не может, так как это не пакет), вы получаете ошибку импорта, которую видите. Попробуйте переключить имя файла на то, что не конфликтует с любыми пакетами или модулями, которые вы хотите импортировать внутри него, и посмотрите, работает ли это лучше.

Кстати, обратите внимание, что в вашем стеке трассируется, что ваш импорт фактически рекурсивно вызывает ваш один файл. Это должно быть подсказкой, что что-то пошло не так в процессе импорта.


довольно старый пост. Для тех, кто все еще ищет, правильный импорт с текущими версиями будет:

from scapy.all import *


Я видел это, когда у меня было scapy.py в текущем каталоге. scapy.all import * Кажется, сначала посмотрите в текущем каталоге.