繁体   English   中英

Scapy.all 导入 * 不起作用

[英]Scapy.all import * does not work

所以,我在 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

仅使用 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

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

从查看 scapy 源代码来看,scapy 包似乎没有import任何内容或在__init__中定义__all__ 因此,您需要显式import scapy.all (或from scapy import all ),然后才能from scapy.all import任何其他内容,因为它还不在sys.modules 请注意,这只需要在您的程序流程中发生一次,因为在解释器导入该模块后,它将可用于从那时起执行的所有代码,无论它在哪里。 查看有关模块的 Python 文档以及import ,特别是导入包的工作方式,了解更多详细信息。

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

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

我在 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

在我的例子中,是文件名本身导致了它不能被称为scapy.py的问题。 我将其更改为test.py并且一切正常,它与包位置无关,只是文件名。

我想在@Daniel 的回答中添加一些内容。 你真正的问题不是 scapy 包。 您真正的问题在于您的 python 文件名。 永远不要使用库名称或其内容作为文件名。

在您的情况下,您的文件名为scapy.py 之后你导入scappy。 在这里,您不小心将 python 文件称为代码中的对象,因为您的编译器无法理解要调用的类型(文件或库)。 那里出现了那个错误。

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

当前版本的正确导入是:

from scapy.all import *

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM