直接用 vlan X 过滤即可,这是 tcpdump 内置的 BPF 关键字,专为识别 802.1Q 标签设计,无需额外解析或配置 VLAN 子接口;基础命令为 tcpdump -i eth0 vlan 100,支持加 -e -v 显示标签细节,常见抓不到原因包括交换机 Access 模式、Linux bridge 剥离标签、硬件卸载及非标 TPID,建议用 -w 保存完整帧供 Wireshark 分析。

直接用 vlan X 过滤即可,这是 tcpdump 内置的 BPF 关键字,专为识别 802.1Q 标签设计,无需额外解析或配置 VLAN 子接口。
基础命令:抓指定 VLAN 的所有流量
要捕获 VLAN ID 为 100 的全部数据包,运行:
tcpdump -i eth0 vlan 100- 其中
vlan 100是 BPF 表达式,自动匹配 TPID=0x8100 且 VID=100 的帧 - 确保使用单引号包裹复杂表达式,例如:
tcpdump -i eth0 'vlan 100 and tcp port 80'
增强可读性:显示 VLAN 标签细节
加 -e 和 -v 可看到原始帧结构和标签字段:
tcpdump -i eth0 -e -v vlan 100- 输出中会出现类似
vlan 100, p 0, ethertype IPv4的描述 -
p 0表示 PCP(优先级)为 0,ethertype后是内层协议类型
常见抓不到的原因与应对
即使命令正确,也可能无匹配包——多数问题出在链路层而非语法:
- 交换机端口是 Access 模式:进出帧不带 802.1Q 标签,需改 Trunk 或在上游设备抓包
- Linux bridge 或 OVS 自动剥离 VLAN 标签:尝试在 veth 对端、物理网卡原始设备(如
enp1s0f0np0)或any接口抓包 - 网卡启用硬件卸载(如 SR-IOV/VF):标签在 NIC 层处理,用户空间看不到;可禁用卸载或改用 VFIO 直通模式
- TPID 非标准(如 QinQ 使用 0x88a8):tcpdump 默认只认 0x8100,需用原始字节匹配,例如
'ether[12:2] == 0x88a8 and ether[14:2] & 0x0fff == 100'
保存与后续分析
生产环境建议写入文件,避免终端丢包或阻塞:
tcpdump -i eth0 -w vlan100.pcap -s 0 vlan 100-
-s 0抓完整帧(含 VLAN tag 和 payload),防止截断 - 生成的
.pcap文件可用 Wireshark 打开,其 VLAN 列会自动解析并高亮显示










