所以,我在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
当尝试它时,只是从屏幕上。所有的进口 * 没有'尝试'。
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
我尝试了不同的方式在谷歌上找到的进口,但它仍然不工作.有没有人能告诉我我做错了什么?(不要介意这篇文章的缩进)
5条答案
按热度按时间mefy6pfw1#
通过查看scrollersource,scrollerpackage似乎没有
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
的子模块(它不能,因为它不是一个包),你会看到导入错误。尝试将文件名切换为与您希望导入其中的任何包或模块不冲突的名称,看看是否效果更好。顺便说一下,在你的堆栈跟踪中注意到你的导入实际上是递归地调用你的一个文件。这应该是一个线索,在进口过程中出现了混乱。
d7v8vwbk2#
我喜欢在@丹尼尔的回答中补充一些东西。你的真实的问题不在于 Package 不美观。你的真实的问题在于你的python文件名。不要使用库名称或其内容作为文件名。
在本例中,文件名为
scapy.py
。在那之后,你import scapy
。在这里,你不小心在代码中调用了你的python文件作为对象,因为你的编译器无法理解调用哪种类型(文件或库)。在那里出现了这个错误。wj8zmpe13#
我在OSX上也遇到了类似的问题,我安装了scrum包
pip install scapy
,然后我试图执行我的测试文件scapy.py
我得到的错误是:在我的例子中,是文件名本身导致了问题,它不能被称为
scapy.py
。我把它改为test.py
,一切都正常,它与包的位置无关,只是文件名。ejk8hzay4#
当我在当前目录中有一个
scapy.py
时,我看到了这个。scapy.all import *
似乎首先在当前目录中查找。vwkv1x7d5#
当前版本的正确导入是: