wangqiongpeng/pengstrike-mcp
GitHub: wangqiongpeng/pengstrike-mcp
PengStrike 是一个 AI 驱动的 MCP 渗透测试框架,通过自适应异步任务调度将 150+ 安全工具接入各类 AI 代理,解决长时扫描阻塞对话和并发资源管理问题。
Stars: 0 | Forks: 0
# PengStrike AI MCP
### AI 驱动的 MCP 渗透测试框架 — 150+ 安全工具,自适应异步任务模型,防崩溃并发
[](https://www.python.org/)
[](LICENSE)
[](https://modelcontextprotocol.io/)
[](#)
[](#)
[](https://github.com/wangqiongpeng/pengstrike-mcp/actions/workflows/ci.yml)
[](#)
[](#)
**English** | [简体中文](README_zh.md)
## 目录
- [什么是 PengStrike?](#what-is-pengstrike)
- [核心特性](#key-features)
- [架构](#architecture)
- [快速开始](#quick-start)
- [AI 使用协议](#ai-usage-protocol)
- [一次典型的 AI 会话](#a-typical-ai-session)
- [工具清单](#tool-inventory)
- [API 参考](#api-reference)
- [对比](#comparison)
- [目录结构](#directory-structure)
- [常见问题](#faq)
- [贡献](#contributing)
- [安全](#security)
- [许可与免责声明](#license--disclaimer)
## 什么是 PengStrike?
PengStrike 是一个 **MCP (Model Context Protocol) 服务器**,可将任何支持 MCP 的 AI agent(Trae、Claude、GPT、Cursor 等)转变为**专业的渗透测试平台**。AI 通过统一的 MCP 接口调用 150 多个真实的安全工具——如 `nmap`、`nuclei`、`sqlmap`、`metasploit`、`hydra`、`ghidra` 等,同时由服务器处理复杂的底层逻辑:**并发任务调度、任务生命周期管理、流式输出和内存保护**。
它是一个**双脚本系统**:
| 脚本 | 作用 | 运行位置 |
| --- | --- | --- |
| `pengstrike_server.py` | HTTP 服务器:执行真实工具,管理任务,流式输出,保护内存 | Kali Linux / 任何安装了 Python 3.10+ 的 Linux |
| `pengstrike_mcp.py` | MCP 客户端:一个轻量级的 FastMCP 包装器,负责将 AI IDE 连接到服务器 | 任何托管 AI IDE 的机器(Windows / macOS / Linux) |
**适用人群?**
- **红队和渗透测试人员**——希望利用真实且经过实战检验的工具进行 AI 辅助的侦察、扫描和漏洞利用。
- **CTF 选手**——需要通过单一聊天界面进行自动化扫描和二进制/pwn 分析。
- **安全研究人员**——正在构建 AI agent,需要一个可靠、并发的工具执行后端。
**它解决了什么问题?** 简单的 MCP 工具集成采用同步方式运行工具:长时间的 `nmap` 扫描会阻塞整个对话数分钟,AI 会误判为“失败”并重试(从而产生重复扫描),而且繁重的扫描会耗尽资源,导致像 `curl` 这样的快速查询被饿死。PengStrike 的**自适应任务模型**消除了所有这些痛点:快速工具立即返回结果,慢速工具会立刻返回一个 `task_id`,AI 稍后可以通过一次 `harvest_tasks` 调用来收集结果。
## 核心特性
### 1. 自适应同步/异步任务模型
无需 AI 进行任何特殊操作,每个工具调用都能以最优方式执行:
- **快速工具 (<10s)** —— `httpx`、`dig`、`curl`、快速探测 —— **同步**返回**完整结果**。AI 会收到正常的答复,行为无需改变。
- **慢速工具** —— `nmap`、`nuclei`、`sqlmap`、`hydra` —— **立即**返回 `{task_id, status: "running"}`,并在后台继续运行。AI 可以并行启动多个扫描,然后通过一次 `harvest_tasks` 调用收集所有结果。
- **Python 脚本**拥有 120 秒的扩展同步窗口(`PY_SCRIPT_SYNC_WINDOW`),以便典型的分析/探测脚本能返回完整的输出,而无需在成功和“运行中快照”的状态之间来回切换。
### 2. 具有 QoS 调度的 10 并发硬限制
- 固定的 `ThreadPoolExecutor(10)` 线程池 —— 并发任务永远不会超过 10 个,保护服务器免受任务风暴的冲击。
- **QoS 两级调度**:2 个快速槽位(用于 `httpx`/`dig`/`curl` 等即时工具)+ 8 个繁重槽位(`nmap`/`sqlmap`)。长时间的繁重扫描**绝不会饿死**快速的查询请求。
### 3. 流式输出引擎(设计上保证内存稳定)
- 输出**在流式传输时直接写入磁盘**;内存中每个流仅保留 `head (16KB) + tail (64KB)`。
- 即使有 10 个并发任务产生总计 140MB 的输出,服务器的 RSS(常驻内存集)也仅保持在 ~15MB 左右 —— **内存占用在结构上有严格上限,而非被动削减**。
### 4. SQLite (WAL) 任务账本
- 每个任务及其结果都会持久化到 `pengstrike_tasks.db`(WAL 模式)中。
- **服务器重启也不会丢失已完成的结果** —— AI 依然可以通过 `task_id` 从账本中提取数据。
- 被重启中断的运行中任务会被如实地标记为 `interrupted`(绝不会虚假地标记为“completed”)。
### 5. 孤儿任务回收
- 当 AI 完成回答并离线后,**在 25 分钟内未被查询且没有产生新输出**的后台扫描将被自动取消,从而释放并发槽位。
- 持续产生实时输出的长时间扫描**不会**受到影响。
### 6. 四级内存保护
- 每个流截断至 8MB,全局预算为 60MB,外加具有升级机制的**运行时内存监视器**:`ok → tight → critical → kill`。从设计上杜绝了 OOM 的发生。
### 7. 聚合收集 / 增量同步 / 实时进度
- `harvest_tasks(task_ids=[...])` 可在一次往返中收集**多个**任务。
- `list?since_seq=N` 提供增量任务同步(提高轮询效率)。
- 每个运行中的任务都附带实时进度:`elapsed`、`bytes`、`lines`、`last_line`、PID。
### 8. 健壮的传输层
- 客户端会自动重试瞬态连接错误(带有退避机制)—— 在繁重的并行扫描期间不再出现“MCP 偶发失败”。
- 读超时绝不会引发重复扫描(ReadTimeout 不会被重试)。
- 大输出会被截断,并带有指向 `read_output_file` 以进行分页的提示。
## 架构
```
┌─ AI Agent (Trae / Claude / GPT / Cursor) ───────────────────┐
│ Rule 1: any tool call → result within 10s; else task_id │
│ Rule 2: got task_id → do other work in parallel → │
│ harvest_tasks() collects everything at once │
└───────────────────── MCP protocol ─────────────────────────┘
┌─ MCP Client (pengstrike_mcp.py, thin shell) ───────────────┐
│ safe_post: pure submit, no hidden polling │
│ Tools: harvest_tasks / get_task_result / cancel_task / │
│ list_active_tasks / read_output_file │
└───────────────────── HTTP ─────────────────────────────────┘
┌─ Server (pengstrike_server.py, TaskManager v2) ────────────┐
│ ThreadPoolExecutor(10) + QoS (2 fast + 8 heavy) │
│ SQLite(WAL) task ledger + orphan reaper + TTL cleanup │
│ Streaming to disk: memory keeps head+tail only │
└────────────────────────────────────────────────────────────┘
```
设计原则很简单:**一切操作都立即返回,数据收集是显式的**。没有隐藏的阻塞,也没有隐式的轮询魔法 —— AI 始终确切知道正在运行的任务以及如何获取结果。
## 快速开始
### 环境要求
| 端 | 要求 |
| --- | --- |
| **服务器** | Kali Linux 2024.1+(或任何安装了 Python 3.10+ 的 Linux),需从官方源安装 150+ 外部安全工具 |
| **客户端** | Windows / macOS / Linux,任何支持 MCP 的 AI IDE |
### 第 1 步 — 部署服务器 (Kali / Linux)
```
# 创建并激活 virtualenv
python3 -m venv pengstrike_env
source pengstrike_env/bin/activate
# 安装 Python 依赖
pip install -r requirements.txt
# 启动服务器(仅限 SINGLE INSTANCE!)
python3 pengstrike_server.py --port 8888
# 验证健康状态
curl http://127.0.0.1:8888/health
# 验证 task API 是否在线
curl -X POST http://127.0.0.1:8888/api/task/cleanup_all \
-H "Content-Type: application/json" -d '{"reason":"check"}'
# 预期:{"success":true,"canceled_count":0}
```
### 第 2 步 — 配置 MCP 客户端 (AI IDE)
使用你的实际路径编辑 `pengstrike-ai-mcp.json`,然后将其导入到 AI IDE 的 MCP 设置中:
```
{
"mcpServers": {
"pengstrike-ai": {
"command": "C:\\path\\to\\pengstrike_env\\Scripts\\python.exe",
"args": [
"C:\\path\\to\\pengstrike_mcp.py",
"--server",
"http://127.0.0.1:8888"
],
"description": "PengStrike AI v6.0 - Advanced Cybersecurity Automation Platform",
"timeout": 1200,
"alwaysAllow": []
}
}
}
```
如果服务器不在同一台机器上,请通过 SSH 隧道暴露它:
```
ssh -L 8888:127.0.0.1:8888 kali@标签:CISA项目, MCP, Python, XXE攻击, 插件系统, 无后门