首页/网络/抓包与流量分析速查/tcpdump -e 打印链路层头部

tcpdump -e 打印链路层头部

打印每包的以太网(或其他链路层)头部:源/目的 MAC、EtherType、VLAN 标签,定位二层问题与错绑网关时使用。

-e 在做什么

-e 让 tcpdump 打印每一条报文的链路层头部:源与目的硬件地址、以太网类型字段,以及是否存在标签。它把视角从三层下移到二层,排查地址解析、网关硬件地址是否正确、是否存在标签透传问题时必须用它。要注意的是在聚合伪接口上抓包时,显示的链路层结构与以太网并不相同,此时字段含义要按对应类型解读,不能直接套用以太网的经验。

基本信息

作用显示链路层头部信息
包含内容源与目的硬件地址、以太网类型字段、标签标记
常用类型值IPv4、地址解析、IPv6 各有对应的类型值
伪接口差异聚合接口使用不同的链路层结构,字段含义不同
搭配建议抓地址解析报文时收益最明显

典型使用场景

  • 核对网关硬件地址:确认目标地址对应的硬件地址是否符合预期
  • 排查同网段不通:看地址解析是否得到应答以及应答中的地址
  • 识别标签透传:确认报文是否携带标签以及标签数量
  • 定位二层环路或地址冲突:同一地址出现不同硬件地址
  • 核对虚拟化环境:确认流量经过哪些虚拟接口

常用示例

常用示例
tcpdump -i eth0 -nn -e -c 10 arp              # 地址解析与硬件地址
tcpdump -i eth0 -nn -e -c 5 'tcp port 22'     # 普通报文的二层头
tcpdump -i eth0 -nn -e -c 10 'icmp'           # 探测报文的二层信息
tcpdump -i any -nn -e -c 5                    # 聚合接口的链路层结构,注意与以太网不同
tcpdump -i eth0 -nn -e -c 10 'vlan'           # 只看带标签的报文

输出字段读法

字段含义判读要点
源硬件地址发送该帧的接口地址跨三层设备后会被改写,不能据此判断原始主机
目的硬件地址接收该帧的接口地址广播帧的目的地址为全 f,常见于地址解析
类型字段上层协议标识区分 IPv4、IPv6、地址解析等上层协议
标签标记是否存在 VLAN 标签出现标签说明报文带标记,过滤时要注意
长度该帧的字节数与三层长度对照可判断是否存在额外封装
硬件地址只在同一广播域内有意义。跨网段抓包时看到的是网关接口的地址,与原始主机无关,用它推断发送方身份会得出错误结论。
聚合伪接口的链路层结构与以太网不同,同一选项在两种接口上输出的字段含义不一致。需要按以太网结构分析时必须指定具体物理接口重新抓取。

标签与隧道场景

标签与隧道场景
tcpdump -i eth0 -nn -e -c 10 'vlan and tcp port 443'    # 带标签的 443 流量
tcpdump -i eth0 -nn -e -c 5 'ip proto 47'                # 隧道外层报文
tcpdump -i eth0 -nn -e 'arp and host 10.0.0.1' -c 6      # 与网关的地址解析

判读要点

  • 地址解析请求只有请求没有应答时,先确认对端是否在线与是否被策略拦截
  • 同一地址出现两个不同硬件地址,可能是冲突或欺骗行为,值得固定证据
  • 带标签的报文在未处理的接口上可能被丢弃,排查不通时先确认标签处理方式
  • 虚拟化环境下同一流量可能在多处被看到,选用一个抓包点可避免重复统计

易错点

  • 跨网段抓包时用硬件地址判断原始主机,跨三层设备后该地址已被改写
  • 在聚合伪接口上按以太网结构解读字段,得出错误结论
  • 忽略标签存在,导致按普通报文的规则解读不通现象
  • 重复抓包造成同一报文出现两次,误以为存在重传
  • 地址解析只在同一广播域可见,跨网段抓不到并不代表协议异常

数据来源与参考

  • man 8 tcpdump(-e 选项)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌