scapy 函数 sniff() 中的过滤器表示 libpcap 不可用

问题描述 投票:0回答:3

我正在使用 Scapy sniff 函数,我想在参数中添加一个过滤器。所以我添加了这个过滤器:

pkt = sniff(count=1, filter='arp')

我收到的输出是:

WARNING: Cannot set filter: libpcap is not available. Cannot compile filter !

我仍然收到一个被嗅探的数据包,但由于某种原因过滤器无法工作。

我正在运行 Mac OS Big Sur。我使用 Homebrew 安装了 libpcap,并使用 Homebrew 安装了 tcpdump。

我还在网上看到你可以使用

在Scapy上手动初始化pcap
conf.use_pcap = True

但是,当我输入此内容时,我得到:

WARNING: No libpcap provider available ! pcap won't be used

我确信这只是一个小修复,但我似乎无法弄清楚我做错了什么。如果有人能提供帮助那就太棒了!

python filtering scapy sniffing
3个回答
0
投票

旧版本的 Python 3 假设在 macOS 上,所有共享库都位于位于多个目录之一的文件中。

大苏尔的情况不是;相反,系统共享库会生成一个缓存文件,并且至少有一些生成缓存文件的库随操作系统一起提供。

这是CPython问题41100中的问题之一,“支持macOS 11和Apple Silicon Mac”;修复方法是查看共享库缓存以及文件系统。

该问题说

感谢所有为这项重大事业做出贡献的人! 特别感谢劳伦斯所做的大部分初始工作并铺平了道路。现在,从即将发布的 3.8.10 版本开始,3.8 也支持 Big Sur 和 Apple Silicon Mac,是时候解决这个问题了。如果出现新问题,请打开或使用其他问题。

因此足够新的 Python 版本应该可以解决这个问题。


0
投票

tldr:

$ brew install libpcap
$ ln -s /usr/local/opt/libpcap/lib/libpcap.a /usr/local/lib/libpcap.a
$ ln -s /usr/local/opt/libpcap/lib/libpcap.dylib /usr/local/lib/libpcap.dylib

说明(适用于Python 3.9.1、Scapy 2.4.5 @ Big Sur 和brew 安装的libpcap):

当你调试 Scapy

sniff
函数时,过了一会儿你会看到 scapy.libs.winpcapy,第 36 行:

_lib_name = find_library("pcap")

find_library
位于 ctypes.util 中,对于 POSIX,它从第 72 行开始。在第 73 行,您可以看到该库预计为这些文件名之一
['libpcap.dylib', 'pcap.dylib', 'pcap.framework/pcap']
,被馈送到 dyld_find

dyld_find
位于第 121 行的 ctypes.macholib.dyld 中。如果您自己遍历第 125 行上的链,您会发现 dyld_find 正在尝试通过以下路径之一取得成功:

/usr/local/lib/
/Users/<user>/lib/
/usr/local/lib/
/lib/
/usr/lib/

在我的例子中,它们都不包含 libpcap 库,它由brew 安装在不同的位置。 图书馆位于

/usr/local/opt/libpcap/lib/
。 在这里,您只需将文件
libpcap.dylib
libpcap.a
也没有问题)放入 dyld_find 搜索的路径之一。上面的两个软链接是更多可能的解决方案之一。


0
投票

Scapy 使用

ctypes
与共享库进行通信,更具体地说,它使用
find_library()
函数(查找共享库)。该警告可能是由于
ctypes.util.find_library()
无法找到
libpcap.dylib
(或 Linux 中的
libpcap.so
)。为了确认,以下应返回
None
而不是库名称:

>>> from ctypes.util import find_library
>>> find_library("pcap")

在 MacOS 上,这是因为您的库不在默认路径中(请参阅https://docs.python.org/3/library/ctypes.html

© www.soinside.com 2019 - 2024. All rights reserved.