tcpdump 可直接按 mac 地址过滤流量,实现链路层精准控制:用 ether src、ether dst 或 ether host 加单引号包裹小写十六进制 mac(如 'ether src 00:1a:2b:3c:4d:5e'),可单独使用或与 ip、端口、协议(如 arp)组合;需指定接口、避免大小写错误,并注意虚拟化环境中二层帧透传限制。

tcpdump 可以直接按 MAC 地址过滤流量,这是链路层层面的精准控制,适用于排查二层通信问题、定位 ARP 异常、识别未分配 IP 的设备或隔离特定物理设备的报文。
抓取指定源或目的 MAC 地址的流量
MAC 地址需用小写十六进制格式(如 00:1a:2b:3c:4d:5e),且必须加单引号包裹,避免 shell 解析冒号或特殊字符。常用写法:
- 抓来自某 MAC 的所有包:sudo tcpdump -i eth0 'ether src 00:1a:2b:3c:4d:5e'
- 抓发往某 MAC 的所有包:sudo tcpdump -i eth0 'ether dst 00:1a:2b:3c:4d:5e'
- 抓与某 MAC 的双向通信(源或目的):sudo tcpdump -i eth0 'ether host 00:1a:2b:3c:4d:5e'
组合 MAC 与其他条件(如 IP 或端口)
实际排障中常需叠加网络层或传输层条件,例如只看某台物理服务器发来的 HTTP 请求:
- 源 MAC 是 00:1a:2b:3c:4d:5e 且目标端口为 80:sudo tcpdump -i eth0 'ether src 00:1a:2b:3c:4d:5e and dst port 80'
- 目的 MAC 是 aa:bb:cc:dd:ee:ff 且协议为 ARP:sudo tcpdump -i eth0 'ether dst aa:bb:cc:dd:ee:ff and arp'
- 排除某个 MAC 的所有流量(比如屏蔽监控设备干扰):sudo tcpdump -i eth0 'not ether src 11:22:33:44:55:66'
注意事项和常见问题
MAC 过滤依赖网卡工作在混杂模式,tcpdump 默认启用;但若在虚拟化环境(如 VMware、KVM)或容器网络中,可能因虚拟交换机策略限制而无法捕获非本机 MAC 的包——此时需确认底层网络是否透传二层帧。
- 不要省略 ether 关键字,写成
src 00:1a:2b...会误匹配 IP 或端口字段 - MAC 地址中的字母统一用小写,部分系统对大小写敏感
- 在 any 接口上过滤 MAC 时,结果可能包含多个接口的包,建议明确指定物理接口(如 eth0、ens33)
- 保存到文件时,MAC 过滤同样生效于内核 BPF 层,生成的 pcap 体积更小、不含无关帧











