sharnjeet21/iot23
GitHub: sharnjeet21/iot23
这是一个专业级物联网安全监控平台,通过实时恶意软件检测和机器学习分析来保护IoT设备免受威胁。
Stars: 0 | Forks: 0
# 🛡️ CyberShield - ESP32 物联网恶意软件检测系统
专业级物联网安全监控平台,具备实时恶意软件检测、机器学习分析以及企业级网络仪表板,用于检测和分析物联网威胁。
## 📋 目录
1. [快速开始](#quick-start)
2. [系统概述](#system-overview)
3. [功能特性](#features)
4. [界面展示](#ui-showcase)
5. [系统架构](#architecture)
6. [安装与配置](#installation--setup)
7. [使用指南](#usage-guide)
8. [配置说明](#configuration)
9. [故障排除](#troubleshooting)
10. [项目结构](#project-structure)
## 🚀 快速开始
### 前置条件
- Python 3.8+
- Node.js 16+
- ESP32 微控制器
- Arduino IDE(用于上传 ESP32 固件)
### 第一步:安装依赖
```
# 安装 Python 依赖
pip install -r requirements.txt
# 安装 Node.js 依赖
npm install
```
### 第二步:构建 React 仪表板
### 第三步:启动所有服务
```
# 终端 1: ML API Server (Port 8080)
python3 cloud_api_server.py
# 终端 2: Dashboard Backend (Port 5002)
python3 dashboard_server.py
# 终端 3: Mobile Traffic Sender (Port 8090)
python3 serve_mobile.py
```
### 第四步:检查网络 IP
```
# 运行此命令以查找您机器的 IP 地址
ifconfig | grep "inet " | grep -v "127.0.0.1"
```
### 第五步:访问平台
将 `` 替换为上述命令获得的 IP 地址:
- **仪表板**:http://``:5002
- **移动端流量发送器**:http://``:8090/mobile_traffic_sender.html
- **ML API 健康检查**:http://``:8080/health
## 🎯 系统概述
CyberShield 是一个完整的物联网安全解决方案,包含:
### 核心组件
1. **ML 检测引擎**(端口 8080)
- 多模型威胁检测系统
- 3 个训练好的模型:二分类 RF、隔离森林、多分类 RF
- 实时流量分析
2. **仪表板后端**(端口 5002)
- Flask + SocketIO 实时服务器
- 支持 WebSocket 实时更新
- SQLite 数据库用于历史记录
- REST API 端点
3. **移动端流量发送器**(端口 8090)
- 基于 Web 的流量模拟界面
- 12 种不同的攻击类型
- 实时威胁分析
- 移动端友好 UI
4. **ESP32 固件**
- 网络流量捕获与分析
- 用于指示威胁状态的 LED
- WiFi 连接
- 串口调试输出
## ✨ 功能特性
### 实时检测
- ✅ 即时恶意软件识别
- ✅ 多模型共识分析
- ✅ 毫秒级响应时间
- ✅ WebSocket 实时更新
### 机器学习
- ✅ 二分类(正常/恶意软件)
- ✅ 隔离森林异常检测
- ✅ 多分类流量类型分类
- ✅ 特征缩放与标准化
### 仪表板分析
- ✅ 带时间戳的实时威胁信息流
- ✅ 威胁时间线图表
- ✅ 流量类型分布
- ✅ 系统状态监控
- ✅ 历史数据分析
### 安全特性
- ✅ 基于规则的攻击检测
- ✅ 端口签名匹配
- ✅ 流量体积分析
- ✅ 威胁等级分类
- ✅ 置信度评分
### 支持的攻击类型
1. 🌐 物联网恶意软件(Mirai 类型)
2. 📤 数据窃取尝试
3. 🔓 暴力破解攻击
4. 🎯 DDoS 攻击
5. 🔐 撞库攻击
6. 📡 DNS 隧道
7. 🕵️ 侦察扫描
8. 💉 注入攻击
9. 🔄 命令与控制
10. 📊 僵尸网络活动
## 🎨 界面展示
### 仪表板概览

主仪表板提供:
- 实时威胁检测信息流
- 系统状态指示器
- 威胁统计数据和指标
- 实时图表可视化
- 具有玻璃拟态效果的专业 UI
### 威胁分析视图

威胁分析视图显示:
- 详细的威胁信息
- 流量类型分类
- 威胁等级指示器
- 建议的操作
- 历史威胁模式
## 🏗️ 系统架构
### 系统架构图
```
┌─────────────────────────────────────────────────────────────┐
│ CyberShield Platform │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────┐ ┌──────────────────┐ ┌────────────┐ │
│ │ ESP32 Device │ │ Mobile Browser │ │ Dashboard │ │
│ │ (Detector) │ │ (Traffic Sender)│ │ (React) │ │
│ └────────┬─────────┘ └────────┬─────────┘ └─────┬──────┘ │
│ │ │ │ │
│ └─────────────────────┼───────────────────┘ │
│ │ │
│ ┌────────────▼────────────┐ │
│ │ Dashboard Backend │ │
│ │ (Flask + SocketIO) │ │
│ │ Port: 5002 │ │
│ └────────────┬────────────┘ │
│ │ │
│ ┌────────────▼────────────┐ │
│ │ ML Detection Engine │ │
│ │ (Flask API) │ │
│ │ Port: 8080 │ │
│ │ - Binary RF │ │
│ │ - Isolation Forest │ │
│ │ - Multiclass RF │ │
│ └────────────┬────────────┘ │
│ │ │
│ ┌────────────▼────────────┐ │
│ │ SQLite Database │ │
│ └─────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
### 数据流程
1. **流量生成** → 移动端/ESP32 发送网络流量
2. **特征提取** → 系统提取网络特征
3. **ML 分析** → 3 个模型分析流量模式
4. **规则覆盖** → 端口签名和体积检查
5. **威胁分类** → 正常/恶意软件判定
6. **仪表板更新** → WebSocket 实时广播
7. **数据库记录** → 历史记录存储
## 📦 安装与配置
### 1. 克隆仓库
```
git clone
cd esp32_malware_client
```
### 2. 安装 Python 依赖
```
pip install -r requirements.txt
```
必需的包:
- flask==2.3.3
- flask-cors==4.0.0
- flask-socketio==5.3.6
- scikit-learn==1.3.0
- pandas==2.0.3
- numpy==1.24.3
- joblib==1.3.2
- imbalanced-learn==0.11.0
### 3. 安装 Node.js 依赖
```
npm install
```
### 4. 配置网络 IP
首先,检查当前网络 IP:
```
ifconfig | grep "inet " | grep -v "127.0.0.1"
```
然后使用您的 IP 更新 `.env` 文件:
```
VITE_SERVER_IP=
```
在 Python 文件中更新:
- `dashboard_server.py`: `MAC_IP = os.environ.get('MAC_IP', '')`
- `cloud_api_server.py`: 默认 IP 配置
- `esp32_malware_client.ino`: WiFi IP 设置
### 5. 构建 React 仪表板
```
npm run build
```
### 6. 填充示例数据(可选)
```
python3 populate_db.py
```
## 🎮 使用指南
### 启动系统
#### 方式一:手动启动(推荐用于开发)
```
# 终端 1: ML API Server
python3 cloud_api_server.py
# 终端 2: Dashboard Backend
python3 dashboard_server.py
# 终端 3: Mobile Traffic Sender
python3 serve_mobile.py
```
#### 方式二:后台进程启动
```
# 在后台启动所有服务
nohup python3 cloud_api_server.py > api.log 2>&1 &
nohup python3 dashboard_server.py > dashboard.log 2>&1 &
nohup python3 serve_mobile.py > mobile.log 2>&1 &
```
### 访问仪表板
1. **查找网络 IP**
ifconfig | grep "inet " | grep -v "127.0.0.1"
2. **打开仪表板**
- URL:http://``:5002
- 显示实时威胁检测
- 显示系统统计信息
- 历史威胁分析
3. **发送测试流量**
- URL:http://``:8090/mobile_traffic_sender.html
- 选择攻击类型
- 点击"分析流量"
- 在仪表板上查看结果
4. **监控 ESP32**
- 将 `esp32_malware_client.ino` 上传至 ESP32
- 打开串口监视器(波特率 115200)
- 观察实时检测输出
- LED 指示器显示威胁状态
### 仪表板功能
#### 实时信息流
- 实时威胁检测结果
- 来源 IP 和流量类型
- 威胁等级指示器
- 时间戳和建议
#### 威胁搜寻
- 搜索和筛选威胁
- 按威胁等级排序
- 查看详细威胁信息
- 导出威胁数据
#### 系统日志
- 系统事件和状态
- 连接信息
- 错误消息
- 性能指标
#### 图表与分析
- 威胁时间线可视化
- 流量类型分布
- 威胁率趋势
- 系统健康状态指示器
## ⚙️ 配置说明
### 网络配置
网络变更时更新 IP 地址:
```
# 检查当前 IP
ifconfig | grep "inet " | grep -v "127.0.0.1"
# 使用您的 IP 更新 .env 文件
VITE_SERVER_IP=
# 重建 React 应用
npm run build
# 重启服务器
```
### ML 模型配置
模型已在 IoT-23 数据集上预训练:
- **二分类 RF**:准确率 99.99%
- **隔离森林**:准确率 90.54%
- **多分类 RF**:准确率 99.98%
要重新训练模型:
```
python3 train_models.py
```
### 数据库配置
SQLite 数据库存储:
- 时间戳
- 来源 IP
- 端口(源 → 目标)
- 恶意标志
- 置信度分数
- 威胁等级
- 流量类型
### ESP32 配置
编辑 `esp32_malware_client.ino`:
```
const char* ssid = "Your_WiFi_SSID";
const char* password = "Your_WiFi_Password";
const char* serverIP = ""; // Use the IP from: ifconfig | grep "inet " | grep -v "127.0.0.1"
const int serverPort = 8080;
```
## 🔧 故障排除
### 仪表板无法加载
**问题**:http://``:5002 页面无限加载
**解决方案**:
1. 检查 IP 地址是否正确
ifconfig | grep "inet " | grep -v "127.0.0.1"
2. 验证仪表板服务器正在运行
lsof -i :5002
3. 检查 React 构建文件是否存在
ls -la dist/index.html
4. 重新构建 React 应用
npm run build
### ML API 无响应
**问题**:API 服务器返回 500 错误
**解决方案**:
1. 验证模型已加载
curl http://localhost:8080/health
2. 检查模型文件是否存在
ls -la *.pkl
3. 验证 Python 依赖
pip install -r requirements.txt
### ESP32 连接问题
**问题**:ESP32 无法连接到 WiFi
**解决方案**:
1. 验证固件中的 WiFi 凭据
2. 检查 ESP32 是否在同一网络
3. 监控串口输出以查看错误
4. 验证固件中的 IP 地址与服务器匹配
### WebSocket 连接错误
**问题**:仪表板显示"正在重新连接..."
**解决方案**:
1. 检查防火墙是否允许端口 5002
2. 验证 SocketIO 是否正在运行
3. 检查浏览器控制台中的错误
4. 重启仪表板服务器
### 仪表板无数据
**问题**:仪表板显示空的威胁列表
**解决方案**:
1. 填充示例数据
python3 populate_db.py
2. 从移动端发送器发送测试流量
3. 检查 ESP32 是否已连接
4. 验证数据库是否有记录
sqlite3 dashboard.db "SELECT COUNT(*) FROM dashboard_logs;"
## 📁 项目结构
```
esp32_malware_client/
├── 📄 README.md # This file
├── 📄 .env # Environment configuration
├── 📄 .gitignore # Git ignore rules
│
├── 🐍 Python Backend
│ ├── cloud_api_server.py # ML detection API (Port 8080)
│ ├── dashboard_server.py # Dashboard backend (Port 5002)
│ ├── serve_mobile.py # Mobile server (Port 8090)
│ ├── train_models.py # Model training script
│ ├── populate_db.py # Sample data generator
│ └── requirements.txt # Python dependencies
│
├── 🎨 Frontend (React)
│ ├── src/
│ │ ├── App.jsx # Main React component
│ │ ├── main.jsx # React entry point
│ │ ├── index.css # Global styles
│ │ └── components/
│ │ ├── Navbar.jsx # Top navigation
│ │ ├── Sidebar.jsx # Left sidebar
│ │ ├── MetricsGrid.jsx # Statistics cards
│ │ ├── LiveFeed.jsx # Real-time threats
│ │ ├── ThreatHunt.jsx # Threat search
│ │ ├── SystemLogs.jsx # System events
│ │ ├── ChartsSection.jsx # Analytics charts
│ │ ├── NodeMap.jsx # Network visualization
│ │ ├── SecurityPolicy.jsx # Security settings
│ │ ├── SettingsModal.jsx # Settings dialog
│ │ └── ProfileModal.jsx # User profile
│ ├── dist/ # Built React app
│ ├── package.json # Node dependencies
│ ├── vite.config.js # Vite configuration
│ └── tailwind.config.js # Tailwind CSS config
│
├── 🔧 ESP32 Firmware
│ ├── esp32_malware_client.ino # Main detector firmware
│ └── esp32_cam_sender.ino # CAM sender firmware
│
├── 📊 ML Models
│ ├── advanced_iot23_binary_rf.pkl # Binary classifier
│ ├── advanced_iot23_isolation_forest.pkl # Anomaly detector
│ ├── advanced_iot23_multiclass_smote.pkl # Traffic classifier
│ └── advanced_iot23_scaler.pkl # Feature scaler
│
├── 🌐 Web Interfaces
│ ├── index.html # Dashboard HTML
│ ├── mobile_traffic_sender.html # Mobile traffic UI
│ └── assets/
│ ├── dashboard.png # Dashboard screenshot
│ └── threat.png # Threat view screenshot
│
├── 💾 Database
│ └── dashboard.db # SQLite database
│
└── 📚 Documentation
└── ESP32_IoT_Malware_Detection_Report.tex # Technical report
```
## 🔐 安全注意事项
### 最佳实践
1. **网络安全**
- 使用 VPN 进行远程访问
- 使用防火墙限制端口 8080 和 5002
- 更改默认 WiFi 凭据
- 使用动态 IP 配置(.env 文件)
2. **数据保护**
- 加密敏感数据
- 安全数据库备份
- 生产环境中使用 HTTPS
3. **模型安全**
- 验证输入数据
- 监控模型性能
- 定期更新模型
4. **ESP32 安全**
- 使用安全 WiFi(WPA2/WPA3)
- 实施速率限制
- 监控未授权访问
## 📈 性能指标
### 系统性能
| 指标 | 值 |
|------|------|
| API 响应时间 | <100ms |
| 仪表板更新延迟 | <500ms |
| 模型推理时间 | <50ms |
| 数据库查询时间 | <10ms |
| WebSocket 广播 | 实时 |
### 模型准确率
| 模型 | 准确率 | 数据集 |
|------|------|------|
| 二分类 RF | 99.99% | IoT-23 |
| 隔离森林 | 90.54% | IoT-23 |
| 多分类 RF | 99.98% | IoT-23 |
## 🤝 参与贡献
欢迎贡献!请:
1. Fork 仓库
2. 创建功能分支
3. 进行修改
4. 提交 Pull Request
## 📝 许可证
本项目根据 MIT 许可证授权 - 详见 LICENSE 文件。
## 📞 支持
如有问题或疑问:
1. 查看[故障排除](#troubleshooting)部分
2. 检查系统日志
3. 检查 ESP32 串口输出
4. 验证网络配置
## 🎓 技术细节
### ML 模型架构
**二分类随机森林**
- 100 棵树
- 最大深度:20
- 最小分裂样本数:2
- 针对速度和准确率优化
**隔离森林**
- 100 个估计器
- 污染率:0.1
- 检测流量模式中的异常
**多分类随机森林**
- 100 棵树
- 12 个流量类型类别
- SMOTE 过采样以平衡数据
### 特征工程
从网络流量中提取的特征:
- 数据包计数 (orig_pkts, resp_pkts)
- 字节计数 (orig_bytes, resp_bytes)
- 持续时间和时序
- 协议信息
- 端口号和范围
### 检测流水线
1. **特征提取** → 提取网络特征
2. **缩放** → 特征标准化
3. **模型推理** → 运行 3 个模型
4. **规则覆盖** → 应用端口/体积规则
5. **置信度计算** → 聚合预测结果
6. **威胁分类** → 确定威胁等级
## 🚀 未来增强
- [ ] 深度学习模型(LSTM、CNN)
- [ ] 实时数据包捕获
- [ ] 高级威胁搜寻
- [ ] 自动化响应操作
- [ ] 多设备管理
- [ ] 云集成
- [ ] 移动应用
- [ ] 高级报告
**最后更新**:2026 年 5 月 18 日
**版本**:1.0.0
**状态**:生产就绪 ✅
标签:Arduino IDE, ESP32, Flask, GNU通用公共许可证, MITM代理, Node.js, Python, React, SocketIO, Syscalls, WebSocket, Web仪表板, 企业级安全, 依赖分析, 多模型检测, 威胁分析, 安全监控平台, 嵌入式安全, 无后门, 机器学习分析, 物联网安全, 网络安全, 自动化侦查工具, 自定义脚本, 逆向工具, 隐私保护