更改macOS上的libpcap版本(苹果删除了一项功能)



我只想使用tcpdump,它具有与Ubuntu相同的-Qout功能。

在macOS上,tcpdump和libpcap被剥夺了使用-Qout进行过滤的功能。

tcpdump -Qout -nnSX -c 10 -w packet.pcap port XXXX
tcpdump: cannot parse term at: 
tcpdump: invalid expression "out"

我已经构建了tcpdump(./configure,make,make install(和PATH=/usr/local/sbin:$PATH。当我用检查时

tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1 -- Apple version 79.250.1

现在,如果我尝试相同的转储,我会得到另一条消息:

tcpdump --direction=out -nnSX -c 10 -w packet.pcap port XXXX
tcpdump: en0: pcap_setdirection() failed: Setting direction to PCAP_D_OUT is not supported on BPF

我还下载了libpcap-1.9.0的源代码,并尝试以相同的方式构建它(./configure,make,make-install(。

clang: error: linker command failed with exit code 1 (use -v to see     
invocation)
make: *** [libpcap.dylib] Error 1

我需要以某种方式构建libpcap-1.9.0并将其链接到tcpdump 4.9.3,所以当我使用tcpdump时,它将使用libpcap1.9.0。

编辑:我已经安装了带有brew的libpcap 1.9.1,并导出了带有的路径

echo 'export PATH="/usr/local/opt/libpcap/bin:$PATH"' >> ~/.bash_profile

但它仍然向我展示了它与系统默认1.8.1 的链接

tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1 -- Apple version 79.250.1

这被更准确地描述为"Apple从未实现功能"。

macOS上的底层捕获机制被称为"BPF",即"Berkeley数据包过滤器";它最初是由劳伦斯伯克利实验室的一个人开发的,他创建了libpcap和tcpdump(Van Jacobson(。它由各种BSD风格的操作系统提供,包括FreeBSD、NetBSD、OpenBSD以及DragonFly BSD和macOS。

FreeBSD和NetBSD的BPF添加了一个功能,让程序将其配置为只捕获传入数据包、只捕获传出数据包或同时捕获传入和传出数据包;OpenBSD也有类似的功能(在细节上有一些不同,所以我需要回到tcpdump.org libpcap中添加对它的支持(。

然而,macOS从未实现过这一功能。(这基本上就是"PCAP_D_OUT在BPF上不受支持",尽管该错误消息可能应该更改为不使用libpcap API中的名称,因为用户可能不知道"PCAP_D_OUT"是什么。(

(哦,苹果的tcpdump使用-Q是为了自己的目的,所以他们必须进行一些破解,才能将其用于direction元数据过滤。幸运的是,tcpdump还支持--direction=,所以如果苹果在BPF中实现direction功能,他们至少可以使用它。(

似乎只是标志--direction没有按预期工作,这个命令在macOSX上按预期工作。。。

tcpdump -Qdir=out -nnSX -c 10 -w packet.pcap port XXXX

您可以在PACKET MEDATDATA FILTER下的tcpdump手册页中看到此信息

语法支持以下关键字来表示哪个数据包要比较的元数据内容:

if     interface name
proc   process name
pid    process ID
svc    service class
dir    direction
eproc  effective process name
epid   effective process ID

相关内容

最新更新