在 macOS 上更改 libpcap 版本(Apple 删除了一个功能)
Change libpcap Version on macOS (Apple removed a feature)
我只想将 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
我需要以某种方式构建和 link 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
但它仍然向我显示它 link 已更改为系统默认值 1.8.1
tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1 -- Apple version 79.250.1
这更准确地描述为 "Apple never implemented a feature"。
macOS 上的底层捕获机制称为 "BPF",用于 "Berkeley Packet Filter";它最初是由劳伦斯伯克利实验室的一位创建 libpcap 和 tcpdump 的人 (Van Jacobson) 开发的。它由各种 BSD 风格的操作系统提供,包括 FreeBSD、NetBSD、OpenBSD 和 DragonFly BSD - 以及 macOS。
FreeBSD 和 NetBSD 的 BPF 添加了一项功能,允许程序将其配置为仅捕获传入数据包、仅捕获传出数据包或同时捕获传入和传出数据包; OpenBSD 具有类似的功能(在细节上有一些差异,因此我需要返回并在 tcpdump.org libpcap 中添加对此的支持)。
然而,macOS 从未实现该功能。 (这基本上就是 "PCAP_D_OUT is not supported on BPF",尽管该错误消息可能应该更改为不使用 libpcap API 中的名称的内容,因为用户可能不知道 "PCAP_D_OUT" 是什么。)
(哦,Apple 的 tcpdump 将 -Q 用于其自身目的,因此他们必须做一些修改以允许它用于方向 和 元数据过滤. 幸运的是,tcpdump 还支持 --direction=,因此如果 Apple 在 BPF 中实现方向功能,至少可以使用它。)
我只想将 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
我需要以某种方式构建和 link 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
但它仍然向我显示它 link 已更改为系统默认值 1.8.1
tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1 -- Apple version 79.250.1
这更准确地描述为 "Apple never implemented a feature"。
macOS 上的底层捕获机制称为 "BPF",用于 "Berkeley Packet Filter";它最初是由劳伦斯伯克利实验室的一位创建 libpcap 和 tcpdump 的人 (Van Jacobson) 开发的。它由各种 BSD 风格的操作系统提供,包括 FreeBSD、NetBSD、OpenBSD 和 DragonFly BSD - 以及 macOS。
FreeBSD 和 NetBSD 的 BPF 添加了一项功能,允许程序将其配置为仅捕获传入数据包、仅捕获传出数据包或同时捕获传入和传出数据包; OpenBSD 具有类似的功能(在细节上有一些差异,因此我需要返回并在 tcpdump.org libpcap 中添加对此的支持)。
然而,macOS 从未实现该功能。 (这基本上就是 "PCAP_D_OUT is not supported on BPF",尽管该错误消息可能应该更改为不使用 libpcap API 中的名称的内容,因为用户可能不知道 "PCAP_D_OUT" 是什么。)
(哦,Apple 的 tcpdump 将 -Q 用于其自身目的,因此他们必须做一些修改以允许它用于方向 和 元数据过滤. 幸运的是,tcpdump 还支持 --direction=,因此如果 Apple 在 BPF 中实现方向功能,至少可以使用它。)