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