Scapy.all import*不起作用

Nic*_*las 9 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,unanswered=sr(pakket)
answered.nsummary()
Run Code Online (Sandbox Code Playgroud)

我写了'尝试',因为这里有另一个主题(尝试它作为解决方案).我使用此代码的当前输出如下

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
Run Code Online (Sandbox Code Playgroud)

当尝试从scapy.all导入*没有'尝试'时.

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
Run Code Online (Sandbox Code Playgroud)

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

Sil*_*Ray 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(它不能,因为它不是包),因此您会看到导入错误。尝试将文件名切换为与您希望导入其中的任何包或模块不冲突的名称,看看是否效果更好。

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

  • 这并没有真正帮助我解决问题,仍然得到类似“无模块命名全部”之类的信息 (2认同)