Python3找不到libdnet - Scapy端口

时间:2015-06-25 20:10:50

标签: python macos python-3.x scapy

我正在尝试在我的项目中使用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

由于

2 个答案:

答案 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。

请在https://github.com/phaethon/scapy

上提出问题