我正在尝试在我的项目中使用Python3 fork of Scapy,但是我无法使用它的所有依赖项运行它。我目前正在运行OSX Yosemite。特别是,似乎Python3找不到libdnet.so。我让Scapy在Python2中工作,所以libdnet存在于我的系统中 - 我如何让它在Python3中运行?是否支持Python3的libdnet版本?错误如下:
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from scapy.all import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
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 21, 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
由于
答案 0 :(得分:2)
我遇到了同样的问题。我用自制软件安装了libdnet和libpcap(例如,在/usr/local/lib
中),但ctypes永远无法使用find_library()
找到它们。这不是一个解决方案,而是一个让scapy导入的黑客。我在scapy安装中修改了以下两个文件,以指定库的完整路径:
find_library('dnet')
中的scapy/arch/cdnet.py
更改为find_library('/usr/local/lib/libdnet')
find_library('pcap')
中的scapy/arch/winpcapy.py
更改为find_library('/usr/local/lib/libpcap')
另一个侵入性较小的想法是将这两个库从/usr/local/lib
链接到/usr/lib
......
答案 1 :(得分:0)
这是生成异常的代码片段。
from ctypes import *
from ctypes.util import find_library
_lib_name = find_library('dnet')
if not _lib_name:
raise OSError("Cannot find libdnet.so")
_lib=CDLL(_lib_name)
显然,python ctypes在你的计算机上找不到dnet库。一旦你能得到ctypes找到dnet,它应该与scapy一起使用。
此外,dnet的使用不是强制性的。尝试scapy禁用dnet。您不需要它来解析数据包。根据系统的不同,对于一些有限的发送scapy也可以使用pcap。
上提出问题