您如何在 OSX 上捕获进程特定的环回接口网络流量?

how do you capture process-specific loopback interface network traffic on OSX?

我想在 OSX El Capitan 上监控两个进程 运行ning 之间的流量。服务器正在侦听 127.0.0.1,所以我相信我需要监视 lo0 环回接口。

我正在尝试使用 Apple 提供的 tcpdump 程序通过以下命令执行此操作,根据 https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/tcpdump.1.html:

sudo tcpdump -i pktap,lo0 -v ./DumpFile01.pcap

但这失败了:

tcpdump: data link type PKTAP
tcpdump: listening on pktap,lo0, link-type PKTAP (Packet Tap), capture size 262144 bytes
tcpdump: pktap_filter_packet: pcap_add_if_info(lo0, 0) failed: pcap_add_if_info: pcap_compile_nopcap() failed

这似乎是 Apple 版本的 tcpdump:

tcpdump --version
tcpdump version 4.7.3 -- Apple version 66
libpcap version 1.5.3 - Apple version 54

从上面的 tcpdump 手册页和 https://dreness.com/blog/archives/829 我想我应该能够 运行 以下内容来查看给定进程的数据包:

tcpdump -i pktap,lo0 -Q "proc =myserver"

有人成功过吗?我会尝试最新的 tcpdump,但我从手册页了解到“-Q”是 Apple 扩展。

sudo tcpdump -i pktap,lo0 -v ./DumpFile01.pcap

那个 tcpdump 命令说 "capture on lo0 with pktap, print text output in verbose mode, and use the string "./DumpFile01.pcap“作为捕获过滤器”。 -v表示"print in verbose mode";你是说 -w,意思是 "write in binary form to the file whose name comes after the -w flag"?

"./DumpFile01.pcap" 不是有效的捕获过滤器;不幸的是,Apple 的 libpcap 有问题(Apple 错误 21698116),而且,如果您使用 pktap 进行捕获,其关于无效捕获过滤器的错误消息不是非常有用 "pktap_filter_packet: pcap_add_if_info(lo0, 0) failed: pcap_add_if_info: pcap_compile_nopcap() failed"。 (我告诉他们如何在 bug 中修复它;希望他们会在 10.12 Big Sur 或任何它所谓的中修复它,即使他们没有时间在 10 中修复它。11.x。)

如果您想监控 lo0 上的流量,并让 tcpdump 打印其对终端流量的解释(而不是将其保存到二进制 pcap 文件中供以后由 tcpdump 或 Wireshark 或其他解释;tcpdump 和 Wireshark 都不能读取,作为捕获,来自 tcpdump 的打印输出),然后执行

sudo tcpdump -i pktap,lo0 -v

如果您想将打印的解释保存到文本文件中(同样,您不能将该文本文件作为捕获提供给 tcpdump 或 Wireshark),请执行

sudo tcpdump -i pktap,lo0 -v >PrintedCapture.txt

如果您想将 raw 数据包数据保存到 binary 捕获文件以便以后通过 tcpdump 或 Wireshark 或其他任何解释,请执行:

sudo tcpdump -i pktap,lo0 -w ./DumpFile01.pcap

(-w, 不是 -v).

而且,是的,-Q 是一个 Apple 扩展。 -k 是另一个 Apple 扩展,用于在使用 pktap 捕获时打印数据包元数据,例如进程名称。