需立即排查arp欺骗攻击:第一步用arp -n检查网关mac是否异常;第二步用tcpdump或arping捕获伪造arp响应;第三步通过交换机mac表定位攻击端口;第四步启用arpwatch长期监控mac变动。

当Linux主机出现网络断连、访问网关异常或日志中频繁报“duplicate address detected”时,需立即排查局域网内是否存在ARP欺骗攻击,这类攻击会篡改ARP缓存导致流量被劫持或丢弃。
第一步:确认本地ARP表是否已被污染
运行 arp -n 查看当前所有IP-MAC映射关系,重点检查网关IP(如192.168.1.1)是否对应了非预期的MAC地址;若发现多个不同IP指向同一个MAC,或网关MAC与你从路由器管理界面查到的真实MAC不一致,【说明ARP缓存已遭伪造响应污染】。
对比验证:执行 ip route | awk '/default/ {print $3}' | xargs -I{} arp -n | grep {} 直接提取当前默认网关的ARP条目,避免人工误读。
清空缓存后立刻重测:执行 sudo ip neigh flush all,再等10秒让系统重新学习——如果污染条目秒级复现,基本可判定存在持续ARP欺骗。
第二步:抓取实时ARP流量定位异常源
方法一:用tcpdump过滤ARP广播与应答
在终端执行 sudo tcpdump -i eth0 -n arp -c 20(将eth0替换为实际网卡名),观察输出中是否出现大量重复的ARP Reply、或非网关设备主动宣告自己是网关(例如源IP为192.168.1.100却声称“我是192.168.1.1”的应答包)。
方法二:用arping探测可疑IP行为
对网关IP执行 sudo arping -I eth0 -c 3 192.168.1.1,正常应只收到一个MAC响应;若返回多个不同MAC,【说明至少两台设备在争抢该IP,其中一台必为攻击者】。
注意:arping必须指定网卡(-I),否则可能走错接口导致无响应。
第三步:交叉比对交换机MAC地址表锁定物理端口
登录局域网核心交换机(如Cisco或华为设备),执行以下操作:
① 获取当前网关IP对应的MAC地址:在Linux主机上运行 arp -n | grep $(ip route | awk '/default/ {print $3}') 记下MAC值(如 aa:bb:cc:dd:ee:ff)。
② 登录交换机后执行 show mac address-table | grep aa-bb-cc-dd-ee-ff(Cisco)或 display mac-address | include aa-bb-cc-dd-ee-ff(华为),查看该MAC绑定在哪个物理端口(如 Gi0/1)。
③ 检查该端口连接的设备:若端口下挂的是单台PC却显示多个MAC,或该端口启用了混杂模式/未启用端口安全,则极可能是攻击源所在位置。
这一步操作起来很简单,直接抄下MAC去交换机查就行,但必须由网络管理员权限执行。
第四步:启用ARPwatch进行长期行为监控
安装并启动ARP活动监听服务:
执行 sudo apt install arpwatch(Debian/Ubuntu)或 sudo yum install arpwatch(CentOS/RHEL)。
运行 sudo arpwatch -i eth0 -f /var/log/arpwatch.log 开始记录所有ARP变更事件。
后续检查日志:sudo tail -f /var/log/arpwatch.log | grep "changed|flip",一旦发现某IP的MAC地址在短时间内反复切换,即可将该IP列入重点怀疑名单。











