mohamedahmedmounir-ctrl/NetShield-IDS
GitHub: mohamedahmedmounir-ctrl/NetShield-IDS
基于 Python Flask 的实时网络入侵检测系统,结合规则引擎与 Isolation Forest 机器学习模型,通过 SOC 风格仪表板可视化展示流量分析与威胁警报。
Stars: 0 | Forks: 0
# ⬡ NetShield IDS — 智能入侵检测系统




## 📋 概述
NetShield IDS 是一个学生级别的智能入侵检测系统,可监控网络流量,结合基于规则和机器学习的异常检测,并通过现代的、企业级的 SOC(安全运营中心)仪表板显示所有安全事件。
**核心功能:**
- 实时数据包捕获与分析(实时 Scapy 或内置模拟器)
- 基于规则的威胁检测(端口扫描、暴力破解、ICMP 洪水、已知恶意 IP 等)
- 使用 Isolation Forest (scikit-learn) 进行 AI 异常检测
- 动态威胁评分(0–100 全网风险指数)
- 带有图表、警报表和数据包流的实时更新仪表板
- 日志导出、搜索和过滤
## ✨ 功能特性
| 功能 | 详情 |
|---|---|
| 📡 数据包监控 | 捕获源/目标 IP、协议、端口、大小、标志位、服务、流向 |
| 🚨 基于规则的检测 | 7 条检测规则:端口扫描、暴力破解、ICMP 洪水、恶意 IP 等 |
| 🤖 AI 检测 | Isolation Forest 异常检测及 Z-score 备用检测 |
| 📊 实时仪表板 | 深色 SOC 风格 UI,集成 Chart.js 图表和实时轮询 |
| 🎯 威胁评分 | 单警报评分 (0–100) + 全网威胁指数 |
| 📁 日志记录 | 内存环形缓冲区 + 磁盘 JSON 持久化存储 |
| 🔍 日志搜索 | 按严重程度过滤警报,按 IP 或攻击类型搜索 |
| ⬇ 导出 | 下载所有日志为 JSON 格式 |
## 🛠 技术栈
**后端**
- Python 3.11+
- Flask 3.0 (REST API + Jinja2 模板)
- Scapy(可选 — 实时数据包捕获)
**机器学习**
- scikit-learn — Isolation Forest
- NumPy — 特征提取
**前端**
- Vanilla JavaScript (ES2022)
- Chart.js 4 — 实时图表
- CSS Custom Properties — 深色 SOC 主题
- Google Fonts: Orbitron, Rajdhani, Share Tech Mono
**存储**
- JSON 平面文件(以换行符分隔,只追加)
- 内存 deque 环形缓冲区
## 📂 项目结构
```
NetShield-IDS/
│
├── app.py # Flask application & API routes
├── requirements.txt # Python dependencies
├── README.md
│
├── detector/
│ ├── packet_sniffer.py # Live capture (Scapy) + traffic simulator
│ ├── threat_rules.py # Rule-based detection engine (7 rules)
│ ├── anomaly_detector.py # AI / statistical anomaly detection
│ └── traffic_analyzer.py # Aggregated analytics & threat scoring
│
├── logs/
│ ├── alerts.json # Persisted alert log (newline-delimited JSON)
│ └── traffic_logs.json # Sample packet log
│
├── templates/
│ └── index.html # Main dashboard (Jinja2)
│
├── static/
│ ├── style.css # Dark cybersecurity theme
│ ├── script.js # Dashboard controller & polling
│ └── dashboard.js # Chart.js initialisation & updates
│
├── model/
│ ├── train_model.py # Standalone ML training script
│ ├── ids_model.pkl # Trained Isolation Forest (generated)
│ └── scaler.pkl # Fitted StandardScaler (generated)
│
└── utils/
├── logger.py # Thread-safe IDS logger
├── helpers.py # Utility functions
└── config.py # Centralised configuration
```
## 🚀 安装与设置
### 前置条件
- Python 3.11 或更新版本
- pip
### 1. 克隆仓库
```
git clone https://github.com/yourusername/NetShield-IDS.git
cd NetShield-IDS
```
### 2. 创建虚拟环境(推荐)
```
python -m venv venv
# Linux / macOS
source venv/bin/activate
# Windows
venv\Scripts\activate
```
### 3. 安装依赖
```
pip install -r requirements.txt
```
### 4. (可选)训练机器学习模型
```
python model/train_model.py
```
此操作将生成 `model/ids_model.pkl` 和 `model/scaler.pkl`。
### 5. 运行应用程序
```
python app.py
```
### 6. 打开仪表板
在浏览器中导航至 **http://127.0.0.1:5000**。
点击 **▶ START** 开始监控。
## 🎮 使用方法
| 操作 | 方法 |
|---|---|
| 开始监控 | 点击顶部栏中的 **▶ START** |
| 停止监控 | 点击 **■ STOP** |
| 查看警报详情 | 点击 Threat Alerts(威胁警报)表中的任意行 |
| 过滤警报 | 使用严重程度下拉菜单或搜索框 |
| 导出日志 | 点击 **⬇ EXPORT** — 将下载 `netshield_export.json` |
| 清除日志 | 点击 **⌫ CLEAR** |
## 🔬 工作原理
### 数据包嗅探
NetShield 使用 **Scapy** 在网络接口上打开一个原始套接字,并在操作系统网络栈处理每个 IP 帧之前将其拦截。每一帧都会被解析以提取:源/目标 IP、端口、协议、TCP 标志位、数据包大小和 TTL。
在**演示模式**(默认,无需 root 权限)下,内置模拟器会生成逼真的合成流量,使仪表板在无提升权限的情况下也能完全正常运行。
### 基于规则的检测
当数据包计数器超过阈值时,会触发七条确定性规则:
1. **已知恶意 IP** — 恶意 IP 范围的静态阻止列表
2. **端口扫描** — 来自单一源的 ≥15 个唯一目标端口或 ≥20 个 SYN 数据包
3. **暴力破解** — 对 SSH/RDP/FTP 端口的 ≥8 次失败连接
4. **ICMP 洪水** — 来自单一源的 ≥30 个 ICMP 数据包
5. **敏感端口** — 外部对数据库/管理员端口的访问
6. **数据外泄** — 出站数据包 > 1200 字节
7. **明文协议** — 使用 Telnet 或 FTP
### AI 异常检测
**Isolation Forest** (scikit-learn) 在合成的正常流量特征向量上进行训练。模型会为每个新数据包的特征向量分配一个异常分数;分数低于污染阈值(预测为 -1)的数据包将触发 AI 警报。**Z-score** 基线备用机制会标记出显著偏离每个源滚动平均值的单个指标(数据包大小、ICMP 速率)。
### 威胁评分
全网威胁评分 (0–100) 计算为加权总和:
- **40%** 最近 100 个数据包中威胁指标数据包(SYN/ICMP 密集)的比例
- **30%** 探测超过 5 个唯一端口的 IP 数量
- **30%** 当前分钟内的警报密度
## 🔭 未来改进
- [ ] 带有自动接口检测的实时 Scapy 捕获
- [ ] 源 IP 的 GeoIP 地理位置映射
- [ ] 邮件 / webhook 警报通知(Slack,PagerDuty)
- [ ] 使用持久化 SQLite 后端替换 JSON 平面文件
- [ ] 仪表板身份验证
- [ ] PCAP 文件上传与重放分析
- [ ] 在真实数据集上训练 (CICIDS2017,NSL-KDD)
- [ ] Docker 容器化
- [ ] 基于速率的 DDoS 检测(令牌桶算法)
## ⚖️ 法律与道德声明
本工具仅为教育和研究目的而开发。请仅在您拥有或获得明确书面授权监控的网络上使用 NetShield IDS。未经授权的网络监控在您所在的司法管辖区可能是非法的。
*由 Mohamed Ahmed Mounir 构建。*
标签:AMSI绕过, Apex, Chart.js, DDoS防护, Flask, ICMP洪水检测, Jinja2, NumPy, OISF, Python, Scapy, scikit-learn, 云计算, 人工智能, 仪表盘, 免杀技术, 入侵检测系统, 威胁情报, 威胁检测, 威胁评分, 孤立森林, 安全数据湖, 安全运营中心, 开发者工具, 异常检测, 插件系统, 数据可视化, 无后门, 日志管理, 暴力破解检测, 机器学习, 用户模式Hook绕过, 端口扫描检测, 网络安全, 网络映射, 网络流量分析, 规则引擎, 逆向工具, 隐私保护