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