Prathamesh-043/ddos-traffic-detector
GitHub: Prathamesh-043/ddos-traffic-detector
该项目使用Random Forest和LSTM模型对网络流特征进行二分类,检测SYN Flood型DDoS攻击,并系统对比传统机器学习与深度学习在该任务上的性能差异。
Stars: 1 | Forks: 0
# 使用 Random Forest 和 LSTM 进行 DDoS 流量检测




## 概述
本项目探讨了使用传统机器学习模型(Random Forest)和深度学习模型(LSTM)来检测 SYN Flood 分布式拒绝服务(DDoS)攻击。
该项目最初是作为大学的小型项目开发的,后来扩展为一项关于网络入侵检测中传统机器学习和深度学习方法的比较研究。
主要目标是将网络流量分类为:
* 正常流量
* SYN Flood 攻击流量
并评估在处理网络流特征时,更复杂的深度学习模型是否比简单的机器学习模型具有显著优势。
## 数据集
该数据集由网络流量记录组成,包含从数据包捕获中提取的统计特征。
### 原始数据集统计
| 流量类型 | 记录数 |
| ------------ | --------- |
| SYN Flood | 1,582,289 |
| 正常流量 | 392 |
| 总计 | 1,582,681 |
该数据集严重不平衡,攻击流量数量远超正常流量。
### 数据集平衡
为了确保训练和评估的公平性,对攻击类别应用了随机欠采样。
最终平衡的数据集:
| 类别 | 样本数 |
| --------- | ------- |
| 正常流量 | 392 |
| SYN Flood | 392 |
| 总计 | 784 |
## 数据预处理
预处理 pipeline 包括:
### 时间戳处理
* 将时间戳转换为 datetime 格式
* 按时间顺序对流量进行排序
### 特征工程
创建了两个额外的特征:
#### Packet Rate
一个流内的数据包传输速率。
```
Packet_Rate = Total_Fwd_Packets / Flow_Duration
```
#### Time Difference
连续网络流之间的时间间隔。
```
Time_Diff = Difference between consecutive timestamps
```
### 数据清洗
* 替换了无限值
* 处理了缺失值
* 移除了无效条目
### 标签编码
```
BENIGN → 0
SYN Flood → 1
```
## 使用的特征
两个模型都使用相同的特征集进行训练,以确保比较的公平性。
* Total Fwd Packets
* Total Backward Packets
* Flow Duration
* Flow Bytes/s
* Flow Packets/s
* Flow IAT Mean
* Flow IAT Std
* Flow IAT Max
* Packet Length Mean
* Packet Length Std
* Fwd Packets/s
* Bwd Packets/s
* SYN Flag Count
* ACK Flag Count
* Packet_Rate
* Time_Diff
## 实现的模型
### Random Forest
Random Forest 是一种基于多棵决策树的集成机器学习算法。
配置:
```
n_estimators = 200
max_depth = 10
random_state = 42
```
优势:
* 训练速度快
* 可解释性高
* 在表格数据集上表现强劲
### LSTM (Long Short-Term Memory)
LSTM 是一种递归神经网络架构,专为序列数据和时间模式学习而设计。
架构:
```
LSTM Layer (64 Units)
Dropout (0.2)
Dense Layer (16 Units)
Output Layer (Sigmoid)
```
训练配置:
```
Optimizer: Adam
Loss Function: Binary Crossentropy
Sequence Length: 20
Early Stopping Enabled
```
优势:
* 学习时间依赖性
* 捕获网络流量中的序列行为
* 对时间序列分析有效
## 结果
### Random Forest
准确率:**99.36%**
混淆矩阵:
```
[[32 0]
[ 1 124]]
```
### LSTM
准确率:**99.27%**
混淆矩阵:
```
[[22 0]
[ 1 114]]
```
## 模型比较
| 指标 | Random Forest | LSTM |
| ------------------- | ------------- | ------ |
| 准确率 | 99.36% | 99.27% |
| 假阳性 | 0 | 0 |
| 假阴性 | 1 | 1 |
| 训练复杂度 | 低 | 高 |
| 训练时间 | 快 | 较慢 |
| 可解释性 | 高 | 低 |
| 序列学习 | 否 | 是 |
## 主要发现
* 两个模型在平衡数据集上的准确率均达到了 99% 以上。
* 尽管结构显著更简单,但 Random Forest 的表现略优于 LSTM。
* 选定的网络流量特征已经包含了强大的判别信息。
* 对于该数据集,深度学习并未带来实质性的性能提升。
* 由于计算要求较低,传统机器学习模型对于轻量级 DDoS 检测系统可能更具实用性。
## 项目结构
```
ddos-traffic-detector/
│
├── prepare_data.py
├── random_forest.py
├── lstm.py
├── balanced_data.csv
├── requirements.txt
└── README.md
```
## 安装说明
克隆代码库:
```
git clone https://github.com/Prathamesh-043/ddos-traffic-detector.git
```
进入项目目录:
```
cd ddos-traffic-detector
```
安装依赖项:
```
pip install -r requirements.txt
```
## 运行项目
生成平衡数据集:
```
python prepare_data.py
```
训练并评估 Random Forest 模型:
```
python random_forest.py
```
训练并评估 LSTM 模型:
```
python lstm.py
```
## 未来改进
* 集成实时数据包捕获
* 多分类攻击分类
* 在更大的平衡数据集上进行评估
* 与其他机器学习模型(如 XGBoost)进行比较
* CNN-LSTM 混合架构
* 用于网络监控应用的轻量级部署
## 作者
**Prathamesh Borane**
电子与通信工程 (ECE)
本项目旨在探索和比较用于网络入侵和 DDoS 攻击检测的传统机器学习与深度学习技术。
标签:Apex, DDoS检测, LSTM, Python, 无后门, 机器学习, 深度学习, 网络安全, 逆向工具, 随机森林, 隐私保护