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

更改macOS上的libpcap版本(苹果删除了一项功能),macos,ubuntu,tcpdump,libpcap,Macos,Ubuntu,Tcpdump,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/loc

我只想使用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)

我需要以某种方式构建libpcap-1.9.0并将其链接到tcpdump4.9.3,这样当我使用tcpdump时,它将使用libpcap 1.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

更准确地说,这是“苹果从未实现过一项功能”

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

FreeBSD和NetBSD的BPFs增加了一项功能,允许程序将其配置为仅捕获传入数据包、仅捕获传出数据包或同时捕获传入和传出数据包;OpenBSD有一个类似的特性(在细节上有一些不同,所以我需要返回并向tcpdump.org libpcap添加对该特性的支持)

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


(哦,苹果的tcpdump出于自己的目的使用了-Q,因此他们不得不做一些修改,以允许将其用于方向和元数据过滤。幸运的是,tcpdump还支持--direction=,所以苹果至少可以在BPF中实现方向功能的情况下使用它。)

这个问题更适合这个问题。重申您之前提出的问题:向tcpdump提交一个bug是值得的,尤其是为了澄清BPF不支持PCAP\u D\u OUT的问题。
tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1 -- Apple version 79.250.1