# CNN_NIDS **Repository Path**: lingeroin/cnn_nids ## Basic Information - **Project Name**: CNN_NIDS - **Description**: No description available - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-11-29 - **Last Updated**: 2025-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CNN_NIDS ## 介绍 大学课程期末项目,基于CNN的网络入侵检测系统 **当前状态:** ✅ 优化训练已完成 ### 项目成员与分工 - **Xu** ✅ - 优化CNN模型训练(已完成) - **Tang** ✅ - 数据可视化与分析(可以开始) - **Long** ⏳ - Streamlit前端开发(待开始) ### 训练数据集 CIC-IDS2017 http://cicresearch.ca/CICDataset/CIC-IDS-2017/Dataset/CIC-IDS-2017/CSVs/ #### TrafficLabelling特征 ``` 1. 'Flow ID' * 2. ' Source IP' * 3. ' Source Port' * 4. ' Destination IP' * 5. ' Destination Port' * 6. ' Protocol' * 7. ' Timestamp' * 8. ' Flow Duration' * 9. ' Total Fwd Packets' * 10. ' Total Backward Packets' 11. 'Total Length of Fwd Packets' * 12. ' Total Length of Bwd Packets' * 13. ' Fwd Packet Length Max' * 14. ' Fwd Packet Length Min' * 15. ' Fwd Packet Length Mean' * 16. ' Fwd Packet Length Std' 17. 'Bwd Packet Length Max' * 18. ' Bwd Packet Length Min' * 19. ' Bwd Packet Length Mean' * 20. ' Bwd Packet Length Std' 21. 'Flow Bytes/s' * 22. ' Flow Packets/s' * 23. ' Flow IAT Mean' * 24. ' Flow IAT Std' * 25. ' Flow IAT Max' * 26. ' Flow IAT Min' 27. 'Fwd IAT Total' * 28. ' Fwd IAT Mean' * 29. ' Fwd IAT Std' * 30. ' Fwd IAT Max' * 31. ' Fwd IAT Min' 32. 'Bwd IAT Total' * 33. ' Bwd IAT Mean' * 34. ' Bwd IAT Std' * 35. ' Bwd IAT Max' * 36. ' Bwd IAT Min' 37. 'Fwd PSH Flags' * 38. ' Bwd PSH Flags' * 39. ' Fwd URG Flags' * 40. ' Bwd URG Flags' * 41. ' Fwd Header Length' * 42. ' Bwd Header Length' 43. 'Fwd Packets/s' * 44. ' Bwd Packets/s' * 45. ' Min Packet Length' * 46. ' Max Packet Length' * 47. ' Packet Length Mean' * 48. ' Packet Length Std' * 49. ' Packet Length Variance' 50. 'FIN Flag Count' * 51. ' SYN Flag Count' * 52. ' RST Flag Count' * 53. ' PSH Flag Count' * 54. ' ACK Flag Count' * 55. ' URG Flag Count' * 56. ' CWE Flag Count' * 57. ' ECE Flag Count' * 58. ' Down/Up Ratio' * 59. ' Average Packet Size' * 60. ' Avg Fwd Segment Size' * 61. ' Avg Bwd Segment Size' * 62. ' Fwd Header Length.1' 63. 'Fwd Avg Bytes/Bulk' * 64. ' Fwd Avg Packets/Bulk' * 65. ' Fwd Avg Bulk Rate' * 66. ' Bwd Avg Bytes/Bulk' * 67. ' Bwd Avg Packets/Bulk' 68. 'Bwd Avg Bulk Rate' 69. 'Subflow Fwd Packets' * 70. ' Subflow Fwd Bytes' * 71. ' Subflow Bwd Packets' * 72. ' Subflow Bwd Bytes' 73. 'Init_Win_bytes_forward' * 74. ' Init_Win_bytes_backward' * 75. ' act_data_pkt_fwd' * 76. ' min_seg_size_forward' 77. 'Active Mean' * 78. ' Active Std' * 79. ' Active Max' * 80. ' Active Min' 81. 'Idle Mean' * 82. ' Idle Std' * 83. ' Idle Max' * 84. ' Idle Min' * 85. ' Label' ``` #### /workspace/MachineLearningCVE特征 ``` * 1. ' Destination Port' * 2. ' Flow Duration' * 3. ' Total Fwd Packets' * 4. ' Total Backward Packets' 5. 'Total Length of Fwd Packets' * 6. ' Total Length of Bwd Packets' * 7. ' Fwd Packet Length Max' * 8. ' Fwd Packet Length Min' * 9. ' Fwd Packet Length Mean' * 10. ' Fwd Packet Length Std' 11. 'Bwd Packet Length Max' * 12. ' Bwd Packet Length Min' * 13. ' Bwd Packet Length Mean' * 14. ' Bwd Packet Length Std' 15. 'Flow Bytes/s' * 16. ' Flow Packets/s' * 17. ' Flow IAT Mean' * 18. ' Flow IAT Std' * 19. ' Flow IAT Max' * 20. ' Flow IAT Min' 21. 'Fwd IAT Total' * 22. ' Fwd IAT Mean' * 23. ' Fwd IAT Std' * 24. ' Fwd IAT Max' * 25. ' Fwd IAT Min' 26. 'Bwd IAT Total' * 27. ' Bwd IAT Mean' * 28. ' Bwd IAT Std' * 29. ' Bwd IAT Max' * 30. ' Bwd IAT Min' 31. 'Fwd PSH Flags' * 32. ' Bwd PSH Flags' * 33. ' Fwd URG Flags' * 34. ' Bwd URG Flags' * 35. ' Fwd Header Length' * 36. ' Bwd Header Length' 37. 'Fwd Packets/s' * 38. ' Bwd Packets/s' * 39. ' Min Packet Length' * 40. ' Max Packet Length' * 41. ' Packet Length Mean' * 42. ' Packet Length Std' * 43. ' Packet Length Variance' 44. 'FIN Flag Count' * 45. ' SYN Flag Count' * 46. ' RST Flag Count' * 47. ' PSH Flag Count' * 48. ' ACK Flag Count' * 49. ' URG Flag Count' * 50. ' CWE Flag Count' * 51. ' ECE Flag Count' * 52. ' Down/Up Ratio' * 53. ' Average Packet Size' * 54. ' Avg Fwd Segment Size' * 55. ' Avg Bwd Segment Size' * 56. ' Fwd Header Length.1' 57. 'Fwd Avg Bytes/Bulk' * 58. ' Fwd Avg Packets/Bulk' * 59. ' Fwd Avg Bulk Rate' * 60. ' Bwd Avg Bytes/Bulk' * 61. ' Bwd Avg Packets/Bulk' 62. 'Bwd Avg Bulk Rate' 63. 'Subflow Fwd Packets' * 64. ' Subflow Fwd Bytes' * 65. ' Subflow Bwd Packets' * 66. ' Subflow Bwd Bytes' 67. 'Init_Win_bytes_forward' * 68. ' Init_Win_bytes_backward' * 69. ' act_data_pkt_fwd' * 70. ' min_seg_size_forward' 71. 'Active Mean' * 72. ' Active Std' * 73. ' Active Max' * 74. ' Active Min' 75. 'Idle Mean' * 76. ' Idle Std' * 77. ' Idle Max' * 78. ' Idle Min' * 79. ' Label' ``` 运行cnn_nids/src/data_process.py处理原始数据集 运行cnn_nids/src/read_processed_data.py查看处理后的数据集情况: 76.41%的Benign样本比例符合CIC-IDS2017数据集的预期特性。这反映了真实网络环境中正常流量占主导的特点 ### 安装教程 python3.9环境,推荐uv或者miniconda管理多版本python 1. 克隆本项目 2. pip install -r requirements.txt 3. 运行 ## 快速开始 🚀 ### 环境准备 #### GPU环境(推荐) 本项目已优化支持CUDA GPU训练,支持Tesla T4等GPU: ```bash # 1. 创建虚拟环境(推荐) python -m venv venv source venv/bin/activate # Linux/Mac # 或 .\venv\Scripts\activate.bat # Windows # 2. 安装依赖(包含GPU支持) pip install -r requirements.txt # 3. 验证GPU支持 python -c "import tensorflow as tf; print(f'GPU可用: {tf.config.list_physical_devices(\"GPU\")}')" ``` #### CPU环境(备选) ```bash # 仅CPU训练 pip install tensorflow-cpu==2.20.0 pip install -r requirements.txt ``` ### 训练流程 ```powershell # 1. 数据处理(如果还没做) python src\data_process.py # 2. 模型训练(优化版本) python src\model_trainer_advanced.py # 3. 多模型对比(可选) python src\model_comparison.py ``` ### 查看结果 ```powershell # 打开结果目录 explorer models\results # 查看TensorBoard tensorboard --logdir=models\logs ``` ### 📚 详细文档 - **[模型训练说明.md](模型训练说明.md)** - 完整使用指南 - **[Xu任务完成总结.md](Xu任务完成总结.md)** - 工作总结与交付 - **[下一步建议.md](下一步建议.md)** - 团队任务分工 ### 已完成功能 ✅ #### Xu的任务(模型训练) - ✅ 优化CNN模型(`model_trainer_advanced.py`) - 4层卷积块,512个最大卷积核 - 批归一化 + L2正则化 + Dropout - 类别加权处理数据不平衡 - 学习率自适应衰减 - **混合精度训练(FP16)** - **A100 GPU优化(512批次大小)** - ✅ 完整评估体系 - F1-Score(宏平均/加权平均) - Precision、Recall - 无乱码混淆矩阵(英文标签) - 每个类别的详细报告 - **性能基准测试** - ✅ 多模型对比实验(`model_comparison.py`) - 5种不同模型架构对比 - 性能对比可视化 - 自动生成对比报告 #### Tang的任务(数据可视化)✅ Xu已提供所有必需文件: - `models/results/confusion_matrix_clean.png` - 无乱码混淆矩阵 - `models/results/performance_metrics_clean.png` - 性能对比图 - `models/results/class_distribution_clean.png` - 类别分布图 - `models/results/training_history_clean.png` - 训练历史 - `models/results/evaluation_metrics.json` - 详细指标 - `models/results/classification_report.txt` - 分类报告 #### Long的任务(前端开发)⏳ 等待前两项完成 ## 使用说明 1. 数据处理 到`http://cicresearch.ca/CICDataset/CIC-IDS-2017/Dataset/CIC-IDS-2017/CSVs/`把两个zip文件下载,解压后的两个文件夹放到项目根目录,然后对src\data_process.py做如下修改: ```python DATA_DIRS = [ '/workspace/MachineLearningCVE', # 第一个数据集目录,修改为实际目录 '/workspace/TrafficLabelling' # 第二个数据集目录,修改为实际目录 ] ``` 运行src\read_processed_data.py打印数据集基本情况 2. 模型训练 ```powershell # 使用优化模型(推荐) python src\model_trainer_advanced.py # 或使用基础模型 python src\model_trainer.py # 或运行对比实验 python src\model_comparison.py ``` 3. 启动前端(等待Long完成) ```powershell streamlit run app.py ``` ## 项目结构 ``` CNN-NIDS/ ├── src/ # 源代码 │ ├── data_process.py # 数据处理(含自动下载) │ ├── model_trainer.py # 基础模型 │ ├── model_trainer_advanced.py # GPU优化模型 ⭐ │ ├── model_comparison.py # 模型对比 ⭐ │ └── read_processed_data.py # 数据读取 ├── models/ # 模型和结果 │ ├── best_cnn_model_advanced.h5 # 最佳模型(GPU训练) │ ├── model_architecture.txt # 模型架构文档 │ ├── results/ # 评估结果 │ │ ├── confusion_matrix.png │ │ ├── evaluation_metrics.json │ │ └── classification_report.txt │ ├── comparison/ # 对比结果 │ └── logs/ # TensorBoard日志(GPU训练) ├── data/ # 数据目录 │ ├── processed/ # 处理后的数据 │ ├── MachineLearningCVE/ # 原始数据集1 │ └── TrafficLabelling/ # 原始数据集2 ├── 当前任务完成总结.md # 工作总结 ├── 下一步建议.md # 任务分工 ├── requirements.txt # 依赖列表(含GPU支持) ├── test.py # 测试脚本 ├── README.md # 本文件 └── README.txt # 备用说明 ``` ## 性能指标 基于CIC-IDS2017数据集,A100优化模型的实际性能: - **整体准确率**: **83.10%** (测试集1,190,018样本) - **加权F1-Score**: **87.50%** - **宏平均F1**: **44.53%** (数据不平衡影响) - **加权精确率**: **95.02%** - **训练设备**: **NVIDIA A100-SXM4-40GB** ### 各攻击类型检测效果 | 攻击类型 | F1-Score | 检测效果 | |---------|----------|----------| | DDoS | 94.72% | 优秀 ⭐⭐⭐ | | Portscan | 82.11% | 良好 ⭐⭐ | | FTP_Patator | 80.69% | 良好 ⭐⭐ | | Dos_Hulk | 84.67% | 良好 ⭐⭐ | | Web_Brute_Force | 3.44% | 需改进 ⚠️ | | Web_SQL_Injection | 0.22% | 需改进 ⚠️ | ### A100训练优势 - **训练速度**: 比Tesla T4快**4-5倍** - **批次大小**: 512 (相比T4的128) - **混合精度**: FP16训练,节省显存 - **硬件**: NVIDIA A100-SXM4-40GB (38.5GB可用) - **计算能力**: 8.0 (最新Ampere架构) > **注意**:宏平均F1较低主要受极少数类影响,实际主要攻击类型检测效果良好。 ### 硬件要求 - **GPU**: NVIDIA A100推荐,Tesla T4可用 - **CUDA**: 12.2+ (已包含在requirements.txt中) - **显存**: 建议8GB+ (A100提供40GB) - **内存**: 建议16GB+ 系统内存 ## 参考文章