Linux中tcpdump抓指定MAC地址报文需用ether src/dst/host过滤器,MAC必须小写十六进制、单引号包裹、无空格;常用命令如'sudo tcpdump -i eth0 'ether src 00:1a:2b:3c:4d:5e'',可组合IP、端口、协议及参数-e、-w、-c提升实用性。

Linux 中用 tcpdump 抓指定 MAC 地址的报文,核心是使用 ether src、ether dst 或 ether host 过滤器,配合正确的格式和接口指定即可实现链路层精准捕获。
必须注意的格式细节
MAC 地址必须满足三个条件:小写十六进制(如 00:1a:2b:3c:4d:5e)、用单引号包裹、不能有空格或大小写混用。Shell 会把冒号当作分隔符,不加引号会导致命令解析失败。
- ✅ 正确写法:
sudo tcpdump -i eth0 'ether src 00:1a:2b:3c:4d:5e' - ❌ 错误写法:
tcpdump -i eth0 ether src 00:1A:2B:3C:4D:5E(大写 + 无引号) - ❌ 错误写法:
tcpdump -i eth0 "ether src 00:1a:2b:3c:4d:5e"(双引号在部分 shell 下可能失效)
常用抓取场景及命令
根据通信方向选择对应关键字:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 只抓来自某设备的流量:
sudo tcpdump -i eth0 'ether src aa:bb:cc:dd:ee:ff' - 只抓发往某设备的流量:
sudo tcpdump -i eth0 'ether dst 11:22:33:44:55:66' - 抓与某设备的双向通信(源或目的任一匹配):
sudo tcpdump -i eth0 'ether host 00:1a:2b:3c:4d:5e' - 排除某个 MAC 的所有流量(例如屏蔽管理设备干扰):
sudo tcpdump -i eth0 'not ether src 99:88:77:66:55:44'
结合网络层条件进一步缩小范围
纯 MAC 过滤适合定位二层问题;实际排障中常需叠加 IP、端口或协议,提升有效性:
- 某物理服务器(MAC 已知)发起的 HTTP 请求:
sudo tcpdump -i eth0 'ether src 00:1a:2b:3c:4d:5e and dst port 80' - 目标 MAC 是路由器且协议为 ARP(排查地址解析异常):
sudo tcpdump -i eth0 'ether dst c0:bf:c2:e2:93:fd and arp' - 源 MAC 是监控探针、且目的 IP 属于内网段:
sudo tcpdump -i eth0 'ether src 02:00:00:00:00:01 and net 192.168.10.0/24'
辅助技巧提升实用性
加上特定参数能让结果更清晰、更易分析:
- 显示 MAC 地址(默认不显示链路层头):
-e,例如:sudo tcpdump -i eth0 -e 'ether host 00:1a:2b:3c:4d:5e' - 保存到文件供 Wireshark 分析:
-w capture.pcap,例如:sudo tcpdump -i eth0 -w mac_log.pcap 'ether host 00:1a:2b:3c:4d:5e' - 限制抓包数量避免持续运行:
-c 100,例如:sudo tcpdump -i eth0 -c 100 'ether src 00:1a:2b:3c:4d:5e'

















