多个接口上的 Tcpdump

多个接口上的 Tcpdump

我需要捕获 CentOS 5 服务器上的流量,该服务器充当具有 2 个 WAN 接口和 1 个 LAN 的 Web 代理。为了解决奇怪的代理问题,我想捕获完整的对话。由于外部连接在两个 WAN 接口之间是平衡的,我想知道是否可以同时在所有接口上进行捕获。

我以前用过 tcpdump,但它每次只允许一个接口。我可以启动 3 个并行进程来捕获所有接口,但最终会得到 3 个不同的捕获文件。

正确的做法是什么?

答案1

根据 tcpdump 手册页:

在内核为 2.2 或更高版本的 Linux 系统上,可以使用“any”接口参数来捕获来自所有接口的数据包。请注意,在混杂模式下不会对“any”设备进行捕获。

因此您应该能够运行:tcpdump -i any以便同时将所有接口上的数据捕获到单个捕获文件中。

答案2

我解决这个问题的方法是将每个接口转储到单独的文件中,然后合并它们。任何接口还包括可能污染捕获的低流量。

这也允许分析每个接口的数据包流,而无需复杂的过滤。

我会在 3 个终端中捕获,或者使用 & 在后台执行命令

标志 -nn 关闭 dns 解析以提高速度,-s 0 保存完整的数据包,-w 写入文件。

tcpdump -i wan0 -nn -s 0 -w wan0.dump
tcpdump -i wan1 -nn -s 0 -w wan1.dump
tcpdump -i lan0 -nn -s 0 -w lan0.dump

然后我将使用 wireshark 的 mergecap 命令合并文件:

mergecap -w merged.dump wan0.dump wan1.dump lan0.dump

答案3

要捕获所有接口上的 tcpdump,请使用

tcpdump -i any

答案4

正如其他人指出的那样,tcpdump -i any它允许您监听所有接口。但它仍然无法监听多个特定接口。在我的情形下,我想监听除特别嘈杂的接口之外的所有接口。我发现tshark(Wireshark 的 CLI)是解决此问题的最佳解决方案:

$ tshark -l -i en0 -i llw0 -i awdl0 

如果您有很多经常更改的接口,那么列出所有接口会很麻烦。使用一些 shell 脚本,我们可以获取所有tshark能够监听的接口,使用dumpcamp -D,排除我们不想要的接口,然后将它们全部传递给tshark

例如,要监听除 之外的所有接口en0lo0您可以这样做:

$ tshark -l $(for i in $(dumpcap -D | tr -s '[:blank:]' | cut -d ' ' -f 2 | grep -E -v 'lo0|en0' ) ; do echo "-i $i"; done)

Capturing on 21 interfaces
...

干杯

相关内容