我只想将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时它将使用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
更准确地描述为“ Apple 从未实现功能”。
对于“ Berkeley Packet Filter”,macOS上的基本捕获机制称为“ BPF”;它最初是由创建libpcap和tcpdump(范·雅各布森)的劳伦斯·伯克利实验室的一个人开发的。它由各种BSD风格的OS提供,包括FreeBSD,NetBSD,OpenBSD和DragonFly BSD-以及macOS。
FreeBSD和NetBSD的BPF添加了一项功能,使程序可以将其配置为仅捕获传入数据包,仅捕获传出数据包,或者捕获传入和传出数据包; OpenBSD具有类似的功能(细节有所不同,因此我需要回过头来将其支持添加到tcpdump.org libpcap中。)
但是,macOS从未实现该功能。 (实际上,这就是“ BPF不支持PCAP_D_OUT”的含义,尽管该错误消息可能应该更改为不使用libpcap API中名称的名称,因为用户可能不知道“ PCAP_D_OUT”是什么。)]
(哦,Apple的tcpdump出于自身目的使用-Q,因此他们必须做一些破解才能将其用于方向和
进行元数据过滤。幸运的是,tcpdump还支持--direction =,因此,如果Apple在BPF中实现了方向功能,则至少可以使用它。)