我无法使用命令捕获br0(Linux 桥接器)接口上的单播流量。但是,广播流量按预期被捕获。有趣的是,如果我打开另一个终端并运行以同时捕获 br0 接口上的流量,则可以捕获单播流量。tcpdump -nni any -vvv
tcpdump -nni br0 -vvv
tcpdump
我注意到版本4.9.3 (libpcap 版本 1.8.1)中存在此行为,其中tcpdump -nni any -vvv
命令不会捕获 br0 单播流量。但是,使用tcpdump
版本4.99.5(带有 TPACKET_V3 的 libpcap 版本 1.10.5)可以正常工作并捕获 br0 上的单播流量。
我知道 br0 获取流入 Linux 桥接设备的所有流量,另请参阅Linux 桥接器的解剖。
如果传入帧的目标 MAC 地址是多地址或广播地址,桥接设备设置为接收所有流量,或者地址与本地接口之一匹配,则还会通过调用 br_pass_frame_ up 函数在本地网络堆栈中向上传递帧的克隆。该函数更新桥接设备统计信息,并通过调用独立于设备的 netif_receive_skb 函数将传入的帧传递到网络堆栈
我怀疑我看到的可能与版本tcpdump
或其参数有关,但我无法确认这一点。你能帮忙解释一下这种行为的原因吗?
根据
man tcpdump
:实际上,使用“任何”(伪)接口并不等同于指定命名接口作为参数。
这是因为“任何”接口都不会捕获未被本地机器明确使用的流量,例如通过非目的地接口的流量。
因此,它可能会错过在特定命名接口上以混杂模式捕获的流量。