🚀 基于机器学习的KDD CUP 99网络入侵检测系统实战
关注B站:麦麦大数据
编号: F065
摘要:本文介绍了一个基于机器学习的网络入侵检测系统(IDS),采用Vue2 + Flask前后端分离架构,使用KDD CUP 99数据集,支持决策树、KNN、朴素贝叶斯、BP神经网络四种算法,提供单条检测、批量检测、模型训练等核心功能。系统采用香槟金暗色主题设计,具有良好的用户体验。
📚 目录
一、项目概述
1.1 背景介绍
网络入侵检测系统(Intrusion Detection System,IDS)是网络安全的重要组成部分。随着网络攻击手段日益复杂,传统的基于规则的攻击检测已经难以满足需求。机器学习技术的引入,使得IDS能够通过学习正常流量和攻击流量的特征模式,自动识别未知攻击。
KDD CUP 99数据集是网络入侵检测领域最经典的数据集之一,包含约500万条网络连接记录,每条记录有41个特征属性,标记为正常或具体攻击类型。
1.2 项目简介
本项目是一个基于机器学习的网络入侵检测系统,采用前后端分离架构:
- 前端:Vue 2 + Element UI + ECharts
- 后端:Flask + MySQL + Scikit-learn + PyTorch
- 算法:决策树、K近邻(KNN)、朴素贝叶斯、BP神经网络

二、技术架构
2.1 系统架构图
┌─────────────────────────────────────────────────────┐
│ 前端 (Vue2) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 仪表盘 │ │ 入侵检测 │ │ 模型管理 │ │ 数据可视化│ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────────────┘
│
Axios API
│
┌─────────────────────────────────────────────────────┐
│ 后端 (Flask) │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 用户模块 │ │ 检测模块 │ │ 模型模块 │ │ 数据模块 │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
│ │ │
│ MySQL 数据库 │
└─────────────────────────────────────────────────────┘
2.2 核心技术栈
| 层级 | 技术选型 | 说明 |
|---|---|---|
| 前端框架 | Vue 2.6 | 渐进式JavaScript框架 |
| UI组件 | Element UI 2.15 | 桌面端组件库 |
| 图表 | ECharts 5.5 | 可视化图表库 |
| 状态管理 | Vuex | 状态管理模式 |
| 后端框架 | Flask | Python轻量级Web框架 |
| 数据库 | MySQL | 关系型数据库 |
| 机器学习 | Scikit-learn | Python机器学习库 |
| 深度学习 | PyTorch | 深度学习框架 |
三、核心功能
3.1 用户模块
- ✅ 用户注册/登录
- ✅ Session状态管理
- ✅ 头像上传
- ✅ 个人信息修改
3.2 检测模块
单条检测
支持41个网络连接特征输入,选择不同算法进行实时检测:
| 特征类别 | 主要特征 |
|---|---|
| 基本特征 | duration, protocol_type, service, flag |
| 字节特征 | src_bytes, dst_bytes |
| 流量特征 | count, srv_count |
| 错误率 | serror_rate, rerror_rate |
支持选择:
- 算法:决策树、KNN、朴素贝叶斯、BP神经网络
- 分类:二分类(Normal/Attack)、多分类(具体攻击类型)

批量检测
支持CSV文件批量上传,自动处理并保存检测结果到数据库。

3.3 模型模块
模型训练
- 批量训练所有算法模型
- 异步处理大数据集
- 训练进度实时反馈

模型评估
- 准确率(Accuracy)
- 精确率(Precision)
- 召回率(Recall)
- F1分数
- 混淆矩阵可视化
- ROC曲线、P-R曲线

3.4 数据模块
- KDD CUP 99数据集导入
- 异步导入(支持百万级数据)
- 导入进度实时显示
- 数据统计分析


3.5 可视化模块
- 攻击类型分布(环形饼图)
- 协议类型分布(南丁格尔玫瑰图)
- 服务类型分布(渐变柱状图)

四、界面展示
4.1 登录页面
采用香槟金暗色主题设计,包含流星雨背景动画和扫描线效果。


4.2 仪表盘
展示系统核心指标和图表:
- 总检测次数
- 今日检测
- 检测到攻击
- 已训练模型

4.3 检测日志
记录所有检测历史,支持分页查询。

4.4 用户管理
用户CRUD操作,支持搜索和分页。

五、核心代码实现
5.1 机器学习模型基类
python
class BaseModel:
def __init__(self, name, category=2):
self.name = name
self.category = category
self.model = None
self.model_path = os.path.join(MODEL_DIR, f"{category}_{name}")
def predict(self, X):
if self.model is None:
self.load()
return self.model.predict(X)
def predict_proba(self, X):
if self.model is None:
self.load()
return self.model.predict_proba(X)
📝 获取完整源码 :请联系麦麦大数据获取
5.2 BP神经网络模型
使用PyTorch实现的BP神经网络:
python
class BPModel(BaseModel):
def __init__(self, category=2, input_dim=41, hidden_dims=[20]):
super().__init__("bp", category)
self.input_dim = input_dim
self.hidden_dims = hidden_dims
def _build_model(self):
layers = []
prev_dim = self.input_dim
for hidden_dim in self.hidden_dims:
layers.append(torch.nn.Linear(prev_dim, hidden_dim))
layers.append(torch.nn.ReLU())
prev_dim = hidden_dim
layers.append(torch.nn.Linear(prev_dim, self.category))
return torch.nn.Sequential(*layers)
def train(self, X, y, epochs=100, lr=0.01):
# 训练逻辑
self.model = self._build_model()
# ... 训练过程
self.save()
📝 获取完整源码 :请联系麦麦大数据获取
5.3 检测接口
python
@detect_bp.route("/predict", methods=["POST"])
def predict():
data = request.json
features = preprocess_features(data)
model = get_model(algorithm, category)
model.load()
prediction = model.predict(features)[0]
proba = model.predict_proba(features)[0]
label = "Normal" if prediction == 0 else "Attack"
# 保存检测日志
log = DetectionLog(prediction=label, confidence=float(max(proba)), ...)
db.session.add(log)
db.session.commit()
return make_response(code=0, data={
"prediction": label,
"confidence": float(max(proba))
})
5.4 前端检测组件
vue
<template>
<el-form :model="form" label-width="150px">
<el-form-item label="选择算法">
<el-select v-model="form.algorithm">
<el-option label="决策树" value="tree"></el-option>
<el-option label="KNN" value="knn"></el-option>
<el-option label="朴素贝叶斯" value="bayes"></el-option>
<el-option label="BP神经网络" value="bp"></el-option>
</el-select>
</el-form-item>
</el-form>
</template>
📝 获取完整源码 :请联系麦麦大数据获取
六、快速开始
6.1 环境准备
bash
# Python环境
Python >= 3.8
# Node环境
Node.js >= 14
# 数据库
MySQL >= 5.7
6.2 后端启动
bash
cd kddcup-ids-flask
# 安装依赖
pip install -r requirements.txt
# 配置数据库
# 修改 config.py 中的数据库连接信息
# 启动服务
python run.py
6.3 前端启动
bash
cd kddcup-ids-vue
# 安装依赖
npm install
# 启动开发服务器
npm run serve
6.4 使用流程
- 注册/登录 - 创建账户
- 导入数据 - 上传KDD CUP 99数据集
- 训练模型 - 选择分类类型,训练检测模型
- 入侵检测 - 单条或批量检测网络流量
- 查看结果 - 检测日志和数据分析
七、总结
7.1 项目亮点
- 前后端分离架构 - 良好的可维护性和扩展性
- 多种机器学习算法 - 决策树、KNN、朴素贝叶斯、BP神经网络
- 香槟金暗色主题 - 现代化UI设计,流星雨动画效果
- 异步处理 - 大数据集导入和模型训练不阻塞主线程
- ECharts可视化 - 直观的数据展示
7.2 后续优化方向
- 🔄 增加更多检测算法(如SVM、Random Forest)
- 🔄 支持实时网络流量捕获
- 🔄 添加告警通知功能
- 🔄 优化模型性能
🙏 致谢
感谢KDD CUP 99数据集的提供者,感谢开源社区的无私奉献。
关注B站:麦麦大数据
获取更多技术干货,请关注麦麦大数据!
本文首发于CSDN,未经允许禁止转载