所以,我用Ubuntu写了一个小脚本。
#!/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
仅使用from scapy.all import *而不使用“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
我尝试了在谷歌上找到的不同的导入方式,但仍然不起作用。有人能告诉我我哪里做错了吗?(不要介意这篇文章的缩进)
发布于 2012-11-29 00:54:38
从scapy源代码来看,scapy包似乎没有import
任何东西,也没有在__init__
中定义__all__
。因此,您需要显式地import scapy.all
(或from scapy import all
),然后才能从它from scapy.all import
任何其他东西,因为它还不会在sys.modules
中。请注意,这只需要在您的程序流中发生一次,因为在解释器导入模块之后,它将可用于从那时起执行的所有代码,而不管它在哪里。查看Python docs on modules和import
是如何工作的,特别是导入一个包,以获得更多细节。
编辑:我想我现在看到问题了,我只是注意到了堆栈跟踪的错误部分。我很确定你在这里处理的是一个名称冲突。您的文件名为scapy.py
,因此当您从该文件的上下文执行import scapy
时,实际上是将文件本身作为一个模块导入。因为您的文件没有名为all
的子模块(它不能,因为它不是一个包),所以您会得到您看到的导入错误。尝试将您的文件名更改为不与您希望在其中导入的任何包或模块冲突的名称,看看效果是否更好。
顺便说一下,在堆栈跟踪中请注意,您的导入实际上是递归地调用您的一个文件。这应该是一个线索,表明在导入过程中出现了混乱。
发布于 2019-06-12 03:11:52
我在OSX上遇到了类似的问题,我安装了pip install scapy
包,然后尝试执行我的测试文件scapy.py
,我得到的错误是:
python scapy.py
Traceback (most recent call last):
File "scapy.py", line 1, in <module>
from scapy.all import *
File "/Users/**/Desktop/scapy-test/scapy.py", line 1, in <module>
from scapy.all import *
ModuleNotFoundError: No module named 'scapy.all'; 'scapy' is not a package
在我的例子中,是文件名本身导致了它不能被称为scapy.py
的问题。我将其更改为test.py
,一切都正常了,它与包的位置无关,只与文件名有关。
发布于 2013-12-30 17:43:08
当我在当前目录中有一个scapy.py
时,我看到了这一点。scapy.all import *
似乎首先在当前目录中查找。
https://stackoverflow.com/questions/13610064
复制相似问题