所以,我在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()
我写了'try',因为这里有另一个话题(尝试它作为解决方案)。 我使用此代码的当前输出如下
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
我在Google上尝试了不同的导入方式,但它仍然不起作用。谁能告诉我我做错了什么? (不要介意这篇文章的缩进)
答案 0 :(得分:3)
从scapy来源看,scapy包看起来不是import
任何东西,或者在__all__
中定义__init__
。因此,您需要明确import scapy.all
(或from scapy import all
)才能from scapy.all import
之前的任何内容,因为它不会在sys.modules
中。请注意,这只需要在程序流程中执行一次,因为在解释器导入模块之后,它将可用于从那时起执行的所有代码,无论它在何处。查看Python docs on modules以及如何import
,以及具体导入包,可以了解更多详情。
编辑:
我想我现在看到了问题,我只是关注堆栈跟踪的错误部分。很确定你在这里处理的是一个名字冲突。您的文件名为scapy.py
,因此当您从该文件的上下文import scapy
时,您实际上将文件本身作为模块导入。由于您的文件没有名为all
的子模块(它不能,因为它不是包),您会看到您看到的导入错误。尝试将文件名切换为与要在其中导入的任何软件包或模块不冲突的文件,并查看是否更好。
顺便说一下,在堆栈跟踪中注意,导入实际上是以递归方式调用一个文件。这应该是导致进口过程中出现问题的线索。
答案 1 :(得分:2)
相当老的帖子。 对于那些仍在寻找的人,使用当前版本的正确导入将是:
function onEdit(e){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var i = 3;
while(i <= sheet.getLastRow())
{
var data = sheet.getRange(i, 9, 3, 2).getValues();
if(data[1][0].length == 0)
{
if(data[0][0] != "")
{
var d = new Date();
sheet.getRange(i+1, 9).setValue(d);
}
}
if(data[1][1].length == 0)
{
if(data[0][1] != "")
{
var d = new Date()
sheet.getRange(i+1, 10).setValue(d);
}
}
i=i+3;
}
}
答案 2 :(得分:2)
我喜欢在@Daniel答案中添加一些内容。你真正的问题不是scapy包。您真正的问题在于您的python文件名。 永远不要使用库名或其内容作为文件名。
对于您来说,您的文件名为scapy.py
。之后,导入scappy。在这里,您不小心将python文件作为代码中的对象调用,因为编译器无法理解要调用的类型(文件或库)。出现了该错误。
答案 3 :(得分:0)
当我在当前目录中有scapy.py
时,我看到了这一点。 scapy.all import *
似乎首先查看当前目录。
答案 4 :(得分:0)
我在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
,并且一切正常,这与文件名仅与包位置无关。