Python Scapy.all import*不起作用

Python Scapy.all import*不起作用,python,ubuntu,scapy,Python,Ubuntu,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,

所以,我用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()
我之所以写“try”是因为这里有另一个主题(尝试将其作为解决方案)。 我的当前输出与此代码如下

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.py”,第5行,在
进口服装
文件“/home/nicholas/scapy.py”,第9行,在
i=IP()
NameError:未定义名称“IP”
尝试时仅使用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
回溯(最近一次呼叫最后一次):
文件“/scapy.py”,第3行,在
从斯卡皮来的,都是进口货*
文件“/home/nicholas/scapy.py”,第3行,在
从斯卡皮来的,都是进口货*
ImportError:没有名为all的模块

我尝试了在谷歌上找到的不同的导入方式,但仍然不起作用。谁能告诉我我做错了什么?(不要介意这篇文章的缩进)

从scapy源代码看,scapy包似乎没有在
\uuuu init\uuu
中导入任何东西或定义
\uuuu all\uuuuu
。因此,您需要显式地
导入scapy.all
(或
从scapy导入all
),然后才能从scapy.all导入
任何其他内容,因为它还不在
系统模块中。请注意,这只需在程序流中发生一次,因为在解释器导入模块后,从那时起执行的所有代码都可以使用该模块,而不管它在哪里。有关更多详细信息,请查看以及导入(尤其是导入软件包)的工作原理

编辑: 我想我现在看到问题了,我只是注意到堆栈跟踪的错误部分。很确定你要处理的是名字冲突。您的文件名为
scapy.py
,因此当您从该文件的上下文导入scapy
时,实际上是将文件本身作为模块导入。由于您的文件没有名为
all
的子模块(它不能,因为它不是包),因此您会看到导入错误。尝试将文件名切换为与您希望在其中导入的任何包或模块不冲突的名称,然后看看效果是否更好


顺便说一句,请注意,在堆栈跟踪中,您的导入实际上是递归地调用一个文件。这应该是导入过程中出现问题的线索。

我在当前目录中有一个
scapy.py
时看到了这一点
scapy.all import*
似乎首先查看当前目录。

相当老的帖子。 对于仍在查看的版本,当前版本的正确导入方式为:


来自scapy.all import*

我在OSX上遇到类似问题,我安装了scapy软件包
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
python scapy.py
回溯(最近一次呼叫最后一次):
文件“scapy.py”,第1行,在
从斯卡皮来的,都是进口货*
文件“/Users/**/Desktop/scapy test/scapy.py”,第1行,在
从斯卡皮来的,都是进口货*
ModuleNotFoundError:没有名为“scapy.all”的模块;'“scapy”不是一个包

在我的例子中,是文件名本身导致了无法调用
scapy.py
的问题。我将其更改为
test.py
,所有操作都正常,它与包位置无关,只与文件名有关

我想给@Daniel answer添加一些东西。你真正的问题不在于包装。真正的问题在于python文件名永远不要使用库名或其内容作为文件名。


在您的情况下,您的文件名是
scapy.py
。然后导入scappy。在这里,您意外地在代码中将python文件作为对象调用,因为编译器无法理解要调用的类型(文件或库)。出现该错误的原因是。

请修复缩进,它们确实很重要。请尝试从scapy执行类似操作。所有导入IP、TCP、sr,如果您没有使用任何其他内容(没有尝试除外),我在尝试时仍然得到“没有模块名为all”的结果,这并没有真正帮助我,仍然得到类似“没有模块名为all”的结果编辑了我的答案,我想这应该能解决你的问题。我们正在取得进展。但当我改变名字时,它却在抱怨一个“糟糕的魔法数字”。我在中删除了scapy.pyc。但是你如何用正确的魔法数字把它弄回来呢*编辑,似乎现在工作!我把python3放在脚本执行的前面,但这似乎没有必要,谢谢!说真的,谢谢。我永远也不会想到问题是将我的测试文件命名为scapy,而scapy 2.4.3和Python 3.7仍然在import*旁边,我只需要导入,例如从scapy.layers.inet导入IP、UDP、in4chksum