我想记录 Mac OS X 服务器上的所有网络流量(如 tcpdump 所做的那样),但包括负责的进程的 ID。使用 lsof 只会提供当前连接,而不是过去的连接。
有没有办法做到这一点?
问候,Jochen
答案1
虽然 非常nettop
适合查看当前连接的快照,但您也可以使用 来tcpdump
收集数据和处理信息。tcpdump
使用 选项-k
显示捕获流量的元数据。
-k Control the display of packet metadata via an optional metadata_arg argument. This is useful when displaying packet saved
in the pcap-ng file format or with interfaces that support the PKTAP data link type.
By default, when the metadata_arg optional argument is not specified, any available packet metadata information is
printed out.
The metadata_arg argument controls the display of specific packet metadata information using a flag word, where each
character corresponds to a type of packet metadata as follows:
I interface name (or interface ID)
N process name
P process ID
S service class
D direction
C comment
This is an Apple modification.
例如显示进程 ID 和进程名称,您可以这样做:
tcpdump -k NP
答案2
我最近也遇到了这个问题。你可以采取的一种方法是同时使用 tcpdump 和上网本并行(每个都在自己的终端 shell 中并排运行),并直观地观察网络流量的表现。
例如,我的防火墙最近检测到了来自 Mac 以太网的可疑网络流量,这些流量来自我不认识的私有子网和一个看起来不寻常的端口 (TCP 7000)。在一个终端 shell 中,我运行了:
$ sudo tcpdump port 7000
在另一个终端 shell 中我运行:
$ sudo nettop -m tcp
当网络流量通过 tcpdump 显示时,它几乎立即也被添加到 nettop 输出中,这表明它是 Apple 的 AirPlay 辅助守护程序,在此示例中以进程 ID(PID)87 运行:
AirPlayXPCHelpe.87
当您尝试捕获网络上的某些异常情况时,这可能不一定实用,但作为起点,可能值得尝试,而不是编写可能更复杂的 DTrace 脚本。
答案3
答案4
刚才我第一次走这条路。我发现 DTrace 虽然功能强大,但由于 SIP 系统,现在很难使用。我安装了 Little Snitch 以用于常规防火墙,但我也想开始记录数据。
这里没有人提到 nettop 具有将输出为 CSV 的日志记录模式,而这正是我最终想要的。这似乎与 tcpdump -k NP 方法相当。但是,它不需要我“sudo”该命令。
我想我应该留下这张额外的纸条,希望它对任何人都有用。