Python3 - 在操作系统

时间:2015-08-10 02:02:00

标签: python-3.x importerror scapy

我安装了网络模块 Scapy 。 当我导入scapy(import scapy)时,一切正常。当我从scapy(from scapy.all import *)导入所有内容时,会出现此错误:

Traceback (most recent call last):
File "/Users/***/Downloads/test.py", line 5, in <module>
from scapy.all import *
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scapy/all.py", line 16, in <module>
from .arch import *
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scapy/arch/__init__.py", line 75, in <module>
from .bsd import *
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scapy/arch/bsd.py", line 12, in <module>
from .unix import *
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scapy/arch/unix.py", line 22, in <module>
from .pcapdnet import *
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scapy/arch/pcapdnet.py", line 22, in <module>
from .cdnet import *
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/scapy/arch/cdnet.py", line 17, in <module>
raise OSError("Cannot find libdnet.so")
OSError: Cannot find libdnet.so

我在另一篇文章中发现,为了让scapy完全正常工作,我们可能需要下载额外的模块。应该做些什么? 我尝试使用(端口**安装),因为端口不再受支持而无法正常工作?如果您有任何想法如何使它在python3中工作,我将是活跃的。这里有更多的额外信息:

python 3.4.3
mac os 10.10.4
scapy-python3==0.14

编辑:另一个有趣的事情是:

在Linux以外的所有操作系统上都应该安装libpcap来发送和接收数据包(不是python模块 - 只是C库)。建议使用libdnet发送数据包,libdcap不会发送libdnet数据包,这是有限的。此外,netifaces模块可用于确定本地地址的替代和可能更清晰的方式。 资料来源:https://pypi.python.org/pypi/scapy-python3/0.11

Dnet似乎只适用于版本2.7:https://pypi.python.org/pypi/dnet/1.12

2 个答案:

答案 0 :(得分:2)

现在可以使用以下命令轻松安装}

brew install libdnet

在您安装了Homebrew之后。

答案 1 :(得分:0)

最新修改:此问题已在最新版本的scapy上修复,只需使用pip install scapy>=2.4.0更新您的scapy版本

您必须安装libdnet。不是python库(如你所提到的那样在python3上不起作用),而是库本身。在您的系统中某处有库文件libdnet.so,其中python搜索库。下载libdnet源代码并进行编译应该可以正常工作:

wget http://libdnet.googlecode.com/files/libdnet-1.12.tgz
tar xfz libdnet-1.12.tgz
cd libdnet-1.12
./configure
make

此外,有可能使用libpcap发送数据包而不使用libdnet,但我建议先尝试使libdnet工作。