{"repo": "1290288259/miguan", "files": {"API.md": {"238da94ae54462601373d62a1bc960d125bfb636": {"t": 1785746436.5874426, "n": 2247, "h": "8e68a0277f3a5d14", "c": "# Flask API 接口文档\n\n本文档描述了Flask后端API接口的使用方法。\n\n## 基础信息\n\n- **基础URL**: `http://localhost:5000`\n- **内容类型**: `application/json`\n- **字符编码**: `UTF-8`\n\n## 通用响应格式\n\n所有API响应都遵循以下格式:\n\n```json\n{\n \"code\": 200, // 200表示成功,非200表示失败\n \"message\": \"响应消息(可选)\",\n \"data\": \"响应数据(可选)\"\n}\n```\n\n## 认证方式\n\n大多数接口需要JWT认证。在请求头中添加:\n`Authorization: Bearer `\n\n## API 接口列表\n\n### 1. 用户认证\n\n#### 1.1 用户登录\n\n- **URL**: `/api/user/login`\n- **Method**: `POST`\n- **Body**:\n```json\n{\n \"username\": \"administrator\",\n \"password\": \"password\"\n}\n```\n\n#### 1.2 用户注册\n\n- **URL**: `/api/user/register`\n- **Method**: `POST`\n- **Body**:\n```json\n{\n \"username\": \"newuser\",\n \"password\": \"password\",\n \"role\": 2 // 1: 管理员, 2: 普通用户\n}\n```\n\n### 2. AI 配置管理\n\n#### 2.1 获取所有配置\n\n- **URL**: `/api/ai-config/`\n- **Method**: `GET`\n- **Auth**: Required\n\n#### 2.2 创建配置\n\n- **URL**: `/api/ai-config/`\n- **Method**: `POST`\n- **Auth**: Required\n- **Body**:\n```json\n{\n \"name\": \"DeepSeek-V3\",\n \"api_url\": \"https://api.deepseek.com\",\n \"model_name\": \"deepseek-chat\",\n \"api_key\": \"sk-...\",\n \"provider\": \"DeepSeek\",\n \"is_auto_block\": false\n}\n```\n\n#### 2.3 更新配置\n\n- **URL**: `/api/ai-config/`\n- **Method**: `PUT`\n- **Auth**: Required\n- **Body**: 同创建配置\n\n#### 2.4 删除配置\n\n- **URL**: `/api/ai-config/`\n- **Method**: `DELETE`\n- **Auth**: Required\n\n#### 2.5 激活配置\n\n- **URL**: `/api/ai-config//activate`\n- **Method**: `POST`\n- **Auth**: Required\n\n#### 2.6 禁用配置\n\n- **URL**: `/api/ai-config//deactivate`\n- **Method**: `POST`\n- **Auth**: Required\n\n#### 2.7 测试配置\n\n- **URL**: `/api/ai-config//test`\n- **Method**: `POST`\n- **Auth**: Required\n\n### 3. 日志查询\n\n#### 3.1 获取日志列表\n\n- **URL**: `/api/logs/`\n- **Method**: `GET`\n- **Auth**: Required\n- **Params**:\n - `page`: 页码\n - `per_page`: 每页数量\n - `start_time`: 开始时间\n - `end_time`: 结束时间\n\n### 4. 蜜罐管理\n\n#### 4.1 获取蜜罐列表\n\n- **URL**: `/api/honeypots/`\n- **Method**: `GET`\n- **Auth**: Required\n\n### 5. 恶意IP管理\n\n#### 5.1 获取恶意IP列表\n\n- **URL**: `/api/malicious-ips/`\n- **Method**: `GET`\n- **Auth**: Required\n\n#### 5.2 封禁IP\n\n- **URL**: `/api/malicious-ips/block`\n- **Method**: `POST`\n- **Auth**: Required\n- **Body**:\n```json\n{\n \"ip_address\": \"1.2.3.4\",\n \"reason\": \"恶意攻击\",\n \"duration\": 24 // 封禁时长(小时)\n}\n```\n"}, "a7ab7a9c33477759e6b32cf659a1c63676ec456d": {"t": 1785764203.9635336, "n": 2247, "h": "8e68a0277f3a5d14", "c": "# Flask API 接口文档\n\n本文档描述了Flask后端API接口的使用方法。\n\n## 基础信息\n\n- **基础URL**: `http://localhost:5000`\n- **内容类型**: `application/json`\n- **字符编码**: `UTF-8`\n\n## 通用响应格式\n\n所有API响应都遵循以下格式:\n\n```json\n{\n \"code\": 200, // 200表示成功,非200表示失败\n \"message\": \"响应消息(可选)\",\n \"data\": \"响应数据(可选)\"\n}\n```\n\n## 认证方式\n\n大多数接口需要JWT认证。在请求头中添加:\n`Authorization: Bearer `\n\n## API 接口列表\n\n### 1. 用户认证\n\n#### 1.1 用户登录\n\n- **URL**: `/api/user/login`\n- **Method**: `POST`\n- **Body**:\n```json\n{\n \"username\": \"administrator\",\n \"password\": \"password\"\n}\n```\n\n#### 1.2 用户注册\n\n- **URL**: `/api/user/register`\n- **Method**: `POST`\n- **Body**:\n```json\n{\n \"username\": \"newuser\",\n \"password\": \"password\",\n \"role\": 2 // 1: 管理员, 2: 普通用户\n}\n```\n\n### 2. AI 配置管理\n\n#### 2.1 获取所有配置\n\n- **URL**: `/api/ai-config/`\n- **Method**: `GET`\n- **Auth**: Required\n\n#### 2.2 创建配置\n\n- **URL**: `/api/ai-config/`\n- **Method**: `POST`\n- **Auth**: Required\n- **Body**:\n```json\n{\n \"name\": \"DeepSeek-V3\",\n \"api_url\": \"https://api.deepseek.com\",\n \"model_name\": \"deepseek-chat\",\n \"api_key\": \"sk-...\",\n \"provider\": \"DeepSeek\",\n \"is_auto_block\": false\n}\n```\n\n#### 2.3 更新配置\n\n- **URL**: `/api/ai-config/`\n- **Method**: `PUT`\n- **Auth**: Required\n- **Body**: 同创建配置\n\n#### 2.4 删除配置\n\n- **URL**: `/api/ai-config/`\n- **Method**: `DELETE`\n- **Auth**: Required\n\n#### 2.5 激活配置\n\n- **URL**: `/api/ai-config//activate`\n- **Method**: `POST`\n- **Auth**: Required\n\n#### 2.6 禁用配置\n\n- **URL**: `/api/ai-config//deactivate`\n- **Method**: `POST`\n- **Auth**: Required\n\n#### 2.7 测试配置\n\n- **URL**: `/api/ai-config//test`\n- **Method**: `POST`\n- **Auth**: Required\n\n### 3. 日志查询\n\n#### 3.1 获取日志列表\n\n- **URL**: `/api/logs/`\n- **Method**: `GET`\n- **Auth**: Required\n- **Params**:\n - `page`: 页码\n - `per_page`: 每页数量\n - `start_time`: 开始时间\n - `end_time`: 结束时间\n\n### 4. 蜜罐管理\n\n#### 4.1 获取蜜罐列表\n\n- **URL**: `/api/honeypots/`\n- **Method**: `GET`\n- **Auth**: Required\n\n### 5. 恶意IP管理\n\n#### 5.1 获取恶意IP列表\n\n- **URL**: `/api/malicious-ips/`\n- **Method**: `GET`\n- **Auth**: Required\n\n#### 5.2 封禁IP\n\n- **URL**: `/api/malicious-ips/block`\n- **Method**: `POST`\n- **Auth**: Required\n- **Body**:\n```json\n{\n \"ip_address\": \"1.2.3.4\",\n \"reason\": \"恶意攻击\",\n \"duration\": 24 // 封禁时长(小时)\n}\n```\n"}, "7c01c87999963f779b205e40a9defe491633f40f": {"t": 1785764205.4726546, "n": 4466, "h": "7ebe09bcddce09d4", "c": "# Flask API 接口文档\n\n本文档描述了Flask后端API接口的使用方法。\n\n## 基础信息\n\n- **基础URL**: `http://localhost:5000`\n- **内容类型**: `application/json`\n- **字符编码**: `UTF-8`\n\n## 通用响应格式\n\n所有API响应都遵循以下格式:\n\n```json\n{\n \"status\": \"success|error\",\n \"message\": \"响应消息(可选)\",\n \"data\": \"响应数据(可选)\"\n}\n```\n\n## 错误响应\n\n当请求失败时,API会返回相应的HTTP状态码和错误信息:\n\n- `400 Bad Request`: 请求参数错误\n- `404 Not Found`: 资源不存在\n- `500 Internal Server Error`: 服务器内部错误\n\n## API 接口列表\n\n### 1. 问候接口\n\n获取简单的问候信息。\n\n**请求方式**: `GET`\n\n**请求URL**: `/api/hello`\n\n**请求参数**: 无\n\n**响应示例**:\n```json\n{\n \"message\": \"你好!欢迎使用Flask标准框架\",\n \"status\": \"success\"\n}\n```\n\n---\n\n### 2. 获取单个用户信息\n\n根据用户ID获取用户信息。\n\n**请求方式**: `GET`\n\n**请求URL**: `/api/user/{user_id}`\n\n**路径参数**:\n- `user_id` (int): 用户ID\n\n**响应示例**:\n```json\n{\n \"user\": {\n \"name\": \"张三\",\n \"email\": \"zhangsan@example.com\",\n \"age\": 25\n },\n \"status\": \"success\"\n}\n```\n\n**错误响应**:\n```json\n{\n \"message\": \"用户不存在\",\n \"status\": \"error\"\n}\n```\n\n---\n\n### 3. 获取所有用户信息\n\n获取所有用户的信息列表。\n\n**请求方式**: `GET`\n\n**请求URL**: `/api/users`\n\n**请求参数**: 无\n\n**响应示例**:\n```json\n{\n \"users\": [\n {\n \"id\": 1,\n \"name\": \"张三\",\n \"email\": \"zhangsan@example.com\",\n \"age\": 25\n },\n {\n \"id\": 2,\n \"name\": \"李四\",\n \"email\": \"lisi@example.com\",\n \"age\": 30\n },\n {\n \"id\": 3,\n \"name\": \"王五\",\n \"email\": \"wangwu@example.com\",\n \"age\": 28\n }\n ],\n \"count\": 3,\n \"status\": \"success\"\n}\n```\n\n---\n\n### 4. 创建用户\n\n创建一个新的用户。\n\n**请求方式**: `POST`\n\n**请求URL**: `/api/user`\n\n**请求头**:\n- `Content-Type: application/json`\n\n**请求体**:\n```json\n{\n \"name\": \"赵六\",\n \"email\": \"zhaoliu@example.com\",\n \"age\": 35\n}\n```\n\n**请求参数**:\n- `name` (string, 必需): 用户姓名\n- `email` (string, 必需): 用户邮箱\n- `age` (int, 可选): 用户年龄\n\n**响应示例**:\n```json\n{\n \"user\": {\n \"id\": 4,\n \"name\": \"赵六\",\n \"email\": \"zhaoliu@example.com\",\n \"age\": 35\n },\n \"message\": \"用户创建成功\",\n \"status\": \"success\"\n}\n```\n\n**错误响应**:\n```json\n{\n \"message\": \"缺少必需字段\",\n \"status\": \"error\"\n}\n```\n\n---\n\n### 5. 更新用户信息\n\n更新指定用户的信息。\n\n**请求方式**: `PUT`\n\n**请求URL**: `/api/user/{user_id}`\n\n**路径参数**:\n- `user_id` (int): 用户ID\n\n**请求头**:\n- `Content-Type: application/json`\n\n**请求体**:\n```json\n{\n \"name\": \"张三三\",\n \"email\": \"zhangsansan@example.com\",\n \"age\": 26\n}\n```\n\n**请求参数**:\n- `name` (string, 可选): 用户姓名\n- `email` (string, 可选): 用户邮箱\n- `age` (int, 可选): 用户年龄\n\n**响应示例**:\n```json\n{\n \"user\": {\n \"name\": \"张三三\",\n \"email\": \"zhangsansan@example.com\",\n \"age\": 26\n },\n \"message\": \"用户信息更新成功\",\n \"status\": \"success\"\n}\n```\n\n**错误响应**:\n```json\n{\n \"message\": \"用户不存在\",\n \"status\": \"error\"\n}\n```\n\n---\n\n### 6. 删除用户\n\n删除指定的用户。\n\n**请求方式**: `DELETE`\n\n**请求URL**: `/api/user/{user_id}`\n\n**路径参数**:\n- `user_id` (int): 用户ID\n\n**响应示例**:\n```json\n{\n \"message\": \"用户删除成功\",\n \"status\": \"success\"\n}\n```\n\n**错误响应**:\n```json\n{\n \"message\": \"用户不存在\",\n \"status\": \"error\"\n}\n```\n\n---\n\n### 7. 文件上传\n\n上传文件到服务器。\n\n**请求方式**: `POST`\n\n**请求URL**: `/api/upload`\n\n**请求头**:\n- `Content-Type: multipart/form-data`\n\n**请求参数**:\n- `file` (file, 必需): 要上传的文件\n\n**响应示例**:\n```json\n{\n \"message\": \"文件上传成功\",\n \"filename\": \"example.jpg\",\n \"file_path\": \"uploads/example.jpg\",\n \"status\": \"success\"\n}\n```\n\n**错误响应**:\n```json\n{\n \"message\": \"没有文件被上传\",\n \"status\": \"error\"\n}\n```\n\n---\n\n## 使用示例\n\n### JavaScript (使用fetch API)\n\n```javascript\n// 获取所有用户\nfetch('http://localhost:5000/api/users')\n .then(response => response.json())\n .then(data => console.log(data));\n\n// 创建新用户\nfetch('http://localhost:5000/api/user', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n name: '新用户',\n email: 'newuser@example.com',\n age: 25\n })\n})\n .then(response => response.json())\n .then(data => console.log(data));\n\n// 上传文件\nconst formData = new FormData();\nformData.append('file', fileInput.files[0]);\n\nfetch('http://localhost:5000/api/upload', {\n method: 'POST',\n body: formData\n})\n .then(response => response.json())\n .then(data => console.log(data));\n```\n\n### Python (使用requests库)\n\n```python\nimport requests\n\n# 获取所有用户\nresponse = requests.get('http://localhost:5000/api/users')\nprint(response.json())\n\n# 创建新用户\nuser_data = {\n 'name': '新用户',\n 'email': 'newuser@example.com',\n 'age': 25\n}\nresponse = requests.post('http://localhost:5000/api/user', json=user_data)\nprint(response.json())\n\n# 上传文件\nfiles = {'file': open('example.jpg', 'rb')}\nresponse = requests.post('http://localhost:5000/api/upload', files=files)\nprint(response.json())\n```\n\n---\n\n## 注意事项\n\n1. 所有API接口都支持跨域请求(CORS)\n2. 文件上传大小限制为16MB\n3. 上传的文件保存在服务器的`uploads`目录下\n4. 用户数据目前是模拟数据,重启服务器后会重置\n5. 在生产环境中,应该实现数据库持久化和用户认证"}}, "CLAUDE.md": {"238da94ae54462601373d62a1bc960d125bfb636": {"t": 1785747326.3243504, "n": 19363, "h": "a8af72b9476cc737", "c": "# 第一个规范 (必须遵守)\n 当每次大的修改和功能的新增,如果与CLAUDE.md文件内容不一致了,需要把新增的功能或者修改功能的逻辑重新写入CLAUDE.md,确保CLAUDE.md文件为最新的。\n \n# 项目开发规范 (Project Rules)\n\n你是一个资深的 Python 全栈专家,请在开发本 **基于低交互蜜罐的恶意流量检测和防御系统** 时严格遵循如下规则:\n\n## 一、核心开发原则\n- **代码质量**:严格遵循 **SOLID、DRY (Don't Repeat Yourself)、KISS (Keep It Simple, Stupid)** 原则。\n- **安全优先**:遵循 **OWASP Top 10** 安全最佳实践(特别是 SQL 注入防护、XSS 防护、敏感数据加密)。\n- **架构分层**:严格遵守 **Controller-Service-Model** 分层架构,禁止跨层调用。\n- **注释规范**:所有关键逻辑、类、方法必须包含 **中文注释** 和 **Docstrings**。\n- **类型安全**:Python 代码必须使用 Type Hints (`typing`),前端使用 TypeScript。\n\n---\n\n## 二、技术栈规范\n### 1. 后端 (Backend)\n- **语言**:Python 3.8+\n- **Web 框架**:Flask\n- **ORM**:SQLAlchemy\n- **数据库**:MySQL\n- **AI 模型**:Ollama (DeepSeek-R1) / OpenAI (远程调用) (也可通过 API 方式接入 OpenAI 等主流模型)\n- **依赖管理**:`requirements.txt` + `venv`\n\n### 2. 前端 (Frontend)\n- **框架**:Vue 3 (Composition API)\n- **语言**:TypeScript\n- **构建工具**:Vite\n- **UI 组件库**:Element Plus\n- **HTTP 客户端**:Axios\n\n---\n\n## 三、后端架构设计规范\n### 1. 分层职责\n| 层级 | 目录 | 职责 | 约束条件 |\n| :--- | :--- | :--- | :--- |\n| **Route (Controller)** | `src/route/` | 处理 HTTP 请求/响应,参数解析,权限校验 | - **禁止**包含复杂业务逻辑
- 仅调用 Service 层
- 返回统一的 JSON 格式 |\n| **Service** | `src/service/` | 核心业务逻辑,事务管理,第三方服务调用 | - **禁止**直接操作 SQL(需通过 Model/ORM)
- 处理异常并返回明确结果 |\n| **Model** | `src/model/` | 数据库模型定义,基础数据操作 | - 继承 `db.Model`
- 定义表结构、关系及基础 CRUD 方法 |\n| **Utils** | `src/utils/` | 通用工具函数 | - 无状态,纯函数为主 |\n\n### 2. 代码示例规范\n\n#### (1) Model 层 (`src/model/user_model.py`)\n```python\nfrom database import db\nfrom datetime import datetime\n\nclass User(db.Model):\n \"\"\"\n 用户模型类\n \"\"\"\n __tablename__ = 'users'\n \n id = db.Column(db.Integer, primary_key=True, autoincrement=True)\n username = db.Column(db.String(50), unique=True, nullable=False, comment='用户名')\n # 密码必须存储哈希值,禁止明文\n password_hash = db.Column(db.String(128), nullable=False, comment='密码哈希')\n created_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')\n\n def to_dict(self):\n return {\n 'id': self.id,\n 'username': self.username,\n 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S')\n }\n```\n\n#### (2) Service 层 (`src/service/user_service.py`)\n```python\nfrom model.user_model import User\nfrom database import db\nfrom typing import Dict, Optional\n\nclass UserService:\n \"\"\"\n 用户服务类:处理用户注册、登录等逻辑\n \"\"\"\n \n @staticmethod\n def create_user(username: str, password_plain: str) -> Dict:\n \"\"\"\n 创建新用户\n \n Args:\n username (str): 用户名\n password_plain (str): 明文密码\n \n Returns:\n Dict: 操作结果\n \"\"\"\n # 1. 校验是否存在\n if User.query.filter_by(username=username).first():\n return {'success': False, 'message': '用户已存在'}\n \n # 2. 密码加密 (示例,实际应使用加盐哈希)\n # password_hash = generate_password_hash(password_plain) \n \n # 3. 入库\n new_user = User(username=username, password_hash='hashed_value')\n try:\n db.session.add(new_user)\n db.session.commit()\n return {'success': True, 'message': '注册成功', 'data': new_user.to_dict()}\n except Exception as e:\n db.session.rollback()\n return {'success': False, 'message': str(e)}\n```\n\n#### (3) Route 层 (`src/route/user_route.py`)\n```python\nfrom flask import Blueprint, request, jsonify\nfrom service.user_service import UserService\n\nuser_bp = Blueprint('user', __name__, url_prefix='/api/user')\n\n@user_bp.route('/register', methods=['POST'])\ndef register():\n data = request.json\n username = data.get('username')\n password = data.get('password')\n \n if not username or not password:\n return jsonify({'code': 400, 'msg': '参数缺失'}), 400\n \n result = UserService.create_user(username, password)\n \n if result['success']:\n return jsonify({'code': 200, 'msg': '成功', 'data': result['data']})\n else:\n return jsonify({'code': 500, 'msg': result['message']}), 500\n```\n\n---\n\n## 四、前端开发规范\n### 1. 组件风格\n- 使用 **Vue 3 Composition API** (`\n\n\n```\n\n---\n\n## 五、通用规范\n1. **异常处理**:后端必须捕获所有未处理异常,防止服务崩溃,并记录错误日志。\n2. **日志记录**:关键操作(登录、攻击检测、封禁)必须写入日志文件或数据库。\n3. **环境配置**:敏感信息(数据库密码、API Key)禁止硬编码,需使用环境变量或配置文件。\n4. **Git 提交**:Commit Message 需清晰描述变更内容(如 `feat: 添加恶意IP自动封禁功能`)。\n\n## 六、特殊业务规则\n1. **蜜罐管理**:蜜罐进程需独立管理,确保主服务崩溃不影响蜜罐运行。\n2. **AI 分析**:大模型调用需使用异步队列(如 Queue + Threading),避免阻塞 HTTP 请求。\n3. **IP 封禁**:调用底层防火墙命令(iptables/netsh)时需进行操作系统判断和权限校验。\n\n## 七、现有模块与系统架构\n当前的后端服务架构已分为以下主要模块:\n\n### 1. 核心业务 API 模块 (Routes / Services / Models)\n\n| 业务模块 | Route 文件 | Service 文件 | Model 文件 | 职责说明 |\n| :--- | :--- | :--- | :--- | :--- |\n| **User (用户权限)** | `user_route.py` | `user_service.py` | `user_model.py`, `user_info_model.py`, `permission_model.py`, `module_model.py` | 注册、登录、JWT鉴权、用户管理、模块权限分配 |\n| **Dashboard (数据大屏)** | `dashboard_route.py` | `dashboard_service.py` | `attack_stats_model.py` | 攻击趋势、类型分布、地图热力、总览统计(均需JWT) |\n| **Honeypot (蜜罐管理)** | `honeypot_route.py` | `honeypot_service.py` | `honeypot_model.py` | 蜜罐CRUD、进程启停、健康检查、PID持久化 |\n| **Log (日志审计)** | `log_route.py` | `log_service.py` | `log_model.py` | 日志查询、分页、导出CSV、内部上报(蜜罐使用) |\n| **Malicious IP (恶意拦截)** | `malicious_ip_route.py` | `malicious_ip_service.py` | `malicious_ip_model.py`, `block_history_model.py` | 恶意IP列表、封禁/解封、防火墙命令下发 |\n| **Match Rule (规则引擎)** | `match_rule_route.py` | `match_rule_service.py` | `match_rule_model.py` | 正则匹配规则管理、启停切换、自动封禁配置 |\n| **AI Config (大模型配置)** | `ai_config_route.py` | `ai_config_service.py`, `ai_analysis_service.py` | `ai_config_model.py` | LLM参数化配置、激活/禁用、连通性测试 |\n| **Test (测试接口)** | `test_route.py` | `test_service.py` | — | 内部功能测试,非生产接口 |\n\n### 2. 完整 API 端点清单\n\n#### /api/user — 用户管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| POST | `/api/user/register` | 无 | 用户注册 |\n| POST | `/api/user/login` | 无 | 用户登录,返回 JWT |\n| POST | `/api/user/create_admin` | 无 | 创建管理员(初始化用) |\n| GET | `/api/user/me` | JWT | 获取当前用户信息 |\n| PUT | `/api/user/me` | JWT | 更新当前用户信息(手机/邮箱/密码) |\n| GET | `/api/user/list` | JWT + 管理员 | 分页获取用户列表 |\n| POST | `/api/user/add` | JWT + 管理员 | 管理员新增用户 |\n| PUT | `/api/user/` | JWT + 管理员 | 管理员修改用户 |\n| DELETE | `/api/user/` | JWT + 管理员 | 管理员删除用户 |\n| GET | `/api/user/permissions` | JWT + 管理员 | 获取所有权限列表 |\n| GET | `/api/user/modules` | JWT | 获取所有模块列表 |\n\n#### /api/dashboard — 数据大屏\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/dashboard/trend` | JWT | 攻击趋势(支持 days/granularity 参数) |\n| GET | `/api/dashboard/types` | JWT | 攻击类型统计分布 |\n| GET | `/api/dashboard/map` | JWT | 攻击来源地图数据 |\n| GET | `/api/dashboard/summary` | JWT | 总览统计(总攻击数、封禁数等) |\n\n#### /api/honeypots — 蜜罐管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/honeypots` | JWT | 分页查询蜜罐列表(支持 type/status/keyword) |\n| POST | `/api/honeypots` | JWT | 创建新蜜罐 |\n| PUT | `/api/honeypots/` | JWT | 更新蜜罐配置 |\n| DELETE | `/api/honeypots/` | JWT | 删除蜜罐 |\n| POST | `/api/honeypots//start` | JWT | 启动蜜罐进程 |\n| POST | `/api/honeypots//stop` | JWT | 停止蜜罐进程 |\n| GET | `/api/honeypots//health` | JWT | 蜜罐健康检查 |\n\n#### /api/logs — 日志审计\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/logs` | JWT | 分页查询日志(支持多字段过滤) |\n| GET | `/api/logs/export` | JWT | 导出日志为 CSV(含 BOM,支持 Excel) |\n| GET | `/api/logs/` | JWT | 根据 ID 获取单条日志 |\n| GET | `/api/logs/attack-types` | JWT | 获取所有攻击类型枚举 |\n| GET | `/api/logs/threat-levels` | JWT | 获取所有威胁等级枚举 |\n| GET | `/api/logs/statistics` | JWT | 获取日志统计汇总 |\n| POST | `/api/logs/internal/upload` | 无 | **内部接口**:蜜罐进程上报攻击日志 |\n\n#### /api/malicious-ips — 恶意IP管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/malicious-ips` | JWT | 分页查询恶意IP(支持 is_blocked/threat_level/keyword) |\n| POST | `/api/malicious-ips/block` | JWT | 封禁指定IP(支持时长/截止时间) |\n| POST | `/api/malicious-ips/unblock` | JWT | 解封指定IP |\n\n#### /api/match-rules — 匹配规则引擎\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/match-rules` | JWT | 分页查询规则 |\n| GET | `/api/match-rules/` | JWT | 获取单条规则 |\n| POST | `/api/match-rules` | JWT | 创建规则(正则+威胁等级+自动封禁配置) |\n| PUT | `/api/match-rules/` | JWT | 更新规则 |\n| DELETE | `/api/match-rules/` | JWT | 删除规则 |\n| PUT | `/api/match-rules//toggle` | JWT | 切换规则启用状态 |\n| GET | `/api/match-rules/attack-types` | JWT | 获取攻击类型枚举 |\n| GET | `/api/match-rules/threat-levels` | JWT | 获取威胁等级枚举 |\n\n#### /api/ai-config — AI大模型配置\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/ai-config/` | JWT | 获取所有AI配置 |\n| POST | `/api/ai-config/` | JWT | 创建AI配置(name/api_url/model_name必填) |\n| PUT | `/api/ai-config/` | JWT | 更新AI配置 |\n| DELETE | `/api/ai-config/` | JWT | 删除AI配置 |\n| POST | `/api/ai-config//activate` | JWT | 激活配置(设为当前使用) |\n| POST | `/api/ai-config//deactivate` | JWT | 禁用配置 |\n| POST | `/api/ai-config//test` | JWT | 测试AI配置连通性 |\n\n### 3. 数据库模型清单\n\n共 12 个 Model 文件,对应以下数据库表:\n\n| 模型文件 | 表名 | 说明 |\n| :--- | :--- | :--- |\n| `user_model.py` | `users` | 用户账号、密码哈希、角色(1管理员/2普通用户) |\n| `user_info_model.py` | `user_infos` | 用户扩展信息(手机号、邮箱、头像等) |\n| `permission_model.py` | `permissions` | 系统权限定义 |\n| `module_model.py` | `modules` / `user_modules` | 系统模块定义及用户-模块关联 |\n| `honeypot_model.py` | `honeypots` | 蜜罐配置(类型、端口、状态、`pid` 字段用于持久化进程) |\n| `log_model.py` | `logs` | 攻击日志记录(来源IP、载荷、威胁等级、协议等) |\n| `malicious_ip_model.py` | `malicious_ips` | 恶意IP列表(封禁状态、威胁等级、攻击次数) |\n| `block_history_model.py` | `block_history` | 封禁/解封操作历史记录 |\n| `attack_stats_model.py` | `attack_stats` | 攻击统计聚合数据(供 Dashboard 使用) |\n| `match_rule_model.py` | `match_rules` | 流量匹配规则(正则表达式、自动封禁、优先级) |\n| `ai_config_model.py` | `ai_configs` | AI大模型配置(API地址、模型名称、激活状态) |\n\n> **重要**:`honeypot_model.py` 中包含 `pid` 字段(Integer, nullable),用于在服务重启后通过 `psutil` 检查蜜罐子进程是否仍然存活。\n\n### 4. 蜜罐组件实现 (`backend/honeypots/`)\n\n| 文件 | 协议 | 默认端口 | 捕获目标 |\n| :--- | :--- | :--- | :--- |\n| `ftp_server.py` | FTP | 2121 | 爆破攻击、未授权访问、文件上传尝试 |\n| `ssh_server.py` | SSH | 2222 | 登录爆破、恶意命令执行(基于 Paramiko) |\n| `hikvision_http_server.py` | HTTP | 可配置(读取 `sys.argv[1]`) | IoT/摄像头设备漏洞探测、Web 攻击 |\n| `redis_server.py` | TCP/Redis | 6379 | Redis 未授权访问、SLAVEOF/CONFIG 命令利用 |\n| `mysql_server.py` | TCP/MySQL | 3306 | 数据库弱口令爆破(捕获用户名、客户端版本) |\n\n**蜜罐进程管理机制**:\n- 所有蜜罐以**独立子进程**方式启动(`subprocess.Popen`),与主 Flask 服务解耦。\n- 启动时将 PID 写入 `honeypots.pid` 数据库字段;停止时发送 `SIGTERM`/`taskkill`。\n- 服务重启后调用 `psutil.pid_exists()` 检查进程存活状态,自动修正数据库状态。\n- 蜜罐捕获到攻击后,通过 HTTP 调用 `/api/logs/internal/upload` 上报主服务。\n\n### 5. Agent 与智能响应模块 (`backend/agent/`)\n\n```\nagent/\n├── core.py # AI代理调度核心,支持多模型工作池、Queue+Threading异步队列\n├── llm_client.py # LLM客户端,封装 OpenAI 兼容 API 调用\n├── mcp/\n│ └── skill.py # MCP技能协议基类\n└── skills/\n ├── block_ip_skill.py # 自动封禁技能:先记录 malicious_ip 再调用防火墙封禁\n ├── decoder_skill.py # Base64/URL解码技能,辅助攻击载荷分析\n └── log_query_skill.py # 日志查询技能,供 AI Agent 检索历史攻击日志\n```\n\n**关键设计**:AI 分析通过 `Queue + Threading` 异步执行,不阻塞 HTTP 请求线程。\n\n### 6. 工具模块 (`backend/utils/`)\n\n| 文件 | 说明 |\n| :--- | :--- |\n| `api_response.py` | 统一 API 响应格式工具(`ApiResponse.success/error/bad_request` 等) |\n| `ip_utils.py` | **离线** IP 地理位置解析(MaxMind GeoLite2 MMDB),含 LRU 缓存 10000 条、私有 IP 判断 |\n| `time_utils.py` | 时间格式化工具函数 |\n| `download_geoip.py` | 自动下载/更新 GeoLite2 数据库脚本 |\n| `data/GeoLite2-City.mmdb` | 离线城市/国家地理数据库 |\n| `data/GeoLite2-ASN.mmdb` | 离线 ASN 自治系统数据库 |\n\n> **注意**:IP 溯源已从在线 `ip-api.com` 全面迁移至离线 MaxMind GeoLite2,无需外网访问。\n\n### 7. 前端视图清单 (`vueweb/vue-project/src/views/`)\n\n| 文件路径 | 功能说明 |\n| :--- | :--- |\n| `Dashboard.vue` | 仪表盘入口(路由容器) |\n| `dashboard/DashboardLayout.vue` | 数据大屏布局(导航 + 内容区) |\n| `dashboard/Overview.vue` | 攻击总览(总数、封禁数、实时告警) |\n| `dashboard/Trend.vue` | 攻击趋势折线图(按天/小时粒度) |\n| `dashboard/Types.vue` | 攻击类型饼图/柱状图分布 |\n| `dashboard/Map.vue` | 世界地图攻击来源热力图(ECharts) |\n| `HoneypotManagement.vue` | 蜜罐管理(CRUD、启停控制、健康状态监控) |\n| `LogQuery.vue` | 日志查询(多维度过滤、详情展示、CSV导出) |\n| `MaliciousIPManagement.vue` | 恶意IP管理(封禁/解封、威胁等级筛选) |\n| `MatchRuleManagement.vue` | 匹配规则管理(正则规则CRUD、启停切换) |\n| `AIConfigManagement.vue` | AI配置管理(多模型配置、激活/禁用、连通测试) |\n| `UserManagement.vue` | 用户管理(管理员):列表、增删改、模块权限分配 |\n| `UserProfile.vue` | 个人中心:查看/修改自己的手机、邮箱、密码 |\n\n**前端特性**:\n- 支持**暗黑/明亮**主题切换(持久化到 localStorage)。\n- 路由守卫:token 存在但 `user` 为空时,先 `await fetchCurrentUser()` 再放行,防止权限检查时序问题。\n- 所有 HTTP 请求通过 Axios 统一拦截器附加 `Authorization: Bearer `。\n\n### 8. 后端初始化脚本\n\n| 文件 | 用途 |\n| :--- | :--- |\n| `init_database.py` | 创建所有数据库表(`db.create_all()`) |\n| `init_data.py` | 初始化基础数据(角色、权限) |\n| `init_modules.py` | 初始化系统功能模块数据 |\n| `init_permissions.py` | 初始化权限条目 |\n| `init_honeypot.py` | 初始化默认蜜罐配置 |\n| `config.py` | Flask 配置类(数据库URI、JWT密钥、CORS等) |\n| `extensions.py` | Flask 扩展实例集中管理(SocketIO 全局单例),避免 reloader 实例不一致 |\n| `app.py` | Flask 应用入口,注册所有蓝图,初始化 SocketIO 并注册 /ws namespace |\n\n### 9. 数据库迁移\n\n使用 Flask-Migrate(Alembic),迁移文件位于 `backend/migrations/versions/`。\n\n**已有迁移**:\n- `f1a2b3c4d5e6_add_pid_to_honeypots.py` — 为 `honeypots` 表新增 `pid` 字段,支持进程持久化重启检测。\n\n---\n\n## 八、WebSocket 实时推送架构\n\n### 1. 技术选型\n| 层 | 技术 | 版本 |\n| :--- | :--- | :--- |\n| 后端 | Flask-SocketIO | 5.3.6 |\n| 后端传输 | python-socketio + python-engineio | 5.10.0 / 4.8.2 |\n| 前端 | socket.io-client | 4.7.5 |\n\n### 2. 架构流程\n\n```\n蜜罐捕获攻击\n ↓ HTTP POST /api/logs/internal/upload\nlog_service.py · create_log()\n ├─ 规则匹配 (MatchRule)\n ├─ 写入 MySQL (Log)\n ├─ AI 分析任务入队\n ├─ 记录恶意 IP\n └─ [仅恶意流量] socketio.emit('new_attack', payload, namespace='/ws')\n ↓ WebSocket\n 前端 useSocket composable\n ↓\n ┌─────────────┼─────────────┐\n DashboardLayout.vue Overview.vue Map.vue\n (ElNotification弹窗 (数字跳动+ (地图红色\n + 高危横幅) 实时告警列表) 脉冲散点)\n```\n\n### 3. 关键文件\n\n| 文件 | 职责 |\n| :--- | :--- |\n| `backend/extensions.py` | **全局唯一** `socketio = SocketIO()` 实例,所有模块必须从此处导入 socketio,避免 werkzeug reloader 导致实例不一致 |\n| `backend/app.py` | `from extensions import socketio`,调用 `socketio.init_app(app, ...)`,注册 `/ws` namespace 的 connect/disconnect handler,使用 `socketio.run()` 替代 `app.run()` |\n| `backend/service/log_service.py` | `create_log()` 末尾 `from extensions import socketio`,emit `new_attack` 事件到 `/ws` namespace |\n| `frontend/src/composables/useSocket.ts` | 全局 Socket 单例管理,`connectSocket()`/`disconnectSocket()` 由 DashboardLayout 统一管理生命周期,提供 `onAttack/offAttack` 订阅方法,pending 队列 + 重连恢复(先 `off('new_attack')` 再统一重绑,避免 handler 重复注册) |\n| `frontend/src/views/dashboard/DashboardLayout.vue` | 订阅 `new_attack`,显示 `ElNotification` 弹窗 + 高危横幅(含滑入动画),菜单栏显示连接状态指示灯(绿/红),使用 `` 缓存子路由 |\n| `frontend/src/views/dashboard/Overview.vue` | 订阅 `new_attack`,数字递增 + bounce 跳动动画 + 实时告警列表(最多 10 条,transition-group 滑入动画) |\n| `frontend/src/views/dashboard/Map.vue` | 订阅 `new_attack`,追加 `effectScatter` 脉冲散点到地图(使用 `Map` 结构消除竞态),5 秒后自动消失,过滤 `(0,0)` null-island 坐标 |\n\n> **重要**:`socketio` 实例必须从 `extensions.py` 导入,**禁止**从 `app.py` 导入。原因:werkzeug 的 `use_reloader=True` 会在子进程中重新执行 `app.py`,导致 `app.py` 中定义的 `socketio` 和其他模块缓存导入的 `socketio` 不是同一个对象。`extensions.py` 作为独立模块不受 reloader 影响。\n\n### 4. 推送事件规范\n\n**事件名**:`new_attack` \n**Namespace**:`/ws` \n**触发条件**:`is_malicious == True`(低危/正常流量不推送,减少噪声)\n\n**载荷字段**:\n```json\n{\n \"log_id\": 123,\n \"source_ip\": \"1.2.3.4\",\n \"attack_type\": \"SQL注入\",\n \"threat_level\": \"high\",\n \"protocol\": \"HTTP\",\n \"target_port\": 80,\n \"attack_time\": \"2026-03-27T10:30:00\",\n \"attack_description\": \"触发规则: SQL注入检测\",\n \"longitude\": 116.4074,\n \"latitude\": 39.9042\n}\n```\n\n### 5. 后端重启说明\n\nWebSocket 需要使用 `socketio.run()` 替代 `app.run()`,已在 `app.py` 中完成更新。\n重启后端后 WebSocket 功能即生效,无需额外操作。\n\n### 6. WebSocket 测试脚本\n\n| 文件 | 用途 |\n| :--- | :--- |\n| `backend/test/test_realtime_report.py` | 主测试脚本:30 次/60 秒全球 IP 的 SQL 注入攻击,用于验证大屏 4 个核心动态效果 |\n| `backend/test/verify_websocket.py` | WebSocket 推送端到端验证:Python socketio 客户端连接 `/ws`,发 3 条攻击,验证 4 项指标(事件到达、坐标、攻击类型、威胁等级) |\n\n---\n\n## 九、代码重载\n后端代码修改之后必须重新启动后端进程\n\n---\n\n## 十、多级恶意流量识别引擎\n\n### 1. 架构概述\n\n蜜罐捕获的原始流量经过**三级识别漏斗**,逐级过滤和分类:\n\n```\n蜜罐原始数据 → 第一级:正则规则匹配 → 第二级:暴力破解频次分析 → 第三级:AI深度分析\n```\n\n### 2. 蜜罐端设计原则(纯数据采集探针)\n\n蜜罐脚本**只负责捕获原始数据**,不做任何攻击分类。上报字段:\n- `attacker_ip` / `attacker_port` — 攻击来源\n- `honeypot_port` — 蜜罐端口\n- `protocol` — 协议类型 (SSH/FTP/HTTP/TCP 等)\n- `raw_log` — 原始请求/命令完整记录\n- `payload` — 载荷内容(认证类蜜罐统一格式:`\"Username: xxx, Password: xxx\"`)\n- `request_path` / `user_agent` — HTTP 蜜罐专用字段\n\n**禁止**在蜜罐脚本中包含 `attack_type`、`threat_level`、`attack_description` 等分类逻辑。\n\n### 3. 三级识别流水线(`log_service.py` · `create_log()`)\n\n#### 第一级:正则规则引擎匹配\n- 从 `match_rules` 表读取所有 `is_enabled=True` 的规则,按 `priority ASC` 排序(数字越小优先级越高)\n- 匹配字段由规则的 `match_field` 决定(目前全部为 `raw_log`)\n- 命中规则后立即设置 `attack_type`、`threat_level`、`attack_description`、`is_malicious`\n- **匹配所有启用的规则**,如果触发多个规则,则威胁等级取最高的一个,并在详细页面中同时展示多个攻击类型(简略展示在表格中,悬停查看全部)\n\n#### 第二级:暴力破解频次分析\n- **默认恶意判定规则**:对于蜜罐流量,所有的 `SSH尝试登录`、`FTP尝试登录`、`MySQL尝试登录`、`Redis尝试登录` 以及限定在 `/login` 目录的 `HTTP尝试登录` 均默认判定为**恶意流量** (`is_malicious=True`),并自动加入恶意 IP 列表(对于非`/login`的HTTP请求,除非触发其他规则,否则默认为正常流量)。\n- **触发条件**:第一级未命中任何高危规则,且属于尝试登录类行为(包括上述尝试登录以及正常流量)。\n- **检测方法**:`_check_brute_force(source_ip, protocol, current_payload)`\n - 查询同一 IP + 同一协议在最近 **1 分钟** 内的日志数量\n - HTTP 协议特殊处理:只有包含认证凭证(`Username:...Password:...`)的请求才计入暴力破解计数\n - 阈值:**20 次/分钟** (`BRUTE_FORCE_THRESHOLD = 20`)\n- **凭证检测**:`_is_credential_payload(payload)` 使用正则 `r'Username:\\s*.+,\\s*Password:\\s*.+'` 判断\n- 命中后设置 `attack_type='暴力破解'`、`threat_level='high'`、`is_malicious=True`\n\n#### 第三级:AI 深度分析\n- **触发条件**:所有日志均入 AI 分析队列(`Queue + Threading` 异步执行)\n- **AI 辅助判断机制**(\u0007i_analysis_service.py · _process_single_log()):\n - AI 仅独立提取和存入自己的分析结果字段(如 \u0007i_attack_type、\u0007i_confidence、\u0007i_analysis_result)。\n - **不修改、不覆写** 前置规则匹配引擎和暴力破解识别引擎的主判断结论(如 \u0007ttack_type、is_malicious、\threat_level 和 \u0007ttack_description)。\n - AI 判定后,将 AI 判断结论与主记录判断进行比较,记录在 \u0007i_rule_match_consistency 字段(一致 / 不一致),用作辅助审计依据。\n\n### 4. 匹配规则优先级说明\n\n规则按 `priority ASC` 排序匹配,关键优先级分布:\n\n| 优先级范围 | 规则类型 | 说明 |\n| :--- | :--- | :--- |\n| 1-3 | XSS、SQL注入(基础)、目录遍历 | 高频攻击,精确正则 |\n| 5 | Redis未授权访问 | 协议专用规则 |\n| 6-9 | WebShell、RCE、扫描探测 | 中等精度规则 |\n| 11-15 | SQL注入(盲注)、XXE、信息泄露 | 长正则、较复杂模式 |\n| 18 | 命令注入(宽泛匹配) | 匹配 `;` `|` `(` 等字符,优先级故意调低,避免误判 |\n| 20-50 | XSS/目录遍历/信息泄露/扫描探测(补充) | 低优先级兜底规则 |\n\n> **重要**:命令注入规则 (ID=8) 的正则包含 `(;|\\||&|\\$|\\(|\\)|...)` 极其宽泛,priority 已从 5 调整为 18,防止将 `sleep()`、`eval()`、Nmap UA 等载荷误判为命令注入。\n\n### 5. 自动化测试\n\n测试脚本:`backend/test_traffic_identification.py`\n\n- **51 个断言**,覆盖 22 个测试场景\n- 4 个正常流量测试(SSH/FTP/HTTP/ES)\n- 11 个正则规则匹配测试(SQL注入×2、XSS×2、命令注入、目录遍历、信息泄露、Redis×2、WebShell、扫描探测)\n- 5 个暴力破解测试(SSH低频/高频、HTTP纯GET不触发、HTTP凭证爆破、FTP爆破、MySQL爆破)\n- 2 个混合场景测试\n\n运行方式:\n```bash\n# 确保 Flask 后端运行在 5000 端口\ncd backend\npython run_server.py & # 或 python app.py\npython test_traffic_identification.py\n```\n\n测试脚本在 SETUP 阶段会自动:\n- 创建/复用测试账户 `testadmin01`\n- 动态发现蜜罐端口\n- 确保 Redis 匹配规则存在\n- 将命令注入规则优先级调至 18"}, "d29e414d604b9f5fd340fa59c5aa963d0464a8fb": {"t": 1785764205.4447565, "n": 19297, "h": "10c1243478836833", "c": "# 第一个规范 (必须遵守)\n 当每次大的修改和功能的新增,如果与CLAUDE.md文件内容不一致了,需要把新增的功能或者修改功能的逻辑重新写入CLAUDE.md,确保CLAUDE.md文件为最新的。\n \n# 项目开发规范 (Project Rules)\n\n你是一个资深的 Python 全栈专家,请在开发本 **基于低交互蜜罐的恶意流量检测和防御系统** 时严格遵循如下规则:\n\n## 一、核心开发原则\n- **代码质量**:严格遵循 **SOLID、DRY (Don't Repeat Yourself)、KISS (Keep It Simple, Stupid)** 原则。\n- **安全优先**:遵循 **OWASP Top 10** 安全最佳实践(特别是 SQL 注入防护、XSS 防护、敏感数据加密)。\n- **架构分层**:严格遵守 **Controller-Service-Model** 分层架构,禁止跨层调用。\n- **注释规范**:所有关键逻辑、类、方法必须包含 **中文注释** 和 **Docstrings**。\n- **类型安全**:Python 代码必须使用 Type Hints (`typing`),前端使用 TypeScript。\n\n---\n\n## 二、技术栈规范\n### 1. 后端 (Backend)\n- **语言**:Python 3.8+\n- **Web 框架**:Flask\n- **ORM**:SQLAlchemy\n- **数据库**:MySQL\n- **AI 模型**:Ollama (DeepSeek-R1) / OpenAI (远程调用) (也可通过 API 方式接入 OpenAI 等主流模型)\n- **依赖管理**:`requirements.txt` + `venv`\n\n### 2. 前端 (Frontend)\n- **框架**:Vue 3 (Composition API)\n- **语言**:TypeScript\n- **构建工具**:Vite\n- **UI 组件库**:Element Plus\n- **HTTP 客户端**:Axios\n\n---\n\n## 三、后端架构设计规范\n### 1. 分层职责\n| 层级 | 目录 | 职责 | 约束条件 |\n| :--- | :--- | :--- | :--- |\n| **Route (Controller)** | `src/route/` | 处理 HTTP 请求/响应,参数解析,权限校验 | - **禁止**包含复杂业务逻辑
- 仅调用 Service 层
- 返回统一的 JSON 格式 |\n| **Service** | `src/service/` | 核心业务逻辑,事务管理,第三方服务调用 | - **禁止**直接操作 SQL(需通过 Model/ORM)
- 处理异常并返回明确结果 |\n| **Model** | `src/model/` | 数据库模型定义,基础数据操作 | - 继承 `db.Model`
- 定义表结构、关系及基础 CRUD 方法 |\n| **Utils** | `src/utils/` | 通用工具函数 | - 无状态,纯函数为主 |\n\n### 2. 代码示例规范\n\n#### (1) Model 层 (`src/model/user_model.py`)\n```python\nfrom database import db\nfrom datetime import datetime\n\nclass User(db.Model):\n \"\"\"\n 用户模型类\n \"\"\"\n __tablename__ = 'users'\n \n id = db.Column(db.Integer, primary_key=True, autoincrement=True)\n username = db.Column(db.String(50), unique=True, nullable=False, comment='用户名')\n # 密码必须存储哈希值,禁止明文\n password_hash = db.Column(db.String(128), nullable=False, comment='密码哈希')\n created_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')\n\n def to_dict(self):\n return {\n 'id': self.id,\n 'username': self.username,\n 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S')\n }\n```\n\n#### (2) Service 层 (`src/service/user_service.py`)\n```python\nfrom model.user_model import User\nfrom database import db\nfrom typing import Dict, Optional\n\nclass UserService:\n \"\"\"\n 用户服务类:处理用户注册、登录等逻辑\n \"\"\"\n \n @staticmethod\n def create_user(username: str, password_plain: str) -> Dict:\n \"\"\"\n 创建新用户\n \n Args:\n username (str): 用户名\n password_plain (str): 明文密码\n \n Returns:\n Dict: 操作结果\n \"\"\"\n # 1. 校验是否存在\n if User.query.filter_by(username=username).first():\n return {'success': False, 'message': '用户已存在'}\n \n # 2. 密码加密 (示例,实际应使用加盐哈希)\n # password_hash = generate_password_hash(password_plain) \n \n # 3. 入库\n new_user = User(username=username, password_hash='hashed_value')\n try:\n db.session.add(new_user)\n db.session.commit()\n return {'success': True, 'message': '注册成功', 'data': new_user.to_dict()}\n except Exception as e:\n db.session.rollback()\n return {'success': False, 'message': str(e)}\n```\n\n#### (3) Route 层 (`src/route/user_route.py`)\n```python\nfrom flask import Blueprint, request, jsonify\nfrom service.user_service import UserService\n\nuser_bp = Blueprint('user', __name__, url_prefix='/api/user')\n\n@user_bp.route('/register', methods=['POST'])\ndef register():\n data = request.json\n username = data.get('username')\n password = data.get('password')\n \n if not username or not password:\n return jsonify({'code': 400, 'msg': '参数缺失'}), 400\n \n result = UserService.create_user(username, password)\n \n if result['success']:\n return jsonify({'code': 200, 'msg': '成功', 'data': result['data']})\n else:\n return jsonify({'code': 500, 'msg': result['message']}), 500\n```\n\n---\n\n## 四、前端开发规范\n### 1. 组件风格\n- 使用 **Vue 3 Composition API** (`\n\n\n```\n\n---\n\n## 五、通用规范\n1. **异常处理**:后端必须捕获所有未处理异常,防止服务崩溃,并记录错误日志。\n2. **日志记录**:关键操作(登录、攻击检测、封禁)必须写入日志文件或数据库。\n3. **环境配置**:敏感信息(数据库密码、API Key)禁止硬编码,需使用环境变量或配置文件。\n4. **Git 提交**:Commit Message 需清晰描述变更内容(如 `feat: 添加恶意IP自动封禁功能`)。\n\n## 六、特殊业务规则\n1. **蜜罐管理**:蜜罐进程需独立管理,确保主服务崩溃不影响蜜罐运行。\n2. **AI 分析**:大模型调用需使用异步队列(如 Queue + Threading),避免阻塞 HTTP 请求。\n3. **IP 封禁**:调用底层防火墙命令(iptables/netsh)时需进行操作系统判断和权限校验。\n\n## 七、现有模块与系统架构\n当前的后端服务架构已分为以下主要模块:\n\n### 1. 核心业务 API 模块 (Routes / Services / Models)\n\n| 业务模块 | Route 文件 | Service 文件 | Model 文件 | 职责说明 |\n| :--- | :--- | :--- | :--- | :--- |\n| **User (用户权限)** | `user_route.py` | `user_service.py` | `user_model.py`, `user_info_model.py`, `permission_model.py`, `module_model.py` | 注册、登录、JWT鉴权、用户管理、模块权限分配 |\n| **Dashboard (数据大屏)** | `dashboard_route.py` | `dashboard_service.py` | `attack_stats_model.py` | 攻击趋势、类型分布、地图热力、总览统计(均需JWT) |\n| **Honeypot (蜜罐管理)** | `honeypot_route.py` | `honeypot_service.py` | `honeypot_model.py` | 蜜罐CRUD、进程启停、健康检查、PID持久化 |\n| **Log (日志审计)** | `log_route.py` | `log_service.py` | `log_model.py` | 日志查询、分页、导出CSV、内部上报(蜜罐使用) |\n| **Malicious IP (恶意拦截)** | `malicious_ip_route.py` | `malicious_ip_service.py` | `malicious_ip_model.py`, `block_history_model.py` | 恶意IP列表、封禁/解封、防火墙命令下发 |\n| **Match Rule (规则引擎)** | `match_rule_route.py` | `match_rule_service.py` | `match_rule_model.py` | 正则匹配规则管理、启停切换、自动封禁配置 |\n| **AI Config (大模型配置)** | `ai_config_route.py` | `ai_config_service.py`, `ai_analysis_service.py` | `ai_config_model.py` | LLM参数化配置、激活/禁用、连通性测试 |\n| **Test (测试接口)** | `test_route.py` | `test_service.py` | — | 内部功能测试,非生产接口 |\n\n### 2. 完整 API 端点清单\n\n#### /api/user — 用户管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| POST | `/api/user/register` | 无 | 用户注册 |\n| POST | `/api/user/login` | 无 | 用户登录,返回 JWT |\n| POST | `/api/user/create_admin` | 无 | 创建管理员(初始化用) |\n| GET | `/api/user/me` | JWT | 获取当前用户信息 |\n| PUT | `/api/user/me` | JWT | 更新当前用户信息(手机/邮箱/密码) |\n| GET | `/api/user/list` | JWT + 管理员 | 分页获取用户列表 |\n| POST | `/api/user/add` | JWT + 管理员 | 管理员新增用户 |\n| PUT | `/api/user/` | JWT + 管理员 | 管理员修改用户 |\n| DELETE | `/api/user/` | JWT + 管理员 | 管理员删除用户 |\n| GET | `/api/user/permissions` | JWT + 管理员 | 获取所有权限列表 |\n| GET | `/api/user/modules` | JWT | 获取所有模块列表 |\n\n#### /api/dashboard — 数据大屏\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/dashboard/trend` | JWT | 攻击趋势(支持 days/granularity 参数) |\n| GET | `/api/dashboard/types` | JWT | 攻击类型统计分布 |\n| GET | `/api/dashboard/map` | JWT | 攻击来源地图数据 |\n| GET | `/api/dashboard/summary` | JWT | 总览统计(总攻击数、封禁数等) |\n\n#### /api/honeypots — 蜜罐管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/honeypots` | JWT | 分页查询蜜罐列表(支持 type/status/keyword) |\n| POST | `/api/honeypots` | JWT | 创建新蜜罐 |\n| PUT | `/api/honeypots/` | JWT | 更新蜜罐配置 |\n| DELETE | `/api/honeypots/` | JWT | 删除蜜罐 |\n| POST | `/api/honeypots//start` | JWT | 启动蜜罐进程 |\n| POST | `/api/honeypots//stop` | JWT | 停止蜜罐进程 |\n| GET | `/api/honeypots//health` | JWT | 蜜罐健康检查 |\n\n#### /api/logs — 日志审计\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/logs` | JWT | 分页查询日志(支持多字段过滤) |\n| GET | `/api/logs/export` | JWT | 导出日志为 CSV(含 BOM,支持 Excel) |\n| GET | `/api/logs/` | JWT | 根据 ID 获取单条日志 |\n| GET | `/api/logs/attack-types` | JWT | 获取所有攻击类型枚举 |\n| GET | `/api/logs/threat-levels` | JWT | 获取所有威胁等级枚举 |\n| GET | `/api/logs/statistics` | JWT | 获取日志统计汇总 |\n| POST | `/api/logs/internal/upload` | 无 | **内部接口**:蜜罐进程上报攻击日志 |\n\n#### /api/malicious-ips — 恶意IP管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/malicious-ips` | JWT | 分页查询恶意IP(支持 is_blocked/threat_level/keyword) |\n| POST | `/api/malicious-ips/block` | JWT | 封禁指定IP(支持时长/截止时间) |\n| POST | `/api/malicious-ips/unblock` | JWT | 解封指定IP |\n\n#### /api/match-rules — 匹配规则引擎\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/match-rules` | JWT | 分页查询规则 |\n| GET | `/api/match-rules/` | JWT | 获取单条规则 |\n| POST | `/api/match-rules` | JWT | 创建规则(正则+威胁等级+自动封禁配置) |\n| PUT | `/api/match-rules/` | JWT | 更新规则 |\n| DELETE | `/api/match-rules/` | JWT | 删除规则 |\n| PUT | `/api/match-rules//toggle` | JWT | 切换规则启用状态 |\n| GET | `/api/match-rules/attack-types` | JWT | 获取攻击类型枚举 |\n| GET | `/api/match-rules/threat-levels` | JWT | 获取威胁等级枚举 |\n\n#### /api/ai-config — AI大模型配置\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/ai-config/` | JWT | 获取所有AI配置 |\n| POST | `/api/ai-config/` | JWT | 创建AI配置(name/api_url/model_name必填) |\n| PUT | `/api/ai-config/` | JWT | 更新AI配置 |\n| DELETE | `/api/ai-config/` | JWT | 删除AI配置 |\n| POST | `/api/ai-config//activate` | JWT | 激活配置(设为当前使用) |\n| POST | `/api/ai-config//deactivate` | JWT | 禁用配置 |\n| POST | `/api/ai-config//test` | JWT | 测试AI配置连通性 |\n\n### 3. 数据库模型清单\n\n共 12 个 Model 文件,对应以下数据库表:\n\n| 模型文件 | 表名 | 说明 |\n| :--- | :--- | :--- |\n| `user_model.py` | `users` | 用户账号、密码哈希、角色(1管理员/2普通用户) |\n| `user_info_model.py` | `user_infos` | 用户扩展信息(手机号、邮箱、头像等) |\n| `permission_model.py` | `permissions` | 系统权限定义 |\n| `module_model.py` | `modules` / `user_modules` | 系统模块定义及用户-模块关联 |\n| `honeypot_model.py` | `honeypots` | 蜜罐配置(类型、端口、状态、`pid` 字段用于持久化进程) |\n| `log_model.py` | `logs` | 攻击日志记录(来源IP、载荷、威胁等级、协议等) |\n| `malicious_ip_model.py` | `malicious_ips` | 恶意IP列表(封禁状态、威胁等级、攻击次数) |\n| `block_history_model.py` | `block_history` | 封禁/解封操作历史记录 |\n| `attack_stats_model.py` | `attack_stats` | 攻击统计聚合数据(供 Dashboard 使用) |\n| `match_rule_model.py` | `match_rules` | 流量匹配规则(正则表达式、自动封禁、优先级) |\n| `ai_config_model.py` | `ai_configs` | AI大模型配置(API地址、模型名称、激活状态) |\n\n> **重要**:`honeypot_model.py` 中包含 `pid` 字段(Integer, nullable),用于在服务重启后通过 `psutil` 检查蜜罐子进程是否仍然存活。\n\n### 4. 蜜罐组件实现 (`backend/honeypots/`)\n\n| 文件 | 协议 | 默认端口 | 捕获目标 |\n| :--- | :--- | :--- | :--- |\n| `ftp_server.py` | FTP | 2121 | 爆破攻击、未授权访问、文件上传尝试 |\n| `ssh_server.py` | SSH | 2222 | 登录爆破、恶意命令执行(基于 Paramiko) |\n| `hikvision_http_server.py` | HTTP | 可配置(读取 `sys.argv[1]`) | IoT/摄像头设备漏洞探测、Web 攻击 |\n| `redis_server.py` | TCP/Redis | 6379 | Redis 未授权访问、SLAVEOF/CONFIG 命令利用 |\n| `mysql_server.py` | TCP/MySQL | 3306 | 数据库弱口令爆破(捕获用户名、客户端版本) |\n\n**蜜罐进程管理机制**:\n- 所有蜜罐以**独立子进程**方式启动(`subprocess.Popen`),与主 Flask 服务解耦。\n- 启动时将 PID 写入 `honeypots.pid` 数据库字段;停止时发送 `SIGTERM`/`taskkill`。\n- 服务重启后调用 `psutil.pid_exists()` 检查进程存活状态,自动修正数据库状态。\n- 蜜罐捕获到攻击后,通过 HTTP 调用 `/api/logs/internal/upload` 上报主服务。\n\n### 5. Agent 与智能响应模块 (`backend/agent/`)\n\n```\nagent/\n├── core.py # AI代理调度核心,支持多模型工作池、Queue+Threading异步队列\n├── llm_client.py # LLM客户端,封装 OpenAI 兼容 API 调用\n├── mcp/\n│ └── skill.py # MCP技能协议基类\n└── skills/\n ├── block_ip_skill.py # 自动封禁技能:先记录 malicious_ip 再调用防火墙封禁\n ├── decoder_skill.py # Base64/URL解码技能,辅助攻击载荷分析\n └── log_query_skill.py # 日志查询技能,供 AI Agent 检索历史攻击日志\n```\n\n**关键设计**:AI 分析通过 `Queue + Threading` 异步执行,不阻塞 HTTP 请求线程。\n\n### 6. 工具模块 (`backend/utils/`)\n\n| 文件 | 说明 |\n| :--- | :--- |\n| `api_response.py` | 统一 API 响应格式工具(`ApiResponse.success/error/bad_request` 等) |\n| `ip_utils.py` | **离线** IP 地理位置解析(MaxMind GeoLite2 MMDB),含 LRU 缓存 10000 条、私有 IP 判断 |\n| `time_utils.py` | 时间格式化工具函数 |\n| `download_geoip.py` | 自动下载/更新 GeoLite2 数据库脚本 |\n| `data/GeoLite2-City.mmdb` | 离线城市/国家地理数据库 |\n| `data/GeoLite2-ASN.mmdb` | 离线 ASN 自治系统数据库 |\n\n> **注意**:IP 溯源已从在线 `ip-api.com` 全面迁移至离线 MaxMind GeoLite2,无需外网访问。\n\n### 7. 前端视图清单 (`vueweb/vue-project/src/views/`)\n\n| 文件路径 | 功能说明 |\n| :--- | :--- |\n| `Dashboard.vue` | 仪表盘入口(路由容器) |\n| `dashboard/DashboardLayout.vue` | 数据大屏布局(导航 + 内容区) |\n| `dashboard/Overview.vue` | 攻击总览(总数、封禁数、实时告警) |\n| `dashboard/Trend.vue` | 攻击趋势折线图(按天/小时粒度) |\n| `dashboard/Types.vue` | 攻击类型饼图/柱状图分布 |\n| `dashboard/Map.vue` | 世界地图攻击来源热力图(ECharts) |\n| `HoneypotManagement.vue` | 蜜罐管理(CRUD、启停控制、健康状态监控) |\n| `LogQuery.vue` | 日志查询(多维度过滤、详情展示、CSV导出) |\n| `MaliciousIPManagement.vue` | 恶意IP管理(封禁/解封、威胁等级筛选) |\n| `MatchRuleManagement.vue` | 匹配规则管理(正则规则CRUD、启停切换) |\n| `AIConfigManagement.vue` | AI配置管理(多模型配置、激活/禁用、连通测试) |\n| `UserManagement.vue` | 用户管理(管理员):列表、增删改、模块权限分配 |\n| `UserProfile.vue` | 个人中心:查看/修改自己的手机、邮箱、密码 |\n\n**前端特性**:\n- 支持**暗黑/明亮**主题切换(持久化到 localStorage)。\n- 路由守卫:token 存在但 `user` 为空时,先 `await fetchCurrentUser()` 再放行,防止权限检查时序问题。\n- 所有 HTTP 请求通过 Axios 统一拦截器附加 `Authorization: Bearer `。\n\n### 8. 后端初始化脚本\n\n| 文件 | 用途 |\n| :--- | :--- |\n| `init_database.py` | 创建所有数据库表(`db.create_all()`) |\n| `init_data.py` | 初始化基础数据(角色、权限) |\n| `init_modules.py` | 初始化系统功能模块数据 |\n| `init_permissions.py` | 初始化权限条目 |\n| `init_honeypot.py` | 初始化默认蜜罐配置 |\n| `config.py` | Flask 配置类(数据库URI、JWT密钥、CORS等) |\n| `extensions.py` | Flask 扩展实例集中管理(SocketIO 全局单例),避免 reloader 实例不一致 |\n| `app.py` | Flask 应用入口,注册所有蓝图,初始化 SocketIO 并注册 /ws namespace |\n\n### 9. 数据库迁移\n\n使用 Flask-Migrate(Alembic),迁移文件位于 `backend/migrations/versions/`。\n\n**已有迁移**:\n- `f1a2b3c4d5e6_add_pid_to_honeypots.py` — 为 `honeypots` 表新增 `pid` 字段,支持进程持久化重启检测。\n\n---\n\n## 八、WebSocket 实时推送架构\n\n### 1. 技术选型\n| 层 | 技术 | 版本 |\n| :--- | :--- | :--- |\n| 后端 | Flask-SocketIO | 5.3.6 |\n| 后端传输 | python-socketio + python-engineio | 5.10.0 / 4.8.2 |\n| 前端 | socket.io-client | 4.7.5 |\n\n### 2. 架构流程\n\n```\n蜜罐捕获攻击\n ↓ HTTP POST /api/logs/internal/upload\nlog_service.py · create_log()\n ├─ 规则匹配 (MatchRule)\n ├─ 写入 MySQL (Log)\n ├─ AI 分析任务入队\n ├─ 记录恶意 IP\n └─ [仅恶意流量] socketio.emit('new_attack', payload, namespace='/ws')\n ↓ WebSocket\n 前端 useSocket composable\n ↓\n ┌─────────────┼─────────────┐\n DashboardLayout.vue Overview.vue Map.vue\n (ElNotification弹窗 (数字跳动+ (地图红色\n + 高危横幅) 实时告警列表) 脉冲散点)\n```\n\n### 3. 关键文件\n\n| 文件 | 职责 |\n| :--- | :--- |\n| `backend/extensions.py` | **全局唯一** `socketio = SocketIO()` 实例,所有模块必须从此处导入 socketio,避免 werkzeug reloader 导致实例不一致 |\n| `backend/app.py` | `from extensions import socketio`,调用 `socketio.init_app(app, ...)`,注册 `/ws` namespace 的 connect/disconnect handler,使用 `socketio.run()` 替代 `app.run()` |\n| `backend/service/log_service.py` | `create_log()` 末尾 `from extensions import socketio`,emit `new_attack` 事件到 `/ws` namespace |\n| `frontend/src/composables/useSocket.ts` | 全局 Socket 单例管理,`connectSocket()`/`disconnectSocket()` 由 DashboardLayout 统一管理生命周期,提供 `onAttack/offAttack` 订阅方法,pending 队列 + 重连恢复(先 `off('new_attack')` 再统一重绑,避免 handler 重复注册) |\n| `frontend/src/views/dashboard/DashboardLayout.vue` | 订阅 `new_attack`,显示 `ElNotification` 弹窗 + 高危横幅(含滑入动画),菜单栏显示连接状态指示灯(绿/红),使用 `` 缓存子路由 |\n| `frontend/src/views/dashboard/Overview.vue` | 订阅 `new_attack`,数字递增 + bounce 跳动动画 + 实时告警列表(最多 10 条,transition-group 滑入动画) |\n| `frontend/src/views/dashboard/Map.vue` | 订阅 `new_attack`,追加 `effectScatter` 脉冲散点到地图(使用 `Map` 结构消除竞态),5 秒后自动消失,过滤 `(0,0)` null-island 坐标 |\n\n> **重要**:`socketio` 实例必须从 `extensions.py` 导入,**禁止**从 `app.py` 导入。原因:werkzeug 的 `use_reloader=True` 会在子进程中重新执行 `app.py`,导致 `app.py` 中定义的 `socketio` 和其他模块缓存导入的 `socketio` 不是同一个对象。`extensions.py` 作为独立模块不受 reloader 影响。\n\n### 4. 推送事件规范\n\n**事件名**:`new_attack` \n**Namespace**:`/ws` \n**触发条件**:`is_malicious == True`(低危/正常流量不推送,减少噪声)\n\n**载荷字段**:\n```json\n{\n \"log_id\": 123,\n \"source_ip\": \"1.2.3.4\",\n \"attack_type\": \"SQL注入\",\n \"threat_level\": \"high\",\n \"protocol\": \"HTTP\",\n \"target_port\": 80,\n \"attack_time\": \"2026-03-27T10:30:00\",\n \"attack_description\": \"触发规则: SQL注入检测\",\n \"longitude\": 116.4074,\n \"latitude\": 39.9042\n}\n```\n\n### 5. 后端重启说明\n\nWebSocket 需要使用 `socketio.run()` 替代 `app.run()`,已在 `app.py` 中完成更新。\n重启后端后 WebSocket 功能即生效,无需额外操作。\n\n### 6. WebSocket 测试脚本\n\n| 文件 | 用途 |\n| :--- | :--- |\n| `backend/test/test_realtime_report.py` | 主测试脚本:30 次/60 秒全球 IP 的 SQL 注入攻击,用于验证大屏 4 个核心动态效果 |\n| `backend/test/verify_websocket.py` | WebSocket 推送端到端验证:Python socketio 客户端连接 `/ws`,发 3 条攻击,验证 4 项指标(事件到达、坐标、攻击类型、威胁等级) |\n\n---\n\n## 九、代码重载\n后端代码修改之后必须重新启动后端进程\n\n---\n\n## 十、多级恶意流量识别引擎\n\n### 1. 架构概述\n\n蜜罐捕获的原始流量经过**三级识别漏斗**,逐级过滤和分类:\n\n```\n蜜罐原始数据 → 第一级:正则规则匹配 → 第二级:暴力破解频次分析 → 第三级:AI深度分析\n```\n\n### 2. 蜜罐端设计原则(纯数据采集探针)\n\n蜜罐脚本**只负责捕获原始数据**,不做任何攻击分类。上报字段:\n- `attacker_ip` / `attacker_port` — 攻击来源\n- `honeypot_port` — 蜜罐端口\n- `protocol` — 协议类型 (SSH/FTP/HTTP/TCP 等)\n- `raw_log` — 原始请求/命令完整记录\n- `payload` — 载荷内容(认证类蜜罐统一格式:`\"Username: xxx, Password: xxx\"`)\n- `request_path` / `user_agent` — HTTP 蜜罐专用字段\n\n**禁止**在蜜罐脚本中包含 `attack_type`、`threat_level`、`attack_description` 等分类逻辑。\n\n### 3. 三级识别流水线(`log_service.py` · `create_log()`)\n\n#### 第一级:正则规则引擎匹配\n- 从 `match_rules` 表读取所有 `is_enabled=True` 的规则,按 `priority ASC` 排序(数字越小优先级越高)\n- 匹配字段由规则的 `match_field` 决定(目前全部为 `raw_log`)\n- 命中规则后立即设置 `attack_type`、`threat_level`、`attack_description`、`is_malicious`\n- **首条命中即停止**,不会继续匹配后续规则\n\n#### 第二级:暴力破解频次分析\n- **默认恶意判定规则**:对于蜜罐流量,除 HTTP 访问 `/` 和 `/dashboard` 外,所有的 `SSH尝试登录`、`FTP尝试登录`、`MySQL尝试登录`、`Redis尝试登录` 以及其他路径的 `HTTP尝试登录` 均默认判定为**恶意流量** (`is_malicious=True`),并自动加入恶意 IP 列表。\n- **触发条件**:第一级未命中任何高危规则,且属于尝试登录类行为(包括上述尝试登录以及正常流量)。\n- **检测方法**:`_check_brute_force(source_ip, protocol, current_payload)`\n - 查询同一 IP + 同一协议在最近 **1 分钟** 内的日志数量\n - HTTP 协议特殊处理:只有包含认证凭证(`Username:...Password:...`)的请求才计入暴力破解计数\n - 阈值:**20 次/分钟** (`BRUTE_FORCE_THRESHOLD = 20`)\n- **凭证检测**:`_is_credential_payload(payload)` 使用正则 `r'Username:\\s*.+,\\s*Password:\\s*.+'` 判断\n- 命中后设置 `attack_type='暴力破解'`、`threat_level='high'`、`is_malicious=True`\n\n#### 第三级:AI 深度分析\n- **触发条件**:所有日志均入 AI 分析队列(`Queue + Threading` 异步执行)\n- **AI 辅助判断机制**(\u0007i_analysis_service.py · _process_single_log()):\n - AI 仅独立提取和存入自己的分析结果字段(如 \u0007i_attack_type、\u0007i_confidence、\u0007i_analysis_result)。\n - **不修改、不覆写** 前置规则匹配引擎和暴力破解识别引擎的主判断结论(如 \u0007ttack_type、is_malicious、\threat_level 和 \u0007ttack_description)。\n - AI 判定后,将 AI 判断结论与主记录判断进行比较,记录在 \u0007i_rule_match_consistency 字段(一致 / 不一致),用作辅助审计依据。\n\n### 4. 匹配规则优先级说明\n\n规则按 `priority ASC` 排序匹配,关键优先级分布:\n\n| 优先级范围 | 规则类型 | 说明 |\n| :--- | :--- | :--- |\n| 1-3 | XSS、SQL注入(基础)、目录遍历 | 高频攻击,精确正则 |\n| 5 | Redis未授权访问 | 协议专用规则 |\n| 6-9 | WebShell、RCE、扫描探测 | 中等精度规则 |\n| 11-15 | SQL注入(盲注)、XXE、信息泄露 | 长正则、较复杂模式 |\n| 18 | 命令注入(宽泛匹配) | 匹配 `;` `|` `(` 等字符,优先级故意调低,避免误判 |\n| 20-50 | XSS/目录遍历/信息泄露/扫描探测(补充) | 低优先级兜底规则 |\n\n> **重要**:命令注入规则 (ID=8) 的正则包含 `(;|\\||&|\\$|\\(|\\)|...)` 极其宽泛,priority 已从 5 调整为 18,防止将 `sleep()`、`eval()`、Nmap UA 等载荷误判为命令注入。\n\n### 5. 自动化测试\n\n测试脚本:`backend/test_traffic_identification.py`\n\n- **51 个断言**,覆盖 22 个测试场景\n- 4 个正常流量测试(SSH/FTP/HTTP/ES)\n- 11 个正则规则匹配测试(SQL注入×2、XSS×2、命令注入、目录遍历、信息泄露、Redis×2、WebShell、扫描探测)\n- 5 个暴力破解测试(SSH低频/高频、HTTP纯GET不触发、HTTP凭证爆破、FTP爆破、MySQL爆破)\n- 2 个混合场景测试\n\n运行方式:\n```bash\n# 确保 Flask 后端运行在 5000 端口\ncd backend\npython run_server.py & # 或 python app.py\npython test_traffic_identification.py\n```\n\n测试脚本在 SETUP 阶段会自动:\n- 创建/复用测试账户 `testadmin01`\n- 动态发现蜜罐端口\n- 确保 Redis 匹配规则存在\n- 将命令注入规则优先级调至 18"}, "c2e2f73c48f7d351c1034f6035a5d4bf09cd27ad": {"t": 1785764207.0433843, "n": 19122, "h": "a941ef13b7a165b3", "c": "# 第一个规范 (必须遵守)\n 当每次大的修改和功能的新增,如果与CLAUDE.md文件内容不一致了,需要把新增的功能或者修改功能的逻辑重新写入CLAUDE.md,确保CLAUDE.md文件为最新的。\n \n# 项目开发规范 (Project Rules)\n\n你是一个资深的 Python 全栈专家,请在开发本 **基于低交互蜜罐的恶意流量检测和防御系统** 时严格遵循如下规则:\n\n## 一、核心开发原则\n- **代码质量**:严格遵循 **SOLID、DRY (Don't Repeat Yourself)、KISS (Keep It Simple, Stupid)** 原则。\n- **安全优先**:遵循 **OWASP Top 10** 安全最佳实践(特别是 SQL 注入防护、XSS 防护、敏感数据加密)。\n- **架构分层**:严格遵守 **Controller-Service-Model** 分层架构,禁止跨层调用。\n- **注释规范**:所有关键逻辑、类、方法必须包含 **中文注释** 和 **Docstrings**。\n- **类型安全**:Python 代码必须使用 Type Hints (`typing`),前端使用 TypeScript。\n\n---\n\n## 二、技术栈规范\n### 1. 后端 (Backend)\n- **语言**:Python 3.8+\n- **Web 框架**:Flask\n- **ORM**:SQLAlchemy\n- **数据库**:MySQL\n- **AI 模型**:Ollama (DeepSeek-R1) / OpenAI (远程调用) (也可通过 API 方式接入 OpenAI 等主流模型)\n- **依赖管理**:`requirements.txt` + `venv`\n\n### 2. 前端 (Frontend)\n- **框架**:Vue 3 (Composition API)\n- **语言**:TypeScript\n- **构建工具**:Vite\n- **UI 组件库**:Element Plus\n- **HTTP 客户端**:Axios\n\n---\n\n## 三、后端架构设计规范\n### 1. 分层职责\n| 层级 | 目录 | 职责 | 约束条件 |\n| :--- | :--- | :--- | :--- |\n| **Route (Controller)** | `src/route/` | 处理 HTTP 请求/响应,参数解析,权限校验 | - **禁止**包含复杂业务逻辑
- 仅调用 Service 层
- 返回统一的 JSON 格式 |\n| **Service** | `src/service/` | 核心业务逻辑,事务管理,第三方服务调用 | - **禁止**直接操作 SQL(需通过 Model/ORM)
- 处理异常并返回明确结果 |\n| **Model** | `src/model/` | 数据库模型定义,基础数据操作 | - 继承 `db.Model`
- 定义表结构、关系及基础 CRUD 方法 |\n| **Utils** | `src/utils/` | 通用工具函数 | - 无状态,纯函数为主 |\n\n### 2. 代码示例规范\n\n#### (1) Model 层 (`src/model/user_model.py`)\n```python\nfrom database import db\nfrom datetime import datetime\n\nclass User(db.Model):\n \"\"\"\n 用户模型类\n \"\"\"\n __tablename__ = 'users'\n \n id = db.Column(db.Integer, primary_key=True, autoincrement=True)\n username = db.Column(db.String(50), unique=True, nullable=False, comment='用户名')\n # 密码必须存储哈希值,禁止明文\n password_hash = db.Column(db.String(128), nullable=False, comment='密码哈希')\n created_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')\n\n def to_dict(self):\n return {\n 'id': self.id,\n 'username': self.username,\n 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S')\n }\n```\n\n#### (2) Service 层 (`src/service/user_service.py`)\n```python\nfrom model.user_model import User\nfrom database import db\nfrom typing import Dict, Optional\n\nclass UserService:\n \"\"\"\n 用户服务类:处理用户注册、登录等逻辑\n \"\"\"\n \n @staticmethod\n def create_user(username: str, password_plain: str) -> Dict:\n \"\"\"\n 创建新用户\n \n Args:\n username (str): 用户名\n password_plain (str): 明文密码\n \n Returns:\n Dict: 操作结果\n \"\"\"\n # 1. 校验是否存在\n if User.query.filter_by(username=username).first():\n return {'success': False, 'message': '用户已存在'}\n \n # 2. 密码加密 (示例,实际应使用加盐哈希)\n # password_hash = generate_password_hash(password_plain) \n \n # 3. 入库\n new_user = User(username=username, password_hash='hashed_value')\n try:\n db.session.add(new_user)\n db.session.commit()\n return {'success': True, 'message': '注册成功', 'data': new_user.to_dict()}\n except Exception as e:\n db.session.rollback()\n return {'success': False, 'message': str(e)}\n```\n\n#### (3) Route 层 (`src/route/user_route.py`)\n```python\nfrom flask import Blueprint, request, jsonify\nfrom service.user_service import UserService\n\nuser_bp = Blueprint('user', __name__, url_prefix='/api/user')\n\n@user_bp.route('/register', methods=['POST'])\ndef register():\n data = request.json\n username = data.get('username')\n password = data.get('password')\n \n if not username or not password:\n return jsonify({'code': 400, 'msg': '参数缺失'}), 400\n \n result = UserService.create_user(username, password)\n \n if result['success']:\n return jsonify({'code': 200, 'msg': '成功', 'data': result['data']})\n else:\n return jsonify({'code': 500, 'msg': result['message']}), 500\n```\n\n---\n\n## 四、前端开发规范\n### 1. 组件风格\n- 使用 **Vue 3 Composition API** (`\n\n\n```\n\n---\n\n## 五、通用规范\n1. **异常处理**:后端必须捕获所有未处理异常,防止服务崩溃,并记录错误日志。\n2. **日志记录**:关键操作(登录、攻击检测、封禁)必须写入日志文件或数据库。\n3. **环境配置**:敏感信息(数据库密码、API Key)禁止硬编码,需使用环境变量或配置文件。\n4. **Git 提交**:Commit Message 需清晰描述变更内容(如 `feat: 添加恶意IP自动封禁功能`)。\n\n## 六、特殊业务规则\n1. **蜜罐管理**:蜜罐进程需独立管理,确保主服务崩溃不影响蜜罐运行。\n2. **AI 分析**:大模型调用需使用异步队列(如 Queue + Threading),避免阻塞 HTTP 请求。\n3. **IP 封禁**:调用底层防火墙命令(iptables/netsh)时需进行操作系统判断和权限校验。\n\n## 七、现有模块与系统架构\n当前的后端服务架构已分为以下主要模块:\n\n### 1. 核心业务 API 模块 (Routes / Services / Models)\n\n| 业务模块 | Route 文件 | Service 文件 | Model 文件 | 职责说明 |\n| :--- | :--- | :--- | :--- | :--- |\n| **User (用户权限)** | `user_route.py` | `user_service.py` | `user_model.py`, `user_info_model.py`, `permission_model.py`, `module_model.py` | 注册、登录、JWT鉴权、用户管理、模块权限分配 |\n| **Dashboard (数据大屏)** | `dashboard_route.py` | `dashboard_service.py` | `attack_stats_model.py` | 攻击趋势、类型分布、地图热力、总览统计(均需JWT) |\n| **Honeypot (蜜罐管理)** | `honeypot_route.py` | `honeypot_service.py` | `honeypot_model.py` | 蜜罐CRUD、进程启停、健康检查、PID持久化 |\n| **Log (日志审计)** | `log_route.py` | `log_service.py` | `log_model.py` | 日志查询、分页、导出CSV、内部上报(蜜罐使用) |\n| **Malicious IP (恶意拦截)** | `malicious_ip_route.py` | `malicious_ip_service.py` | `malicious_ip_model.py`, `block_history_model.py` | 恶意IP列表、封禁/解封、防火墙命令下发 |\n| **Match Rule (规则引擎)** | `match_rule_route.py` | `match_rule_service.py` | `match_rule_model.py` | 正则匹配规则管理、启停切换、自动封禁配置 |\n| **AI Config (大模型配置)** | `ai_config_route.py` | `ai_config_service.py`, `ai_analysis_service.py` | `ai_config_model.py` | LLM参数化配置、激活/禁用、连通性测试 |\n| **Test (测试接口)** | `test_route.py` | `test_service.py` | — | 内部功能测试,非生产接口 |\n\n### 2. 完整 API 端点清单\n\n#### /api/user — 用户管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| POST | `/api/user/register` | 无 | 用户注册 |\n| POST | `/api/user/login` | 无 | 用户登录,返回 JWT |\n| POST | `/api/user/create_admin` | 无 | 创建管理员(初始化用) |\n| GET | `/api/user/me` | JWT | 获取当前用户信息 |\n| PUT | `/api/user/me` | JWT | 更新当前用户信息(手机/邮箱/密码) |\n| GET | `/api/user/list` | JWT + 管理员 | 分页获取用户列表 |\n| POST | `/api/user/add` | JWT + 管理员 | 管理员新增用户 |\n| PUT | `/api/user/` | JWT + 管理员 | 管理员修改用户 |\n| DELETE | `/api/user/` | JWT + 管理员 | 管理员删除用户 |\n| GET | `/api/user/permissions` | JWT + 管理员 | 获取所有权限列表 |\n| GET | `/api/user/modules` | JWT | 获取所有模块列表 |\n\n#### /api/dashboard — 数据大屏\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/dashboard/trend` | JWT | 攻击趋势(支持 days/granularity 参数) |\n| GET | `/api/dashboard/types` | JWT | 攻击类型统计分布 |\n| GET | `/api/dashboard/map` | JWT | 攻击来源地图数据 |\n| GET | `/api/dashboard/summary` | JWT | 总览统计(总攻击数、封禁数等) |\n\n#### /api/honeypots — 蜜罐管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/honeypots` | JWT | 分页查询蜜罐列表(支持 type/status/keyword) |\n| POST | `/api/honeypots` | JWT | 创建新蜜罐 |\n| PUT | `/api/honeypots/` | JWT | 更新蜜罐配置 |\n| DELETE | `/api/honeypots/` | JWT | 删除蜜罐 |\n| POST | `/api/honeypots//start` | JWT | 启动蜜罐进程 |\n| POST | `/api/honeypots//stop` | JWT | 停止蜜罐进程 |\n| GET | `/api/honeypots//health` | JWT | 蜜罐健康检查 |\n\n#### /api/logs — 日志审计\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/logs` | JWT | 分页查询日志(支持多字段过滤) |\n| GET | `/api/logs/export` | JWT | 导出日志为 CSV(含 BOM,支持 Excel) |\n| GET | `/api/logs/` | JWT | 根据 ID 获取单条日志 |\n| GET | `/api/logs/attack-types` | JWT | 获取所有攻击类型枚举 |\n| GET | `/api/logs/threat-levels` | JWT | 获取所有威胁等级枚举 |\n| GET | `/api/logs/statistics` | JWT | 获取日志统计汇总 |\n| POST | `/api/logs/internal/upload` | 无 | **内部接口**:蜜罐进程上报攻击日志 |\n\n#### /api/malicious-ips — 恶意IP管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/malicious-ips` | JWT | 分页查询恶意IP(支持 is_blocked/threat_level/keyword) |\n| POST | `/api/malicious-ips/block` | JWT | 封禁指定IP(支持时长/截止时间) |\n| POST | `/api/malicious-ips/unblock` | JWT | 解封指定IP |\n\n#### /api/match-rules — 匹配规则引擎\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/match-rules` | JWT | 分页查询规则 |\n| GET | `/api/match-rules/` | JWT | 获取单条规则 |\n| POST | `/api/match-rules` | JWT | 创建规则(正则+威胁等级+自动封禁配置) |\n| PUT | `/api/match-rules/` | JWT | 更新规则 |\n| DELETE | `/api/match-rules/` | JWT | 删除规则 |\n| PUT | `/api/match-rules//toggle` | JWT | 切换规则启用状态 |\n| GET | `/api/match-rules/attack-types` | JWT | 获取攻击类型枚举 |\n| GET | `/api/match-rules/threat-levels` | JWT | 获取威胁等级枚举 |\n\n#### /api/ai-config — AI大模型配置\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/ai-config/` | JWT | 获取所有AI配置 |\n| POST | `/api/ai-config/` | JWT | 创建AI配置(name/api_url/model_name必填) |\n| PUT | `/api/ai-config/` | JWT | 更新AI配置 |\n| DELETE | `/api/ai-config/` | JWT | 删除AI配置 |\n| POST | `/api/ai-config//activate` | JWT | 激活配置(设为当前使用) |\n| POST | `/api/ai-config//deactivate` | JWT | 禁用配置 |\n| POST | `/api/ai-config//test` | JWT | 测试AI配置连通性 |\n\n### 3. 数据库模型清单\n\n共 12 个 Model 文件,对应以下数据库表:\n\n| 模型文件 | 表名 | 说明 |\n| :--- | :--- | :--- |\n| `user_model.py` | `users` | 用户账号、密码哈希、角色(1管理员/2普通用户) |\n| `user_info_model.py` | `user_infos` | 用户扩展信息(手机号、邮箱、头像等) |\n| `permission_model.py` | `permissions` | 系统权限定义 |\n| `module_model.py` | `modules` / `user_modules` | 系统模块定义及用户-模块关联 |\n| `honeypot_model.py` | `honeypots` | 蜜罐配置(类型、端口、状态、`pid` 字段用于持久化进程) |\n| `log_model.py` | `logs` | 攻击日志记录(来源IP、载荷、威胁等级、协议等) |\n| `malicious_ip_model.py` | `malicious_ips` | 恶意IP列表(封禁状态、威胁等级、攻击次数) |\n| `block_history_model.py` | `block_history` | 封禁/解封操作历史记录 |\n| `attack_stats_model.py` | `attack_stats` | 攻击统计聚合数据(供 Dashboard 使用) |\n| `match_rule_model.py` | `match_rules` | 流量匹配规则(正则表达式、自动封禁、优先级) |\n| `ai_config_model.py` | `ai_configs` | AI大模型配置(API地址、模型名称、激活状态) |\n\n> **重要**:`honeypot_model.py` 中包含 `pid` 字段(Integer, nullable),用于在服务重启后通过 `psutil` 检查蜜罐子进程是否仍然存活。\n\n### 4. 蜜罐组件实现 (`backend/honeypots/`)\n\n| 文件 | 协议 | 默认端口 | 捕获目标 |\n| :--- | :--- | :--- | :--- |\n| `ftp_server.py` | FTP | 2121 | 爆破攻击、未授权访问、文件上传尝试 |\n| `ssh_server.py` | SSH | 2222 | 登录爆破、恶意命令执行(基于 Paramiko) |\n| `hikvision_http_server.py` | HTTP | 可配置(读取 `sys.argv[1]`) | IoT/摄像头设备漏洞探测、Web 攻击 |\n| `redis_server.py` | TCP/Redis | 6379 | Redis 未授权访问、SLAVEOF/CONFIG 命令利用 |\n| `mysql_server.py` | TCP/MySQL | 3306 | 数据库弱口令爆破(捕获用户名、客户端版本) |\n\n**蜜罐进程管理机制**:\n- 所有蜜罐以**独立子进程**方式启动(`subprocess.Popen`),与主 Flask 服务解耦。\n- 启动时将 PID 写入 `honeypots.pid` 数据库字段;停止时发送 `SIGTERM`/`taskkill`。\n- 服务重启后调用 `psutil.pid_exists()` 检查进程存活状态,自动修正数据库状态。\n- 蜜罐捕获到攻击后,通过 HTTP 调用 `/api/logs/internal/upload` 上报主服务。\n\n### 5. Agent 与智能响应模块 (`backend/agent/`)\n\n```\nagent/\n├── core.py # AI代理调度核心,支持多模型工作池、Queue+Threading异步队列\n├── llm_client.py # LLM客户端,封装 OpenAI 兼容 API 调用\n├── mcp/\n│ └── skill.py # MCP技能协议基类\n└── skills/\n ├── block_ip_skill.py # 自动封禁技能:先记录 malicious_ip 再调用防火墙封禁\n ├── decoder_skill.py # Base64/URL解码技能,辅助攻击载荷分析\n └── log_query_skill.py # 日志查询技能,供 AI Agent 检索历史攻击日志\n```\n\n**关键设计**:AI 分析通过 `Queue + Threading` 异步执行,不阻塞 HTTP 请求线程。\n\n### 6. 工具模块 (`backend/utils/`)\n\n| 文件 | 说明 |\n| :--- | :--- |\n| `api_response.py` | 统一 API 响应格式工具(`ApiResponse.success/error/bad_request` 等) |\n| `ip_utils.py` | **离线** IP 地理位置解析(MaxMind GeoLite2 MMDB),含 LRU 缓存 10000 条、私有 IP 判断 |\n| `time_utils.py` | 时间格式化工具函数 |\n| `download_geoip.py` | 自动下载/更新 GeoLite2 数据库脚本 |\n| `data/GeoLite2-City.mmdb` | 离线城市/国家地理数据库 |\n| `data/GeoLite2-ASN.mmdb` | 离线 ASN 自治系统数据库 |\n\n> **注意**:IP 溯源已从在线 `ip-api.com` 全面迁移至离线 MaxMind GeoLite2,无需外网访问。\n\n### 7. 前端视图清单 (`vueweb/vue-project/src/views/`)\n\n| 文件路径 | 功能说明 |\n| :--- | :--- |\n| `Dashboard.vue` | 仪表盘入口(路由容器) |\n| `dashboard/DashboardLayout.vue` | 数据大屏布局(导航 + 内容区) |\n| `dashboard/Overview.vue` | 攻击总览(总数、封禁数、实时告警) |\n| `dashboard/Trend.vue` | 攻击趋势折线图(按天/小时粒度) |\n| `dashboard/Types.vue` | 攻击类型饼图/柱状图分布 |\n| `dashboard/Map.vue` | 世界地图攻击来源热力图(ECharts) |\n| `HoneypotManagement.vue` | 蜜罐管理(CRUD、启停控制、健康状态监控) |\n| `LogQuery.vue` | 日志查询(多维度过滤、详情展示、CSV导出) |\n| `MaliciousIPManagement.vue` | 恶意IP管理(封禁/解封、威胁等级筛选) |\n| `MatchRuleManagement.vue` | 匹配规则管理(正则规则CRUD、启停切换) |\n| `AIConfigManagement.vue` | AI配置管理(多模型配置、激活/禁用、连通测试) |\n| `UserManagement.vue` | 用户管理(管理员):列表、增删改、模块权限分配 |\n| `UserProfile.vue` | 个人中心:查看/修改自己的手机、邮箱、密码 |\n\n**前端特性**:\n- 支持**暗黑/明亮**主题切换(持久化到 localStorage)。\n- 路由守卫:token 存在但 `user` 为空时,先 `await fetchCurrentUser()` 再放行,防止权限检查时序问题。\n- 所有 HTTP 请求通过 Axios 统一拦截器附加 `Authorization: Bearer `。\n\n### 8. 后端初始化脚本\n\n| 文件 | 用途 |\n| :--- | :--- |\n| `init_database.py` | 创建所有数据库表(`db.create_all()`) |\n| `init_data.py` | 初始化基础数据(角色、权限) |\n| `init_modules.py` | 初始化系统功能模块数据 |\n| `init_permissions.py` | 初始化权限条目 |\n| `init_honeypot.py` | 初始化默认蜜罐配置 |\n| `config.py` | Flask 配置类(数据库URI、JWT密钥、CORS等) |\n| `extensions.py` | Flask 扩展实例集中管理(SocketIO 全局单例),避免 reloader 实例不一致 |\n| `app.py` | Flask 应用入口,注册所有蓝图,初始化 SocketIO 并注册 /ws namespace |\n\n### 9. 数据库迁移\n\n使用 Flask-Migrate(Alembic),迁移文件位于 `backend/migrations/versions/`。\n\n**已有迁移**:\n- `f1a2b3c4d5e6_add_pid_to_honeypots.py` — 为 `honeypots` 表新增 `pid` 字段,支持进程持久化重启检测。\n\n---\n\n## 八、WebSocket 实时推送架构\n\n### 1. 技术选型\n| 层 | 技术 | 版本 |\n| :--- | :--- | :--- |\n| 后端 | Flask-SocketIO | 5.3.6 |\n| 后端传输 | python-socketio + python-engineio | 5.10.0 / 4.8.2 |\n| 前端 | socket.io-client | 4.7.5 |\n\n### 2. 架构流程\n\n```\n蜜罐捕获攻击\n ↓ HTTP POST /api/logs/internal/upload\nlog_service.py · create_log()\n ├─ 规则匹配 (MatchRule)\n ├─ 写入 MySQL (Log)\n ├─ AI 分析任务入队\n ├─ 记录恶意 IP\n └─ [仅恶意流量] socketio.emit('new_attack', payload, namespace='/ws')\n ↓ WebSocket\n 前端 useSocket composable\n ↓\n ┌─────────────┼─────────────┐\n DashboardLayout.vue Overview.vue Map.vue\n (ElNotification弹窗 (数字跳动+ (地图红色\n + 高危横幅) 实时告警列表) 脉冲散点)\n```\n\n### 3. 关键文件\n\n| 文件 | 职责 |\n| :--- | :--- |\n| `backend/extensions.py` | **全局唯一** `socketio = SocketIO()` 实例,所有模块必须从此处导入 socketio,避免 werkzeug reloader 导致实例不一致 |\n| `backend/app.py` | `from extensions import socketio`,调用 `socketio.init_app(app, ...)`,注册 `/ws` namespace 的 connect/disconnect handler,使用 `socketio.run()` 替代 `app.run()` |\n| `backend/service/log_service.py` | `create_log()` 末尾 `from extensions import socketio`,emit `new_attack` 事件到 `/ws` namespace |\n| `frontend/src/composables/useSocket.ts` | 全局 Socket 单例管理,`connectSocket()`/`disconnectSocket()` 由 DashboardLayout 统一管理生命周期,提供 `onAttack/offAttack` 订阅方法,pending 队列 + 重连恢复(先 `off('new_attack')` 再统一重绑,避免 handler 重复注册) |\n| `frontend/src/views/dashboard/DashboardLayout.vue` | 订阅 `new_attack`,显示 `ElNotification` 弹窗 + 高危横幅(含滑入动画),菜单栏显示连接状态指示灯(绿/红),使用 `` 缓存子路由 |\n| `frontend/src/views/dashboard/Overview.vue` | 订阅 `new_attack`,数字递增 + bounce 跳动动画 + 实时告警列表(最多 10 条,transition-group 滑入动画) |\n| `frontend/src/views/dashboard/Map.vue` | 订阅 `new_attack`,追加 `effectScatter` 脉冲散点到地图(使用 `Map` 结构消除竞态),5 秒后自动消失,过滤 `(0,0)` null-island 坐标 |\n\n> **重要**:`socketio` 实例必须从 `extensions.py` 导入,**禁止**从 `app.py` 导入。原因:werkzeug 的 `use_reloader=True` 会在子进程中重新执行 `app.py`,导致 `app.py` 中定义的 `socketio` 和其他模块缓存导入的 `socketio` 不是同一个对象。`extensions.py` 作为独立模块不受 reloader 影响。\n\n### 4. 推送事件规范\n\n**事件名**:`new_attack` \n**Namespace**:`/ws` \n**触发条件**:`is_malicious == True`(低危/正常流量不推送,减少噪声)\n\n**载荷字段**:\n```json\n{\n \"log_id\": 123,\n \"source_ip\": \"1.2.3.4\",\n \"attack_type\": \"SQL注入\",\n \"threat_level\": \"high\",\n \"protocol\": \"HTTP\",\n \"target_port\": 80,\n \"attack_time\": \"2026-03-27T10:30:00\",\n \"attack_description\": \"触发规则: SQL注入检测\",\n \"longitude\": 116.4074,\n \"latitude\": 39.9042\n}\n```\n\n### 5. 后端重启说明\n\nWebSocket 需要使用 `socketio.run()` 替代 `app.run()`,已在 `app.py` 中完成更新。\n重启后端后 WebSocket 功能即生效,无需额外操作。\n\n### 6. WebSocket 测试脚本\n\n| 文件 | 用途 |\n| :--- | :--- |\n| `backend/test/test_realtime_report.py` | 主测试脚本:30 次/60 秒全球 IP 的 SQL 注入攻击,用于验证大屏 4 个核心动态效果 |\n| `backend/test/verify_websocket.py` | WebSocket 推送端到端验证:Python socketio 客户端连接 `/ws`,发 3 条攻击,验证 4 项指标(事件到达、坐标、攻击类型、威胁等级) |\n\n---\n\n## 九、代码重载\n后端代码修改之后必须重新启动后端进程\n\n---\n\n## 十、多级恶意流量识别引擎\n\n### 1. 架构概述\n\n蜜罐捕获的原始流量经过**三级识别漏斗**,逐级过滤和分类:\n\n```\n蜜罐原始数据 → 第一级:正则规则匹配 → 第二级:暴力破解频次分析 → 第三级:AI深度分析\n```\n\n### 2. 蜜罐端设计原则(纯数据采集探针)\n\n蜜罐脚本**只负责捕获原始数据**,不做任何攻击分类。上报字段:\n- `attacker_ip` / `attacker_port` — 攻击来源\n- `honeypot_port` — 蜜罐端口\n- `protocol` — 协议类型 (SSH/FTP/HTTP/TCP 等)\n- `raw_log` — 原始请求/命令完整记录\n- `payload` — 载荷内容(认证类蜜罐统一格式:`\"Username: xxx, Password: xxx\"`)\n- `request_path` / `user_agent` — HTTP 蜜罐专用字段\n\n**禁止**在蜜罐脚本中包含 `attack_type`、`threat_level`、`attack_description` 等分类逻辑。\n\n### 3. 三级识别流水线(`log_service.py` · `create_log()`)\n\n#### 第一级:正则规则引擎匹配\n- 从 `match_rules` 表读取所有 `is_enabled=True` 的规则,按 `priority ASC` 排序(数字越小优先级越高)\n- 匹配字段由规则的 `match_field` 决定(目前全部为 `raw_log`)\n- 命中规则后立即设置 `attack_type`、`threat_level`、`attack_description`、`is_malicious`\n- **首条命中即停止**,不会继续匹配后续规则\n\n#### 第二级:暴力破解频次分析\n- **触发条件**:第一级未命中任何规则(`attack_type` 仍为 `'正常流量'`)\n- **检测方法**:`_check_brute_force(source_ip, protocol, current_payload)`\n - 查询同一 IP + 同一协议在最近 **1 分钟** 内的日志数量\n - HTTP 协议特殊处理:只有包含认证凭证(`Username:...Password:...`)的请求才计入暴力破解计数\n - 阈值:**20 次/分钟** (`BRUTE_FORCE_THRESHOLD = 20`)\n- **凭证检测**:`_is_credential_payload(payload)` 使用正则 `r'Username:\\s*.+,\\s*Password:\\s*.+'` 判断\n- 命中后设置 `attack_type='暴力破解'`、`threat_level='high'`、`is_malicious=True`\n\n#### 第三级:AI 深度分析\n- **触发条件**:所有日志均入 AI 分析队列(`Queue + Threading` 异步执行)\n- **AI 辅助判断机制**(\u0007i_analysis_service.py · _process_single_log()):\n - AI 仅独立提取和存入自己的分析结果字段(如 \u0007i_attack_type、\u0007i_confidence、\u0007i_analysis_result)。\n - **不修改、不覆写** 前置规则匹配引擎和暴力破解识别引擎的主判断结论(如 \u0007ttack_type、is_malicious、\threat_level 和 \u0007ttack_description)。\n - AI 判定后,将 AI 判断结论与主记录判断进行比较,记录在 \u0007i_rule_match_consistency 字段(一致 / 不一致),用作辅助审计依据。\n\n### 4. 匹配规则优先级说明\n\n规则按 `priority ASC` 排序匹配,关键优先级分布:\n\n| 优先级范围 | 规则类型 | 说明 |\n| :--- | :--- | :--- |\n| 1-3 | XSS、SQL注入(基础)、目录遍历 | 高频攻击,精确正则 |\n| 5 | Redis未授权访问 | 协议专用规则 |\n| 6-9 | WebShell、RCE、扫描探测 | 中等精度规则 |\n| 11-15 | SQL注入(盲注)、XXE、信息泄露 | 长正则、较复杂模式 |\n| 18 | 命令注入(宽泛匹配) | 匹配 `;` `|` `(` 等字符,优先级故意调低,避免误判 |\n| 20-50 | XSS/目录遍历/信息泄露/扫描探测(补充) | 低优先级兜底规则 |\n\n> **重要**:命令注入规则 (ID=8) 的正则包含 `(;|\\||&|\\$|\\(|\\)|...)` 极其宽泛,priority 已从 5 调整为 18,防止将 `sleep()`、`eval()`、Nmap UA 等载荷误判为命令注入。\n\n### 5. 自动化测试\n\n测试脚本:`backend/test_traffic_identification.py`\n\n- **51 个断言**,覆盖 22 个测试场景\n- 4 个正常流量测试(SSH/FTP/HTTP/ES)\n- 11 个正则规则匹配测试(SQL注入×2、XSS×2、命令注入、目录遍历、信息泄露、Redis×2、WebShell、扫描探测)\n- 5 个暴力破解测试(SSH低频/高频、HTTP纯GET不触发、HTTP凭证爆破、FTP爆破、MySQL爆破)\n- 2 个混合场景测试\n\n运行方式:\n```bash\n# 确保 Flask 后端运行在 5000 端口\ncd backend\npython run_server.py & # 或 python app.py\npython test_traffic_identification.py\n```\n\n测试脚本在 SETUP 阶段会自动:\n- 创建/复用测试账户 `testadmin01`\n- 动态发现蜜罐端口\n- 确保 Redis 匹配规则存在\n- 将命令注入规则优先级调至 18"}, "03726e3bec8514732b64d446f248df6ef3a1cf87": {"t": 1785764208.8296773, "n": 19107, "h": "adcef2f5266ad1cf", "c": "# 第一个规范 (必须遵守)\n 当每次大的修改和功能的新增,如果与CLAUDE.md文件内容不一致了,需要把新增的功能或者修改功能的逻辑重新写入CLAUDE.md,确保CLAUDE.md文件为最新的。\n \n# 项目开发规范 (Project Rules)\n\n你是一个资深的 Python 全栈专家,请在开发本 **基于低交互蜜罐的恶意流量检测和防御系统** 时严格遵循如下规则:\n\n## 一、核心开发原则\n- **代码质量**:严格遵循 **SOLID、DRY (Don't Repeat Yourself)、KISS (Keep It Simple, Stupid)** 原则。\n- **安全优先**:遵循 **OWASP Top 10** 安全最佳实践(特别是 SQL 注入防护、XSS 防护、敏感数据加密)。\n- **架构分层**:严格遵守 **Controller-Service-Model** 分层架构,禁止跨层调用。\n- **注释规范**:所有关键逻辑、类、方法必须包含 **中文注释** 和 **Docstrings**。\n- **类型安全**:Python 代码必须使用 Type Hints (`typing`),前端使用 TypeScript。\n\n---\n\n## 二、技术栈规范\n### 1. 后端 (Backend)\n- **语言**:Python 3.8+\n- **Web 框架**:Flask\n- **ORM**:SQLAlchemy\n- **数据库**:MySQL\n- **AI 模型**:Ollama (DeepSeek-R1) / OpenAI (远程调用) (也可通过 API 方式接入 OpenAI 等主流模型)\n- **依赖管理**:`requirements.txt` + `venv`\n\n### 2. 前端 (Frontend)\n- **框架**:Vue 3 (Composition API)\n- **语言**:TypeScript\n- **构建工具**:Vite\n- **UI 组件库**:Element Plus\n- **HTTP 客户端**:Axios\n\n---\n\n## 三、后端架构设计规范\n### 1. 分层职责\n| 层级 | 目录 | 职责 | 约束条件 |\n| :--- | :--- | :--- | :--- |\n| **Route (Controller)** | `src/route/` | 处理 HTTP 请求/响应,参数解析,权限校验 | - **禁止**包含复杂业务逻辑
- 仅调用 Service 层
- 返回统一的 JSON 格式 |\n| **Service** | `src/service/` | 核心业务逻辑,事务管理,第三方服务调用 | - **禁止**直接操作 SQL(需通过 Model/ORM)
- 处理异常并返回明确结果 |\n| **Model** | `src/model/` | 数据库模型定义,基础数据操作 | - 继承 `db.Model`
- 定义表结构、关系及基础 CRUD 方法 |\n| **Utils** | `src/utils/` | 通用工具函数 | - 无状态,纯函数为主 |\n\n### 2. 代码示例规范\n\n#### (1) Model 层 (`src/model/user_model.py`)\n```python\nfrom database import db\nfrom datetime import datetime\n\nclass User(db.Model):\n \"\"\"\n 用户模型类\n \"\"\"\n __tablename__ = 'users'\n \n id = db.Column(db.Integer, primary_key=True, autoincrement=True)\n username = db.Column(db.String(50), unique=True, nullable=False, comment='用户名')\n # 密码必须存储哈希值,禁止明文\n password_hash = db.Column(db.String(128), nullable=False, comment='密码哈希')\n created_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')\n\n def to_dict(self):\n return {\n 'id': self.id,\n 'username': self.username,\n 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S')\n }\n```\n\n#### (2) Service 层 (`src/service/user_service.py`)\n```python\nfrom model.user_model import User\nfrom database import db\nfrom typing import Dict, Optional\n\nclass UserService:\n \"\"\"\n 用户服务类:处理用户注册、登录等逻辑\n \"\"\"\n \n @staticmethod\n def create_user(username: str, password_plain: str) -> Dict:\n \"\"\"\n 创建新用户\n \n Args:\n username (str): 用户名\n password_plain (str): 明文密码\n \n Returns:\n Dict: 操作结果\n \"\"\"\n # 1. 校验是否存在\n if User.query.filter_by(username=username).first():\n return {'success': False, 'message': '用户已存在'}\n \n # 2. 密码加密 (示例,实际应使用加盐哈希)\n # password_hash = generate_password_hash(password_plain) \n \n # 3. 入库\n new_user = User(username=username, password_hash='hashed_value')\n try:\n db.session.add(new_user)\n db.session.commit()\n return {'success': True, 'message': '注册成功', 'data': new_user.to_dict()}\n except Exception as e:\n db.session.rollback()\n return {'success': False, 'message': str(e)}\n```\n\n#### (3) Route 层 (`src/route/user_route.py`)\n```python\nfrom flask import Blueprint, request, jsonify\nfrom service.user_service import UserService\n\nuser_bp = Blueprint('user', __name__, url_prefix='/api/user')\n\n@user_bp.route('/register', methods=['POST'])\ndef register():\n data = request.json\n username = data.get('username')\n password = data.get('password')\n \n if not username or not password:\n return jsonify({'code': 400, 'msg': '参数缺失'}), 400\n \n result = UserService.create_user(username, password)\n \n if result['success']:\n return jsonify({'code': 200, 'msg': '成功', 'data': result['data']})\n else:\n return jsonify({'code': 500, 'msg': result['message']}), 500\n```\n\n---\n\n## 四、前端开发规范\n### 1. 组件风格\n- 使用 **Vue 3 Composition API** (`\n\n\n```\n\n---\n\n## 五、通用规范\n1. **异常处理**:后端必须捕获所有未处理异常,防止服务崩溃,并记录错误日志。\n2. **日志记录**:关键操作(登录、攻击检测、封禁)必须写入日志文件或数据库。\n3. **环境配置**:敏感信息(数据库密码、API Key)禁止硬编码,需使用环境变量或配置文件。\n4. **Git 提交**:Commit Message 需清晰描述变更内容(如 `feat: 添加恶意IP自动封禁功能`)。\n\n## 六、特殊业务规则\n1. **蜜罐管理**:蜜罐进程需独立管理,确保主服务崩溃不影响蜜罐运行。\n2. **AI 分析**:大模型调用需使用异步队列(如 Queue + Threading),避免阻塞 HTTP 请求。\n3. **IP 封禁**:调用底层防火墙命令(iptables/netsh)时需进行操作系统判断和权限校验。\n\n## 七、现有模块与系统架构\n当前的后端服务架构已分为以下主要模块:\n\n### 1. 核心业务 API 模块 (Routes / Services / Models)\n\n| 业务模块 | Route 文件 | Service 文件 | Model 文件 | 职责说明 |\n| :--- | :--- | :--- | :--- | :--- |\n| **User (用户权限)** | `user_route.py` | `user_service.py` | `user_model.py`, `user_info_model.py`, `permission_model.py`, `module_model.py` | 注册、登录、JWT鉴权、用户管理、模块权限分配 |\n| **Dashboard (数据大屏)** | `dashboard_route.py` | `dashboard_service.py` | `attack_stats_model.py` | 攻击趋势、类型分布、地图热力、总览统计(均需JWT) |\n| **Honeypot (蜜罐管理)** | `honeypot_route.py` | `honeypot_service.py` | `honeypot_model.py` | 蜜罐CRUD、进程启停、健康检查、PID持久化 |\n| **Log (日志审计)** | `log_route.py` | `log_service.py` | `log_model.py` | 日志查询、分页、导出CSV、内部上报(蜜罐使用) |\n| **Malicious IP (恶意拦截)** | `malicious_ip_route.py` | `malicious_ip_service.py` | `malicious_ip_model.py`, `block_history_model.py` | 恶意IP列表、封禁/解封、防火墙命令下发 |\n| **Match Rule (规则引擎)** | `match_rule_route.py` | `match_rule_service.py` | `match_rule_model.py` | 正则匹配规则管理、启停切换、自动封禁配置 |\n| **AI Config (大模型配置)** | `ai_config_route.py` | `ai_config_service.py`, `ai_analysis_service.py` | `ai_config_model.py` | LLM参数化配置、激活/禁用、连通性测试 |\n| **Test (测试接口)** | `test_route.py` | `test_service.py` | — | 内部功能测试,非生产接口 |\n\n### 2. 完整 API 端点清单\n\n#### /api/user — 用户管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| POST | `/api/user/register` | 无 | 用户注册 |\n| POST | `/api/user/login` | 无 | 用户登录,返回 JWT |\n| POST | `/api/user/create_admin` | 无 | 创建管理员(初始化用) |\n| GET | `/api/user/me` | JWT | 获取当前用户信息 |\n| PUT | `/api/user/me` | JWT | 更新当前用户信息(手机/邮箱/密码) |\n| GET | `/api/user/list` | JWT + 管理员 | 分页获取用户列表 |\n| POST | `/api/user/add` | JWT + 管理员 | 管理员新增用户 |\n| PUT | `/api/user/` | JWT + 管理员 | 管理员修改用户 |\n| DELETE | `/api/user/` | JWT + 管理员 | 管理员删除用户 |\n| GET | `/api/user/permissions` | JWT + 管理员 | 获取所有权限列表 |\n| GET | `/api/user/modules` | JWT | 获取所有模块列表 |\n\n#### /api/dashboard — 数据大屏\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/dashboard/trend` | JWT | 攻击趋势(支持 days/granularity 参数) |\n| GET | `/api/dashboard/types` | JWT | 攻击类型统计分布 |\n| GET | `/api/dashboard/map` | JWT | 攻击来源地图数据 |\n| GET | `/api/dashboard/summary` | JWT | 总览统计(总攻击数、封禁数等) |\n\n#### /api/honeypots — 蜜罐管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/honeypots` | JWT | 分页查询蜜罐列表(支持 type/status/keyword) |\n| POST | `/api/honeypots` | JWT | 创建新蜜罐 |\n| PUT | `/api/honeypots/` | JWT | 更新蜜罐配置 |\n| DELETE | `/api/honeypots/` | JWT | 删除蜜罐 |\n| POST | `/api/honeypots//start` | JWT | 启动蜜罐进程 |\n| POST | `/api/honeypots//stop` | JWT | 停止蜜罐进程 |\n| GET | `/api/honeypots//health` | JWT | 蜜罐健康检查 |\n\n#### /api/logs — 日志审计\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/logs` | JWT | 分页查询日志(支持多字段过滤) |\n| GET | `/api/logs/export` | JWT | 导出日志为 CSV(含 BOM,支持 Excel) |\n| GET | `/api/logs/` | JWT | 根据 ID 获取单条日志 |\n| GET | `/api/logs/attack-types` | JWT | 获取所有攻击类型枚举 |\n| GET | `/api/logs/threat-levels` | JWT | 获取所有威胁等级枚举 |\n| GET | `/api/logs/statistics` | JWT | 获取日志统计汇总 |\n| POST | `/api/logs/internal/upload` | 无 | **内部接口**:蜜罐进程上报攻击日志 |\n\n#### /api/malicious-ips — 恶意IP管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/malicious-ips` | JWT | 分页查询恶意IP(支持 is_blocked/threat_level/keyword) |\n| POST | `/api/malicious-ips/block` | JWT | 封禁指定IP(支持时长/截止时间) |\n| POST | `/api/malicious-ips/unblock` | JWT | 解封指定IP |\n\n#### /api/match-rules — 匹配规则引擎\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/match-rules` | JWT | 分页查询规则 |\n| GET | `/api/match-rules/` | JWT | 获取单条规则 |\n| POST | `/api/match-rules` | JWT | 创建规则(正则+威胁等级+自动封禁配置) |\n| PUT | `/api/match-rules/` | JWT | 更新规则 |\n| DELETE | `/api/match-rules/` | JWT | 删除规则 |\n| PUT | `/api/match-rules//toggle` | JWT | 切换规则启用状态 |\n| GET | `/api/match-rules/attack-types` | JWT | 获取攻击类型枚举 |\n| GET | `/api/match-rules/threat-levels` | JWT | 获取威胁等级枚举 |\n\n#### /api/ai-config — AI大模型配置\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/ai-config/` | JWT | 获取所有AI配置 |\n| POST | `/api/ai-config/` | JWT | 创建AI配置(name/api_url/model_name必填) |\n| PUT | `/api/ai-config/` | JWT | 更新AI配置 |\n| DELETE | `/api/ai-config/` | JWT | 删除AI配置 |\n| POST | `/api/ai-config//activate` | JWT | 激活配置(设为当前使用) |\n| POST | `/api/ai-config//deactivate` | JWT | 禁用配置 |\n| POST | `/api/ai-config//test` | JWT | 测试AI配置连通性 |\n\n### 3. 数据库模型清单\n\n共 12 个 Model 文件,对应以下数据库表:\n\n| 模型文件 | 表名 | 说明 |\n| :--- | :--- | :--- |\n| `user_model.py` | `users` | 用户账号、密码哈希、角色(1管理员/2普通用户) |\n| `user_info_model.py` | `user_infos` | 用户扩展信息(手机号、邮箱、头像等) |\n| `permission_model.py` | `permissions` | 系统权限定义 |\n| `module_model.py` | `modules` / `user_modules` | 系统模块定义及用户-模块关联 |\n| `honeypot_model.py` | `honeypots` | 蜜罐配置(类型、端口、状态、`pid` 字段用于持久化进程) |\n| `log_model.py` | `logs` | 攻击日志记录(来源IP、载荷、威胁等级、协议等) |\n| `malicious_ip_model.py` | `malicious_ips` | 恶意IP列表(封禁状态、威胁等级、攻击次数) |\n| `block_history_model.py` | `block_history` | 封禁/解封操作历史记录 |\n| `attack_stats_model.py` | `attack_stats` | 攻击统计聚合数据(供 Dashboard 使用) |\n| `match_rule_model.py` | `match_rules` | 流量匹配规则(正则表达式、自动封禁、优先级) |\n| `ai_config_model.py` | `ai_configs` | AI大模型配置(API地址、模型名称、激活状态) |\n\n> **重要**:`honeypot_model.py` 中包含 `pid` 字段(Integer, nullable),用于在服务重启后通过 `psutil` 检查蜜罐子进程是否仍然存活。\n\n### 4. 蜜罐组件实现 (`backend/honeypots/`)\n\n| 文件 | 协议 | 默认端口 | 捕获目标 |\n| :--- | :--- | :--- | :--- |\n| `ftp_server.py` | FTP | 2121 | 爆破攻击、未授权访问、文件上传尝试 |\n| `ssh_server.py` | SSH | 2222 | 登录爆破、恶意命令执行(基于 Paramiko) |\n| `hikvision_http_server.py` | HTTP | 可配置(读取 `sys.argv[1]`) | IoT/摄像头设备漏洞探测、Web 攻击 |\n| `redis_server.py` | TCP/Redis | 6379 | Redis 未授权访问、SLAVEOF/CONFIG 命令利用 |\n| `mysql_server.py` | TCP/MySQL | 3306 | 数据库弱口令爆破(捕获用户名、客户端版本) |\n\n**蜜罐进程管理机制**:\n- 所有蜜罐以**独立子进程**方式启动(`subprocess.Popen`),与主 Flask 服务解耦。\n- 启动时将 PID 写入 `honeypots.pid` 数据库字段;停止时发送 `SIGTERM`/`taskkill`。\n- 服务重启后调用 `psutil.pid_exists()` 检查进程存活状态,自动修正数据库状态。\n- 蜜罐捕获到攻击后,通过 HTTP 调用 `/api/logs/internal/upload` 上报主服务。\n\n### 5. Agent 与智能响应模块 (`backend/agent/`)\n\n```\nagent/\n├── core.py # AI代理调度核心,支持多模型工作池、Queue+Threading异步队列\n├── llm_client.py # LLM客户端,封装 OpenAI 兼容 API 调用\n├── mcp/\n│ └── skill.py # MCP技能协议基类\n└── skills/\n ├── block_ip_skill.py # 自动封禁技能:先记录 malicious_ip 再调用防火墙封禁\n ├── decoder_skill.py # Base64/URL解码技能,辅助攻击载荷分析\n └── log_query_skill.py # 日志查询技能,供 AI Agent 检索历史攻击日志\n```\n\n**关键设计**:AI 分析通过 `Queue + Threading` 异步执行,不阻塞 HTTP 请求线程。\n\n### 6. 工具模块 (`backend/utils/`)\n\n| 文件 | 说明 |\n| :--- | :--- |\n| `api_response.py` | 统一 API 响应格式工具(`ApiResponse.success/error/bad_request` 等) |\n| `ip_utils.py` | **离线** IP 地理位置解析(MaxMind GeoLite2 MMDB),含 LRU 缓存 10000 条、私有 IP 判断 |\n| `time_utils.py` | 时间格式化工具函数 |\n| `download_geoip.py` | 自动下载/更新 GeoLite2 数据库脚本 |\n| `data/GeoLite2-City.mmdb` | 离线城市/国家地理数据库 |\n| `data/GeoLite2-ASN.mmdb` | 离线 ASN 自治系统数据库 |\n\n> **注意**:IP 溯源已从在线 `ip-api.com` 全面迁移至离线 MaxMind GeoLite2,无需外网访问。\n\n### 7. 前端视图清单 (`vueweb/vue-project/src/views/`)\n\n| 文件路径 | 功能说明 |\n| :--- | :--- |\n| `Dashboard.vue` | 仪表盘入口(路由容器) |\n| `dashboard/DashboardLayout.vue` | 数据大屏布局(导航 + 内容区) |\n| `dashboard/Overview.vue` | 攻击总览(总数、封禁数、实时告警) |\n| `dashboard/Trend.vue` | 攻击趋势折线图(按天/小时粒度) |\n| `dashboard/Types.vue` | 攻击类型饼图/柱状图分布 |\n| `dashboard/Map.vue` | 世界地图攻击来源热力图(ECharts) |\n| `HoneypotManagement.vue` | 蜜罐管理(CRUD、启停控制、健康状态监控) |\n| `LogQuery.vue` | 日志查询(多维度过滤、详情展示、CSV导出) |\n| `MaliciousIPManagement.vue` | 恶意IP管理(封禁/解封、威胁等级筛选) |\n| `MatchRuleManagement.vue` | 匹配规则管理(正则规则CRUD、启停切换) |\n| `AIConfigManagement.vue` | AI配置管理(多模型配置、激活/禁用、连通测试) |\n| `UserManagement.vue` | 用户管理(管理员):列表、增删改、模块权限分配 |\n| `UserProfile.vue` | 个人中心:查看/修改自己的手机、邮箱、密码 |\n\n**前端特性**:\n- 支持**暗黑/明亮**主题切换(持久化到 localStorage)。\n- 路由守卫:token 存在但 `user` 为空时,先 `await fetchCurrentUser()` 再放行,防止权限检查时序问题。\n- 所有 HTTP 请求通过 Axios 统一拦截器附加 `Authorization: Bearer `。\n\n### 8. 后端初始化脚本\n\n| 文件 | 用途 |\n| :--- | :--- |\n| `init_database.py` | 创建所有数据库表(`db.create_all()`) |\n| `init_data.py` | 初始化基础数据(角色、权限) |\n| `init_modules.py` | 初始化系统功能模块数据 |\n| `init_permissions.py` | 初始化权限条目 |\n| `init_honeypot.py` | 初始化默认蜜罐配置 |\n| `config.py` | Flask 配置类(数据库URI、JWT密钥、CORS等) |\n| `extensions.py` | Flask 扩展实例集中管理(SocketIO 全局单例),避免 reloader 实例不一致 |\n| `app.py` | Flask 应用入口,注册所有蓝图,初始化 SocketIO 并注册 /ws namespace |\n\n### 9. 数据库迁移\n\n使用 Flask-Migrate(Alembic),迁移文件位于 `backend/migrations/versions/`。\n\n**已有迁移**:\n- `f1a2b3c4d5e6_add_pid_to_honeypots.py` — 为 `honeypots` 表新增 `pid` 字段,支持进程持久化重启检测。\n\n---\n\n## 八、WebSocket 实时推送架构\n\n### 1. 技术选型\n| 层 | 技术 | 版本 |\n| :--- | :--- | :--- |\n| 后端 | Flask-SocketIO | 5.3.6 |\n| 后端传输 | python-socketio + python-engineio | 5.10.0 / 4.8.2 |\n| 前端 | socket.io-client | 4.7.5 |\n\n### 2. 架构流程\n\n```\n蜜罐捕获攻击\n ↓ HTTP POST /api/logs/internal/upload\nlog_service.py · create_log()\n ├─ 规则匹配 (MatchRule)\n ├─ 写入 MySQL (Log)\n ├─ AI 分析任务入队\n ├─ 记录恶意 IP\n └─ [仅恶意流量] socketio.emit('new_attack', payload, namespace='/ws')\n ↓ WebSocket\n 前端 useSocket composable\n ↓\n ┌─────────────┼─────────────┐\n DashboardLayout.vue Overview.vue Map.vue\n (ElNotification弹窗 (数字跳动+ (地图红色\n + 高危横幅) 实时告警列表) 脉冲散点)\n```\n\n### 3. 关键文件\n\n| 文件 | 职责 |\n| :--- | :--- |\n| `backend/extensions.py` | **全局唯一** `socketio = SocketIO()` 实例,所有模块必须从此处导入 socketio,避免 werkzeug reloader 导致实例不一致 |\n| `backend/app.py` | `from extensions import socketio`,调用 `socketio.init_app(app, ...)`,注册 `/ws` namespace 的 connect/disconnect handler,使用 `socketio.run()` 替代 `app.run()` |\n| `backend/service/log_service.py` | `create_log()` 末尾 `from extensions import socketio`,emit `new_attack` 事件到 `/ws` namespace |\n| `frontend/src/composables/useSocket.ts` | 全局 Socket 单例管理,`connectSocket()`/`disconnectSocket()` 由 DashboardLayout 统一管理生命周期,提供 `onAttack/offAttack` 订阅方法,pending 队列 + 重连恢复(先 `off('new_attack')` 再统一重绑,避免 handler 重复注册) |\n| `frontend/src/views/dashboard/DashboardLayout.vue` | 订阅 `new_attack`,显示 `ElNotification` 弹窗 + 高危横幅(含滑入动画),菜单栏显示连接状态指示灯(绿/红),使用 `` 缓存子路由 |\n| `frontend/src/views/dashboard/Overview.vue` | 订阅 `new_attack`,数字递增 + bounce 跳动动画 + 实时告警列表(最多 10 条,transition-group 滑入动画) |\n| `frontend/src/views/dashboard/Map.vue` | 订阅 `new_attack`,追加 `effectScatter` 脉冲散点到地图(使用 `Map` 结构消除竞态),5 秒后自动消失,过滤 `(0,0)` null-island 坐标 |\n\n> **重要**:`socketio` 实例必须从 `extensions.py` 导入,**禁止**从 `app.py` 导入。原因:werkzeug 的 `use_reloader=True` 会在子进程中重新执行 `app.py`,导致 `app.py` 中定义的 `socketio` 和其他模块缓存导入的 `socketio` 不是同一个对象。`extensions.py` 作为独立模块不受 reloader 影响。\n\n### 4. 推送事件规范\n\n**事件名**:`new_attack` \n**Namespace**:`/ws` \n**触发条件**:`is_malicious == True`(低危/正常流量不推送,减少噪声)\n\n**载荷字段**:\n```json\n{\n \"log_id\": 123,\n \"source_ip\": \"1.2.3.4\",\n \"attack_type\": \"SQL注入\",\n \"threat_level\": \"high\",\n \"protocol\": \"HTTP\",\n \"target_port\": 80,\n \"attack_time\": \"2026-03-27T10:30:00\",\n \"attack_description\": \"触发规则: SQL注入检测\",\n \"longitude\": 116.4074,\n \"latitude\": 39.9042\n}\n```\n\n### 5. 后端重启说明\n\nWebSocket 需要使用 `socketio.run()` 替代 `app.run()`,已在 `app.py` 中完成更新。\n重启后端后 WebSocket 功能即生效,无需额外操作。\n\n### 6. WebSocket 测试脚本\n\n| 文件 | 用途 |\n| :--- | :--- |\n| `backend/test/test_realtime_report.py` | 主测试脚本:30 次/60 秒全球 IP 的 SQL 注入攻击,用于验证大屏 4 个核心动态效果 |\n| `backend/test/verify_websocket.py` | WebSocket 推送端到端验证:Python socketio 客户端连接 `/ws`,发 3 条攻击,验证 4 项指标(事件到达、坐标、攻击类型、威胁等级) |\n\n---\n\n## 九、代码重载\n后端代码修改之后必须重新启动后端进程\n\n---\n\n## 十、多级恶意流量识别引擎\n\n### 1. 架构概述\n\n蜜罐捕获的原始流量经过**三级识别漏斗**,逐级过滤和分类:\n\n```\n蜜罐原始数据 → 第一级:正则规则匹配 → 第二级:暴力破解频次分析 → 第三级:AI深度分析\n```\n\n### 2. 蜜罐端设计原则(纯数据采集探针)\n\n蜜罐脚本**只负责捕获原始数据**,不做任何攻击分类。上报字段:\n- `attacker_ip` / `attacker_port` — 攻击来源\n- `honeypot_port` — 蜜罐端口\n- `protocol` — 协议类型 (SSH/FTP/HTTP/TCP 等)\n- `raw_log` — 原始请求/命令完整记录\n- `payload` — 载荷内容(认证类蜜罐统一格式:`\"Username: xxx, Password: xxx\"`)\n- `request_path` / `user_agent` — HTTP 蜜罐专用字段\n\n**禁止**在蜜罐脚本中包含 `attack_type`、`threat_level`、`attack_description` 等分类逻辑。\n\n### 3. 三级识别流水线(`log_service.py` · `create_log()`)\n\n#### 第一级:正则规则引擎匹配\n- 从 `match_rules` 表读取所有 `is_enabled=True` 的规则,按 `priority ASC` 排序(数字越小优先级越高)\n- 匹配字段由规则的 `match_field` 决定(目前全部为 `raw_log`)\n- 命中规则后立即设置 `attack_type`、`threat_level`、`attack_description`、`is_malicious`\n- **首条命中即停止**,不会继续匹配后续规则\n\n#### 第二级:暴力破解频次分析\n- **触发条件**:第一级未命中任何规则(`attack_type` 仍为 `'正常流量'`)\n- **检测方法**:`_check_brute_force(source_ip, protocol, current_payload)`\n - 查询同一 IP + 同一协议在最近 **1 分钟** 内的日志数量\n - HTTP 协议特殊处理:只有包含认证凭证(`Username:...Password:...`)的请求才计入暴力破解计数\n - 阈值:**20 次/分钟** (`BRUTE_FORCE_THRESHOLD = 20`)\n- **凭证检测**:`_is_credential_payload(payload)` 使用正则 `r'Username:\\s*.+,\\s*Password:\\s*.+'` 判断\n- 命中后设置 `attack_type='暴力破解'`、`threat_level='high'`、`is_malicious=True`\n\n#### 第三级:AI 深度分析\n- **触发条件**:所有日志均入 AI 分析队列(`Queue + Threading` 异步执行)\n- **AI 回写机制**(`ai_analysis_service.py` · `_process_single_log()`):\n - 当 AI 置信度 >= 0.7 且判定为恶意时,自动回写主记录的 `attack_type`、`threat_level`、`is_malicious`\n - AI 分析摘要追加到 `attack_description` 字段(带 `[AI分析]` 前缀)\n - AI 发现新恶意流量时同步调用 `MaliciousIPService.record_malicious_ip()`\n - 威胁等级映射:置信度 >= 0.9 → `high`,>= 0.7 → `medium`\n\n### 4. 匹配规则优先级说明\n\n规则按 `priority ASC` 排序匹配,关键优先级分布:\n\n| 优先级范围 | 规则类型 | 说明 |\n| :--- | :--- | :--- |\n| 1-3 | XSS、SQL注入(基础)、目录遍历 | 高频攻击,精确正则 |\n| 5 | Redis未授权访问 | 协议专用规则 |\n| 6-9 | WebShell、RCE、扫描探测 | 中等精度规则 |\n| 11-15 | SQL注入(盲注)、XXE、信息泄露 | 长正则、较复杂模式 |\n| 18 | 命令注入(宽泛匹配) | 匹配 `;` `|` `(` 等字符,优先级故意调低,避免误判 |\n| 20-50 | XSS/目录遍历/信息泄露/扫描探测(补充) | 低优先级兜底规则 |\n\n> **重要**:命令注入规则 (ID=8) 的正则包含 `(;|\\||&|\\$|\\(|\\)|...)` 极其宽泛,priority 已从 5 调整为 18,防止将 `sleep()`、`eval()`、Nmap UA 等载荷误判为命令注入。\n\n### 5. 自动化测试\n\n测试脚本:`backend/test_traffic_identification.py`\n\n- **51 个断言**,覆盖 22 个测试场景\n- 4 个正常流量测试(SSH/FTP/HTTP/ES)\n- 11 个正则规则匹配测试(SQL注入×2、XSS×2、命令注入、目录遍历、信息泄露、Redis×2、WebShell、扫描探测)\n- 5 个暴力破解测试(SSH低频/高频、HTTP纯GET不触发、HTTP凭证爆破、FTP爆破、MySQL爆破)\n- 2 个混合场景测试\n\n运行方式:\n```bash\n# 确保 Flask 后端运行在 5000 端口\ncd backend\npython run_server.py & # 或 python app.py\npython test_traffic_identification.py\n```\n\n测试脚本在 SETUP 阶段会自动:\n- 创建/复用测试账户 `testadmin01`\n- 动态发现蜜罐端口\n- 确保 Redis 匹配规则存在\n- 将命令注入规则优先级调至 18"}, "b0372387751e2067552375c76e34eac9da324ada": {"t": 1785764216.4821656, "n": 19178, "h": "0557348a44c00d46", "c": "# 第一个规范 (必须遵守)\n 当每次大的修改和功能的新增,如果与CLAUDE.md文件内容不一致了,需要把新增的功能或者修改功能的逻辑重新写入CLAUDE.md,确保CLAUDE.md文件为最新的。\n \n# 项目开发规范 (Project Rules)\n\n你是一个资深的 Python 全栈专家,请在开发本 **基于低交互蜜罐的恶意流量检测和防御系统** 时严格遵循如下规则:\n\n## 一、核心开发原则\n- **代码质量**:严格遵循 **SOLID、DRY (Don't Repeat Yourself)、KISS (Keep It Simple, Stupid)** 原则。\n- **安全优先**:遵循 **OWASP Top 10** 安全最佳实践(特别是 SQL 注入防护、XSS 防护、敏感数据加密)。\n- **架构分层**:严格遵守 **Controller-Service-Model** 分层架构,禁止跨层调用。\n- **注释规范**:所有关键逻辑、类、方法必须包含 **中文注释** 和 **Docstrings**。\n- **类型安全**:Python 代码必须使用 Type Hints (`typing`),前端使用 TypeScript。\n\n---\n\n## 二、技术栈规范\n### 1. 后端 (Backend)\n- **语言**:Python 3.8+\n- **Web 框架**:Flask\n- **ORM**:SQLAlchemy\n- **数据库**:MySQL\n- **AI 模型**:Ollama (DeepSeek-R1) / OpenAI (远程调用) (也可通过 API 方式接入 OpenAI 等主流模型)\n- **依赖管理**:`requirements.txt` + `venv`\n\n### 2. 前端 (Frontend)\n- **框架**:Vue 3 (Composition API)\n- **语言**:TypeScript\n- **构建工具**:Vite\n- **UI 组件库**:Element Plus\n- **HTTP 客户端**:Axios\n\n---\n\n## 三、后端架构设计规范\n### 1. 分层职责\n| 层级 | 目录 | 职责 | 约束条件 |\n| :--- | :--- | :--- | :--- |\n| **Route (Controller)** | `src/route/` | 处理 HTTP 请求/响应,参数解析,权限校验 | - **禁止**包含复杂业务逻辑
- 仅调用 Service 层
- 返回统一的 JSON 格式 |\n| **Service** | `src/service/` | 核心业务逻辑,事务管理,第三方服务调用 | - **禁止**直接操作 SQL(需通过 Model/ORM)
- 处理异常并返回明确结果 |\n| **Model** | `src/model/` | 数据库模型定义,基础数据操作 | - 继承 `db.Model`
- 定义表结构、关系及基础 CRUD 方法 |\n| **Utils** | `src/utils/` | 通用工具函数 | - 无状态,纯函数为主 |\n\n### 2. 代码示例规范\n\n#### (1) Model 层 (`src/model/user_model.py`)\n```python\nfrom database import db\nfrom datetime import datetime\n\nclass User(db.Model):\n \"\"\"\n 用户模型类\n \"\"\"\n __tablename__ = 'users'\n \n id = db.Column(db.Integer, primary_key=True, autoincrement=True)\n username = db.Column(db.String(50), unique=True, nullable=False, comment='用户名')\n # 密码必须存储哈希值,禁止明文\n password_hash = db.Column(db.String(128), nullable=False, comment='密码哈希')\n created_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')\n\n def to_dict(self):\n return {\n 'id': self.id,\n 'username': self.username,\n 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S')\n }\n```\n\n#### (2) Service 层 (`src/service/user_service.py`)\n```python\nfrom model.user_model import User\nfrom database import db\nfrom typing import Dict, Optional\n\nclass UserService:\n \"\"\"\n 用户服务类:处理用户注册、登录等逻辑\n \"\"\"\n \n @staticmethod\n def create_user(username: str, password_plain: str) -> Dict:\n \"\"\"\n 创建新用户\n \n Args:\n username (str): 用户名\n password_plain (str): 明文密码\n \n Returns:\n Dict: 操作结果\n \"\"\"\n # 1. 校验是否存在\n if User.query.filter_by(username=username).first():\n return {'success': False, 'message': '用户已存在'}\n \n # 2. 密码加密 (示例,实际应使用加盐哈希)\n # password_hash = generate_password_hash(password_plain) \n \n # 3. 入库\n new_user = User(username=username, password_hash='hashed_value')\n try:\n db.session.add(new_user)\n db.session.commit()\n return {'success': True, 'message': '注册成功', 'data': new_user.to_dict()}\n except Exception as e:\n db.session.rollback()\n return {'success': False, 'message': str(e)}\n```\n\n#### (3) Route 层 (`src/route/user_route.py`)\n```python\nfrom flask import Blueprint, request, jsonify\nfrom service.user_service import UserService\n\nuser_bp = Blueprint('user', __name__, url_prefix='/api/user')\n\n@user_bp.route('/register', methods=['POST'])\ndef register():\n data = request.json\n username = data.get('username')\n password = data.get('password')\n \n if not username or not password:\n return jsonify({'code': 400, 'msg': '参数缺失'}), 400\n \n result = UserService.create_user(username, password)\n \n if result['success']:\n return jsonify({'code': 200, 'msg': '成功', 'data': result['data']})\n else:\n return jsonify({'code': 500, 'msg': result['message']}), 500\n```\n\n---\n\n## 四、前端开发规范\n### 1. 组件风格\n- 使用 **Vue 3 Composition API** (`\n\n\n```\n\n---\n\n## 五、通用规范\n1. **异常处理**:后端必须捕获所有未处理异常,防止服务崩溃,并记录错误日志。\n2. **日志记录**:关键操作(登录、攻击检测、封禁)必须写入日志文件或数据库。\n3. **环境配置**:敏感信息(数据库密码、API Key)禁止硬编码,需使用环境变量或配置文件。\n4. **Git 提交**:Commit Message 需清晰描述变更内容(如 `feat: 添加恶意IP自动封禁功能`)。\n\n## 六、特殊业务规则\n1. **蜜罐管理**:蜜罐进程需独立管理,确保主服务崩溃不影响蜜罐运行。\n2. **AI 分析**:大模型调用需使用异步队列(如 Queue + Threading),避免阻塞 HTTP 请求。\n3. **IP 封禁**:调用底层防火墙命令(iptables/netsh)时需进行操作系统判断和权限校验。\n\n## 七、现有模块与系统架构\n当前的后端服务架构已分为以下主要模块:\n\n### 1. 核心业务 API 模块 (Routes / Services / Models)\n\n| 业务模块 | Route 文件 | Service 文件 | Model 文件 | 职责说明 |\n| :--- | :--- | :--- | :--- | :--- |\n| **User (用户权限)** | `user_route.py` | `user_service.py` | `user_model.py`, `user_info_model.py`, `permission_model.py`, `module_model.py` | 注册、登录、JWT鉴权、用户管理、模块权限分配 |\n| **Dashboard (数据大屏)** | `dashboard_route.py` | `dashboard_service.py` | `attack_stats_model.py` | 攻击趋势、类型分布、地图热力、总览统计(均需JWT) |\n| **Honeypot (蜜罐管理)** | `honeypot_route.py` | `honeypot_service.py` | `honeypot_model.py` | 蜜罐CRUD、进程启停、健康检查、PID持久化 |\n| **Log (日志审计)** | `log_route.py` | `log_service.py` | `log_model.py` | 日志查询、分页、导出CSV、内部上报(蜜罐使用) |\n| **Malicious IP (恶意拦截)** | `malicious_ip_route.py` | `malicious_ip_service.py` | `malicious_ip_model.py`, `block_history_model.py` | 恶意IP列表、封禁/解封、防火墙命令下发 |\n| **Match Rule (规则引擎)** | `match_rule_route.py` | `match_rule_service.py` | `match_rule_model.py` | 正则匹配规则管理、启停切换、自动封禁配置 |\n| **AI Config (大模型配置)** | `ai_config_route.py` | `ai_config_service.py`, `ai_analysis_service.py` | `ai_config_model.py` | LLM参数化配置、激活/禁用、连通性测试 |\n| **Test (测试接口)** | `test_route.py` | `test_service.py` | — | 内部功能测试,非生产接口 |\n\n### 2. 完整 API 端点清单\n\n#### /api/user — 用户管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| POST | `/api/user/register` | 无 | 用户注册 |\n| POST | `/api/user/login` | 无 | 用户登录,返回 JWT |\n| POST | `/api/user/create_admin` | 无 | 创建管理员(初始化用) |\n| GET | `/api/user/me` | JWT | 获取当前用户信息 |\n| PUT | `/api/user/me` | JWT | 更新当前用户信息(手机/邮箱/密码) |\n| GET | `/api/user/list` | JWT + 管理员 | 分页获取用户列表 |\n| POST | `/api/user/add` | JWT + 管理员 | 管理员新增用户 |\n| PUT | `/api/user/` | JWT + 管理员 | 管理员修改用户 |\n| DELETE | `/api/user/` | JWT + 管理员 | 管理员删除用户 |\n| GET | `/api/user/permissions` | JWT + 管理员 | 获取所有权限列表 |\n| GET | `/api/user/modules` | JWT | 获取所有模块列表 |\n\n#### /api/dashboard — 数据大屏\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/dashboard/trend` | JWT | 攻击趋势(支持 days/granularity 参数) |\n| GET | `/api/dashboard/types` | JWT | 攻击类型统计分布 |\n| GET | `/api/dashboard/map` | JWT | 攻击来源地图数据 |\n| GET | `/api/dashboard/summary` | JWT | 总览统计(总攻击数、封禁数等) |\n\n#### /api/honeypots — 蜜罐管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/honeypots` | JWT | 分页查询蜜罐列表(支持 type/status/keyword) |\n| POST | `/api/honeypots` | JWT | 创建新蜜罐 |\n| PUT | `/api/honeypots/` | JWT | 更新蜜罐配置 |\n| DELETE | `/api/honeypots/` | JWT | 删除蜜罐 |\n| POST | `/api/honeypots//start` | JWT | 启动蜜罐进程 |\n| POST | `/api/honeypots//stop` | JWT | 停止蜜罐进程 |\n| GET | `/api/honeypots//health` | JWT | 蜜罐健康检查 |\n\n#### /api/logs — 日志审计\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/logs` | JWT | 分页查询日志(支持多字段过滤) |\n| GET | `/api/logs/export` | JWT | 导出日志为 CSV(含 BOM,支持 Excel) |\n| GET | `/api/logs/` | JWT | 根据 ID 获取单条日志 |\n| GET | `/api/logs/attack-types` | JWT | 获取所有攻击类型枚举 |\n| GET | `/api/logs/threat-levels` | JWT | 获取所有威胁等级枚举 |\n| GET | `/api/logs/statistics` | JWT | 获取日志统计汇总 |\n| POST | `/api/logs/internal/upload` | 无 | **内部接口**:蜜罐进程上报攻击日志 |\n\n#### /api/malicious-ips — 恶意IP管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/malicious-ips` | JWT | 分页查询恶意IP(支持 is_blocked/threat_level/keyword) |\n| POST | `/api/malicious-ips/block` | JWT | 封禁指定IP(支持时长/截止时间) |\n| POST | `/api/malicious-ips/unblock` | JWT | 解封指定IP |\n\n#### /api/match-rules — 匹配规则引擎\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/match-rules` | JWT | 分页查询规则 |\n| GET | `/api/match-rules/` | JWT | 获取单条规则 |\n| POST | `/api/match-rules` | JWT | 创建规则(正则+威胁等级+自动封禁配置) |\n| PUT | `/api/match-rules/` | JWT | 更新规则 |\n| DELETE | `/api/match-rules/` | JWT | 删除规则 |\n| PUT | `/api/match-rules//toggle` | JWT | 切换规则启用状态 |\n| GET | `/api/match-rules/attack-types` | JWT | 获取攻击类型枚举 |\n| GET | `/api/match-rules/threat-levels` | JWT | 获取威胁等级枚举 |\n\n#### /api/ai-config — AI大模型配置\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/ai-config/` | JWT | 获取所有AI配置 |\n| POST | `/api/ai-config/` | JWT | 创建AI配置(name/api_url/model_name必填) |\n| PUT | `/api/ai-config/` | JWT | 更新AI配置 |\n| DELETE | `/api/ai-config/` | JWT | 删除AI配置 |\n| POST | `/api/ai-config//activate` | JWT | 激活配置(设为当前使用) |\n| POST | `/api/ai-config//deactivate` | JWT | 禁用配置 |\n| POST | `/api/ai-config//test` | JWT | 测试AI配置连通性 |\n\n### 3. 数据库模型清单\n\n共 12 个 Model 文件,对应以下数据库表:\n\n| 模型文件 | 表名 | 说明 |\n| :--- | :--- | :--- |\n| `user_model.py` | `users` | 用户账号、密码哈希、角色(1管理员/2普通用户) |\n| `user_info_model.py` | `user_infos` | 用户扩展信息(手机号、邮箱、头像等) |\n| `permission_model.py` | `permissions` | 系统权限定义 |\n| `module_model.py` | `modules` / `user_modules` | 系统模块定义及用户-模块关联 |\n| `honeypot_model.py` | `honeypots` | 蜜罐配置(类型、端口、状态、`pid` 字段用于持久化进程) |\n| `log_model.py` | `logs` | 攻击日志记录(来源IP、载荷、威胁等级、协议等) |\n| `malicious_ip_model.py` | `malicious_ips` | 恶意IP列表(封禁状态、威胁等级、攻击次数) |\n| `block_history_model.py` | `block_history` | 封禁/解封操作历史记录 |\n| `attack_stats_model.py` | `attack_stats` | 攻击统计聚合数据(供 Dashboard 使用) |\n| `match_rule_model.py` | `match_rules` | 流量匹配规则(正则表达式、自动封禁、优先级) |\n| `ai_config_model.py` | `ai_configs` | AI大模型配置(API地址、模型名称、激活状态) |\n\n> **重要**:`honeypot_model.py` 中包含 `pid` 字段(Integer, nullable),用于在服务重启后通过 `psutil` 检查蜜罐子进程是否仍然存活。\n\n### 4. 蜜罐组件实现 (`backend/honeypots/`)\n\n| 文件 | 协议 | 默认端口 | 捕获目标 |\n| :--- | :--- | :--- | :--- |\n| `ftp_server.py` | FTP | 2121 | 爆破攻击、未授权访问、文件上传尝试 |\n| `ssh_server.py` | SSH | 2222 | 登录爆破、恶意命令执行(基于 Paramiko) |\n| `hikvision_http_server.py` | HTTP | 可配置(读取 `sys.argv[1]`) | IoT/摄像头设备漏洞探测、Web 攻击 |\n| `redis_server.py` | TCP/Redis | 6379 | Redis 未授权访问、SLAVEOF/CONFIG 命令利用 |\n| `mysql_server.py` | TCP/MySQL | 3306 | 数据库弱口令爆破(捕获用户名、客户端版本) |\n| `elasticsearch_server.py` | HTTP/ES | 9200 | 接口探测、数据查询、节点查询、恶意写入利用 |\n\n**蜜罐进程管理机制**:\n- 所有蜜罐以**独立子进程**方式启动(`subprocess.Popen`),与主 Flask 服务解耦。\n- 启动时将 PID 写入 `honeypots.pid` 数据库字段;停止时发送 `SIGTERM`/`taskkill`。\n- 服务重启后调用 `psutil.pid_exists()` 检查进程存活状态,自动修正数据库状态。\n- 蜜罐捕获到攻击后,通过 HTTP 调用 `/api/logs/internal/upload` 上报主服务。\n\n### 5. Agent 与智能响应模块 (`backend/agent/`)\n\n```\nagent/\n├── core.py # AI代理调度核心,支持多模型工作池、Queue+Threading异步队列\n├── llm_client.py # LLM客户端,封装 OpenAI 兼容 API 调用\n├── mcp/\n│ └── skill.py # MCP技能协议基类\n└── skills/\n ├── block_ip_skill.py # 自动封禁技能:先记录 malicious_ip 再调用防火墙封禁\n ├── decoder_skill.py # Base64/URL解码技能,辅助攻击载荷分析\n └── log_query_skill.py # 日志查询技能,供 AI Agent 检索历史攻击日志\n```\n\n**关键设计**:AI 分析通过 `Queue + Threading` 异步执行,不阻塞 HTTP 请求线程。\n\n### 6. 工具模块 (`backend/utils/`)\n\n| 文件 | 说明 |\n| :--- | :--- |\n| `api_response.py` | 统一 API 响应格式工具(`ApiResponse.success/error/bad_request` 等) |\n| `ip_utils.py` | **离线** IP 地理位置解析(MaxMind GeoLite2 MMDB),含 LRU 缓存 10000 条、私有 IP 判断 |\n| `time_utils.py` | 时间格式化工具函数 |\n| `download_geoip.py` | 自动下载/更新 GeoLite2 数据库脚本 |\n| `data/GeoLite2-City.mmdb` | 离线城市/国家地理数据库 |\n| `data/GeoLite2-ASN.mmdb` | 离线 ASN 自治系统数据库 |\n\n> **注意**:IP 溯源已从在线 `ip-api.com` 全面迁移至离线 MaxMind GeoLite2,无需外网访问。\n\n### 7. 前端视图清单 (`vueweb/vue-project/src/views/`)\n\n| 文件路径 | 功能说明 |\n| :--- | :--- |\n| `Dashboard.vue` | 仪表盘入口(路由容器) |\n| `dashboard/DashboardLayout.vue` | 数据大屏布局(导航 + 内容区) |\n| `dashboard/Overview.vue` | 攻击总览(总数、封禁数、实时告警) |\n| `dashboard/Trend.vue` | 攻击趋势折线图(按天/小时粒度) |\n| `dashboard/Types.vue` | 攻击类型饼图/柱状图分布 |\n| `dashboard/Map.vue` | 世界地图攻击来源热力图(ECharts) |\n| `HoneypotManagement.vue` | 蜜罐管理(CRUD、启停控制、健康状态监控) |\n| `LogQuery.vue` | 日志查询(多维度过滤、详情展示、CSV导出) |\n| `MaliciousIPManagement.vue` | 恶意IP管理(封禁/解封、威胁等级筛选) |\n| `MatchRuleManagement.vue` | 匹配规则管理(正则规则CRUD、启停切换) |\n| `AIConfigManagement.vue` | AI配置管理(多模型配置、激活/禁用、连通测试) |\n| `UserManagement.vue` | 用户管理(管理员):列表、增删改、模块权限分配 |\n| `UserProfile.vue` | 个人中心:查看/修改自己的手机、邮箱、密码 |\n\n**前端特性**:\n- 支持**暗黑/明亮**主题切换(持久化到 localStorage)。\n- 路由守卫:token 存在但 `user` 为空时,先 `await fetchCurrentUser()` 再放行,防止权限检查时序问题。\n- 所有 HTTP 请求通过 Axios 统一拦截器附加 `Authorization: Bearer `。\n\n### 8. 后端初始化脚本\n\n| 文件 | 用途 |\n| :--- | :--- |\n| `init_database.py` | 创建所有数据库表(`db.create_all()`) |\n| `init_data.py` | 初始化基础数据(角色、权限) |\n| `init_modules.py` | 初始化系统功能模块数据 |\n| `init_permissions.py` | 初始化权限条目 |\n| `init_honeypot.py` | 初始化默认蜜罐配置 |\n| `config.py` | Flask 配置类(数据库URI、JWT密钥、CORS等) |\n| `extensions.py` | Flask 扩展实例集中管理(SocketIO 全局单例),避免 reloader 实例不一致 |\n| `app.py` | Flask 应用入口,注册所有蓝图,初始化 SocketIO 并注册 /ws namespace |\n\n### 9. 数据库迁移\n\n使用 Flask-Migrate(Alembic),迁移文件位于 `backend/migrations/versions/`。\n\n**已有迁移**:\n- `f1a2b3c4d5e6_add_pid_to_honeypots.py` — 为 `honeypots` 表新增 `pid` 字段,支持进程持久化重启检测。\n\n---\n\n## 八、WebSocket 实时推送架构\n\n### 1. 技术选型\n| 层 | 技术 | 版本 |\n| :--- | :--- | :--- |\n| 后端 | Flask-SocketIO | 5.3.6 |\n| 后端传输 | python-socketio + python-engineio | 5.10.0 / 4.8.2 |\n| 前端 | socket.io-client | 4.7.5 |\n\n### 2. 架构流程\n\n```\n蜜罐捕获攻击\n ↓ HTTP POST /api/logs/internal/upload\nlog_service.py · create_log()\n ├─ 规则匹配 (MatchRule)\n ├─ 写入 MySQL (Log)\n ├─ AI 分析任务入队\n ├─ 记录恶意 IP\n └─ [仅恶意流量] socketio.emit('new_attack', payload, namespace='/ws')\n ↓ WebSocket\n 前端 useSocket composable\n ↓\n ┌─────────────┼─────────────┐\n DashboardLayout.vue Overview.vue Map.vue\n (ElNotification弹窗 (数字跳动+ (地图红色\n + 高危横幅) 实时告警列表) 脉冲散点)\n```\n\n### 3. 关键文件\n\n| 文件 | 职责 |\n| :--- | :--- |\n| `backend/extensions.py` | **全局唯一** `socketio = SocketIO()` 实例,所有模块必须从此处导入 socketio,避免 werkzeug reloader 导致实例不一致 |\n| `backend/app.py` | `from extensions import socketio`,调用 `socketio.init_app(app, ...)`,注册 `/ws` namespace 的 connect/disconnect handler,使用 `socketio.run()` 替代 `app.run()` |\n| `backend/service/log_service.py` | `create_log()` 末尾 `from extensions import socketio`,emit `new_attack` 事件到 `/ws` namespace |\n| `frontend/src/composables/useSocket.ts` | 全局 Socket 单例管理,`connectSocket()`/`disconnectSocket()` 由 DashboardLayout 统一管理生命周期,提供 `onAttack/offAttack` 订阅方法,pending 队列 + 重连恢复(先 `off('new_attack')` 再统一重绑,避免 handler 重复注册) |\n| `frontend/src/views/dashboard/DashboardLayout.vue` | 订阅 `new_attack`,显示 `ElNotification` 弹窗 + 高危横幅(含滑入动画),菜单栏显示连接状态指示灯(绿/红),使用 `` 缓存子路由 |\n| `frontend/src/views/dashboard/Overview.vue` | 订阅 `new_attack`,数字递增 + bounce 跳动动画 + 实时告警列表(最多 10 条,transition-group 滑入动画) |\n| `frontend/src/views/dashboard/Map.vue` | 订阅 `new_attack`,追加 `effectScatter` 脉冲散点到地图(使用 `Map` 结构消除竞态),5 秒后自动消失,过滤 `(0,0)` null-island 坐标 |\n\n> **重要**:`socketio` 实例必须从 `extensions.py` 导入,**禁止**从 `app.py` 导入。原因:werkzeug 的 `use_reloader=True` 会在子进程中重新执行 `app.py`,导致 `app.py` 中定义的 `socketio` 和其他模块缓存导入的 `socketio` 不是同一个对象。`extensions.py` 作为独立模块不受 reloader 影响。\n\n### 4. 推送事件规范\n\n**事件名**:`new_attack` \n**Namespace**:`/ws` \n**触发条件**:`is_malicious == True`(低危/正常流量不推送,减少噪声)\n\n**载荷字段**:\n```json\n{\n \"log_id\": 123,\n \"source_ip\": \"1.2.3.4\",\n \"attack_type\": \"SQL注入\",\n \"threat_level\": \"high\",\n \"protocol\": \"HTTP\",\n \"target_port\": 80,\n \"attack_time\": \"2026-03-27T10:30:00\",\n \"attack_description\": \"触发规则: SQL注入检测\",\n \"longitude\": 116.4074,\n \"latitude\": 39.9042\n}\n```\n\n### 5. 后端重启说明\n\nWebSocket 需要使用 `socketio.run()` 替代 `app.run()`,已在 `app.py` 中完成更新。\n重启后端后 WebSocket 功能即生效,无需额外操作。\n\n### 6. WebSocket 测试脚本\n\n| 文件 | 用途 |\n| :--- | :--- |\n| `backend/test/test_realtime_report.py` | 主测试脚本:30 次/60 秒全球 IP 的 SQL 注入攻击,用于验证大屏 4 个核心动态效果 |\n| `backend/test/verify_websocket.py` | WebSocket 推送端到端验证:Python socketio 客户端连接 `/ws`,发 3 条攻击,验证 4 项指标(事件到达、坐标、攻击类型、威胁等级) |\n\n---\n\n## 九、代码重载\n后端代码修改之后必须重新启动后端进程\n\n---\n\n## 十、多级恶意流量识别引擎\n\n### 1. 架构概述\n\n蜜罐捕获的原始流量经过**三级识别漏斗**,逐级过滤和分类:\n\n```\n蜜罐原始数据 → 第一级:正则规则匹配 → 第二级:暴力破解频次分析 → 第三级:AI深度分析\n```\n\n### 2. 蜜罐端设计原则(纯数据采集探针)\n\n蜜罐脚本**只负责捕获原始数据**,不做任何攻击分类。上报字段:\n- `attacker_ip` / `attacker_port` — 攻击来源\n- `honeypot_port` — 蜜罐端口\n- `protocol` — 协议类型 (SSH/FTP/HTTP/TCP 等)\n- `raw_log` — 原始请求/命令完整记录\n- `payload` — 载荷内容(认证类蜜罐统一格式:`\"Username: xxx, Password: xxx\"`)\n- `request_path` / `user_agent` — HTTP 蜜罐专用字段\n\n**禁止**在蜜罐脚本中包含 `attack_type`、`threat_level`、`attack_description` 等分类逻辑。\n\n### 3. 三级识别流水线(`log_service.py` · `create_log()`)\n\n#### 第一级:正则规则引擎匹配\n- 从 `match_rules` 表读取所有 `is_enabled=True` 的规则,按 `priority ASC` 排序(数字越小优先级越高)\n- 匹配字段由规则的 `match_field` 决定(目前全部为 `raw_log`)\n- 命中规则后立即设置 `attack_type`、`threat_level`、`attack_description`、`is_malicious`\n- **首条命中即停止**,不会继续匹配后续规则\n\n#### 第二级:暴力破解频次分析\n- **触发条件**:第一级未命中任何规则(`attack_type` 仍为 `'正常流量'`)\n- **检测方法**:`_check_brute_force(source_ip, protocol, current_payload)`\n - 查询同一 IP + 同一协议在最近 **1 分钟** 内的日志数量\n - HTTP 协议特殊处理:只有包含认证凭证(`Username:...Password:...`)的请求才计入暴力破解计数\n - 阈值:**20 次/分钟** (`BRUTE_FORCE_THRESHOLD = 20`)\n- **凭证检测**:`_is_credential_payload(payload)` 使用正则 `r'Username:\\s*.+,\\s*Password:\\s*.+'` 判断\n- 命中后设置 `attack_type='暴力破解'`、`threat_level='high'`、`is_malicious=True`\n\n#### 第三级:AI 深度分析\n- **触发条件**:所有日志均入 AI 分析队列(`Queue + Threading` 异步执行)\n- **AI 回写机制**(`ai_analysis_service.py` · `_process_single_log()`):\n - 当 AI 置信度 >= 0.7 且判定为恶意时,自动回写主记录的 `attack_type`、`threat_level`、`is_malicious`\n - AI 分析摘要追加到 `attack_description` 字段(带 `[AI分析]` 前缀)\n - AI 发现新恶意流量时同步调用 `MaliciousIPService.record_malicious_ip()`\n - 威胁等级映射:置信度 >= 0.9 → `high`,>= 0.7 → `medium`\n\n### 4. 匹配规则优先级说明\n\n规则按 `priority ASC` 排序匹配,关键优先级分布:\n\n| 优先级范围 | 规则类型 | 说明 |\n| :--- | :--- | :--- |\n| 1-3 | XSS、SQL注入(基础)、目录遍历 | 高频攻击,精确正则 |\n| 5 | Redis未授权访问 | 协议专用规则 |\n| 6-9 | WebShell、RCE、扫描探测 | 中等精度规则 |\n| 11-15 | SQL注入(盲注)、XXE、信息泄露 | 长正则、较复杂模式 |\n| 18 | 命令注入(宽泛匹配) | 匹配 `;` `|` `(` 等字符,优先级故意调低,避免误判 |\n| 20-50 | XSS/目录遍历/信息泄露/扫描探测(补充) | 低优先级兜底规则 |\n\n> **重要**:命令注入规则 (ID=8) 的正则包含 `(;|\\||&|\\$|\\(|\\)|...)` 极其宽泛,priority 已从 5 调整为 18,防止将 `sleep()`、`eval()`、Nmap UA 等载荷误判为命令注入。\n\n### 5. 自动化测试\n\n测试脚本:`backend/test_traffic_identification.py`\n\n- **51 个断言**,覆盖 22 个测试场景\n- 4 个正常流量测试(SSH/FTP/HTTP/ES)\n- 11 个正则规则匹配测试(SQL注入×2、XSS×2、命令注入、目录遍历、信息泄露、Redis×2、WebShell、扫描探测)\n- 5 个暴力破解测试(SSH低频/高频、HTTP纯GET不触发、HTTP凭证爆破、FTP爆破、MySQL爆破)\n- 2 个混合场景测试\n\n运行方式:\n```bash\n# 确保 Flask 后端运行在 5000 端口\ncd backend\npython run_server.py & # 或 python app.py\npython test_traffic_identification.py\n```\n\n测试脚本在 SETUP 阶段会自动:\n- 创建/复用测试账户 `testadmin01`\n- 动态发现蜜罐端口\n- 确保 Redis 匹配规则存在\n- 将命令注入规则优先级调至 18"}, "b3b41b3b6f9ba192014d620ebd3f14d90a66ca8c": {"t": 1785764218.7023408, "n": 18147, "h": "5bf65d443639d511", "c": "# 第一个规范 (必须遵守)\n 当每次大的修改和功能的新增,如果与CLAUDE.md文件内容不一致了,需要把新增的功能或者修改功能的逻辑重新写入CLAUDE.md,确保CLAUDE.md文件为最新的。\n \n# 项目开发规范 (Project Rules)\n\n你是一个资深的 Python 全栈专家,请在开发本 **基于低交互蜜罐的恶意流量检测和防御系统** 时严格遵循如下规则:\n\n## 一、核心开发原则\n- **代码质量**:严格遵循 **SOLID、DRY (Don't Repeat Yourself)、KISS (Keep It Simple, Stupid)** 原则。\n- **安全优先**:遵循 **OWASP Top 10** 安全最佳实践(特别是 SQL 注入防护、XSS 防护、敏感数据加密)。\n- **架构分层**:严格遵守 **Controller-Service-Model** 分层架构,禁止跨层调用。\n- **注释规范**:所有关键逻辑、类、方法必须包含 **中文注释** 和 **Docstrings**。\n- **类型安全**:Python 代码必须使用 Type Hints (`typing`),前端使用 TypeScript。\n\n---\n\n## 二、技术栈规范\n### 1. 后端 (Backend)\n- **语言**:Python 3.8+\n- **Web 框架**:Flask\n- **ORM**:SQLAlchemy\n- **数据库**:MySQL\n- **AI 模型**:Ollama (DeepSeek-R1) / OpenAI (远程调用) (也可通过 API 方式接入 OpenAI 等主流模型)\n- **依赖管理**:`requirements.txt` + `venv`\n\n### 2. 前端 (Frontend)\n- **框架**:Vue 3 (Composition API)\n- **语言**:TypeScript\n- **构建工具**:Vite\n- **UI 组件库**:Element Plus\n- **HTTP 客户端**:Axios\n\n---\n\n## 三、后端架构设计规范\n### 1. 分层职责\n| 层级 | 目录 | 职责 | 约束条件 |\n| :--- | :--- | :--- | :--- |\n| **Route (Controller)** | `src/route/` | 处理 HTTP 请求/响应,参数解析,权限校验 | - **禁止**包含复杂业务逻辑
- 仅调用 Service 层
- 返回统一的 JSON 格式 |\n| **Service** | `src/service/` | 核心业务逻辑,事务管理,第三方服务调用 | - **禁止**直接操作 SQL(需通过 Model/ORM)
- 处理异常并返回明确结果 |\n| **Model** | `src/model/` | 数据库模型定义,基础数据操作 | - 继承 `db.Model`
- 定义表结构、关系及基础 CRUD 方法 |\n| **Utils** | `src/utils/` | 通用工具函数 | - 无状态,纯函数为主 |\n\n### 2. 代码示例规范\n\n#### (1) Model 层 (`src/model/user_model.py`)\n```python\nfrom database import db\nfrom datetime import datetime\n\nclass User(db.Model):\n \"\"\"\n 用户模型类\n \"\"\"\n __tablename__ = 'users'\n \n id = db.Column(db.Integer, primary_key=True, autoincrement=True)\n username = db.Column(db.String(50), unique=True, nullable=False, comment='用户名')\n # 密码必须存储哈希值,禁止明文\n password_hash = db.Column(db.String(128), nullable=False, comment='密码哈希')\n created_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')\n\n def to_dict(self):\n return {\n 'id': self.id,\n 'username': self.username,\n 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S')\n }\n```\n\n#### (2) Service 层 (`src/service/user_service.py`)\n```python\nfrom model.user_model import User\nfrom database import db\nfrom typing import Dict, Optional\n\nclass UserService:\n \"\"\"\n 用户服务类:处理用户注册、登录等逻辑\n \"\"\"\n \n @staticmethod\n def create_user(username: str, password_plain: str) -> Dict:\n \"\"\"\n 创建新用户\n \n Args:\n username (str): 用户名\n password_plain (str): 明文密码\n \n Returns:\n Dict: 操作结果\n \"\"\"\n # 1. 校验是否存在\n if User.query.filter_by(username=username).first():\n return {'success': False, 'message': '用户已存在'}\n \n # 2. 密码加密 (示例,实际应使用加盐哈希)\n # password_hash = generate_password_hash(password_plain) \n \n # 3. 入库\n new_user = User(username=username, password_hash='hashed_value')\n try:\n db.session.add(new_user)\n db.session.commit()\n return {'success': True, 'message': '注册成功', 'data': new_user.to_dict()}\n except Exception as e:\n db.session.rollback()\n return {'success': False, 'message': str(e)}\n```\n\n#### (3) Route 层 (`src/route/user_route.py`)\n```python\nfrom flask import Blueprint, request, jsonify\nfrom service.user_service import UserService\n\nuser_bp = Blueprint('user', __name__, url_prefix='/api/user')\n\n@user_bp.route('/register', methods=['POST'])\ndef register():\n data = request.json\n username = data.get('username')\n password = data.get('password')\n \n if not username or not password:\n return jsonify({'code': 400, 'msg': '参数缺失'}), 400\n \n result = UserService.create_user(username, password)\n \n if result['success']:\n return jsonify({'code': 200, 'msg': '成功', 'data': result['data']})\n else:\n return jsonify({'code': 500, 'msg': result['message']}), 500\n```\n\n---\n\n## 四、前端开发规范\n### 1. 组件风格\n- 使用 **Vue 3 Composition API** (`\n\n\n```\n\n---\n\n## 五、通用规范\n1. **异常处理**:后端必须捕获所有未处理异常,防止服务崩溃,并记录错误日志。\n2. **日志记录**:关键操作(登录、攻击检测、封禁)必须写入日志文件或数据库。\n3. **环境配置**:敏感信息(数据库密码、API Key)禁止硬编码,需使用环境变量或配置文件。\n4. **Git 提交**:Commit Message 需清晰描述变更内容(如 `feat: 添加恶意IP自动封禁功能`)。\n\n## 六、特殊业务规则\n1. **蜜罐管理**:蜜罐进程需独立管理,确保主服务崩溃不影响蜜罐运行。\n2. **AI 分析**:大模型调用需使用异步队列(如 Queue + Threading),避免阻塞 HTTP 请求。\n3. **IP 封禁**:调用底层防火墙命令(iptables/netsh)时需进行操作系统判断和权限校验。\n\n## 七、现有模块与系统架构\n当前的后端服务架构已分为以下主要模块:\n\n### 1. 核心业务 API 模块 (Routes / Services / Models)\n\n| 业务模块 | Route 文件 | Service 文件 | Model 文件 | 职责说明 |\n| :--- | :--- | :--- | :--- | :--- |\n| **User (用户权限)** | `user_route.py` | `user_service.py` | `user_model.py`, `user_info_model.py`, `permission_model.py`, `module_model.py` | 注册、登录、JWT鉴权、用户管理、模块权限分配 |\n| **Dashboard (数据大屏)** | `dashboard_route.py` | `dashboard_service.py` | `attack_stats_model.py` | 攻击趋势、类型分布、地图热力、总览统计(均需JWT) |\n| **Honeypot (蜜罐管理)** | `honeypot_route.py` | `honeypot_service.py` | `honeypot_model.py` | 蜜罐CRUD、进程启停、健康检查、PID持久化 |\n| **Log (日志审计)** | `log_route.py` | `log_service.py` | `log_model.py` | 日志查询、分页、导出CSV、内部上报(蜜罐使用) |\n| **Malicious IP (恶意拦截)** | `malicious_ip_route.py` | `malicious_ip_service.py` | `malicious_ip_model.py`, `block_history_model.py` | 恶意IP列表、封禁/解封、防火墙命令下发 |\n| **Match Rule (规则引擎)** | `match_rule_route.py` | `match_rule_service.py` | `match_rule_model.py` | 正则匹配规则管理、启停切换、自动封禁配置 |\n| **AI Config (大模型配置)** | `ai_config_route.py` | `ai_config_service.py`, `ai_analysis_service.py` | `ai_config_model.py` | LLM参数化配置、激活/禁用、连通性测试 |\n| **Test (测试接口)** | `test_route.py` | `test_service.py` | — | 内部功能测试,非生产接口 |\n\n### 2. 完整 API 端点清单\n\n#### /api/user — 用户管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| POST | `/api/user/register` | 无 | 用户注册 |\n| POST | `/api/user/login` | 无 | 用户登录,返回 JWT |\n| POST | `/api/user/create_admin` | 无 | 创建管理员(初始化用) |\n| GET | `/api/user/me` | JWT | 获取当前用户信息 |\n| PUT | `/api/user/me` | JWT | 更新当前用户信息(手机/邮箱/密码) |\n| GET | `/api/user/list` | JWT + 管理员 | 分页获取用户列表 |\n| POST | `/api/user/add` | JWT + 管理员 | 管理员新增用户 |\n| PUT | `/api/user/` | JWT + 管理员 | 管理员修改用户 |\n| DELETE | `/api/user/` | JWT + 管理员 | 管理员删除用户 |\n| GET | `/api/user/permissions` | JWT + 管理员 | 获取所有权限列表 |\n| GET | `/api/user/modules` | JWT | 获取所有模块列表 |\n\n#### /api/dashboard — 数据大屏\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/dashboard/trend` | JWT | 攻击趋势(支持 days/granularity 参数) |\n| GET | `/api/dashboard/types` | JWT | 攻击类型统计分布 |\n| GET | `/api/dashboard/map` | JWT | 攻击来源地图数据 |\n| GET | `/api/dashboard/summary` | JWT | 总览统计(总攻击数、封禁数等) |\n\n#### /api/honeypots — 蜜罐管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/honeypots` | JWT | 分页查询蜜罐列表(支持 type/status/keyword) |\n| POST | `/api/honeypots` | JWT | 创建新蜜罐 |\n| PUT | `/api/honeypots/` | JWT | 更新蜜罐配置 |\n| DELETE | `/api/honeypots/` | JWT | 删除蜜罐 |\n| POST | `/api/honeypots//start` | JWT | 启动蜜罐进程 |\n| POST | `/api/honeypots//stop` | JWT | 停止蜜罐进程 |\n| GET | `/api/honeypots//health` | JWT | 蜜罐健康检查 |\n\n#### /api/logs — 日志审计\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/logs` | JWT | 分页查询日志(支持多字段过滤) |\n| GET | `/api/logs/export` | JWT | 导出日志为 CSV(含 BOM,支持 Excel) |\n| GET | `/api/logs/` | JWT | 根据 ID 获取单条日志 |\n| GET | `/api/logs/attack-types` | JWT | 获取所有攻击类型枚举 |\n| GET | `/api/logs/threat-levels` | JWT | 获取所有威胁等级枚举 |\n| GET | `/api/logs/statistics` | JWT | 获取日志统计汇总 |\n| POST | `/api/logs/internal/upload` | 无 | **内部接口**:蜜罐进程上报攻击日志 |\n\n#### /api/malicious-ips — 恶意IP管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/malicious-ips` | JWT | 分页查询恶意IP(支持 is_blocked/threat_level/keyword) |\n| POST | `/api/malicious-ips/block` | JWT | 封禁指定IP(支持时长/截止时间) |\n| POST | `/api/malicious-ips/unblock` | JWT | 解封指定IP |\n\n#### /api/match-rules — 匹配规则引擎\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/match-rules` | JWT | 分页查询规则 |\n| GET | `/api/match-rules/` | JWT | 获取单条规则 |\n| POST | `/api/match-rules` | JWT | 创建规则(正则+威胁等级+自动封禁配置) |\n| PUT | `/api/match-rules/` | JWT | 更新规则 |\n| DELETE | `/api/match-rules/` | JWT | 删除规则 |\n| PUT | `/api/match-rules//toggle` | JWT | 切换规则启用状态 |\n| GET | `/api/match-rules/attack-types` | JWT | 获取攻击类型枚举 |\n| GET | `/api/match-rules/threat-levels` | JWT | 获取威胁等级枚举 |\n\n#### /api/ai-config — AI大模型配置\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/ai-config/` | JWT | 获取所有AI配置 |\n| POST | `/api/ai-config/` | JWT | 创建AI配置(name/api_url/model_name必填) |\n| PUT | `/api/ai-config/` | JWT | 更新AI配置 |\n| DELETE | `/api/ai-config/` | JWT | 删除AI配置 |\n| POST | `/api/ai-config//activate` | JWT | 激活配置(设为当前使用) |\n| POST | `/api/ai-config//deactivate` | JWT | 禁用配置 |\n| POST | `/api/ai-config//test` | JWT | 测试AI配置连通性 |\n\n### 3. 数据库模型清单\n\n共 12 个 Model 文件,对应以下数据库表:\n\n| 模型文件 | 表名 | 说明 |\n| :--- | :--- | :--- |\n| `user_model.py` | `users` | 用户账号、密码哈希、角色(1管理员/2普通用户) |\n| `user_info_model.py` | `user_infos` | 用户扩展信息(手机号、邮箱、头像等) |\n| `permission_model.py` | `permissions` | 系统权限定义 |\n| `module_model.py` | `modules` / `user_modules` | 系统模块定义及用户-模块关联 |\n| `honeypot_model.py` | `honeypots` | 蜜罐配置(类型、端口、状态、`pid` 字段用于持久化进程) |\n| `log_model.py` | `logs` | 攻击日志记录(来源IP、载荷、威胁等级、协议等) |\n| `malicious_ip_model.py` | `malicious_ips` | 恶意IP列表(封禁状态、威胁等级、攻击次数) |\n| `block_history_model.py` | `block_history` | 封禁/解封操作历史记录 |\n| `attack_stats_model.py` | `attack_stats` | 攻击统计聚合数据(供 Dashboard 使用) |\n| `match_rule_model.py` | `match_rules` | 流量匹配规则(正则表达式、自动封禁、优先级) |\n| `ai_config_model.py` | `ai_configs` | AI大模型配置(API地址、模型名称、激活状态) |\n\n> **重要**:`honeypot_model.py` 中包含 `pid` 字段(Integer, nullable),用于在服务重启后通过 `psutil` 检查蜜罐子进程是否仍然存活。\n\n### 4. 蜜罐组件实现 (`backend/honeypots/`)\n\n| 文件 | 协议 | 默认端口 | 捕获目标 |\n| :--- | :--- | :--- | :--- |\n| `ftp_server.py` | FTP | 2121 | 爆破攻击、未授权访问、文件上传尝试 |\n| `ssh_server.py` | SSH | 2222 | 登录爆破、恶意命令执行(基于 Paramiko) |\n| `hikvision_http_server.py` | HTTP | 可配置(读取 `sys.argv[1]`) | IoT/摄像头设备漏洞探测、Web 攻击 |\n| `redis_server.py` | TCP/Redis | 6379 | Redis 未授权访问、SLAVEOF/CONFIG 命令利用 |\n| `mysql_server.py` | TCP/MySQL | 3306 | 数据库弱口令爆破(捕获用户名、客户端版本) |\n| `elasticsearch_server.py` | HTTP/ES | 9200 | 接口探测、数据查询、节点查询、恶意写入利用 |\n\n**蜜罐进程管理机制**:\n- 所有蜜罐以**独立子进程**方式启动(`subprocess.Popen`),与主 Flask 服务解耦。\n- 启动时将 PID 写入 `honeypots.pid` 数据库字段;停止时发送 `SIGTERM`/`taskkill`。\n- 服务重启后调用 `psutil.pid_exists()` 检查进程存活状态,自动修正数据库状态。\n- 蜜罐捕获到攻击后,通过 HTTP 调用 `/api/logs/internal/upload` 上报主服务。\n\n### 5. Agent 与智能响应模块 (`backend/agent/`)\n\n```\nagent/\n├── core.py # AI代理调度核心,支持多模型工作池、Queue+Threading异步队列\n├── llm_client.py # LLM客户端,封装 OpenAI 兼容 API 调用\n├── mcp/\n│ └── skill.py # MCP技能协议基类\n└── skills/\n ├── block_ip_skill.py # 自动封禁技能:先记录 malicious_ip 再调用防火墙封禁\n ├── decoder_skill.py # Base64/URL解码技能,辅助攻击载荷分析\n └── log_query_skill.py # 日志查询技能,供 AI Agent 检索历史攻击日志\n```\n\n**关键设计**:AI 分析通过 `Queue + Threading` 异步执行,不阻塞 HTTP 请求线程。\n\n### 6. 工具模块 (`backend/utils/`)\n\n| 文件 | 说明 |\n| :--- | :--- |\n| `api_response.py` | 统一 API 响应格式工具(`ApiResponse.success/error/bad_request` 等) |\n| `ip_utils.py` | **离线** IP 地理位置解析(MaxMind GeoLite2 MMDB),含 LRU 缓存 10000 条、私有 IP 判断 |\n| `time_utils.py` | 时间格式化工具函数 |\n| `download_geoip.py` | 自动下载/更新 GeoLite2 数据库脚本 |\n| `data/GeoLite2-City.mmdb` | 离线城市/国家地理数据库 |\n| `data/GeoLite2-ASN.mmdb` | 离线 ASN 自治系统数据库 |\n\n> **注意**:IP 溯源已从在线 `ip-api.com` 全面迁移至离线 MaxMind GeoLite2,无需外网访问。\n\n### 7. 前端视图清单 (`vueweb/vue-project/src/views/`)\n\n| 文件路径 | 功能说明 |\n| :--- | :--- |\n| `Dashboard.vue` | 仪表盘入口(路由容器) |\n| `dashboard/DashboardLayout.vue` | 数据大屏布局(导航 + 内容区) |\n| `dashboard/Overview.vue` | 攻击总览(总数、封禁数、实时告警) |\n| `dashboard/Trend.vue` | 攻击趋势折线图(按天/小时粒度) |\n| `dashboard/Types.vue` | 攻击类型饼图/柱状图分布 |\n| `dashboard/Map.vue` | 世界地图攻击来源热力图(ECharts) |\n| `HoneypotManagement.vue` | 蜜罐管理(CRUD、启停控制、健康状态监控) |\n| `LogQuery.vue` | 日志查询(多维度过滤、详情展示、CSV导出) |\n| `MaliciousIPManagement.vue` | 恶意IP管理(封禁/解封、威胁等级筛选) |\n| `MatchRuleManagement.vue` | 匹配规则管理(正则规则CRUD、启停切换) |\n| `AIConfigManagement.vue` | AI配置管理(多模型配置、激活/禁用、连通测试) |\n| `UserManagement.vue` | 用户管理(管理员):列表、增删改、模块权限分配 |\n| `UserProfile.vue` | 个人中心:查看/修改自己的手机、邮箱、密码 |\n\n**前端特性**:\n- 支持**暗黑/明亮**主题切换(持久化到 localStorage)。\n- 路由守卫:token 存在但 `user` 为空时,先 `await fetchCurrentUser()` 再放行,防止权限检查时序问题。\n- 所有 HTTP 请求通过 Axios 统一拦截器附加 `Authorization: Bearer `。\n\n### 8. 后端初始化脚本\n\n| 文件 | 用途 |\n| :--- | :--- |\n| `init_database.py` | 创建所有数据库表(`db.create_all()`) |\n| `init_data.py` | 初始化基础数据(角色、权限) |\n| `init_modules.py` | 初始化系统功能模块数据 |\n| `init_permissions.py` | 初始化权限条目 |\n| `init_honeypot.py` | 初始化默认蜜罐配置 |\n| `config.py` | Flask 配置类(数据库URI、JWT密钥、CORS等) |\n| `app.py` | Flask 应用入口,注册所有蓝图 |\n\n### 9. 数据库迁移\n\n使用 Flask-Migrate(Alembic),迁移文件位于 `backend/migrations/versions/`。\n\n**已有迁移**:\n- `f1a2b3c4d5e6_add_pid_to_honeypots.py` — 为 `honeypots` 表新增 `pid` 字段,支持进程持久化重启检测。\n\n---\n\n## 八、WebSocket 实时推送架构\n\n### 1. 技术选型\n| 层 | 技术 | 版本 |\n| :--- | :--- | :--- |\n| 后端 | Flask-SocketIO | 5.3.6 |\n| 后端传输 | python-socketio + python-engineio | 5.10.0 / 4.8.2 |\n| 前端 | socket.io-client | 4.7.5 |\n\n### 2. 架构流程\n\n```\n蜜罐捕获攻击\n ↓ HTTP POST /api/logs/internal/upload\nlog_service.py · create_log()\n ├─ 规则匹配 (MatchRule)\n ├─ 写入 MySQL (Log)\n ├─ AI 分析任务入队\n ├─ 记录恶意 IP\n └─ [仅恶意流量] socketio.emit('new_attack', payload, namespace='/ws')\n ↓ WebSocket\n 前端 useSocket composable\n ↓\n ┌─────────────┼─────────────┐\n DashboardLayout.vue Overview.vue Map.vue\n (ElNotification弹窗 (数字跳动+ (地图红色\n + 高危横幅) 实时告警列表) 脉冲散点)\n```\n\n### 3. 关键文件\n\n| 文件 | 职责 |\n| :--- | :--- |\n| `backend/app.py` | 全局 `socketio = SocketIO()` 单例,`socketio.init_app(app, ...)` 初始化,`socketio.run()` 替代 `app.run()` |\n| `backend/service/log_service.py` | `create_log()` 末尾注入 `socketio.emit('new_attack', payload, namespace='/ws')` |\n| `frontend/src/composables/useSocket.ts` | 全局 Socket 单例管理,提供 `onAttack/offAttack` 订阅方法,引用计数自动管理连接生命周期 |\n| `frontend/src/views/dashboard/DashboardLayout.vue` | 订阅 `new_attack`,显示 `ElNotification` 弹窗 + 高危横幅(含滑入动画),菜单栏显示连接状态指示灯 |\n| `frontend/src/views/dashboard/Overview.vue` | 订阅 `new_attack`,数字跳动闪烁 + 实时告警列表(最多 10 条,列表滑入动画) |\n| `frontend/src/views/dashboard/Map.vue` | 订阅 `new_attack`,追加 `effectScatter` 脉冲散点到地图,5 秒后自动消失 |\n\n### 4. 推送事件规范\n\n**事件名**:`new_attack` \n**Namespace**:`/ws` \n**触发条件**:`is_malicious == True`(低危/正常流量不推送,减少噪声)\n\n**载荷字段**:\n```json\n{\n \"log_id\": 123,\n \"source_ip\": \"1.2.3.4\",\n \"attack_type\": \"SQL注入\",\n \"threat_level\": \"high\",\n \"protocol\": \"HTTP\",\n \"target_port\": 80,\n \"attack_time\": \"2026-03-27T10:30:00\",\n \"attack_description\": \"触发规则: SQL注入检测\"\n}\n```\n\n### 5. 后端重启说明\n\nWebSocket 需要使用 `socketio.run()` 替代 `app.run()`,已在 `app.py` 中完成更新。\n重启后端后 WebSocket 功能即生效,无需额外操作。\n\n---\n\n## 九、代码重载\n后端代码修改之后必须重新启动后端进程\n\n---\n\n## 十、多级恶意流量识别引擎\n\n### 1. 架构概述\n\n蜜罐捕获的原始流量经过**三级识别漏斗**,逐级过滤和分类:\n\n```\n蜜罐原始数据 → 第一级:正则规则匹配 → 第二级:暴力破解频次分析 → 第三级:AI深度分析\n```\n\n### 2. 蜜罐端设计原则(纯数据采集探针)\n\n蜜罐脚本**只负责捕获原始数据**,不做任何攻击分类。上报字段:\n- `attacker_ip` / `attacker_port` — 攻击来源\n- `honeypot_port` — 蜜罐端口\n- `protocol` — 协议类型 (SSH/FTP/HTTP/TCP 等)\n- `raw_log` — 原始请求/命令完整记录\n- `payload` — 载荷内容(认证类蜜罐统一格式:`\"Username: xxx, Password: xxx\"`)\n- `request_path` / `user_agent` — HTTP 蜜罐专用字段\n\n**禁止**在蜜罐脚本中包含 `attack_type`、`threat_level`、`attack_description` 等分类逻辑。\n\n### 3. 三级识别流水线(`log_service.py` · `create_log()`)\n\n#### 第一级:正则规则引擎匹配\n- 从 `match_rules` 表读取所有 `is_enabled=True` 的规则,按 `priority ASC` 排序(数字越小优先级越高)\n- 匹配字段由规则的 `match_field` 决定(目前全部为 `raw_log`)\n- 命中规则后立即设置 `attack_type`、`threat_level`、`attack_description`、`is_malicious`\n- **首条命中即停止**,不会继续匹配后续规则\n\n#### 第二级:暴力破解频次分析\n- **触发条件**:第一级未命中任何规则(`attack_type` 仍为 `'正常流量'`)\n- **检测方法**:`_check_brute_force(source_ip, protocol, current_payload)`\n - 查询同一 IP + 同一协议在最近 **1 分钟** 内的日志数量\n - HTTP 协议特殊处理:只有包含认证凭证(`Username:...Password:...`)的请求才计入暴力破解计数\n - 阈值:**20 次/分钟** (`BRUTE_FORCE_THRESHOLD = 20`)\n- **凭证检测**:`_is_credential_payload(payload)` 使用正则 `r'Username:\\s*.+,\\s*Password:\\s*.+'` 判断\n- 命中后设置 `attack_type='暴力破解'`、`threat_level='high'`、`is_malicious=True`\n\n#### 第三级:AI 深度分析\n- **触发条件**:所有日志均入 AI 分析队列(`Queue + Threading` 异步执行)\n- **AI 回写机制**(`ai_analysis_service.py` · `_process_single_log()`):\n - 当 AI 置信度 >= 0.7 且判定为恶意时,自动回写主记录的 `attack_type`、`threat_level`、`is_malicious`\n - AI 分析摘要追加到 `attack_description` 字段(带 `[AI分析]` 前缀)\n - AI 发现新恶意流量时同步调用 `MaliciousIPService.record_malicious_ip()`\n - 威胁等级映射:置信度 >= 0.9 → `high`,>= 0.7 → `medium`\n\n### 4. 匹配规则优先级说明\n\n规则按 `priority ASC` 排序匹配,关键优先级分布:\n\n| 优先级范围 | 规则类型 | 说明 |\n| :--- | :--- | :--- |\n| 1-3 | XSS、SQL注入(基础)、目录遍历 | 高频攻击,精确正则 |\n| 5 | Redis未授权访问 | 协议专用规则 |\n| 6-9 | WebShell、RCE、扫描探测 | 中等精度规则 |\n| 11-15 | SQL注入(盲注)、XXE、信息泄露 | 长正则、较复杂模式 |\n| 18 | 命令注入(宽泛匹配) | 匹配 `;` `|` `(` 等字符,优先级故意调低,避免误判 |\n| 20-50 | XSS/目录遍历/信息泄露/扫描探测(补充) | 低优先级兜底规则 |\n\n> **重要**:命令注入规则 (ID=8) 的正则包含 `(;|\\||&|\\$|\\(|\\)|...)` 极其宽泛,priority 已从 5 调整为 18,防止将 `sleep()`、`eval()`、Nmap UA 等载荷误判为命令注入。\n\n### 5. 自动化测试\n\n测试脚本:`backend/test_traffic_identification.py`\n\n- **51 个断言**,覆盖 22 个测试场景\n- 4 个正常流量测试(SSH/FTP/HTTP/ES)\n- 11 个正则规则匹配测试(SQL注入×2、XSS×2、命令注入、目录遍历、信息泄露、Redis×2、WebShell、扫描探测)\n- 5 个暴力破解测试(SSH低频/高频、HTTP纯GET不触发、HTTP凭证爆破、FTP爆破、MySQL爆破)\n- 2 个混合场景测试\n\n运行方式:\n```bash\n# 确保 Flask 后端运行在 5000 端口\ncd backend\npython run_server.py & # 或 python app.py\npython test_traffic_identification.py\n```\n\n测试脚本在 SETUP 阶段会自动:\n- 创建/复用测试账户 `testadmin01`\n- 动态发现蜜罐端口\n- 确保 Redis 匹配规则存在\n- 将命令注入规则优先级调至 18"}, "8591e3bdfea4923bb4af04b5cf890abae12924ba": {"t": 1785764220.3118956, "n": 15566, "h": "61a6c53bf8741f99", "c": "# 第一个规范 (必须遵守)\n 当每次大的修改和功能的新增,如果与CLAUDE.md文件内容不一致了,需要把新增的功能或者修改功能的逻辑重新写入CLAUDE.md,确保CLAUDE.md文件为最新的。\n \n# 项目开发规范 (Project Rules)\n\n你是一个资深的 Python 全栈专家,请在开发本 **基于低交互蜜罐的恶意流量检测和防御系统** 时严格遵循如下规则:\n\n## 一、核心开发原则\n- **代码质量**:严格遵循 **SOLID、DRY (Don't Repeat Yourself)、KISS (Keep It Simple, Stupid)** 原则。\n- **安全优先**:遵循 **OWASP Top 10** 安全最佳实践(特别是 SQL 注入防护、XSS 防护、敏感数据加密)。\n- **架构分层**:严格遵守 **Controller-Service-Model** 分层架构,禁止跨层调用。\n- **注释规范**:所有关键逻辑、类、方法必须包含 **中文注释** 和 **Docstrings**。\n- **类型安全**:Python 代码必须使用 Type Hints (`typing`),前端使用 TypeScript。\n\n---\n\n## 二、技术栈规范\n### 1. 后端 (Backend)\n- **语言**:Python 3.8+\n- **Web 框架**:Flask\n- **ORM**:SQLAlchemy\n- **数据库**:MySQL\n- **AI 模型**:Ollama (DeepSeek-R1) / OpenAI (远程调用) (也可通过 API 方式接入 OpenAI 等主流模型)\n- **依赖管理**:`requirements.txt` + `venv`\n\n### 2. 前端 (Frontend)\n- **框架**:Vue 3 (Composition API)\n- **语言**:TypeScript\n- **构建工具**:Vite\n- **UI 组件库**:Element Plus\n- **HTTP 客户端**:Axios\n\n---\n\n## 三、后端架构设计规范\n### 1. 分层职责\n| 层级 | 目录 | 职责 | 约束条件 |\n| :--- | :--- | :--- | :--- |\n| **Route (Controller)** | `src/route/` | 处理 HTTP 请求/响应,参数解析,权限校验 | - **禁止**包含复杂业务逻辑
- 仅调用 Service 层
- 返回统一的 JSON 格式 |\n| **Service** | `src/service/` | 核心业务逻辑,事务管理,第三方服务调用 | - **禁止**直接操作 SQL(需通过 Model/ORM)
- 处理异常并返回明确结果 |\n| **Model** | `src/model/` | 数据库模型定义,基础数据操作 | - 继承 `db.Model`
- 定义表结构、关系及基础 CRUD 方法 |\n| **Utils** | `src/utils/` | 通用工具函数 | - 无状态,纯函数为主 |\n\n### 2. 代码示例规范\n\n#### (1) Model 层 (`src/model/user_model.py`)\n```python\nfrom database import db\nfrom datetime import datetime\n\nclass User(db.Model):\n \"\"\"\n 用户模型类\n \"\"\"\n __tablename__ = 'users'\n \n id = db.Column(db.Integer, primary_key=True, autoincrement=True)\n username = db.Column(db.String(50), unique=True, nullable=False, comment='用户名')\n # 密码必须存储哈希值,禁止明文\n password_hash = db.Column(db.String(128), nullable=False, comment='密码哈希')\n created_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')\n\n def to_dict(self):\n return {\n 'id': self.id,\n 'username': self.username,\n 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S')\n }\n```\n\n#### (2) Service 层 (`src/service/user_service.py`)\n```python\nfrom model.user_model import User\nfrom database import db\nfrom typing import Dict, Optional\n\nclass UserService:\n \"\"\"\n 用户服务类:处理用户注册、登录等逻辑\n \"\"\"\n \n @staticmethod\n def create_user(username: str, password_plain: str) -> Dict:\n \"\"\"\n 创建新用户\n \n Args:\n username (str): 用户名\n password_plain (str): 明文密码\n \n Returns:\n Dict: 操作结果\n \"\"\"\n # 1. 校验是否存在\n if User.query.filter_by(username=username).first():\n return {'success': False, 'message': '用户已存在'}\n \n # 2. 密码加密 (示例,实际应使用加盐哈希)\n # password_hash = generate_password_hash(password_plain) \n \n # 3. 入库\n new_user = User(username=username, password_hash='hashed_value')\n try:\n db.session.add(new_user)\n db.session.commit()\n return {'success': True, 'message': '注册成功', 'data': new_user.to_dict()}\n except Exception as e:\n db.session.rollback()\n return {'success': False, 'message': str(e)}\n```\n\n#### (3) Route 层 (`src/route/user_route.py`)\n```python\nfrom flask import Blueprint, request, jsonify\nfrom service.user_service import UserService\n\nuser_bp = Blueprint('user', __name__, url_prefix='/api/user')\n\n@user_bp.route('/register', methods=['POST'])\ndef register():\n data = request.json\n username = data.get('username')\n password = data.get('password')\n \n if not username or not password:\n return jsonify({'code': 400, 'msg': '参数缺失'}), 400\n \n result = UserService.create_user(username, password)\n \n if result['success']:\n return jsonify({'code': 200, 'msg': '成功', 'data': result['data']})\n else:\n return jsonify({'code': 500, 'msg': result['message']}), 500\n```\n\n---\n\n## 四、前端开发规范\n### 1. 组件风格\n- 使用 **Vue 3 Composition API** (`\n\n\n```\n\n---\n\n## 五、通用规范\n1. **异常处理**:后端必须捕获所有未处理异常,防止服务崩溃,并记录错误日志。\n2. **日志记录**:关键操作(登录、攻击检测、封禁)必须写入日志文件或数据库。\n3. **环境配置**:敏感信息(数据库密码、API Key)禁止硬编码,需使用环境变量或配置文件。\n4. **Git 提交**:Commit Message 需清晰描述变更内容(如 `feat: 添加恶意IP自动封禁功能`)。\n\n## 六、特殊业务规则\n1. **蜜罐管理**:蜜罐进程需独立管理,确保主服务崩溃不影响蜜罐运行。\n2. **AI 分析**:大模型调用需使用异步队列(如 Queue + Threading),避免阻塞 HTTP 请求。\n3. **IP 封禁**:调用底层防火墙命令(iptables/netsh)时需进行操作系统判断和权限校验。\n\n## 七、现有模块与系统架构\n当前的后端服务架构已分为以下主要模块:\n\n### 1. 核心业务 API 模块 (Routes / Services / Models)\n\n| 业务模块 | Route 文件 | Service 文件 | Model 文件 | 职责说明 |\n| :--- | :--- | :--- | :--- | :--- |\n| **User (用户权限)** | `user_route.py` | `user_service.py` | `user_model.py`, `user_info_model.py`, `permission_model.py`, `module_model.py` | 注册、登录、JWT鉴权、用户管理、模块权限分配 |\n| **Dashboard (数据大屏)** | `dashboard_route.py` | `dashboard_service.py` | `attack_stats_model.py` | 攻击趋势、类型分布、地图热力、总览统计(均需JWT) |\n| **Honeypot (蜜罐管理)** | `honeypot_route.py` | `honeypot_service.py` | `honeypot_model.py` | 蜜罐CRUD、进程启停、健康检查、PID持久化 |\n| **Log (日志审计)** | `log_route.py` | `log_service.py` | `log_model.py` | 日志查询、分页、导出CSV、内部上报(蜜罐使用) |\n| **Malicious IP (恶意拦截)** | `malicious_ip_route.py` | `malicious_ip_service.py` | `malicious_ip_model.py`, `block_history_model.py` | 恶意IP列表、封禁/解封、防火墙命令下发 |\n| **Match Rule (规则引擎)** | `match_rule_route.py` | `match_rule_service.py` | `match_rule_model.py` | 正则匹配规则管理、启停切换、自动封禁配置 |\n| **AI Config (大模型配置)** | `ai_config_route.py` | `ai_config_service.py`, `ai_analysis_service.py` | `ai_config_model.py` | LLM参数化配置、激活/禁用、连通性测试 |\n| **Test (测试接口)** | `test_route.py` | `test_service.py` | — | 内部功能测试,非生产接口 |\n\n### 2. 完整 API 端点清单\n\n#### /api/user — 用户管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| POST | `/api/user/register` | 无 | 用户注册 |\n| POST | `/api/user/login` | 无 | 用户登录,返回 JWT |\n| POST | `/api/user/create_admin` | 无 | 创建管理员(初始化用) |\n| GET | `/api/user/me` | JWT | 获取当前用户信息 |\n| PUT | `/api/user/me` | JWT | 更新当前用户信息(手机/邮箱/密码) |\n| GET | `/api/user/list` | JWT + 管理员 | 分页获取用户列表 |\n| POST | `/api/user/add` | JWT + 管理员 | 管理员新增用户 |\n| PUT | `/api/user/` | JWT + 管理员 | 管理员修改用户 |\n| DELETE | `/api/user/` | JWT + 管理员 | 管理员删除用户 |\n| GET | `/api/user/permissions` | JWT + 管理员 | 获取所有权限列表 |\n| GET | `/api/user/modules` | JWT | 获取所有模块列表 |\n\n#### /api/dashboard — 数据大屏\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/dashboard/trend` | JWT | 攻击趋势(支持 days/granularity 参数) |\n| GET | `/api/dashboard/types` | JWT | 攻击类型统计分布 |\n| GET | `/api/dashboard/map` | JWT | 攻击来源地图数据 |\n| GET | `/api/dashboard/summary` | JWT | 总览统计(总攻击数、封禁数等) |\n\n#### /api/honeypots — 蜜罐管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/honeypots` | JWT | 分页查询蜜罐列表(支持 type/status/keyword) |\n| POST | `/api/honeypots` | JWT | 创建新蜜罐 |\n| PUT | `/api/honeypots/` | JWT | 更新蜜罐配置 |\n| DELETE | `/api/honeypots/` | JWT | 删除蜜罐 |\n| POST | `/api/honeypots//start` | JWT | 启动蜜罐进程 |\n| POST | `/api/honeypots//stop` | JWT | 停止蜜罐进程 |\n| GET | `/api/honeypots//health` | JWT | 蜜罐健康检查 |\n\n#### /api/logs — 日志审计\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/logs` | JWT | 分页查询日志(支持多字段过滤) |\n| GET | `/api/logs/export` | JWT | 导出日志为 CSV(含 BOM,支持 Excel) |\n| GET | `/api/logs/` | JWT | 根据 ID 获取单条日志 |\n| GET | `/api/logs/attack-types` | JWT | 获取所有攻击类型枚举 |\n| GET | `/api/logs/threat-levels` | JWT | 获取所有威胁等级枚举 |\n| GET | `/api/logs/statistics` | JWT | 获取日志统计汇总 |\n| POST | `/api/logs/internal/upload` | 无 | **内部接口**:蜜罐进程上报攻击日志 |\n\n#### /api/malicious-ips — 恶意IP管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/malicious-ips` | JWT | 分页查询恶意IP(支持 is_blocked/threat_level/keyword) |\n| POST | `/api/malicious-ips/block` | JWT | 封禁指定IP(支持时长/截止时间) |\n| POST | `/api/malicious-ips/unblock` | JWT | 解封指定IP |\n\n#### /api/match-rules — 匹配规则引擎\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/match-rules` | JWT | 分页查询规则 |\n| GET | `/api/match-rules/` | JWT | 获取单条规则 |\n| POST | `/api/match-rules` | JWT | 创建规则(正则+威胁等级+自动封禁配置) |\n| PUT | `/api/match-rules/` | JWT | 更新规则 |\n| DELETE | `/api/match-rules/` | JWT | 删除规则 |\n| PUT | `/api/match-rules//toggle` | JWT | 切换规则启用状态 |\n| GET | `/api/match-rules/attack-types` | JWT | 获取攻击类型枚举 |\n| GET | `/api/match-rules/threat-levels` | JWT | 获取威胁等级枚举 |\n\n#### /api/ai-config — AI大模型配置\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/ai-config/` | JWT | 获取所有AI配置 |\n| POST | `/api/ai-config/` | JWT | 创建AI配置(name/api_url/model_name必填) |\n| PUT | `/api/ai-config/` | JWT | 更新AI配置 |\n| DELETE | `/api/ai-config/` | JWT | 删除AI配置 |\n| POST | `/api/ai-config//activate` | JWT | 激活配置(设为当前使用) |\n| POST | `/api/ai-config//deactivate` | JWT | 禁用配置 |\n| POST | `/api/ai-config//test` | JWT | 测试AI配置连通性 |\n\n### 3. 数据库模型清单\n\n共 12 个 Model 文件,对应以下数据库表:\n\n| 模型文件 | 表名 | 说明 |\n| :--- | :--- | :--- |\n| `user_model.py` | `users` | 用户账号、密码哈希、角色(1管理员/2普通用户) |\n| `user_info_model.py` | `user_infos` | 用户扩展信息(手机号、邮箱、头像等) |\n| `permission_model.py` | `permissions` | 系统权限定义 |\n| `module_model.py` | `modules` / `user_modules` | 系统模块定义及用户-模块关联 |\n| `honeypot_model.py` | `honeypots` | 蜜罐配置(类型、端口、状态、`pid` 字段用于持久化进程) |\n| `log_model.py` | `logs` | 攻击日志记录(来源IP、载荷、威胁等级、协议等) |\n| `malicious_ip_model.py` | `malicious_ips` | 恶意IP列表(封禁状态、威胁等级、攻击次数) |\n| `block_history_model.py` | `block_history` | 封禁/解封操作历史记录 |\n| `attack_stats_model.py` | `attack_stats` | 攻击统计聚合数据(供 Dashboard 使用) |\n| `match_rule_model.py` | `match_rules` | 流量匹配规则(正则表达式、自动封禁、优先级) |\n| `ai_config_model.py` | `ai_configs` | AI大模型配置(API地址、模型名称、激活状态) |\n\n> **重要**:`honeypot_model.py` 中包含 `pid` 字段(Integer, nullable),用于在服务重启后通过 `psutil` 检查蜜罐子进程是否仍然存活。\n\n### 4. 蜜罐组件实现 (`backend/honeypots/`)\n\n| 文件 | 协议 | 默认端口 | 捕获目标 |\n| :--- | :--- | :--- | :--- |\n| `ftp_server.py` | FTP | 2121 | 爆破攻击、未授权访问、文件上传尝试 |\n| `ssh_server.py` | SSH | 2222 | 登录爆破、恶意命令执行(基于 Paramiko) |\n| `hikvision_http_server.py` | HTTP | 可配置(读取 `sys.argv[1]`) | IoT/摄像头设备漏洞探测、Web 攻击 |\n| `redis_server.py` | TCP/Redis | 6379 | Redis 未授权访问、SLAVEOF/CONFIG 命令利用 |\n| `mysql_server.py` | TCP/MySQL | 3306 | 数据库弱口令爆破(捕获用户名、客户端版本) |\n| `elasticsearch_server.py` | HTTP/ES | 9200 | 接口探测、数据查询、节点查询、恶意写入利用 |\n\n**蜜罐进程管理机制**:\n- 所有蜜罐以**独立子进程**方式启动(`subprocess.Popen`),与主 Flask 服务解耦。\n- 启动时将 PID 写入 `honeypots.pid` 数据库字段;停止时发送 `SIGTERM`/`taskkill`。\n- 服务重启后调用 `psutil.pid_exists()` 检查进程存活状态,自动修正数据库状态。\n- 蜜罐捕获到攻击后,通过 HTTP 调用 `/api/logs/internal/upload` 上报主服务。\n\n### 5. Agent 与智能响应模块 (`backend/agent/`)\n\n```\nagent/\n├── core.py # AI代理调度核心,支持多模型工作池、Queue+Threading异步队列\n├── llm_client.py # LLM客户端,封装 OpenAI 兼容 API 调用\n├── mcp/\n│ └── skill.py # MCP技能协议基类\n└── skills/\n ├── block_ip_skill.py # 自动封禁技能:先记录 malicious_ip 再调用防火墙封禁\n ├── decoder_skill.py # Base64/URL解码技能,辅助攻击载荷分析\n └── log_query_skill.py # 日志查询技能,供 AI Agent 检索历史攻击日志\n```\n\n**关键设计**:AI 分析通过 `Queue + Threading` 异步执行,不阻塞 HTTP 请求线程。\n\n### 6. 工具模块 (`backend/utils/`)\n\n| 文件 | 说明 |\n| :--- | :--- |\n| `api_response.py` | 统一 API 响应格式工具(`ApiResponse.success/error/bad_request` 等) |\n| `ip_utils.py` | **离线** IP 地理位置解析(MaxMind GeoLite2 MMDB),含 LRU 缓存 10000 条、私有 IP 判断 |\n| `time_utils.py` | 时间格式化工具函数 |\n| `download_geoip.py` | 自动下载/更新 GeoLite2 数据库脚本 |\n| `data/GeoLite2-City.mmdb` | 离线城市/国家地理数据库 |\n| `data/GeoLite2-ASN.mmdb` | 离线 ASN 自治系统数据库 |\n\n> **注意**:IP 溯源已从在线 `ip-api.com` 全面迁移至离线 MaxMind GeoLite2,无需外网访问。\n\n### 7. 前端视图清单 (`vueweb/vue-project/src/views/`)\n\n| 文件路径 | 功能说明 |\n| :--- | :--- |\n| `Dashboard.vue` | 仪表盘入口(路由容器) |\n| `dashboard/DashboardLayout.vue` | 数据大屏布局(导航 + 内容区) |\n| `dashboard/Overview.vue` | 攻击总览(总数、封禁数、实时告警) |\n| `dashboard/Trend.vue` | 攻击趋势折线图(按天/小时粒度) |\n| `dashboard/Types.vue` | 攻击类型饼图/柱状图分布 |\n| `dashboard/Map.vue` | 世界地图攻击来源热力图(ECharts) |\n| `HoneypotManagement.vue` | 蜜罐管理(CRUD、启停控制、健康状态监控) |\n| `LogQuery.vue` | 日志查询(多维度过滤、详情展示、CSV导出) |\n| `MaliciousIPManagement.vue` | 恶意IP管理(封禁/解封、威胁等级筛选) |\n| `MatchRuleManagement.vue` | 匹配规则管理(正则规则CRUD、启停切换) |\n| `AIConfigManagement.vue` | AI配置管理(多模型配置、激活/禁用、连通测试) |\n| `UserManagement.vue` | 用户管理(管理员):列表、增删改、模块权限分配 |\n| `UserProfile.vue` | 个人中心:查看/修改自己的手机、邮箱、密码 |\n\n**前端特性**:\n- 支持**暗黑/明亮**主题切换(持久化到 localStorage)。\n- 路由守卫:token 存在但 `user` 为空时,先 `await fetchCurrentUser()` 再放行,防止权限检查时序问题。\n- 所有 HTTP 请求通过 Axios 统一拦截器附加 `Authorization: Bearer `。\n\n### 8. 后端初始化脚本\n\n| 文件 | 用途 |\n| :--- | :--- |\n| `init_database.py` | 创建所有数据库表(`db.create_all()`) |\n| `init_data.py` | 初始化基础数据(角色、权限) |\n| `init_modules.py` | 初始化系统功能模块数据 |\n| `init_permissions.py` | 初始化权限条目 |\n| `init_honeypot.py` | 初始化默认蜜罐配置 |\n| `config.py` | Flask 配置类(数据库URI、JWT密钥、CORS等) |\n| `app.py` | Flask 应用入口,注册所有蓝图 |\n\n### 9. 数据库迁移\n\n使用 Flask-Migrate(Alembic),迁移文件位于 `backend/migrations/versions/`。\n\n**已有迁移**:\n- `f1a2b3c4d5e6_add_pid_to_honeypots.py` — 为 `honeypots` 表新增 `pid` 字段,支持进程持久化重启检测。\n\n---\n\n## 八、WebSocket 实时推送架构\n\n### 1. 技术选型\n| 层 | 技术 | 版本 |\n| :--- | :--- | :--- |\n| 后端 | Flask-SocketIO | 5.3.6 |\n| 后端传输 | python-socketio + python-engineio | 5.10.0 / 4.8.2 |\n| 前端 | socket.io-client | 4.7.5 |\n\n### 2. 架构流程\n\n```\n蜜罐捕获攻击\n ↓ HTTP POST /api/logs/internal/upload\nlog_service.py · create_log()\n ├─ 规则匹配 (MatchRule)\n ├─ 写入 MySQL (Log)\n ├─ AI 分析任务入队\n ├─ 记录恶意 IP\n └─ [仅恶意流量] socketio.emit('new_attack', payload, namespace='/ws')\n ↓ WebSocket\n 前端 useSocket composable\n ↓\n ┌─────────────┼─────────────┐\n DashboardLayout.vue Overview.vue Map.vue\n (ElNotification弹窗 (数字跳动+ (地图红色\n + 高危横幅) 实时告警列表) 脉冲散点)\n```\n\n### 3. 关键文件\n\n| 文件 | 职责 |\n| :--- | :--- |\n| `backend/app.py` | 全局 `socketio = SocketIO()` 单例,`socketio.init_app(app, ...)` 初始化,`socketio.run()` 替代 `app.run()` |\n| `backend/service/log_service.py` | `create_log()` 末尾注入 `socketio.emit('new_attack', payload, namespace='/ws')` |\n| `frontend/src/composables/useSocket.ts` | 全局 Socket 单例管理,提供 `onAttack/offAttack` 订阅方法,引用计数自动管理连接生命周期 |\n| `frontend/src/views/dashboard/DashboardLayout.vue` | 订阅 `new_attack`,显示 `ElNotification` 弹窗 + 高危横幅(含滑入动画),菜单栏显示连接状态指示灯 |\n| `frontend/src/views/dashboard/Overview.vue` | 订阅 `new_attack`,数字跳动闪烁 + 实时告警列表(最多 10 条,列表滑入动画) |\n| `frontend/src/views/dashboard/Map.vue` | 订阅 `new_attack`,追加 `effectScatter` 脉冲散点到地图,5 秒后自动消失 |\n\n### 4. 推送事件规范\n\n**事件名**:`new_attack` \n**Namespace**:`/ws` \n**触发条件**:`is_malicious == True`(低危/正常流量不推送,减少噪声)\n\n**载荷字段**:\n```json\n{\n \"log_id\": 123,\n \"source_ip\": \"1.2.3.4\",\n \"attack_type\": \"SQL注入\",\n \"threat_level\": \"high\",\n \"protocol\": \"HTTP\",\n \"target_port\": 80,\n \"attack_time\": \"2026-03-27T10:30:00\",\n \"attack_description\": \"触发规则: SQL注入检测\"\n}\n```\n\n### 5. 后端重启说明\n\nWebSocket 需要使用 `socketio.run()` 替代 `app.run()`,已在 `app.py` 中完成更新。\n重启后端后 WebSocket 功能即生效,无需额外操作。\n\n---\n\n## 九、代码重载\n后端代码修改之后必须重新启动后端进程"}, "349587ccb49ff031672560df587671f763b99d78": {"t": 1785764223.8727663, "n": 15461, "h": "28c3ef7c6bf31862", "c": "# 项目开发规范 (Project Rules)\n\n你是一个资深的 Python 全栈专家,请在开发本 **基于低交互蜜罐的恶意流量检测和防御系统** 时严格遵循如下规则:\n\n## 一、核心开发原则\n- **代码质量**:严格遵循 **SOLID、DRY (Don't Repeat Yourself)、KISS (Keep It Simple, Stupid)** 原则。\n- **安全优先**:遵循 **OWASP Top 10** 安全最佳实践(特别是 SQL 注入防护、XSS 防护、敏感数据加密)。\n- **架构分层**:严格遵守 **Controller-Service-Model** 分层架构,禁止跨层调用。\n- **注释规范**:所有关键逻辑、类、方法必须包含 **中文注释** 和 **Docstrings**。\n- **类型安全**:Python 代码必须使用 Type Hints (`typing`),前端使用 TypeScript。\n\n---\n\n## 二、技术栈规范\n### 1. 后端 (Backend)\n- **语言**:Python 3.8+\n- **Web 框架**:Flask\n- **ORM**:SQLAlchemy\n- **数据库**:MySQL\n- **AI 模型**:Ollama (DeepSeek-R1) / OpenAI (远程调用) (也可通过 API 方式接入 OpenAI 等主流模型)\n- **依赖管理**:`requirements.txt` + `venv`\n\n### 2. 前端 (Frontend)\n- **框架**:Vue 3 (Composition API)\n- **语言**:TypeScript\n- **构建工具**:Vite\n- **UI 组件库**:Element Plus\n- **HTTP 客户端**:Axios\n\n---\n\n## 三、后端架构设计规范\n### 1. 分层职责\n| 层级 | 目录 | 职责 | 约束条件 |\n| :--- | :--- | :--- | :--- |\n| **Route (Controller)** | `src/route/` | 处理 HTTP 请求/响应,参数解析,权限校验 | - **禁止**包含复杂业务逻辑
- 仅调用 Service 层
- 返回统一的 JSON 格式 |\n| **Service** | `src/service/` | 核心业务逻辑,事务管理,第三方服务调用 | - **禁止**直接操作 SQL(需通过 Model/ORM)
- 处理异常并返回明确结果 |\n| **Model** | `src/model/` | 数据库模型定义,基础数据操作 | - 继承 `db.Model`
- 定义表结构、关系及基础 CRUD 方法 |\n| **Utils** | `src/utils/` | 通用工具函数 | - 无状态,纯函数为主 |\n\n### 2. 代码示例规范\n\n#### (1) Model 层 (`src/model/user_model.py`)\n```python\nfrom database import db\nfrom datetime import datetime\n\nclass User(db.Model):\n \"\"\"\n 用户模型类\n \"\"\"\n __tablename__ = 'users'\n \n id = db.Column(db.Integer, primary_key=True, autoincrement=True)\n username = db.Column(db.String(50), unique=True, nullable=False, comment='用户名')\n # 密码必须存储哈希值,禁止明文\n password_hash = db.Column(db.String(128), nullable=False, comment='密码哈希')\n created_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')\n\n def to_dict(self):\n return {\n 'id': self.id,\n 'username': self.username,\n 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S')\n }\n```\n\n#### (2) Service 层 (`src/service/user_service.py`)\n```python\nfrom model.user_model import User\nfrom database import db\nfrom typing import Dict, Optional\n\nclass UserService:\n \"\"\"\n 用户服务类:处理用户注册、登录等逻辑\n \"\"\"\n \n @staticmethod\n def create_user(username: str, password_plain: str) -> Dict:\n \"\"\"\n 创建新用户\n \n Args:\n username (str): 用户名\n password_plain (str): 明文密码\n \n Returns:\n Dict: 操作结果\n \"\"\"\n # 1. 校验是否存在\n if User.query.filter_by(username=username).first():\n return {'success': False, 'message': '用户已存在'}\n \n # 2. 密码加密 (示例,实际应使用加盐哈希)\n # password_hash = generate_password_hash(password_plain) \n \n # 3. 入库\n new_user = User(username=username, password_hash='hashed_value')\n try:\n db.session.add(new_user)\n db.session.commit()\n return {'success': True, 'message': '注册成功', 'data': new_user.to_dict()}\n except Exception as e:\n db.session.rollback()\n return {'success': False, 'message': str(e)}\n```\n\n#### (3) Route 层 (`src/route/user_route.py`)\n```python\nfrom flask import Blueprint, request, jsonify\nfrom service.user_service import UserService\n\nuser_bp = Blueprint('user', __name__, url_prefix='/api/user')\n\n@user_bp.route('/register', methods=['POST'])\ndef register():\n data = request.json\n username = data.get('username')\n password = data.get('password')\n \n if not username or not password:\n return jsonify({'code': 400, 'msg': '参数缺失'}), 400\n \n result = UserService.create_user(username, password)\n \n if result['success']:\n return jsonify({'code': 200, 'msg': '成功', 'data': result['data']})\n else:\n return jsonify({'code': 500, 'msg': result['message']}), 500\n```\n\n---\n\n## 四、前端开发规范\n### 1. 组件风格\n- 使用 **Vue 3 Composition API** (`\n\n\n```\n\n---\n\n## 五、通用规范\n1. **异常处理**:后端必须捕获所有未处理异常,防止服务崩溃,并记录错误日志。\n2. **日志记录**:关键操作(登录、攻击检测、封禁)必须写入日志文件或数据库。\n3. **环境配置**:敏感信息(数据库密码、API Key)禁止硬编码,需使用环境变量或配置文件。\n4. **Git 提交**:Commit Message 需清晰描述变更内容(如 `feat: 添加恶意IP自动封禁功能`)。\n\n## 六、特殊业务规则\n1. **蜜罐管理**:蜜罐进程需独立管理,确保主服务崩溃不影响蜜罐运行。\n2. **AI 分析**:大模型调用需使用异步队列(如 Queue + Threading),避免阻塞 HTTP 请求。\n3. **IP 封禁**:调用底层防火墙命令(iptables/netsh)时需进行操作系统判断和权限校验。\n\n## 七、现有模块与系统架构\n当前的后端服务架构已分为以下主要模块:\n\n### 1. 核心业务 API 模块 (Routes / Services / Models)\n\n| 业务模块 | Route 文件 | Service 文件 | Model 文件 | 职责说明 |\n| :--- | :--- | :--- | :--- | :--- |\n| **User (用户权限)** | `user_route.py` | `user_service.py` | `user_model.py`, `user_info_model.py`, `permission_model.py`, `module_model.py` | 注册、登录、JWT鉴权、用户管理、模块权限分配 |\n| **Dashboard (数据大屏)** | `dashboard_route.py` | `dashboard_service.py` | `attack_stats_model.py` | 攻击趋势、类型分布、地图热力、总览统计(均需JWT) |\n| **Honeypot (蜜罐管理)** | `honeypot_route.py` | `honeypot_service.py` | `honeypot_model.py` | 蜜罐CRUD、进程启停、健康检查、PID持久化 |\n| **Log (日志审计)** | `log_route.py` | `log_service.py` | `log_model.py` | 日志查询、分页、导出CSV、内部上报(蜜罐使用) |\n| **Malicious IP (恶意拦截)** | `malicious_ip_route.py` | `malicious_ip_service.py` | `malicious_ip_model.py`, `block_history_model.py` | 恶意IP列表、封禁/解封、防火墙命令下发 |\n| **Match Rule (规则引擎)** | `match_rule_route.py` | `match_rule_service.py` | `match_rule_model.py` | 正则匹配规则管理、启停切换、自动封禁配置 |\n| **AI Config (大模型配置)** | `ai_config_route.py` | `ai_config_service.py`, `ai_analysis_service.py` | `ai_config_model.py` | LLM参数化配置、激活/禁用、连通性测试 |\n| **Test (测试接口)** | `test_route.py` | `test_service.py` | — | 内部功能测试,非生产接口 |\n\n### 2. 完整 API 端点清单\n\n#### /api/user — 用户管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| POST | `/api/user/register` | 无 | 用户注册 |\n| POST | `/api/user/login` | 无 | 用户登录,返回 JWT |\n| POST | `/api/user/create_admin` | 无 | 创建管理员(初始化用) |\n| GET | `/api/user/me` | JWT | 获取当前用户信息 |\n| PUT | `/api/user/me` | JWT | 更新当前用户信息(手机/邮箱/密码) |\n| GET | `/api/user/list` | JWT + 管理员 | 分页获取用户列表 |\n| POST | `/api/user/add` | JWT + 管理员 | 管理员新增用户 |\n| PUT | `/api/user/` | JWT + 管理员 | 管理员修改用户 |\n| DELETE | `/api/user/` | JWT + 管理员 | 管理员删除用户 |\n| GET | `/api/user/permissions` | JWT + 管理员 | 获取所有权限列表 |\n| GET | `/api/user/modules` | JWT | 获取所有模块列表 |\n\n#### /api/dashboard — 数据大屏\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/dashboard/trend` | JWT | 攻击趋势(支持 days/granularity 参数) |\n| GET | `/api/dashboard/types` | JWT | 攻击类型统计分布 |\n| GET | `/api/dashboard/map` | JWT | 攻击来源地图数据 |\n| GET | `/api/dashboard/summary` | JWT | 总览统计(总攻击数、封禁数等) |\n\n#### /api/honeypots — 蜜罐管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/honeypots` | JWT | 分页查询蜜罐列表(支持 type/status/keyword) |\n| POST | `/api/honeypots` | JWT | 创建新蜜罐 |\n| PUT | `/api/honeypots/` | JWT | 更新蜜罐配置 |\n| DELETE | `/api/honeypots/` | JWT | 删除蜜罐 |\n| POST | `/api/honeypots//start` | JWT | 启动蜜罐进程 |\n| POST | `/api/honeypots//stop` | JWT | 停止蜜罐进程 |\n| GET | `/api/honeypots//health` | JWT | 蜜罐健康检查 |\n\n#### /api/logs — 日志审计\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/logs` | JWT | 分页查询日志(支持多字段过滤) |\n| GET | `/api/logs/export` | JWT | 导出日志为 CSV(含 BOM,支持 Excel) |\n| GET | `/api/logs/` | JWT | 根据 ID 获取单条日志 |\n| GET | `/api/logs/attack-types` | JWT | 获取所有攻击类型枚举 |\n| GET | `/api/logs/threat-levels` | JWT | 获取所有威胁等级枚举 |\n| GET | `/api/logs/statistics` | JWT | 获取日志统计汇总 |\n| POST | `/api/logs/internal/upload` | 无 | **内部接口**:蜜罐进程上报攻击日志 |\n\n#### /api/malicious-ips — 恶意IP管理\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/malicious-ips` | JWT | 分页查询恶意IP(支持 is_blocked/threat_level/keyword) |\n| POST | `/api/malicious-ips/block` | JWT | 封禁指定IP(支持时长/截止时间) |\n| POST | `/api/malicious-ips/unblock` | JWT | 解封指定IP |\n\n#### /api/match-rules — 匹配规则引擎\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/match-rules` | JWT | 分页查询规则 |\n| GET | `/api/match-rules/` | JWT | 获取单条规则 |\n| POST | `/api/match-rules` | JWT | 创建规则(正则+威胁等级+自动封禁配置) |\n| PUT | `/api/match-rules/` | JWT | 更新规则 |\n| DELETE | `/api/match-rules/` | JWT | 删除规则 |\n| PUT | `/api/match-rules//toggle` | JWT | 切换规则启用状态 |\n| GET | `/api/match-rules/attack-types` | JWT | 获取攻击类型枚举 |\n| GET | `/api/match-rules/threat-levels` | JWT | 获取威胁等级枚举 |\n\n#### /api/ai-config — AI大模型配置\n| 方法 | 路径 | 认证 | 说明 |\n| :--- | :--- | :--- | :--- |\n| GET | `/api/ai-config/` | JWT | 获取所有AI配置 |\n| POST | `/api/ai-config/` | JWT | 创建AI配置(name/api_url/model_name必填) |\n| PUT | `/api/ai-config/` | JWT | 更新AI配置 |\n| DELETE | `/api/ai-config/` | JWT | 删除AI配置 |\n| POST | `/api/ai-config//activate` | JWT | 激活配置(设为当前使用) |\n| POST | `/api/ai-config//deactivate` | JWT | 禁用配置 |\n| POST | `/api/ai-config//test` | JWT | 测试AI配置连通性 |\n\n### 3. 数据库模型清单\n\n共 12 个 Model 文件,对应以下数据库表:\n\n| 模型文件 | 表名 | 说明 |\n| :--- | :--- | :--- |\n| `user_model.py` | `users` | 用户账号、密码哈希、角色(1管理员/2普通用户) |\n| `user_info_model.py` | `user_infos` | 用户扩展信息(手机号、邮箱、头像等) |\n| `permission_model.py` | `permissions` | 系统权限定义 |\n| `module_model.py` | `modules` / `user_modules` | 系统模块定义及用户-模块关联 |\n| `honeypot_model.py` | `honeypots` | 蜜罐配置(类型、端口、状态、`pid` 字段用于持久化进程) |\n| `log_model.py` | `logs` | 攻击日志记录(来源IP、载荷、威胁等级、协议等) |\n| `malicious_ip_model.py` | `malicious_ips` | 恶意IP列表(封禁状态、威胁等级、攻击次数) |\n| `block_history_model.py` | `block_history` | 封禁/解封操作历史记录 |\n| `attack_stats_model.py` | `attack_stats` | 攻击统计聚合数据(供 Dashboard 使用) |\n| `match_rule_model.py` | `match_rules` | 流量匹配规则(正则表达式、自动封禁、优先级) |\n| `ai_config_model.py` | `ai_configs` | AI大模型配置(API地址、模型名称、激活状态) |\n\n> **重要**:`honeypot_model.py` 中包含 `pid` 字段(Integer, nullable),用于在服务重启后通过 `psutil` 检查蜜罐子进程是否仍然存活。\n\n### 4. 蜜罐组件实现 (`backend/honeypots/`)\n\n| 文件 | 协议 | 默认端口 | 捕获目标 |\n| :--- | :--- | :--- | :--- |\n| `ftp_server.py` | FTP | 2121 | 爆破攻击、未授权访问、文件上传尝试 |\n| `ssh_server.py` | SSH | 2222 | 登录爆破、恶意命令执行(基于 Paramiko) |\n| `hikvision_http_server.py` | HTTP | 可配置(读取 `sys.argv[1]`) | IoT/摄像头设备漏洞探测、Web 攻击 |\n| `redis_server.py` | TCP/Redis | 6379 | Redis 未授权访问、SLAVEOF/CONFIG 命令利用 |\n| `mysql_server.py` | TCP/MySQL | 3306 | 数据库弱口令爆破(捕获用户名、客户端版本) |\n| `elasticsearch_server.py` | HTTP/ES | 9200 | 接口探测、数据查询、节点查询、恶意写入利用 |\n\n**蜜罐进程管理机制**:\n- 所有蜜罐以**独立子进程**方式启动(`subprocess.Popen`),与主 Flask 服务解耦。\n- 启动时将 PID 写入 `honeypots.pid` 数据库字段;停止时发送 `SIGTERM`/`taskkill`。\n- 服务重启后调用 `psutil.pid_exists()` 检查进程存活状态,自动修正数据库状态。\n- 蜜罐捕获到攻击后,通过 HTTP 调用 `/api/logs/internal/upload` 上报主服务。\n\n### 5. Agent 与智能响应模块 (`backend/agent/`)\n\n```\nagent/\n├── core.py # AI代理调度核心,支持多模型工作池、Queue+Threading异步队列\n├── llm_client.py # LLM客户端,封装 OpenAI 兼容 API 调用\n├── mcp/\n│ └── skill.py # MCP技能协议基类\n└── skills/\n ├── block_ip_skill.py # 自动封禁技能:先记录 malicious_ip 再调用防火墙封禁\n ├── decoder_skill.py # Base64/URL解码技能,辅助攻击载荷分析\n └── log_query_skill.py # 日志查询技能,供 AI Agent 检索历史攻击日志\n```\n\n**关键设计**:AI 分析通过 `Queue + Threading` 异步执行,不阻塞 HTTP 请求线程。\n\n### 6. 工具模块 (`backend/utils/`)\n\n| 文件 | 说明 |\n| :--- | :--- |\n| `api_response.py` | 统一 API 响应格式工具(`ApiResponse.success/error/bad_request` 等) |\n| `ip_utils.py` | **离线** IP 地理位置解析(MaxMind GeoLite2 MMDB),含 LRU 缓存 10000 条、私有 IP 判断 |\n| `time_utils.py` | 时间格式化工具函数 |\n| `download_geoip.py` | 自动下载/更新 GeoLite2 数据库脚本 |\n| `data/GeoLite2-City.mmdb` | 离线城市/国家地理数据库 |\n| `data/GeoLite2-ASN.mmdb` | 离线 ASN 自治系统数据库 |\n\n> **注意**:IP 溯源已从在线 `ip-api.com` 全面迁移至离线 MaxMind GeoLite2,无需外网访问。\n\n### 7. 前端视图清单 (`vueweb/vue-project/src/views/`)\n\n| 文件路径 | 功能说明 |\n| :--- | :--- |\n| `Dashboard.vue` | 仪表盘入口(路由容器) |\n| `dashboard/DashboardLayout.vue` | 数据大屏布局(导航 + 内容区) |\n| `dashboard/Overview.vue` | 攻击总览(总数、封禁数、实时告警) |\n| `dashboard/Trend.vue` | 攻击趋势折线图(按天/小时粒度) |\n| `dashboard/Types.vue` | 攻击类型饼图/柱状图分布 |\n| `dashboard/Map.vue` | 世界地图攻击来源热力图(ECharts) |\n| `HoneypotManagement.vue` | 蜜罐管理(CRUD、启停控制、健康状态监控) |\n| `LogQuery.vue` | 日志查询(多维度过滤、详情展示、CSV导出) |\n| `MaliciousIPManagement.vue` | 恶意IP管理(封禁/解封、威胁等级筛选) |\n| `MatchRuleManagement.vue` | 匹配规则管理(正则规则CRUD、启停切换) |\n| `AIConfigManagement.vue` | AI配置管理(多模型配置、激活/禁用、连通测试) |\n| `UserManagement.vue` | 用户管理(管理员):列表、增删改、模块权限分配 |\n| `UserProfile.vue` | 个人中心:查看/修改自己的手机、邮箱、密码 |\n\n**前端特性**:\n- 支持**暗黑/明亮**主题切换(持久化到 localStorage)。\n- 路由守卫:token 存在但 `user` 为空时,先 `await fetchCurrentUser()` 再放行,防止权限检查时序问题。\n- 所有 HTTP 请求通过 Axios 统一拦截器附加 `Authorization: Bearer `。\n\n### 8. 后端初始化脚本\n\n| 文件 | 用途 |\n| :--- | :--- |\n| `init_database.py` | 创建所有数据库表(`db.create_all()`) |\n| `init_data.py` | 初始化基础数据(角色、权限) |\n| `init_modules.py` | 初始化系统功能模块数据 |\n| `init_permissions.py` | 初始化权限条目 |\n| `init_honeypot.py` | 初始化默认蜜罐配置 |\n| `config.py` | Flask 配置类(数据库URI、JWT密钥、CORS等) |\n| `app.py` | Flask 应用入口,注册所有蓝图 |\n\n### 9. 数据库迁移\n\n使用 Flask-Migrate(Alembic),迁移文件位于 `backend/migrations/versions/`。\n\n**已有迁移**:\n- `f1a2b3c4d5e6_add_pid_to_honeypots.py` — 为 `honeypots` 表新增 `pid` 字段,支持进程持久化重启检测。\n\n---\n\n## 八、WebSocket 实时推送架构\n\n### 1. 技术选型\n| 层 | 技术 | 版本 |\n| :--- | :--- | :--- |\n| 后端 | Flask-SocketIO | 5.3.6 |\n| 后端传输 | python-socketio + python-engineio | 5.10.0 / 4.8.2 |\n| 前端 | socket.io-client | 4.7.5 |\n\n### 2. 架构流程\n\n```\n蜜罐捕获攻击\n ↓ HTTP POST /api/logs/internal/upload\nlog_service.py · create_log()\n ├─ 规则匹配 (MatchRule)\n ├─ 写入 MySQL (Log)\n ├─ AI 分析任务入队\n ├─ 记录恶意 IP\n └─ [仅恶意流量] socketio.emit('new_attack', payload, namespace='/ws')\n ↓ WebSocket\n 前端 useSocket composable\n ↓\n ┌─────────────┼─────────────┐\n DashboardLayout.vue Overview.vue Map.vue\n (ElNotification弹窗 (数字跳动+ (地图红色\n + 高危横幅) 实时告警列表) 脉冲散点)\n```\n\n### 3. 关键文件\n\n| 文件 | 职责 |\n| :--- | :--- |\n| `backend/app.py` | 全局 `socketio = SocketIO()` 单例,`socketio.init_app(app, ...)` 初始化,`socketio.run()` 替代 `app.run()` |\n| `backend/service/log_service.py` | `create_log()` 末尾注入 `socketio.emit('new_attack', payload, namespace='/ws')` |\n| `frontend/src/composables/useSocket.ts` | 全局 Socket 单例管理,提供 `onAttack/offAttack` 订阅方法,引用计数自动管理连接生命周期 |\n| `frontend/src/views/dashboard/DashboardLayout.vue` | 订阅 `new_attack`,显示 `ElNotification` 弹窗 + 高危横幅(含滑入动画),菜单栏显示连接状态指示灯 |\n| `frontend/src/views/dashboard/Overview.vue` | 订阅 `new_attack`,数字跳动闪烁 + 实时告警列表(最多 10 条,列表滑入动画) |\n| `frontend/src/views/dashboard/Map.vue` | 订阅 `new_attack`,追加 `effectScatter` 脉冲散点到地图,5 秒后自动消失 |\n\n### 4. 推送事件规范\n\n**事件名**:`new_attack` \n**Namespace**:`/ws` \n**触发条件**:`is_malicious == True`(低危/正常流量不推送,减少噪声)\n\n**载荷字段**:\n```json\n{\n \"log_id\": 123,\n \"source_ip\": \"1.2.3.4\",\n \"attack_type\": \"SQL注入\",\n \"threat_level\": \"high\",\n \"protocol\": \"HTTP\",\n \"target_port\": 80,\n \"attack_time\": \"2026-03-27T10:30:00\",\n \"attack_description\": \"触发规则: SQL注入检测\"\n}\n```\n\n### 5. 后端重启说明\n\nWebSocket 需要使用 `socketio.run()` 替代 `app.run()`,已在 `app.py` 中完成更新。\n重启后端后 WebSocket 功能即生效,无需额外操作。\n\n---\n\n## 九、代码重载\n后端代码修改之后必须重新启动后端进程"}, "81d093dbfc304a5df1cff16d74b7bfb5c9ae9ec8": {"t": 1785764228.2543685, "n": 6377, "h": "cd5a8087ad3be3ea", "c": "# 项目开发规范 (Project Rules)\n\n你是一个资深的 Python 全栈专家,请在开发本 **基于低交互蜜罐的恶意流量检测和防御系统** 时严格遵循如下规则:\n\n## 一、核心开发原则\n- **代码质量**:严格遵循 **SOLID、DRY (Don't Repeat Yourself)、KISS (Keep It Simple, Stupid)** 原则。\n- **安全优先**:遵循 **OWASP Top 10** 安全最佳实践(特别是 SQL 注入防护、XSS 防护、敏感数据加密)。\n- **架构分层**:严格遵守 **Controller-Service-Model** 分层架构,禁止跨层调用。\n- **注释规范**:所有关键逻辑、类、方法必须包含 **中文注释** 和 **Docstrings**。\n- **类型安全**:Python 代码必须使用 Type Hints (`typing`),前端使用 TypeScript。\n\n---\n\n## 二、技术栈规范\n### 1. 后端 (Backend)\n- **语言**:Python 3.8+\n- **Web 框架**:Flask\n- **ORM**:SQLAlchemy\n- **数据库**:MySQL\n- **AI 模型**:Ollama (DeepSeek-R1) / OpenAI (远程调用) (也可通过 API 方式接入 OpenAI 等主流模型)\n- **依赖管理**:`requirements.txt` + `venv`\n\n### 2. 前端 (Frontend)\n- **框架**:Vue 3 (Composition API)\n- **语言**:TypeScript\n- **构建工具**:Vite\n- **UI 组件库**:Element Plus\n- **HTTP 客户端**:Axios\n\n---\n\n## 三、后端架构设计规范\n### 1. 分层职责\n| 层级 | 目录 | 职责 | 约束条件 |\n| :--- | :--- | :--- | :--- |\n| **Route (Controller)** | `src/route/` | 处理 HTTP 请求/响应,参数解析,权限校验 | - **禁止**包含复杂业务逻辑
- 仅调用 Service 层
- 返回统一的 JSON 格式 |\n| **Service** | `src/service/` | 核心业务逻辑,事务管理,第三方服务调用 | - **禁止**直接操作 SQL(需通过 Model/ORM)
- 处理异常并返回明确结果 |\n| **Model** | `src/model/` | 数据库模型定义,基础数据操作 | - 继承 `db.Model`
- 定义表结构、关系及基础 CRUD 方法 |\n| **Utils** | `src/utils/` | 通用工具函数 | - 无状态,纯函数为主 |\n\n### 2. 代码示例规范\n\n#### (1) Model 层 (`src/model/user_model.py`)\n```python\nfrom database import db\nfrom datetime import datetime\n\nclass User(db.Model):\n \"\"\"\n 用户模型类\n \"\"\"\n __tablename__ = 'users'\n \n id = db.Column(db.Integer, primary_key=True, autoincrement=True)\n username = db.Column(db.String(50), unique=True, nullable=False, comment='用户名')\n # 密码必须存储哈希值,禁止明文\n password_hash = db.Column(db.String(128), nullable=False, comment='密码哈希')\n created_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')\n\n def to_dict(self):\n return {\n 'id': self.id,\n 'username': self.username,\n 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S')\n }\n```\n\n#### (2) Service 层 (`src/service/user_service.py`)\n```python\nfrom model.user_model import User\nfrom database import db\nfrom typing import Dict, Optional\n\nclass UserService:\n \"\"\"\n 用户服务类:处理用户注册、登录等逻辑\n \"\"\"\n \n @staticmethod\n def create_user(username: str, password_plain: str) -> Dict:\n \"\"\"\n 创建新用户\n \n Args:\n username (str): 用户名\n password_plain (str): 明文密码\n \n Returns:\n Dict: 操作结果\n \"\"\"\n # 1. 校验是否存在\n if User.query.filter_by(username=username).first():\n return {'success': False, 'message': '用户已存在'}\n \n # 2. 密码加密 (示例,实际应使用加盐哈希)\n # password_hash = generate_password_hash(password_plain) \n \n # 3. 入库\n new_user = User(username=username, password_hash='hashed_value')\n try:\n db.session.add(new_user)\n db.session.commit()\n return {'success': True, 'message': '注册成功', 'data': new_user.to_dict()}\n except Exception as e:\n db.session.rollback()\n return {'success': False, 'message': str(e)}\n```\n\n#### (3) Route 层 (`src/route/user_route.py`)\n```python\nfrom flask import Blueprint, request, jsonify\nfrom service.user_service import UserService\n\nuser_bp = Blueprint('user', __name__, url_prefix='/api/user')\n\n@user_bp.route('/register', methods=['POST'])\ndef register():\n data = request.json\n username = data.get('username')\n password = data.get('password')\n \n if not username or not password:\n return jsonify({'code': 400, 'msg': '参数缺失'}), 400\n \n result = UserService.create_user(username, password)\n \n if result['success']:\n return jsonify({'code': 200, 'msg': '成功', 'data': result['data']})\n else:\n return jsonify({'code': 500, 'msg': result['message']}), 500\n```\n\n---\n\n## 四、前端开发规范\n### 1. 组件风格\n- 使用 **Vue 3 Composition API** (`\n\n\n```\n\n---\n\n## 五、通用规范\n1. **异常处理**:后端必须捕获所有未处理异常,防止服务崩溃,并记录错误日志。\n2. **日志记录**:关键操作(登录、攻击检测、封禁)必须写入日志文件或数据库。\n3. **环境配置**:敏感信息(数据库密码、API Key)禁止硬编码,需使用环境变量或配置文件。\n4. **Git 提交**:Commit Message 需清晰描述变更内容(如 `feat: 添加恶意IP自动封禁功能`)。\n\n## 六、特殊业务规则\n1. **蜜罐管理**:蜜罐进程需独立管理,确保主服务崩溃不影响蜜罐运行。\n2. **AI 分析**:大模型调用需使用异步队列(如 Queue + Threading),避免阻塞 HTTP 请求。\n3. **IP 封禁**:调用底层防火墙命令(iptables/netsh)时需进行操作系统判断和权限校验。\n\n## 七、现有模块与系统架构\n当前的后端服务架构已分为以下主要模块:\n\n### 1. 核心业务 API 模块 (Routes / Services / Models)\n- **User (用户权限)**:处理用户登录、认证与权限校验 (`user_route`, `user_service`, `user_model`, `user_info_model`, `permission_model`, `module_model`)\n- **Dashboard (数据大屏)**:展示实时攻击概览及统计数据 (`dashboard_route`, `dashboard_service`, `attack_stats_model`)\n- **Honeypot (蜜罐后台)**:管理蜜罐部署状态及节点信息 (`honeypot_route`, `honeypot_service`, `honeypot_model`)\n- **Log (日志审计)**:系统交互日志与攻击日志记录 (`log_route`, `log_service`, `log_model`)\n- **Malicious IP (恶意拦截)**:记录攻击源与下发封禁指令 (`malicious_ip_route`, `malicious_ip_service`, `malicious_ip_model`, `block_history_model`)\n- **Match Rule (规则引擎)**:管理预期的流量与攻击匹配特征 (`match_rule_route`, `match_rule_service`, `match_rule_model`)\n- **AI Config (大模型配置)**:LLM 接口的参数化配置与状态调用 (`ai_config_route`, `ai_config_service`, `ai_config_model`)\n\n### 2. 蜜罐组件实现 (`src/backend/honeypots/`)\n- `ftp_server.py`: 低交互 FTP 模拟器,主要针对爆破和未授权访问。\n- `ssh_server.py`: 低交互 SSH 模拟器,捕获登录尝试与恶意命令。\n- `hikvision_http_server.py`: 模拟海康威视等 IoT 设备的 Web 服务漏洞环境。\n\n### 3. Agent 与智能响应模块 (`src/backend/agent/`)\n- **Core Agent**: AI 代理调度核心。\n- **Skills**: 下游执行功能组件 (如 `block_ip_skill`, `decoder_skill`, `log_query_skill`)。\n\n\n## 八、代码重载\n后端代码修改之后必须重新启动后端进程"}, "6d43f0bba0c2d279c7e7a95177ba1ef6f9927415": {"t": 1785764230.4275913, "n": 5184, "h": "301b2cce31c301e3", "c": "# 项目开发规范 (Project Rules)\n\n你是一个资深的 Python 全栈专家,请在开发本 **基于低交互蜜罐的恶意流量检测和防御系统** 时严格遵循如下规则:\n\n## 一、核心开发原则\n- **代码质量**:严格遵循 **SOLID、DRY (Don't Repeat Yourself)、KISS (Keep It Simple, Stupid)** 原则。\n- **安全优先**:遵循 **OWASP Top 10** 安全最佳实践(特别是 SQL 注入防护、XSS 防护、敏感数据加密)。\n- **架构分层**:严格遵守 **Controller-Service-Model** 分层架构,禁止跨层调用。\n- **注释规范**:所有关键逻辑、类、方法必须包含 **中文注释** 和 **Docstrings**。\n- **类型安全**:Python 代码必须使用 Type Hints (`typing`),前端使用 TypeScript。\n\n---\n\n## 二、技术栈规范\n### 1. 后端 (Backend)\n- **语言**:Python 3.8+\n- **Web 框架**:Flask\n- **ORM**:SQLAlchemy\n- **数据库**:MySQL\n- **AI 模型**:Ollama (DeepSeek-R1) / OpenAI (远程调用) (也可通过 API 方式接入 OpenAI 等主流模型)\n- **依赖管理**:`requirements.txt` + `venv`\n\n### 2. 前端 (Frontend)\n- **框架**:Vue 3 (Composition API)\n- **语言**:TypeScript\n- **构建工具**:Vite\n- **UI 组件库**:Element Plus\n- **HTTP 客户端**:Axios\n\n---\n\n## 三、后端架构设计规范\n### 1. 分层职责\n| 层级 | 目录 | 职责 | 约束条件 |\n| :--- | :--- | :--- | :--- |\n| **Route (Controller)** | `src/route/` | 处理 HTTP 请求/响应,参数解析,权限校验 | - **禁止**包含复杂业务逻辑
- 仅调用 Service 层
- 返回统一的 JSON 格式 |\n| **Service** | `src/service/` | 核心业务逻辑,事务管理,第三方服务调用 | - **禁止**直接操作 SQL(需通过 Model/ORM)
- 处理异常并返回明确结果 |\n| **Model** | `src/model/` | 数据库模型定义,基础数据操作 | - 继承 `db.Model`
- 定义表结构、关系及基础 CRUD 方法 |\n| **Utils** | `src/utils/` | 通用工具函数 | - 无状态,纯函数为主 |\n\n### 2. 代码示例规范\n\n#### (1) Model 层 (`src/model/user_model.py`)\n```python\nfrom database import db\nfrom datetime import datetime\n\nclass User(db.Model):\n \"\"\"\n 用户模型类\n \"\"\"\n __tablename__ = 'users'\n \n id = db.Column(db.Integer, primary_key=True, autoincrement=True)\n username = db.Column(db.String(50), unique=True, nullable=False, comment='用户名')\n # 密码必须存储哈希值,禁止明文\n password_hash = db.Column(db.String(128), nullable=False, comment='密码哈希')\n created_at = db.Column(db.DateTime, default=datetime.now, comment='创建时间')\n\n def to_dict(self):\n return {\n 'id': self.id,\n 'username': self.username,\n 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S')\n }\n```\n\n#### (2) Service 层 (`src/service/user_service.py`)\n```python\nfrom model.user_model import User\nfrom database import db\nfrom typing import Dict, Optional\n\nclass UserService:\n \"\"\"\n 用户服务类:处理用户注册、登录等逻辑\n \"\"\"\n \n @staticmethod\n def create_user(username: str, password_plain: str) -> Dict:\n \"\"\"\n 创建新用户\n \n Args:\n username (str): 用户名\n password_plain (str): 明文密码\n \n Returns:\n Dict: 操作结果\n \"\"\"\n # 1. 校验是否存在\n if User.query.filter_by(username=username).first():\n return {'success': False, 'message': '用户已存在'}\n \n # 2. 密码加密 (示例,实际应使用加盐哈希)\n # password_hash = generate_password_hash(password_plain) \n \n # 3. 入库\n new_user = User(username=username, password_hash='hashed_value')\n try:\n db.session.add(new_user)\n db.session.commit()\n return {'success': True, 'message': '注册成功', 'data': new_user.to_dict()}\n except Exception as e:\n db.session.rollback()\n return {'success': False, 'message': str(e)}\n```\n\n#### (3) Route 层 (`src/route/user_route.py`)\n```python\nfrom flask import Blueprint, request, jsonify\nfrom service.user_service import UserService\n\nuser_bp = Blueprint('user', __name__, url_prefix='/api/user')\n\n@user_bp.route('/register', methods=['POST'])\ndef register():\n data = request.json\n username = data.get('username')\n password = data.get('password')\n \n if not username or not password:\n return jsonify({'code': 400, 'msg': '参数缺失'}), 400\n \n result = UserService.create_user(username, password)\n \n if result['success']:\n return jsonify({'code': 200, 'msg': '成功', 'data': result['data']})\n else:\n return jsonify({'code': 500, 'msg': result['message']}), 500\n```\n\n---\n\n## 四、前端开发规范\n### 1. 组件风格\n- 使用 **Vue 3 Composition API** (`\n\n\n```\n\n---\n\n## 五、通用规范\n1. **异常处理**:后端必须捕获所有未处理异常,防止服务崩溃,并记录错误日志。\n2. **日志记录**:关键操作(登录、攻击检测、封禁)必须写入日志文件或数据库。\n3. **环境配置**:敏感信息(数据库密码、API Key)禁止硬编码,需使用环境变量或配置文件。\n4. **Git 提交**:Commit Message 需清晰描述变更内容(如 `feat: 添加恶意IP自动封禁功能`)。\n\n## 六、特殊业务规则\n1. **蜜罐管理**:蜜罐进程需独立管理,确保主服务崩溃不影响蜜罐运行。\n2. **AI 分析**:大模型调用需使用异步队列(如 Queue + Threading),避免阻塞 HTTP 请求。\n3. **IP 封禁**:调用底层防火墙命令(iptables/netsh)时需进行操作系统判断和权限校验。\n"}}}}