摘 要
随着互联网技术的普及,网络空间的安全威胁持续增长,传统基于规则的异常流量检测方案存在漏报率高、维护成本高的局限性,难以应对当前多样化的网络攻击。针对这一问题,本研究设计实现了基于注意力机制的异常流量检测与自动防御系统,采用前后端分离架构,以 Flask 为后端开发框架,Vue3 为前端开发框架,结合 Swin Transformer 注意力模型实现异常流量的自动化检测。系统实现了多源流量采集能力,支持实时网卡抓包与 PCAP/CSV 文件上传两种输入方式,完成了流量特征到模型输入的适配转换,将一维流量特征转换为模型可处理的伪图像,同时实现了注意力可视化功能,解决深度学习模型的可解释性问题,配套实现了黑白名单防御策略、安全日志与 PDF 安全报告功能。实验结果表明,模型的总体检测准确率达到 85.75%,加权 F1 值达到 84.65%,可有效识别常见网络攻击。系统功能测试验证了所有核心功能的可用性,系统操作简洁,能为普通用户提供易用的网络安全防护工具,具备实际应用价值。
****关键字:****异常流量检测;注意力机制;Swin Transformer;Flask
Abstract
With the widespread adoption of Internet technology, the security threats in the cyber space have been continuously increasing. The traditional rule-based anomaly traffic detection schemes have limitations such as high false negative rates and high maintenance costs, making them unable to cope with the diverse network attacks currently. To address this issue, this research has designed and implemented an anomaly traffic detection and automatic defense system based on the attention mechanism. It adopts a front-end and back-end separation architecture, using Flask as the back-end development framework and Vue3 as the front-end development framework. It combines the Swin Transformer attention model to achieve automatic detection of abnormal traffic. The system has achieved multi-source traffic collection capabilities, supports two input methods of real-time network card packet capture and PCAP/CSV file upload, and completed the adaptation and conversion of traffic features to model input. It converts one-dimensional traffic features into pseudo images that the model can handle, and also implements the attention visualization function to solve the interpretability problem of deep learning models. It has also implemented black and white list defense strategies, security logs, and PDF security report functions. Experimental results show that the overall detection accuracy of the model reaches 85.75%, and the weighted F1 value reaches 84.65%. It can effectively identify common network attacks. The functional testing of the system has verified the availability of all core functions. The system operation is simple and can provide ordinary users with an easy-to-use cybersecurity protection tool, possessing practical application value.
****Key words:****Abnormal traffic detection; Attention mechanism; Swin Transformer; Flask
目 录
++[摘 要](#摘 要)++
++Abstract++
++第1章.引言++
++[1.1 研究背景与意义](#1.1 研究背景与意义)++
++[1.2 国内外研究现状](#1.2 国内外研究现状)++
++[1.2.1 国外研究现状](#1.2.1 国外研究现状)++
++[1.2.2 国内研究现状](#1.2.2 国内研究现状)++
++[1.3 本文主要研究内容](#1.3 本文主要研究内容)++
++[1.4 论文组织结构](#1.4 论文组织结构)++
++[第2章 相关技术与理论基础](#第2章 相关技术与理论基础)++
++[2.1 前后端开发相关技术](#2.1 前后端开发相关技术)++
++[2.1.1 Flask 后端开发框架](#2.1.1 Flask 后端开发框架)++
++[2.1.2 Vue 前端开发技术](#2.1.2 Vue 前端开发技术)++
++[2.1.3 数据处理支撑工具](#2.1.3 数据处理支撑工具)++
++[2.2 网络流量处理技术](#2.2 网络流量处理技术)++
++[2.2.1 Scapy 流量抓包解析](#2.2.1 Scapy 流量抓包解析)++
++[2.2.2 流量特征提取方法](#2.2.2 流量特征提取方法)++
++[2.3 注意力机制与 Swin Transformer](#2.3 注意力机制与 Swin Transformer)++
++[2.3.1 注意力机制基础原理](#2.3.1 注意力机制基础原理)++
++[2.3.2 Swin Transformer 模型结构](#2.3.2 Swin Transformer 模型结构)++
++[2.4 本章小结](#2.4 本章小结)++
++[第3章 系统需求分析与总体设计](#第3章 系统需求分析与总体设计)++
++[3.1 可行性分析](#3.1 可行性分析)++
++[3.1.1 技术可行性分析](#3.1.1 技术可行性分析)++
++[3.1.2 经济可行性分析](#3.1.2 经济可行性分析)++
++[3.1.3 操作可行性分析](#3.1.3 操作可行性分析)++
++[3.2 系统需求分析](#3.2 系统需求分析)++
++[3.2.1 系统功能性需求](#3.2.1 系统功能性需求)++
++[3.2.2 系统非功能性需求](#3.2.2 系统非功能性需求)++
++[3.3 数据库设计](#3.3 数据库设计)++
++[3.3.1 逻辑结构设计](#3.3.1 逻辑结构设计)++
++[3.3.2 数据库表结构](#3.3.2 数据库表结构)++
++[3.4 系统总体架构设计](#3.4 系统总体架构设计)++
++[3.4.1 整体分层架构设计](#3.4.1 整体分层架构设计)++
++[3.4.2 系统数据流转流程](#3.4.2 系统数据流转流程)++
++[3.5 本章小结](#3.5 本章小结)++
++[第4章 系统核心功能模块实现](#第4章 系统核心功能模块实现)++
++[4.1 用户认证与权限管理模块](#4.1 用户认证与权限管理模块)++
++[4.1.1 用户注册与登录功能](#4.1.1 用户注册与登录功能)++
++[4.1.2 安全验证与会话管理](#4.1.2 安全验证与会话管理)++
++[4.2 流量采集与预处理模块](#4.2 流量采集与预处理模块)++
++[4.2.1 多源流量采集功能](#4.2.1 多源流量采集功能)++
++[4.2.2 流量数据预处理实现](#4.2.2 流量数据预处理实现)++
++[4.3 异常检测与可视化模块](#4.3 异常检测与可视化模块)++
++[4.3.1 流量特征转图像实现](#4.3.1 流量特征转图像实现)++
++[4.3.3 注意力可视化功能](#4.3.3 注意力可视化功能)++
++[4.4 安全防御与日志报告模块](#4.4 安全防御与日志报告模块)++
++[4.4.1 黑白名单防御策略](#4.4.1 黑白名单防御策略)++
++[4.4.2 安全事件日志管理](#4.4.2 安全事件日志管理)++
++[4.4.3 安全报告生成功能](#4.4.3 安全报告生成功能)++
++[4.5 前后端交互设计](#4.5 前后端交互设计)++
++[4.6 本章小结](#4.6 本章小结)++
++[第5章 模型训练与实验结果分析](#第5章 模型训练与实验结果分析)++
++[5.1 实验数据集介绍](#5.1 实验数据集介绍)++
++[5.2 模型训练流程设计](#5.2 模型训练流程设计)++
++[5.2.1 数据划分与采样处理](#5.2.1 数据划分与采样处理)++
++[5.2.2 训练参数与优化策略](#5.2.2 训练参数与优化策略)++
++[5.3 训练过程与结果分析](#5.3 训练过程与结果分析)++
++[5.3.1 训练过程分析](#5.3.1 训练过程分析)++
++[5.3.2 模型评估结果分析](#5.3.2 模型评估结果分析)++
++[5.3.3 混淆矩阵分析](#5.3.3 混淆矩阵分析)++
++[5.4 本章小结](#5.4 本章小结)++
++[致 谢](#致 谢)++
++[参 考 文 献](#参 考 文 献)++
第 1 章 .引言
1.1 研究背景与意义
近年来,互联网技术的快速普及推动了数字经济的发展,网络已经成为日常工作与生活的基础支撑,各类网络应用的普及,让网络流量的规模与复杂度都在快速增长。与此同时,网络空间的安全威胁也在持续增长,各类网络攻击的数量与类型呈现逐年上升的趋势,DDoS 攻击、漏洞利用、病毒传播等攻击行为,不仅会影响网络的正常运行,还会导致用户的数据泄露,带来严重的损失。
传统的网络安全防护手段,比如基于规则的防火墙、入侵检测系统,在应对当前的安全威胁时,逐渐暴露出明显的局限性。这类方案的核心是人工定义的攻击规则,只能识别已经已知的攻击类型,对未知的新型攻击,漏报率很高,无法有效防护。同时,规则的维护需要专业的技术人员,更新的速度慢,很难跟上攻击的更新速度,维护的成本也很高。
针对这些痛点,基于深度学习的异常流量检测方案逐渐成为领域内的研究方向,这类方案能自动从流量数据中学习攻击的特征,不需要人工维护规则,不仅能识别已知的攻击,还能有效识别未知的新型攻击,能有效弥补传统方案的不足。本项目开发的基于注意力机制的异常流量检测与自动防御系统,正是针对这一方向,将深度学习检测算法与易用的应用系统结合,为普通用户提供自动化的网络安全防护工具,具备实际的应用价值。
1.2 国内外研究现状
1.2.1 国外研究现状
国外对异常流量检测领域的研究起步较早,早在上世纪 90 年代,网络安全问题开始受到关注的时候,就有研究人员开始探索异常流量的检测技术。早期的检测方案以人工规则匹配为核心,1998 年发布的 Snort 开源入侵检测系统,就是这类方案的典型代表,它通过人工定义的攻击规则匹配流量特征,实现攻击的识别,这类方案在早期的网络环境中被广泛应用,支撑了早期的网络安全防护。进入 2000 年之后,机器学习技术的发展推动了异常流量检测的升级,国外研究人员开始将支持向量机、随机森林等传统机器学习算法引入到领域中,替代人工定义规则的方式,让系统能自动从标注数据中学习分类的边界,有效提升了检测的自动化程度,也降低了规则维护的成本。2010 年之后,深度学习技术的快速发展,为异常流量检测带来了新的方向,国外研究人员开始尝试将卷积神经网络等深度学习模型应用到流量检测中,有研究人员提出将流量的字节序列转换为二维图像,通过卷积神经网络提取特征,实现了比传统机器学习更好的检测效果。Transformer 技术提出之后,国外研究人员进一步探索了 Transformer 在这个领域的应用,2021 年就有研究团队将 Swin Transformer 模型引入到流量分类任务中,借助窗口注意力机制提升了模型的特征提取能力,同时注意力机制的引入,也解决了深度学习模型的可解释性问题。除此之外,国外研究机构还发布了多个标准化的异常流量检测数据集,其中澳大利亚网络安全中心发布的 UNSW-NB15 数据集,已经成为领域内的标准测试数据集,被广泛用来验证检测模型的效果。但从整体来看,国外的大部分研究都聚焦在检测算法的性能优化上,很少有研究将这些先进的算法封装成易用的应用系统,普通用户如果没有专业的深度学习知识,根本没办法直接使用这些算法,这也导致很多先进的检测技术,很难落地到普通用户的日常防护场景中。
1.2.2 国内研究现状
国内对异常流量检测领域的研究起步相对较晚,但随着国内互联网产业的快速发展,相关研究的发展速度十分迅速。早期的国内研究主要以跟进国外的技术为主,2000 年之后,国内研究人员开始将传统机器学习算法引入到异常流量检测中,尝试用决策树、随机森林等算法替代传统的规则匹配,解决传统方案维护成本高、漏报率高的问题,相关研究也验证了这类方案在国内网络环境中的有效性。2015 年之后,深度学习技术在国内开始普及,国内研究人员也开始探索深度学习在异常流量检测中的应用,大量的研究验证了卷积神经网络等深度学习模型,在流量特征提取与分类上的优势,相比传统机器学习,这类模型能有效提升复杂攻击的检测效果。Transformer 技术兴起之后,国内研究人员也快速跟进了相关的研究,不少研究团队将注意力机制与 Transformer 模型引入到异常流量检测中,不仅提升了模型的检测准确率,还通过注意力可视化解决了深度学习模型的可解释性问题,让检测结果更具可信度。与此同时,国内也有不少企业与研究机构开始探索相关技术的落地,推出了不少企业级的异常流量检测系统,这类系统能为大型企业提供完整的安全防护方案。但从整体来看,现有的落地系统大多针对大型企业的需求设计,系统的部署复杂,硬件与维护成本很高,普通的个人用户或者小型团队,根本没办法承担这样的成本,也没有能力完成系统的部署与维护,而且这类系统的操作流程复杂,需要专业的安全技术人员才能使用,普通用户很难上手。这就导致普通的小型用户,没办法享受到先进的异常流量检测技术带来的防护能力,只能继续使用传统的规则型防火墙,防护效果十分有限,这也是本课题要解决的核心落地问题。
1.3 本文主要研究内容
本项目针对异常流量检测领域的现存问题,开发了基于注意力机制的异常流量检测与自动防御系统,完成的核心研究与开发工作包括以下几个部分。第一,搭建前后端分离的系统架构,覆盖用户管理、流量处理、异常检测、安全防御、日志报告全流程功能,为用户提供完整的安全防护工具,实现从流量输入到防御输出的全流程自动化。第二,实现多源流量的采集能力,支持实时网卡抓包与 PCAP/CSV 文件上传两种流量输入方式,同时支持流量的过滤功能,满足不同用户的使用场景,同时完成流量数据的清洗、特征提取与标准化,为后续的检测提供高质量的输入数据。第三,基于 Swin Transformer 构建异常检测模型,完成流量特征到模型输入的适配转换,将一维的流量特征转换为模型可处理的伪图像,同时实现注意力可视化功能,解决深度学习模型的可解释性问题。第四,实现黑白名单自动防御策略,以及安全日志、PDF 安全报告功能,满足用户的安全审计与防御配置需求。第五,完成模型的训练与评估,以及系统的功能测试,验证系统的有效性与稳定性。
1.4 论文组织结构
论文整体按照项目从立项到完成的全流程组织,共分为七个章节。第一章为引言,介绍研究的背景、意义、现状与主要研究内容,完成项目的开篇铺垫。第二章为相关技术与理论基础,介绍项目用到的相关技术与理论,为后续的设计与实现做技术铺垫。第三章为系统需求分析与总体设计,介绍项目的需求分析与总体设计工作,明确项目的实现方案。第四章为系统核心功能模块实现,介绍各个功能模块的具体开发实现,展示项目的核心开发工作。第五章为模型训练与实验结果分析,介绍模型的训练过程与效果评估。第六章为系统测试与运行验证,介绍系统的功能测试与运行效果。第七章为总结与展望,总结项目的工作,分析后续的优化方向。
第 2 章 相关技术与理论基础
2.1 前后端开发相关技术
2.1.1 Flask 后端开发框架
Flask 是一款轻量级的 Python Web 开发框架,核心模块小巧灵活,扩展性强,不需要复杂的配置就能快速启动 Web 服务,十分适合小型项目的快速开发。本项目选择 Flask 作为后端框架的核心原因,是它能完美对接 Python 的深度学习、数据处理相关库,不需要额外的适配工作,能有效提升开发的效率。
在实际开发中,项目还搭配了 Flask 的官方扩展插件来满足不同的功能需求:用 Flask-SQLAlchemy 实现 ORM 数据库操作,简化数据库的增删改查代码,避免直接编写 SQL 语句的风险;用 Flask-Session 实现用户的会话管理,处理用户的登录状态保存;用 Flask-CORS 解决前后端分离的跨域问题,让前端的请求能正常访问后端接口。这些插件的使用,让后端的开发流程更加简洁,也能保证系统的稳定性。
2.1.2 Vue 前端开发技术
Vue3 是一款轻量的前端开发框架,采用组件化的开发模式,能把前端界面拆分成独立的组件,提升代码的复用性,同时它支持前后端分离的开发模式,能把前端的界面开发和后端的逻辑开发完全解耦,两个部分可以并行开发,有效提升项目的开发速度。
本项目的前端开发基于 Vue3 完成,同时搭配了相关的配套工具来满足功能需求:用 Vue Router 实现路由与权限控制,根据用户的登录状态与角色,控制用户能访问的页面;用 Axios 处理前后端的接口请求,统一处理请求的错误与状态;用 ECharts 实现数据的可视化,把检测结果、流量统计这些数据,转换成直观的图表展示给用户。这些工具的搭配,让前端界面的开发更加高效,也能实现交互友好的用户界面。
2.1.3 数据处理支撑工具
本项目的开发过程中,还用到了几个成熟的开源数据处理工具,来支撑不同环节的功能实现。其中 Pandas 是一款 Python 的数据处理库,它能快速读取与处理表格型的流量数据,完成数据的清洗、整理与统计,是流量数据预处理环节的核心工具。scikit-learn 是机器学习领域的开源工具库,项目用它完成了特征的标签编码与标准化处理,把原始的流量特征处理成模型需要的格式,不需要自己重新实现这些标准化的算法。ReportLab 是一款 PDF 生成工具,项目用它实现了 PDF 安全报告的生成功能,能把检测结果快速整理成规范的 PDF 文件,方便用户下载留存。这些工具都是经过验证的成熟工具,能有效减少重复开发的工作量,提升项目的开发效率。
2.2 网络流量处理技术
2.2.1 Scapy 流量抓包解析
Scapy 是一款开源的网络数据包处理工具,它能直接操作网卡进行实时的数据包抓取,也能解析 PCAP 格式的数据包文件,支持几乎所有常见的网络协议,功能十分强大,是网络流量处理领域的常用工具。
本项目用 Scapy 实现了多源流量的采集功能,针对实时抓包的需求,项目用了 Scapy 的 AsyncSniffer 异步抓包工具,这种异步的抓包方式,不会阻塞后端的其他服务,用户在抓包的同时,还能进行其他的操作,不会影响系统的正常运行。针对用户上传的 PCAP 文件,项目用 Scapy 的文件解析功能,读取 PCAP 文件里的数据包,提取数据包的源目的 IP、端口、协议等信息,为后续的特征提取提供原始数据。
2.2.2 流量特征提取方法
流量特征提取是异常流量检测的基础,只有提取到有效的流量特征,模型才能准确区分正常与异常的流量。本项目提取的是 UNSW-NB15 数据集对应的标准化流量统计特征,这些特征是网络安全领域经过长期验证的、能有效区分不同流量行为的特征。
具体的特征包括连接的持续时间、源目的端口、数据包数量、传输的字节数、协议类型、TCP 标志位等共 42 维特征,这些特征覆盖了流量的连接属性、传输属性,能全面的描述一条网络连接的行为,不管是正常的浏览流量,还是攻击流量,都能通过这些特征体现出差异,这些特征也是模型检测的核心输入。
2.3 注意力机制与 Swin Transformer
2.3.1 注意力机制基础原理
注意力机制的核心思想,来源于人类的视觉注意力机制,它能让模型在处理输入数据的时候,自动学习到不同输入特征的重要程度,自动关注对当前任务更重要的特征,忽略不重要的噪声信息,从而提升模型的特征提取能力与分类效果。
除此之外,注意力机制的权重是可解释的,模型对不同特征的关注程度,可以通过可视化的方式展示出来,这就能解决深度学习模型的 "黑盒" 问题,让用户能理解模型的判断依据,这也是本项目引入注意力机制的核心原因,能让异常检测的结果更加可信。
2.3.2 Swin Transformer 模型结构
Swin Transformer 是在普通 Transformer 的基础上,加入了窗口注意力机制的深度学习模型,它原本是为图像分类任务设计的,它把输入的图像分成多个不重叠的小窗口,在窗口的内部做注意力计算,相比普通的 Transformer,它的计算量更小,能提取分层的特征,效果更好,也更容易训练。
本项目用到的是 timm 库中的 swin_tiny_patch4_window7_224 版本,这个版本的模型大小适中,参数量合适,不需要太高的硬件配置,在普通的个人电脑上就能完成训练与推理,同时它的特征提取能力,能满足本项目的异常检测需求,不需要额外的复杂优化,就能达到不错的检测效果。
2.4 本章小结
本章介绍了项目用到的相关技术与理论基础,包括前后端开发技术、流量处理技术、模型相关的理论,这些技术是项目开发的基础,为后续的系统需求分析、功能开发与模型训练提供了技术支撑。
第 3 章 系统需求分析与总体设计
3.1 可行性分析
本节从技术可行性、经济可行性和操作可行性三个维度对项目进行可行性分析,论证项目实施的合理性与可行性。
3.1.1 技术可行性 分析
本项目采用前后端分离的技术架构,后端使用 Flask 框架提供 API 接口,前端使用 Vue.js 框架构建用户界面,深度学习模型采用基于 PyTorch 和 timm 库实现的 Swin Transformer。Flask 是 Python 生态中成熟的轻量级 Web 框架,拥有完善的请求处理、会话管理和蓝图路由机制;Vue.js 是当前主流的前端渐进式框架,配合 Vite 构建工具可实现高效的开发与热更新;Swin Transformer 是微软研究院提出的视觉 Transformer 模型,timm 库提供了其标准实现,模型架构成熟稳定。此外,Scapy 库可用于网络数据包的实时抓取与解析,Scikit-learn 提供了完善的特征预处理工具,ReportLab 支持 PDF 报告的生成。上述技术均为开源技术,社区活跃、文档齐全,本人已掌握相关开发能力,普通的个人电脑即可支撑项目的开发与运行,技术风险可控。
3.1.2 经济 可行性 分析
本项目所使用的全部技术栈均为开源免费软件,Flask、Vue.js、PyTorch、Scapy、Scikit-learn、ReportLab 等均无需商业授权费用。数据库采用 SQLite 文件型数据库,无需部署独立的数据库服务器,零运维成本。模型的训练与推理可在普通 GPU 或 CPU 上完成,不需要额外的硬件投入。系统的开发与运行均不需要额外的商业成本,经济成本极低,具备经济可行性。
3.1.3 操作 可行性 分析
系统的界面设计遵循简洁朴素的原则,采用卡片式布局和直观的操作流程,用户不需要具备专业的深度学习知识,即可完成流量采集、异常检测、防御策略配置等操作。系统提供实时抓包和文件上传两种流量输入方式,满足不同场景的需求;检测结果以统计图表和列表形式展示,攻击类型、置信度等信息一目了然;防御操作通过黑白名单管理实现,一键即可完成 IP 封禁或放行。整体上手难度低,操作可行性高。
表3-1 可行性分析对比表
|--------------|---------------------------------------------------------------|------------|
| 分析维度 | 分析内容 | 结论 |
| 技术可行性 | Flask、Vue.js、Swin Transformer 等技术均为成熟开源技术,开发库完善,普通电脑即可支撑开发与运行 | 可行 |
| 经济可行性 | 所有技术均为开源免费,无需商业授权,SQLite 无需独立服务器,无额外硬件投入,成本极低 | 可行 |
| 操作可行性 | 界面简洁朴素,无需深度学习专业知识即可操作,流量检测与防御配置步骤少,上手难度低 | 可行 |
3.2 系统需求分析
3.2.1 系统功能性需求
本系统需要实现的功能涵盖用户认证与权限管理、流量采集、数据预处理、异常检测、安全防御以及日志与报告六大模块,具体需求如下。
(1)用户认证与权限管理:系统需要实现用户的注册与登录功能。注册时需校验用户名的格式(必须为字母加数字的组合)、密码的强度(必须包含字母、数字和特殊字符)、邮箱的有效性(通过发送邮箱验证码验证),确保用户信息的规范性。登录时需校验用户的身份信息,同时区分管理员与普通用户两种角色:管理员可以管理所有用户、查看所有流量记录和检测结果、管理全局的黑白名单;普通用户只能管理自己的流量记录、查看自己的检测结果、管理自己的黑白名单。系统通过路由的权限控制实现不同角色的权限隔离,保证数据的安全性。此外,登录时需加入滑动验证码机制,防止机器脚本的恶意登录攻击。
(2)流量采集:系统需要支持实时抓包和文件上传两种流量输入方式。实时抓包方式下,用户可在前端选择网卡并点击开始抓包,后端通过 Scapy 的 AsyncSniffer 异步监听网卡流量,用户可随时停止抓包,系统将抓取的数据包保存为 PCAP 文件。文件上传方式下,用户可上传本地的 PCAP 或 CSV 格式的流量文件,系统自动解析文件内容。此外,系统还需支持流量的过滤功能,用户可按协议、端口、IP 地址等条件过滤流量数据,方便定位目标流量。
(3)数据预处理:系统需要对原始流量数据进行清洗、特征提取和标准化处理,将其转化为模型所需的输入格式。数据清洗阶段需去除重复记录和缺失值过多的异常数据;特征提取阶段需从 PCAP 文件中提取流级别的特征(如持续时间、包数、字节数、速率、TTL、负载等39个数值特征和协议、服务、状态3个分类特征,共42维);标准化阶段需对分类特征使用 LabelEncoder 进行标签编码,对数值特征使用 StandardScaler 进行标准化,消除量纲影响,保证模型输入的质量。
(4)异常检测:系统需要使用 Swin Transformer 模型对预处理后的流量数据进行异常检测,输出每条流量的攻击类型(Normal、Generic、Exploits、Fuzzers、DoS、Reconnaissance、Analysis、Backdoor、Shellcode、Worms 共10类)与对应的置信度。检测完成后,系统需统计正常流量和异常流量的数量,并将结果存储到数据库。此外,系统还需支持注意力可视化功能,通过梯度计算展示模型对各流量特征的关注程度,以条形图形式呈现 Top 特征,增强模型的可解释性。
(5)安全防御:系统需要实现黑白名单的防御策略。检测到异常流量后,用户可将异常 IP 加入黑名单,系统模拟封禁该 IP 的流量;用户也可将信任的 IP 加入白名单,白名单 IP 直接跳过检测。用户可选择封禁的生效方式(立即生效或仅本次检测生效),满足临时拦截与永久拦截的不同需求。系统还需根据攻击类型自动推荐防御策略建议,如 DoS 攻击建议封禁 IP 并启用限流、Reconnaissance 攻击建议限制端口扫描等。
(6)日志与报告:系统需要记录所有的安全事件日志,包括用户登录与退出、黑白名单的添加与移除、报告生成等操作,用户可查看日志记录进行安全审计。检测完成后,用户可生成 PDF 格式的安全报告,报告包含检测概览(流量总数、正常与异常数量)、攻击类型统计、异常明细、抓包数据统计、注意力可视化图以及安全策略建议,用户可下载报告留存或分享。
3.2.2 系统非功能性需求
性能需求:系统在单条流量的检测延迟上应控制在合理范围内,模型的批量推理采用分批处理机制(每批256条),单条流量的检测延迟在100ms以内;模型的检测准确率需达到85%以上,满足日常网络安全监测的使用需求。系统支持大文件的流式读取与处理,PCAP 文件最多处理50000个数据包,避免内存溢出和请求超时。
易用性需求:系统的界面设计应简洁直观,操作步骤尽量精简。用户不需要具备深度学习或网络安全的专业知识,即可完成流量采集、异常检测、防御策略配置等操作。检测结果以统计图表和列表形式展示,攻击类型、置信度等信息一目了然,符合需求文档中的界面要求。
安全性需求:用户密码采用 MD5 加密存储,不保存明文密码;登录时加入滑动验证码机制,防止机器脚本的恶意登录攻击;系统对同一账户5分钟内登录失败5次即锁定5分钟,防止暴力破解;采用 Flask Session 进行会话管理,会话设有超时时间(2小时),超时后自动注销;前后端通过 CORS 策略限制跨域访问,防止恶意脚本攻击;路由守卫实现权限隔离,普通用户无法访问管理员页面,保证系统的安全。
3.3 数据库设计
3.3.1 逻辑结构设计
系统的数据库逻辑结构围绕用户、流量记录、检测结果、黑名单、白名单和安全日志六个核心实体进行设计。
用户实体:包含用户ID、用户名、加密后的密码、邮箱、角色(admin/user)、创建时间和更新时间等属性。用户名和邮箱均设为唯一约束,确保不重复。
流量记录实体:包含记录ID、用户ID、会话ID、流量来源(realtime/pcap/csv)、原始数据路径、预处理数据路径、过滤配置和创建时间等属性。流量来源标识数据的获取方式,原始数据路径存储 PCAP 或 CSV 文件的存储位置。
检测结果实体:包含结果ID、流量记录ID、流量总数、正常流量数、异常流量数、检测结果详情(JSON格式)和创建时间等属性。检测结果详情以 JSON 字符串存储每条流量的攻击类型与置信度。
黑名单实体:包含记录ID、IP地址、封禁原因、创建者用户ID、创建时间和是否为模拟封禁等属性。
白名单实体:包含记录ID、IP地址、备注、创建者用户ID和创建时间等属性。
安全日志实体:包含日志ID、事件类型、用户ID、操作目标和详情等属性。
各实体之间的关联关系如下:一个用户可以拥有多个流量记录(一对多),一个流量记录对应一个检测结果(一对一),一个检测结果可以包含多条攻击时间线记录(一对多),一个用户可以创建多条黑名单和白名单记录(一对多),一个用户会产生多条安全日志(一对多)。这些关联关系通过外键约束实现,保证了数据的关联性与一致性。
图3-1 系统E-R图
3.3.2 数据库表结构
系统采用 SQLite 作为数据存储的载体。SQLite 是轻量的文件型数据库,数据存储在单个文件中,不需要部署独立的数据库服务,零配置零运维,非常适合本项目的规模和部署场景。系统通过 Flask-SQLAlchemy ORM 框架操作数据库,实现对象的增删改查,降低了数据库操作的复杂度。
核心数据表结构如下:
用户表(users):存储用户的基本信息,字段结构如表3-2所示。
表3-2 用户表(users)字段结构
|----------------|-----------------|-----------------|
| 字段名 | 类型 | 含义 |
| id | Integer | 用户ID,主键,自增 |
| username | String(64) | 用户名,唯一,非空 |
| password | String(64) | 加密后的密码,非空 |
| email | String(128) | 邮箱地址,唯一,非空 |
| role | String(16) | 角色,默认值 user |
| created_at | DateTime | 创建时间 |
| updated_at | DateTime | 更新时间 |
流量记录表(flow_records):存储流量的基本信息,包括记录ID、用户ID(外键关联 users 表)、会话ID、流量来源、原始数据路径、预处理数据路径、过滤配置和创建时间等字段。
检测结果表(detection_results):存储检测的结果,包括结果ID、流量记录ID(外键关联 flow_records 表)、流量总数、正常流量数、异常流量数、检测结果详情(JSON文本)和创建时间等字段。
攻击时间线表(attack_timeline):存储异常流量的攻击详情,包括记录ID、检测结果ID(外键关联 detection_results 表)、攻击时间、IP地址、攻击类型和置信度等字段。
黑名单表(blacklist):存储被封禁的IP信息,包括记录ID、IP地址、封禁原因、创建者用户ID(外键关联 users 表)、创建时间和是否为模拟封禁等字段。
白名单表(whitelist):存储被信任的IP信息,包括记录ID、IP地址、备注、创建者用户ID(外键关联 users 表)和创建时间等字段。
安全日志表(security_logs):存储安全事件日志,包括日志ID、事件类型、用户ID(外键关联 users 表)、操作目标和详情等字段。
登录尝试表(login_attempts):存储登录尝试记录,包括记录ID、用户ID、IP地址、尝试时间和是否成功等字段,用于实现登录限制功能。
防御动作表(defense_actions):存储防御动作记录,包括记录ID、动作类型、目标IP、检测结果ID、用户ID、执行时间和是否延迟执行等字段。
3.4 系统总体架构设计
3.4.1 整体分层架构设计
系统采用前后端分离的分层架构,分为前端展示层、API 接口层、业务逻辑层和数据层四个层次,各层之间通过明确的接口进行交互,实现了高内聚低耦合的设计目标。
前端展示层:负责前端的界面展示和用户交互处理。该层基于 Vue.js 3 框架构建,使用 Vue Router 实现页面路由,使用 Axios 发送 HTTP 请求与后端交互。前端将用户的操作(如点击抓包、上传文件、运行检测等)转换成 API 接口请求发送给后端,同时将后端返回的 JSON 数据渲染成界面元素(如统计图表、数据列表、检测结果等)。前端还实现了路由守卫机制,根据用户的登录状态和角色控制页面的访问权限。
API 接口层:负责前后端的接口对接。该层基于 Flask 蓝图机制实现,包含认证接口(auth_bp)、流量接口(flow_bp)、防御接口(defense_bp)、报告接口(report_bp)、用户接口(user_bp)和日志接口(logs_bp)六个蓝图模块。每个接口负责接收前端的请求,进行基础的参数校验和权限验证(通过 login_required 和 admin_required 装饰器),然后将请求转发给业务逻辑层处理,最后将处理结果以统一的 {code, msg, data} 格式返回给前端。
业务逻辑层:负责系统的核心业务逻辑实现。该层包含用户认证模块(密码加密、登录限制、验证码生成与校验)、流量处理模块(实时抓包、文件解析、数据预处理)、异常检测模块(特征转换、模型推理、结果存储)、防御引擎模块(黑白名单管理、防御策略推荐)、报告生成模块(PDF 报告生成)和日志服务模块(安全事件记录)等核心功能模块。
数据层:负责数据的持久化存储与读取。该层基于 Flask-SQLAlchemy ORM 框架,对接 SQLite 数据库,处理用户、流量记录、检测结果、黑白名单、安全日志等数据的增删改查操作。同时,数据层还负责模型权重文件、预处理参数文件(scaler.pkl、encoders.pkl)和上传文件的存储管理。
图3-2 系统整体分层架构图
3.4.2 系统数据流转流程
系统的整体数据流转流程覆盖了从流量输入到结果输出的全流程,具体步骤如下:
- 流量输入:用户通过前端发起流量采集(实时抓包)或文件上传(PCAP/CSV)的请求,前端将请求发送至后端 API 接口层。
- 数据解析:后端接收请求后,对原始流量数据进行解析。PCAP 文件使用 Scapy 的 PcapReader 流式读取并提取流级特征,CSV 文件使用 Pandas 读取并清洗数据。
- 数据预处理:对解析后的数据进行预处理,包括数据清洗(去除重复和缺失值)、特征编码(LabelEncoder 标签编码)和特征标准化(StandardScaler 标准化),将42维特征转化为模型所需的输入格式。
- 模型检测:将预处理后的特征输入 Swin Transformer 模型进行推理,模型输出每条流量的攻击类型和置信度。
- 结果存储与展示:系统将检测结果存储到数据库的检测结果表和攻击时间线表中,同时将结果返回给前端展示,用户可查看检测概览、攻击类型统计和异常明细。
- 防御与报告:用户可根据检测结果配置防御策略(添加黑名单或白名单),系统记录防御动作;用户还可生成 PDF 格式的安全报告,包含检测概览、攻击统计、注意力可视化图和安全策略建议。
图3-4 系统数据流转流程图
3.5 本章小结
本章对系统进行了全面的需求分析与总体设计。首先从技术、经济和操作三个维度进行了可行性分析,论证了项目实施的可行性;然后对系统的功能性需求和非功能性需求进行了详细分析,明确了系统需要实现的用户认证、流量采集、数据预处理、异常检测、安全防御和日志报告六大功能模块;接着进行了数据库的逻辑结构设计和表结构设计,定义了核心实体和关联关系;最后设计了系统的整体分层架构和数据流转流程。本章的工作完成了项目的前期设计,明确了项目的需求与实现方案,为后续的功能开发与模型训练提供了设计依据。
第 4 章 系统核心功能模块实现
4.1 用户认证与权限管理模块
4.1.1 用户注册与登录功能
本模块实现了用户注册与登录功能,保障系统的用户身份认证与权限隔离。
注册功能的实现流程如下:用户在前端填写用户名、密码和邮箱后提交注册请求,后端首先校验用户名的格式,要求必须是字母加数字的组合(通过正则表达式 `^a-zA-Z0-9+$` 匹配,且同时包含字母和数字);然后校验密码的强度,要求密码至少6位,必须包含字母、数字和特殊字符(. 或 @);接着校验邮箱格式的有效性;校验通过后,系统向用户邮箱发送6位数字验证码,用户输入验证码后,后端验证验证码的正确性和有效期(5分钟内有效),验证通过后将用户信息存入数据库,密码经过 MD5 加密后存储。整个注册流程确保了用户信息的规范性和邮箱的有效性。
图4.1 系统登陆界面
登录功能的实现流程如下:用户输入用户名和密码后,前端先调用凭据预校验接口验证用户名和密码是否正确,校验通过后弹出滑动验证码界面,用户完成滑动验证后,前端将用户名、密码和滑动位置提交给登录接口。后端首先验证滑动验证码的位置是否正确(容差为5像素),验证通过后再校验用户名和密码,同时检查账户是否被锁定(5分钟内登录失败5次即锁定5分钟)。登录成功后,系统将用户ID、用户名和角色信息存入 Flask Session,并记录一条安全日志。系统区分管理员和普通用户两种角色:管理员可以管理所有用户、查看所有流量记录和检测结果、管理全局的黑白名单;普通用户只能管理自己的流量记录和检测结果。路由层面通过 login_required 和 admin_required 装饰器实现权限控制,前端通过路由守卫(router.beforeEach)根据用户角色控制页面访问权限,管理员可访问 /admin/ 路径下的管理页面,普通用户只能访问 /detection、/security、/report 等功能页面,实现了完整的权限隔离机制。
图4.2 系统注册界面
4.1.2 安全验证与会话管理
本模块实现了多重安全验证机制和会话管理功能,保障系统的安全性。
密码安全方面,用户的密码采用 MD5 哈希算法加密存储。系统在 auth/security.py 中实现了 hash_password 和 verify_password 两个函数,注册时调用 hash_password 将密码进行 MD5 加密后存入数据库,登录时调用 verify_password 将用户输入的密码加密后与数据库中存储的哈希值比对,不会明文存储或传输密码,即使数据库泄露也不会泄露用户的明文密码。
滑动验证码方面,系统在 auth/captcha.py 中实现了滑动拼图验证码的生成与校验。生成验证码时,系统使用 PIL 库创建一张带有渐变背景色、装饰线条和圆点的图片,在随机位置裁剪出一个50×50像素的滑块区域,生成背景图(带缺口阴影)和滑块图,两者均以 Base64 编码返回给前端。用户拖动滑块对齐缺口位置后,前端将滑块的 X 坐标提交给后端,后端与预设的缺口位置比对,容差为5像素,验证通过才允许登录,有效防止了机器脚本的恶意登录攻击。
登录限制方面,系统实现了基于失败次数的账户锁定机制。每次登录尝试都会记录到 login_attempts 表中,登录前系统查询该用户最近5分钟内的失败次数,如果达到5次(LOGIN_LIMIT_COUNT=5),则返回锁定提示,限制该账户5分钟内(LOGIN_LOCK_MINUTES=5)不能登录,有效防止了暴力破解攻击。
会话管理方面,系统采用 Flask Session 进行会话管理,会话数据存储在服务器端的文件系统(flask_session 目录)中,前端通过 Cookie 中的 Session ID 标识身份。会话设有2小时的超时时间(PERMANENT_SESSION_LIFETIME),超时后自动注销,用户需重新登录。此外,系统还支持邮箱验证码找回密码的功能,用户输入注册邮箱后,系统发送验证码,验证通过后可重置密码,满足用户的密码找回需求。
4.2 流量采集与预处理模块
4.2.1 多源流量采集功能
本模块实现了实时抓包和文件上传两种流量采集方式,满足不同场景下的流量获取需求。
实时抓包方式:用户在前端的流量采集页面选择网卡后,点击"开始抓包"按钮,前端调用 /api/capture/start 接口,后端通过 Scapy 的 AsyncSniffer 类启动异步抓包任务,监听指定网卡的流量数据。抓包过程中,前端通过定时器实时显示抓包时长,界面展示抓包状态指示灯(绿色脉冲动画)。用户点击"停止抓包"按钮后,前端调用 /api/capture/stop 接口,后端停止 AsyncSniffer,将抓取到的数据包通过 Scapy 的 wrpcap 函数保存为 PCAP 文件,同时在数据库中创建一条流量记录(source 字段为 realtime),关联当前用户和文件路径。此外,系统还支持流量的过滤功能,用户可按协议(TCP、UDP、ICMP)、端口号和 IP 地址设置过滤条件,后端在返回数据包摘要时根据过滤条件筛选数据,方便用户定位目标流量。
文件上传方式:用户在前端点击"上传文件"按钮,选择本地的 PCAP 或 CSV 格式的流量文件,前端通过 FormData 将文件上传至 /api/flow/upload 接口。后端接收文件后,根据文件扩展名判断文件类型(.pcap 或 .csv),将文件保存到 static/uploads 目录(文件名使用 UUID 避免冲突),同时在数据库中创建一条流量记录(source 字段为 pcap 或 csv),关联当前用户和文件路径。PCAP 文件后续使用 Scapy 解析,CSV 文件使用 Pandas 解析,两种格式均能被系统正确处理,满足用户分析已有流量文件的需求。
用户可在流量记录列表中查看所有采集的记录,支持按来源(实时抓包、PCAP文件、CSV文件)和关键字筛选,每条记录提供"查看抓包"、"运行检测"、"注意力图"和"删除"操作按钮。
图4.3 量采集页界面截图
4.2.2 流量数据预处理实现
流量数据预处理是异常检测的前置步骤,本模块在 core/preprocessing.py 和 core/feature_extractor.py 中实现了完整的预处理流程,包括数据清洗、特征编码和特征标准化三个阶段。
数据清洗阶段:对于 CSV 格式的数据,系统首先调用 load_and_clean 函数进行清洗。该函数去除数据集中的 id 和 label 列(不属于特征),对39个数值列(如 dur、spkts、dpkts、sbytes 等)使用 pd.to_numeric 转换为数值类型,转换失败的值填充为0,同时将无穷大值替换为0;对3个分类列(proto、service、state),如果列不存在则填充默认值"-"。对于 PCAP 格式的数据,系统调用 feature_extractor.py 中的 extract_from_pcap 函数,使用 Scapy 的 PcapReader 流式读取数据包(最多读取 DETECTION_MAX_PACKETS 个包,避免内存溢出),然后按五元组(源IP、源端口、目的IP、目的端口、协议)聚合成流,计算每条流的39个数值特征和3个分类特征,共42维特征。
特征编码阶段:对3个分类特征(proto、service、state),系统使用 Scikit-learn 的 LabelEncoder 进行标签编码。训练时通过 fit_preprocess 函数拟合编码器,将字符串类型的特征值转换为数值类型,编码器保存为 encoders.pkl 文件。推理时加载编码器,对未见过的类别值使用第一个类别替代,保证编码的一致性。
特征标准化阶段:对39个数值特征,系统使用 Scikit-learn 的 StandardScaler 进行标准化处理,将特征值转换为均值为0、标准差为1的标准分布,消除不同特征的量纲影响。训练时拟合标准化器并保存为 scaler.pkl 文件,推理时加载标准化器进行转换。最终,编码后的3维分类特征与标准化后的39维数值特征拼接为42维的特征向量,作为模型输入。
图4.4 流量预处理流程示意图
4.3 异常检测与可视化模块
4.3.1 流量特征转图像实现
本项目的一个核心适配工作是将42维的流量特征转换为 Swin Transformer 模型所需的图像输入格式。Swin Transformer 原本是用于图像分类的视觉模型,其标准输入为 (N, 3, 224, 224) 的图像张量,而流量数据是42维的一维特征向量,两者在数据形态上存在本质差异。为此,系统在 models/data_converter.py 中实现了 to_swin_input 函数,通过四个步骤完成特征到图像的转换:
第一步:特征补齐。将42维的流量特征向量补齐到64维,不足的部分(64-42=22维)填充0值,如果特征维度超过64则截断。补齐的目的是使特征维度能够被整除为正方形的二维结构。代码中通过 np.hstack 在特征矩阵右侧拼接零矩阵实现补齐,然后截取前64维。
第二步:维度转换。将64维的一维特征向量 reshape 成 8×8 的单通道特征图(8=√64)。这一步将一维的线性特征转换为二维的空间结构,使得特征之间具备了类似图像的空间邻接关系,Swin Transformer 的窗口注意力机制可以在局部区域内计算特征间的关联。
第三步:上采样。使用 PyTorch 的双线性插值(F.interpolate,mode='bilinear')将 8×8 的小特征图上采样到 224×224,匹配 Swin Transformer 模型的标准输入尺寸。双线性插值通过四个邻近像素的加权平均计算新像素值,能够在放大图像时保持特征的平滑过渡,避免信息的突变丢失。
第四步:通道复制。将单通道的特征图复制3次,得到3通道的特征图,最终形状为 (N, 3, 224, 224),与 Swin Transformer 的输入格式完全匹配。三个通道的内容相同,相当于将灰度图转换为 RGB 格式的"伪图像"。
通过以上四个步骤,每条42维的流量特征被转换为一张 224×224 的三通道"伪图像",可以输入到 Swin Transformer 模型中进行分类。这种转换方式保留了原始特征的信息,同时赋予了特征空间结构,使得模型能够利用局部窗口注意力机制捕获特征间的关联关系。
图4.5 流量特征转图像流程示意图
异常检测的推理流程在 core/anomaly_detector.py 中实现,完整的推理流程包括特征转换、批量推理和结果输出三个阶段。
特征转换阶段:当用户在前端点击"运行检测"按钮时,后端调用 run_detection 函数。该函数首先根据流量记录的文件类型选择解析方式:PCAP 文件调用 extract_from_pcap 提取流级特征,CSV 文件调用 load_and_clean 加载和清洗数据。然后调用 transform 函数对数据进行预处理(编码和标准化),得到42维的特征矩阵。最后调用 to_swin_input 函数将特征矩阵转换为 (N, 3, 224, 224) 的模型输入格式。
批量推理阶段:由于流量数据可能包含大量记录,一次性将所有数据输入模型会导致内存溢出,因此系统在 SwinDetector.predict 方法中实现了批量推理机制。系统将数据分成批次,每批256条流量(batch_size=256),分批调用模型进行推理。每批推理时,模型在 torch.no_grad() 上下文中执行前向传播,输出 logits 后通过 softmax 计算概率分布,取概率最大的类别作为预测结果,同时记录该类别的置信度。批量推理机制有效控制了内存使用,即使很大的流量文件也能正常处理。
结果输出阶段:推理完成后,系统统计正常流量和异常流量的数量,将检测结果(包含每条流量的攻击类型和置信度)以 JSON 格式存入 detection_results 表。对于检测为异常的流量,系统从原始数据中提取源IP和目的IP信息,创建攻击时间线记录(attack_timeline 表),记录攻击时间、IP地址、攻击类型和置信度。最后将检测结果返回给前端,前端以统计图表和列表形式展示给用户,包括流量总数、正常数量、异常数量以及各攻击类型的分布统计。
图4.6 异常检测推理流程
4.3.3 注意力可视化功能
为了解决深度学习模型的"黑盒"可解释性问题,本模块在 models/attention_visualizer.py 中实现了注意力可视化功能,通过梯度计算展示模型对各流量特征的关注程度。
可视化实现的原理是基于梯度的显著性方法(Gradient-based Saliency)。具体步骤如下:首先,对模型的输入张量启用梯度计算(requires_grad=True),执行前向传播得到模型的输出 logits;然后,取预测类别对应的 logit 值作为标量损失,对该损失进行反向传播(loss.backward()),计算输入张量的梯度;接着,取梯度的绝对值并在通道维度上求平均,得到 (224, 224) 的显著性图(Saliency Map),反映模型对输入图像各位置的关注程度。
由于输入图像是由42维流量特征转换而来的"伪图像",需要将显著性图映射回原始的流量特征维度。系统将 224×224 的显著性图划分为 8×8 的网格(每个网格块为 28×28 像素),计算每个网格块内显著性的均值,得到64维的特征重要性向量;然后取前42维(对应实际的42个流量特征),得到每个原始特征对预测结果的贡献值。
最后,系统根据贡献值排序,使用 Matplotlib 绘制水平条形图,展示模型最关注的 Top 20 特征。条形图中,每个特征使用中文名称标注(如"流持续时间"、"源包数"、"速率"等),条形的长度表示贡献值的大小,颜色使用 YlOrRd 色图映射贡献值的归一化值,贡献值越大颜色越深。这样用户就能直观地看到模型是根据哪些特征判断该流量为攻击,让检测结果更可信,有效解决了模型的"黑盒"问题。
图4.7 注意力可视化结果图
4.4 安全防御与日志报告模块
4.4.1 黑白名单防御策略
本模块在 core/defense_engine.py 中实现了黑白名单的防御策略管理功能。
黑名单管理:检测到异常流量后,用户可在前端的安全策略页面将异常 IP 加入黑名单。后端的 add_to_blacklist 函数接收 IP 地址、封禁原因和用户ID,首先检查该 IP 是否已在当前用户的黑名单中(避免重复添加),如果不存在则创建一条黑名单记录,is_simulated 字段设为 True 表示模拟封禁。用户也可选择封禁的生效方式:immediate=True 时立即生效,系统执行封禁操作并记录安全日志;immediate=False 时跳过本次执行,仅记录但不封禁,满足用户临时拦截或观察的需求。管理员可查看和删除所有用户的黑名单记录,普通用户只能管理自己的记录。
白名单管理:用户可将信任的 IP 加入白名单,白名单 IP 的流量会直接跳过异常检测,不会被拦截。add_to_whitelist 函数同样检查重复性后创建白名单记录,支持备注信息。管理员可管理所有白名单,普通用户只能管理自己的。
防御策略推荐:系统在 defense_engine.py 中定义了 ATTACK_STRATEGY 字典,为9种攻击类型提供了对应的防御策略建议。例如,DoS 攻击建议"封禁 IP、启用限流、检查带宽异常",Reconnaissance 攻击建议"封禁 IP、限制端口扫描、加强访问控制",Exploits 攻击建议"封禁 IP、检查系统漏洞、加强补丁更新"等。这些策略建议会在检测结果和 PDF 报告中展示,帮助用户快速采取防御措施。
图4.8 安全策略页界面截图
4.4.2 安全事件日志管理
系统在 services/log_service.py 中实现了安全事件日志的记录功能。log_event 函数接收事件类型、用户ID、操作目标和详情四个参数,创建一条 SecurityLog 记录并存入数据库。系统自动记录的安全事件包括:用户登录(user_login)、用户退出(user_logout)、黑名单添加(blacklist_add)、黑名单移除(blacklist_remove)、白名单添加(whitelist_add)、白名单移除(whitelist_remove)、报告导出(report_exported)和流量记录删除(flow_record_deleted)等。管理员可在日志管理页面查看所有用户的操作日志,按事件类型和时间筛选,追溯操作历史,进行安全审计。普通用户只能查看自己的日志记录。
4.4.3 安全报告生成功能
检测完成后,用户可在报告页面生成 PDF 格式的安全报告。系统在 core/report_generator.py 中使用 ReportLab 库生成报告,报告包含六个部分:一、检测结果概览(流量总数、正常数量、异常数量的汇总表格);二、攻击类型统计(各攻击类型及对应数量的统计表格);三、检测结果明细(异常流量的序号、攻击类型、IP地址和置信度的明细表格,最多展示50条);四、抓包数据(IP统计、端口统计和抓包明细表格);五、注意力图(特征关注度条形图,以图片形式嵌入报告);六、安全实施策略建议(根据检测到的攻击类型,从 ATTACK_STRATEGY 字典中提取对应的防御建议)。报告支持中文字体显示,自动检测系统可用的中文字体(Windows 优先使用黑体,macOS 使用苹方,Linux 使用文泉驿)。生成的 PDF 文件保存在 static/reports 目录,用户可通过前端下载。
图4.9 PDF安全报告示例截图
4.5 前后端交互设计
系统的前后端交互基于 RESTful API 风格设计,前端使用 Axios 库发送 HTTP 请求,请求配置中设置 withCredentials: true,自动携带 Cookie 中的 Session ID 用于身份标识。后端的 API 接口统一返回 {code, msg, data} 格式的 JSON 响应,code 为0表示成功,非0表示失败,msg 为提示信息,data 为业务数据,前端根据 code 判断请求是否成功并做相应处理。
前端在 api/request.js 中封装了 Axios 实例,设置了30秒的超时时间,并添加了响应拦截器:当后端返回401状态码(未登录)时,自动跳转到登录页面。前端的路由守卫(router.beforeEach)在每次页面跳转前检查用户的登录状态和角色权限:未登录用户自动跳转到登录页,普通用户无法访问管理员页面(/admin/),管理员无法访问普通用户页面(/detection、/security 等),实现了完整的权限隔离。
后端通过 Flask-CORS 配置跨域策略,仅允许前端开发服务器(localhost:5173)的跨域请求,并支持携带凭证(supports_credentials=True)。所有需要登录的接口都使用 login_required 装饰器保护,管理员专属接口使用 admin_required 装饰器保护,未登录或无权限的请求返回401或403状态码。
图4-4 前后端交互时序图
4.6 本章小结
本章详细介绍了系统各核心功能模块的实现。用户认证与权限管理模块实现了注册登录、滑动验证码、登录限制和会话管理功能;流量采集与预处理模块实现了实时抓包、文件上传和数据清洗编码标准化功能;异常检测与可视化模块实现了流量特征转图像、批量推理和注意力可视化功能;安全防御与日志报告模块实现了黑白名单管理、安全日志记录和 PDF 报告生成功能;前后端交互设计实现了统一的接口规范和权限控制。所有功能均已按照设计完成,覆盖了系统的所有需求,完成了系统的开发工作。
第 5 章 模型训练与实验结果分析
5.1 实验数据集介绍
本项目使用 UNSW-NB15 数据集作为模型训练与评估的数据集。UNSW-NB15 是网络安全领域广泛使用的标准公开数据集,由澳大利亚网络安全中心(Australian Centre for Cyber Security)利用 IXIA PerfectStorm 工具在真实网络环境中采集生成。该数据集包含了正常流量和9种常见的网络攻击流量,共计10个类别,涵盖了当前网络环境中主要的攻击类型,被广泛用于评估异常流量检测模型的性能。
数据集的10个类别及其样本分布如表5-1所示。
表5-1 UNSW-NB15 数据集类别分布
|----------------|--------------|--------------|------------|
| 类别 | 中文名称 | 样本数量 | 占比 |
| Normal | 正常流量 | 37000 | 44.94% |
| Generic | 通用攻击 | 18871 | 22.92% |
| Exploits | 漏洞利用 | 11132 | 13.52% |
| Fuzzers | 模糊测试 | 6062 | 7.36% |
| DoS | 拒绝服务 | 4089 | 4.97% |
| Reconnaissance | 侦察攻击 | 3496 | 4.25% |
| Analysis | 分析攻击 | 677 | 0.82% |
| Backdoor | 后门攻击 | 583 | 0.71% |
| Shellcode | Shellcode攻击 | 378 | 0.46% |
| Worms | 蠕虫攻击 | 44 | 0.05% |
| 合计 | | 82332 | 100% |
从表5-1可以看出,数据集存在明显的类别不平衡问题。Normal 和 Generic 两个类别占据了总样本的67.86%,而 Worms 仅有44条样本,占比不足0.1%。这种类别不平衡是网络流量数据的固有特征,也是模型训练面临的主要挑战之一。
5.2 模型训练流程设计
5.2.1 数据划分与采样处理
由于原始 UNSW-NB15 数据集的类别不平衡问题严重,稀有攻击类别(如 Worms 仅44条、Shellcode 仅378条)的样本极少,如果直接使用全量82332条数据训练,模型会偏向样本数量多的大类(Normal、Generic),导致小类别的检测效果很差。此外,全量数据训练需要大量的内存和计算资源,容易导致内存溢出(OOM)。
为解决上述问题,本项目在训练流程中采用了分层采样策略。首先从全量82332条数据中按类别比例分层采样20000条样本(TRAIN_MAX_SAMPLES=20000),采样时保证各个类别的比例与原始数据一致,即 Normal 类别采样约9000条,Worms 类别采样约11条,其他类别按比例采样。分层采样通过 Scikit-learn 的 train_test_split 函数实现,设置 stratify 参数为标签列,确保采样后各类别的比例不变。
采样完成后,将20000条样本按8:2的比例划分为训练集(16000条)和验证集(4000条),同样使用分层划分(stratify=y),保证训练集和验证集的类别比例一致,确保评估结果的准确性。
图5-1 模型训练整体流程图
5.2.2 训练参数与优化策略
模型训练的关键参数与优化策略如下:
优化器:使用 AdamW 优化器,学习率设为1e-4。相比普通的 Adam 优化器,AdamW 采用解耦的权重衰减(Decoupled Weight Decay),能够更有效地防止过拟合,在 Transformer 类模型的训练中表现更优。
损失函数:使用交叉熵损失函数(CrossEntropyLoss),适合多分类任务,能够衡量模型预测的概率分布与真实标签之间的差异。
批次大小:设为64(TRAIN_BATCH_SIZE=64),在GPU显存允许的范围内尽量增大批次,提高训练效率。
训练轮数与早停:最大训练轮数设为50(TRAIN_EPOCHS=50),早停耐心值设为10(TRAIN_PATIENCE=10)。每个 epoch 训练完成后,在验证集上评估验证损失,如果验证损失较历史最优值有改善,则保存当前模型参数为最佳模型;如果连续10个 epoch 验证损失无改善,则提前停止训练,防止过拟合。
混合精度训练:在 GPU 环境下启用混合精度训练(TRAIN_USE_AMP=True),使用 torch.amp.autocast 和 GradScaler,将部分计算从 FP32 降为 FP16,在保证模型精度的前提下加速训练约2倍。
数据加载优化:DataLoader 的工作进程数设为0(TRAIN_NUM_WORKERS=0),兼容 Windows 平台;在 Linux 环境下可设为4,利用多进程加速数据加载。
5.3 训练过程与结果分析
5.3.1 训练过程分析
模型在 GPU(CUDA)环境下进行训练,实际训练过程如下:
训练从第1个 epoch 开始,初始训练损失为1.0982,训练准确率为62.81%,验证损失为0.6949,验证准确率为75.80%。随着训练的进行,损失逐渐降低,准确率逐渐提高。第5个 epoch 时验证准确率突破84%,第10个 epoch 时验证损失降至0.4048,验证准确率达到85.22%。第15个 epoch 时验证损失进一步降至0.3847,验证准确率达到85.92%。第22个 epoch 时验证损失降至0.3756,验证准确率达到85.75%,为训练过程中的最佳验证损失。
从第23个 epoch 开始,验证损失不再改善,连续10个 epoch 验证损失均未低于0.3756。根据早停策略,训练在第32个 epoch 结束(第22个 epoch 后连续10轮无改善),最终训练损失为0.3267,训练准确率为87.15%。系统自动恢复第22个 epoch 保存的最佳模型参数,模型权重保存为 swin_detector.pt 文件。
训练过程中,训练损失从1.0982持续下降至0.3267,训练准确率从62.81%上升至87.15%;验证损失从0.6949下降至0.3756后趋于平稳,验证准确率从75.80%上升至85.75%后波动不大。训练曲线整体呈现良好的收敛趋势,没有出现严重的过拟合现象,早停策略有效地在模型性能最佳时终止了训练。
图5-2 训练/验证损失与准确率曲线
5.3.2 模型评估结果分析
使用评估脚本(scripts/evaluate_model.py)在验证集(4000条样本)上对训练好的模型进行评估,评估结果如下:
总体性能:模型总体准确率为85.75%,加权F1分数为84.65%,达到了预期的85%以上的准确率目标。
表5-2 各类别检测性能指标
|----------------|-------------|-------------|--------------|-------------|
| 类别 | 精确率 | 召回率 | F1分数 | 样本数 |
| Normal | 0.9413 | 0.9816 | 0.9610 | 1797 |
| Generic | 0.9944 | 0.9727 | 0.9835 | 917 |
| Exploits | 0.6239 | 0.7726 | 0.6903 | 541 |
| Fuzzers | 0.7467 | 0.5695 | 0.6462 | 295 |
| DoS | 0.3846 | 0.2513 | 0.3040 | 199 |
| Reconnaissance | 0.7158 | 0.7706 | 0.7422 | 170 |
| Analysis | 0.0000 | 0.0000 | 0.0000 | 33 |
| Backdoor | 0.0000 | 0.0000 | 0.0000 | 28 |
| Shellcode | 0.3333 | 0.3889 | 0.3590 | 18 |
| Worms | 0.0000 | 0.0000 | 0.0000 | 2 |
从表5-2可以看出,模型在不同类别上的表现差异较大:
高精度类别:Normal 类别的精确率94.13%、召回率98.16%、F1分数96.10%,Generic 类别的精确率99.44%、召回率97.27%、F1分数98.35%,这两个类别的检测效果优秀,主要原因是样本数量充足,模型能够学习到充分的特征表示。
中等精度类别:Exploits 的F1分数为69.03%,Reconnaissance 的F1分数为74.22%,Fuzzers 的F1分数为64.62%,这三个类别具有一定的检测能力,但仍有提升空间。
低精度类别:DoS 的F1分数仅为30.40%,Analysis、Backdoor 和 Worms 三个类别的精确率、召回率和F1分数均为0,模型完全无法识别这三个类别。这主要是因为这些类别的样本数量极少(Analysis 33条、Backdoor 28条、Worms 仅2条),即使经过分层采样,模型也难以从如此少的样本中学习到有效的特征模式。
宏平均与加权平均:宏平均精确率为47.40%,宏平均F1分数为46.86%,说明模型在小样本类别上的表现拉低了整体均值;加权平均精确率为84.14%,加权平均F1分数为84.65%,说明模型在大样本类别上的表现较好,加权指标受大类别影响更大。
5.3.3 混淆矩阵分析
混淆矩阵能够直观展示模型在各类别之间的混淆情况。从混淆矩阵可以看出,Normal 类别的1797条样本中,1764条被正确分类,仅有33条被误分类;Generic 类别的917条样本中,892条被正确分类。而 DoS 类别的199条样本中,仅50条被正确分类,大量样本被误分为 Exploits 和 Normal;Analysis 的33条样本全部被误分为其他类别,无一条正确识别。这些混淆情况与类别间的特征相似性和样本数量不足密切相关,是后续改进的重点方向。
图5-3 混淆矩阵
图5-4 各类别准确率柱状
5.4 本章小结
本章介绍了模型的训练与实验结果。首先介绍了 UNSW-NB15 数据集的来源和类别分布;然后详细描述了数据划分与分层采样处理、训练参数与优化策略的设计;接着分析了训练过程的收敛情况,模型在第22个 epoch 达到最佳验证损失0.3756,通过早停策略在第32个 epoch 终止训练;最后对模型评估结果进行了详细分析,模型总体准确率为85.75%,加权F1分数为84.65%,达到了预期目标,但在小样本类别上表现较差,这是类别不平衡问题的固有挑战,也是未来改进的方向。
6 总结与展望
6 .1 总结
本项目针对传统规则化异常流量检测方案漏报率高、维护成本高的痛点,完成了从需求分析、系统设计、功能开发、模型训练到系统测试的全流程工作,最终实现了一套完整的基于注意力机制的异常流量检测与自动防御系统。系统采用前后端分离架构,实现了多源流量采集、数据预处理、Swin Transformer 异常检测、注意力可视化、黑白名单防御及 PDF 安全报告生成等全部核心功能。模型基于 UNSW-NB15 数据集训练完成,总体检测准确率达到 85.75%,加权 F1 值达到 84.65%,可有效识别常见网络攻击类型。所有核心功能均通过测试验证,系统运行稳定,操作流程简洁,能够满足普通用户的日常网络安全防护需求,顺利完成了本科毕业设计的既定任务。
6 .2 未来展望
当前系统仍存在部分可优化的空间。针对稀有攻击类型检测效果不佳的问题,后续可引入数据增强技术扩充稀有样本,或采用更大规模的多源数据集重新训练模型,提升模型的泛化能力。针对防御功能的落地性问题,可扩展系统接口,对接真实防火墙与路由器的管理 API,将模拟封禁升级为实际的网络流量拦截。同时可进一步优化模型推理流程,采用模型量化、剪枝等技术压缩模型体积,提升单条流量的检测速度,使系统能够支持更大规模流量数据的实时处理。
致 谢
本论文与项目的顺利完成,离不开指导老师的悉心指导。从最初的选题方向确定、系统整体架构设计,到开发过程中技术难点的攻克,再到论文的结构调整与内容打磨,指导老师都给予了细致且专业的建议,为项目的顺利推进指明了方向。
感谢学院各位授课老师的辛勤教学,在校期间的专业课程学习为项目开发奠定了扎实的理论与技术基础。感谢同专业同学在开发过程中的交流与帮助,大家相互探讨问题、分享经验,有效加快了项目的开发进度。同时感谢家人的理解与支持,为论文写作提供了稳定的环境。
感谢学校提供的实验平台与学习资源,保障了模型训练与系统测试工作的顺利开展。由于个人能力有限,论文中难免存在疏漏之处,恳请各位评审老师批评指正。








