当前位置:首页>python>Python Scapy模拟ARP广播风暴并检测

Python Scapy模拟ARP广播风暴并检测

  • 2026-10-11 06:33:20
Python Scapy模拟ARP广播风暴并检测

测试环境做过一次ARP风暴模拟,目的是验证接入交换机的风暴抑制配置是否生效。用Scapy构造ARP请求包,源MAC和源IP每次都变,交换机会把这些包广播到整个VLAN,效果很明显。

构造ARP请求包的要点:op=1表示ARP请求,pdst填目标IP,psrc可以用随机的私有地址。以下是核心代码:

from scapy.all import ARP, Ether, sendpimport randompkt = Ether(dst=”ff:ff:ff:ff:ff:ff”) / ARP(op=1, pdst=”192.168.1.1”)sendp(pkt, iface=”eth0”, count=1000, inter=0.001)

这里inter=0.001是包间隔,压到1毫秒发1000个包,测试环境里能瞬间把接入交换机CPU打上去。如果是生产环境千万别这么干,哪怕是测试也要确认广播域是隔离的,我就吃过亏,有一次忘了限定VLAN,ARP包跑到了核心交换机上,整个楼层的网络都受到了影响。

检测端我用了一个简单的脚本实时监控ARP包速率。用sniff抓包,用time.time()计算每秒收到的ARP包数量,超过阈值就告警。

from scapy.all import sniffimport timestart = time.time(); cnt = 0def cb(pkt): global cnt; cnt += 1 if cnt % 100 == 0: print(”ARP rate:”, cnt / (time.time() - start))sniff(filter=”arp”, prn=cb, store=0)

阈值设多少合适?正常局域网里ARP流量很低,每秒几个包算是正常。我一般把阈值设在50pps,超过这个值就要警惕了。如果是有人私接设备发起ARP攻击,速率能到几千pps,交换机的风暴抑制如果能生效,应该在接口上看到drop计数增长。

测试完记得把脚本停掉,别让自己的测试流量把网络搞挂了。

ARP风暴相关参数和注意事项汇总一下:

参数
推荐值
说明
发包间隔(inter)
0.001秒(1000pps)
测试环境可用,生产环境禁止
告警阈值
50 pps
正常环境ARP每秒几个包
攻击级速率
>1000 pps
需立即排查来源
检测脚本采样间隔
1秒
太短CPU高,太长漏检
风暴抑制(华为)
storm-control broadcast min-rate 1000
超过阈值自动限速

最新文章

随机文章