所以,我在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
当你试着用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
我尝试了谷歌上的不同进口方式,但仍然没有成功。有人能告诉我我做错了什么吗?(别介意这篇文章的缩进)
当我在当前目录中有一个
scapy.py
时,我看到了这个。scapy.all import *
似乎先在当前目录中查找。从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
的子模块(它不能,因为它不是一个包),所以您将看到导入错误。尝试将文件名切换到与要导入其中的任何包或模块都不冲突的文件名,并查看效果是否更好。顺便说一下,在堆栈跟踪中注意,导入实际上是递归地调用一个文件。这应该是一个线索,说明在进口过程中出了问题。
相当老的职位。 对于仍在查找的版本,正确的当前版本导入将是:
from scapy.all import *
相关问题 更多 >
编程相关推荐