python - Scapy.all 导入 * 不起作用

标签 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()

我在这里写了“尝试”是因为另一个主题(尝试将其作为解决方案)。 我当前使用此代码的输出如下

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 docs on modules以及 import,特别是导入包,如何工作以获得更多细节。

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

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

关于python - Scapy.all 导入 * 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13610064/

相关文章:

ec2 上的 Python uwsgi 设置

python - DNSQR 是什么?

Python如何在处理完类对象后释放内存?

python - Pandas - 你可以在跳过行的同时有条件地回填另一列吗?

ubuntu - pbuilder 没有正确构建

c - 这是关于 LINUX 中的共享内存

python - scapy sr 函数不返回答案

scapy - 使用 Scapy 解码基于 UDP 的 RTP

python: bool 数组到多边形

python - 如何使用 python 3.6 venv 创建 virtualenv