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 *
Кажется, сначала посмотрите в текущем каталоге.