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