tcpdump arp 过滤

过滤 ARP 请求与应答:排查同网段无法通信、ARP 冲突与网关 MAC 变化;arp[6:2] 可按操作码筛选请求(1)与应答(2)。

抓地址解析在做什么

地址解析协议负责把三层地址翻译成二层硬件地址,报文分请求与应答两类。抓取它可以排查同网段无法通信、地址冲突与网关硬件地址变化这三类问题:请求报文是「谁拥有这个地址」,应答报文则携带对应的硬件地址。它只在同一广播域内可见,跨网段抓不到属于正常现象。用操作码字段可以精确区分请求与应答,避免两类报文混在一起看。

基本信息

全部报文arp
只看请求arp[6:2] = 1
只看应答arp[6:2] = 2
限定对端arp and host 10.0.0.1
可见范围仅同一广播域,跨网段抓不到

典型使用场景

  • 排查同网段不通:确认请求是否发出、是否收到应答
  • 核对网关硬件地址:与预期值比对,识别地址变化
  • 排查地址冲突:同一地址出现两个不同硬件地址的应答
  • 定位地址欺骗:非预期主机大量应答本不属于它的地址
  • 排查静默主机:无应答说明主机不在线或已被策略拦截

常用示例

常用示例
tcpdump -i eth0 -nn arp -c 20                       # 抓地址解析报文
tcpdump -i eth0 -nn 'arp[6:2] = 1'                  # 只看请求
tcpdump -i eth0 -nn 'arp[6:2] = 2'                  # 只看应答
tcpdump -i eth0 -nn 'arp and host 10.0.0.1'         # 与网关的解析
tcpdump -i eth0 -nn -e 'arp' -c 10                  # 同时看硬件地址,核对是否一致
ip neigh show                                       # 对照本机邻居表

字段与判读

观察项正常表现异常表现
请求与应答比例请求很快得到应答大量请求无应答,目标可能不在线或被拦
应答中的硬件地址与网关或主机真实地址一致与预期不符,可能存在冲突或欺骗
同一地址的应答来源固定且唯一出现多个来源,典型的地址冲突特征
请求频率偶发,由通信触发持续高频,可能存在扫描或环路
应答方向只应答自己拥有的地址应答不属于自己的地址,属于异常行为
判断某个地址是否被占用,最直接的办法是抓一段时间的应答报文:既有请求又有对应应答说明该地址在线;只有请求没有应答,通常说明该地址空闲或对端无法接收。
抓包看到请求没有应答,不能直接断定主机不在线:也可能是对端被策略限制、网卡故障或已经下线。要结合其他探测手段一起判断。

结合邻居表核对

结合邻居表核对
ip neigh show dev eth0 | head -20        # 当前邻居缓存
ip neigh flush dev eth0 2>/dev/null; ping -c 1 10.0.0.1 >/dev/null 2>&1   # 触发重新解析
ip neigh show dev eth0 | head -5         # 再看一次结果

判读要点

  • 请求与应答数量严重不匹配时,重点查对端在线状态与二层策略
  • 硬件地址与历史记录不一致,先确认设备是否更换,再考虑异常行为
  • 同一地址被多个硬件地址应答是明确的冲突信号,应尽快固定抓包证据
  • 跨 VLAN 或跨网段抓不到属于位置问题,需要到同一广播域内抓取

易错点

  • 在跨网段位置抓包,永远看不到地址解析交互,属于位置问题而非故障
  • 看到请求没有应答就直接判定主机故障,忽略了策略与网卡因素
  • 把硬件地址当作跨网段的身份标识,经过三层设备后该地址会被改写
  • 未对照历史记录就判断地址冲突,可能只是设备正常更换
  • 过滤时没有区分请求与应答,两类报文混在一起难以判读

数据来源与参考

  • man 8 pcap-filter(arp 原语)
  • RFC 826(ARP)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌