本文目录导读:

- 核心原理:ARP欺骗的本质
- 方法一:命令行检测(适合临时排查,Windows/Linux/Mac通用)
- 方法二:专业工具检测(推荐,适合深度分析)
- 方法三:自动化脚本检测(Python,适合进阶)
- 方法四:预防与被动检测(防御性策略)
- 最佳检测流程
检测ARP欺骗通常需要观察网络流量中的异常行为或IP/MAC地址不匹配,由于你提到的是“案例检测”,我将提供几种不同场景下的检测方法,涵盖手动命令行检测、专业工具检测以及自动化脚本检测。
以下是针对ARP欺骗的检测方案:
核心原理:ARP欺骗的本质
攻击者伪造ARP应答,将网关IP或目标主机IP映射到攻击者的MAC地址,检测的关键在于:发现同一IP对应了多个不同的MAC地址,或同一MAC地址对应了多个不同的IP。
命令行检测(适合临时排查,Windows/Linux/Mac通用)
这是最快速、最基础的方法,适合怀疑自己是否被ARP欺骗。
查看当前ARP缓存表
在终端输入命令,查看所有ARP条目:
- Windows:
arp -a - Linux/Mac:
arp -an
重点检查对象:
- 网关条目:你的默认网关IP对应的MAC地址,正常情况下,这个MAC地址应该是你的路由器物理接口(通常印在路由器背面或可通过路由器管理界面查询)。
- 频繁出现的MAC:如果同一个MAC地址(00-11-22-33-44-55)出现在了多个不同IP(例如网关IP、同事IP、服务器IP)的条目中,极大概率是ARP欺骗,攻击者将所有流量都导向了自己的机器。
手动交叉验证(关键步骤)
- 记录当前网关MAC:从
arp -a中记下网关IP对应的MAC地址(记为 MAC_A)。 - 获取真实网关MAC:直接访问路由器管理后台,查看WAN口或LAN口的真实MAC地址(记为 MAC_B)。
- 比较:
- MAC_A == MAC_B:目前安全(但可能下一秒被攻击)。
- MAC_A != MAC_B:确认遭受ARP欺骗。
专业工具检测(推荐,适合深度分析)
对于实验室或企业环境,使用专用ARP分析工具更准确。
Wireshark(抓包分析,最权威)
- 操作:在混杂模式下抓包,过滤
arp。 - 判断规则:
- 大量非请求的ARP应答:如果网络中没有对应的ARP请求,却出现了大量的
ARP Reply,尤其是针对网关IP的应答,这是典型的主动欺骗特征。 - Duplicated IP 提示:Wireshark 的专家系统(Expert Info)会自动标记
Duplicate IP address detected错误,说明同一IP有不同MAC在响应。 - 分析发包源:查看
Sender MAC address是否来自非路由器的MAC。
- 大量非请求的ARP应答:如果网络中没有对应的ARP请求,却出现了大量的
ARPWatch(Linux专用守护进程)
- 作用:这是一个监控工具,持续监听局域网内的ARP活动。
- 检测逻辑:它会建立一个“IP-MAC”绑定的基线,当检测到IP对应的MAC地址发生变化(且变化未经合理授权)时,它会立即通过syslog告警或弹出窗口。
- 命令示例:
sudo arpwatch -i eth0
Nmap(扫描验证)
- 操作:使用
nmap -sn 192.168.1.0/24(扫描整个网段)。 - 检测逻辑:Nmap会发送ARP请求并收集响应,如果发现同一个IP地址在控制台被展示了两次,但MAC地址不同,或者同一个MAC地址对应了多个IP,则说明存在欺骗。
自动化脚本检测(Python,适合进阶)
如果你需要自动检测并告警,可以使用Python脚本监听ARP数据包。
示例:检测同一IP出现多个MAC
from scapy.all import sniff, ARP
ip_mac_map = {} # 用于存储“IP -> MAC”的映射
def detect_arp_poison(packet):
if packet.haslayer(ARP) and packet[ARP].op == 2: # op=2表示ARP应答
# 提取包中的发送方IP和MAC
ip = packet[ARP].psrc
mac = packet[ARP].hwsrc
# 检查是否是已知IP-MAC对
if ip in ip_mac_map:
if ip_mac_map[ip] != mac:
# 重要:同一IP的MAC地址发生了变化!
print(f"[!] ARP欺骗检测: IP {ip} 之前MAC为 {ip_mac_map[ip]},现在MAC为 {mac}")
else:
# 记录首次发现的映射
ip_mac_map[ip] = mac
# 开始监听eth0网卡
print("正在监听ARP应答... 按Ctrl+C停止")
sniff(iface="eth0", prn=detect_arp_poison, filter="arp", store=0)
- 使用前提:需要安装
scapy库(pip install scapy)。 - 运行:以管理员/root权限运行(因为需要操作原始套接字)。
- 原理:脚本维护一个字典,当检测到同一个IP对应的MAC地址与之前记录不同时,即触发告警。
预防与被动检测(防御性策略)
如果不想每次都手动查,可以从架构上做防御,反向判断问题:
- 启用DHCP Snooping(交换机设置):交换机只允许信任端口(如连接路由器的端口)发送的DHCP应答,阻止用户私设DHCP服务器和ARP欺骗。
- 静态ARP绑定(主机端):
- 在网关上或主机上手动将网关IP与MAC地址绑定,避免缓存被篡改。
- Windows:
arp -s 192.168.1.1 00-11-22-33-44-55 - 注意:这种方式无法彻底防御欺骗(例如Linux下的arp攻击会强制更新)。
最佳检测流程
- 发现症状:突然断网、无法上网、能上网但网速极慢(被中间人窃听)。
- 初步排查:用
arp -a检查网关MAC是否正常。 - 深入验证:使用 Wireshark 抓包,过滤
arp,查看是否有重复IP或大量ARP回复。 - 定位攻击者:如果确认被欺骗,找到那个 冒充网关MAC 的真实设备,查看连接交换机该端口的指示灯对应的设备,使用
Nmap -O扫描其IP,确定攻击者操作系统。
注意:如果是在公司或公共网络中,请勿在没有授权的情况下运行ARP欺骗或反欺骗脚本,这可能违反网络安全规定。