13

因此,我在 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 * 尝试时,没有“尝试”。

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

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

4

5 回答 5

8

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

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

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

于 2012-11-28T16:54:37.917 回答
2

我在 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并且一切正常,它与包位置无关,只是文件名。

于 2019-06-11T19:11:51.860 回答
2

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

In your case, your file name is scapy.py. After that you import scappy. In here you accidentally call your python file as object in your code there for your compiler can't understand which type(file or library) to call. There for that error was appeared.

于 2020-06-05T10:40:15.317 回答
1

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

于 2013-12-30T09:43:08.207 回答
1

当前版本的正确导入将是:

from scapy.all import *
于 2017-04-10T14:31:18.277 回答