Arkptz/mitm2openapi

GitHub: Arkptz/mitm2openapi

一款 Rust 编写的轻量工具,将 mitmproxy 流量转储和 HAR 文件转换为 OpenAPI 3.0 规范,无需 Python 环境。

Stars: 0 | Forks: 0

# mitm2openapi **将 mitmproxy 流量转储和 HAR 文件转换为 OpenAPI 3.0 —— 快速、单一二进制文件、无需 Python。** [mitmproxy2swagger](https://github.com/alufers/mitmproxy2swagger) 的 Rust 重写版。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/f230a4b191015315.svg)](https://github.com/Arkptz/mitm2openapi/actions/workflows/ci.yml) [![Nightly Integration](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/d3b9327701015316.svg)](https://github.com/Arkptz/mitm2openapi/actions/workflows/integration-level2.yml) [![Crates.io](https://img.shields.io/crates/v/mitm2openapi.svg)](https://crates.io/crates/mitm2openapi) [![Downloads](https://img.shields.io/crates/d/mitm2openapi.svg)](https://crates.io/crates/mitm2openapi) [![docs.rs](https://img.shields.io/docsrs/mitm2openapi)](https://docs.rs/mitm2openapi) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) Demo: capture → discover → generate → browse Swagger UI
## 为什么选择? [mitmproxy2swagger](https://github.com/alufers/mitmproxy2swagger)(由 [@alufers](https://github.com/alufers) 编写的 Python 原版)运行良好,但需要在环境中安装 Python、`pip` 和 `mitmproxy`。对于 CI 流水线、精简的 Docker 镜像、安全审计和一次性使用来说,这会带来摩擦。 `mitm2openapi` 作为一个约 5 MB 的单一静态二进制文件发布——只需将其放入任何环境即可,无需运行时,无需 `venv`,无需 `pip install`。生成与原版相同的 OpenAPI 3.0 输出,外加一流的 HAR 支持和基于 glob 的过滤器,适用于完全无人值守的流水线。 感谢 [@alufers](https://github.com/alufers) 开创了此工作流程的原始工具。 ## 功能 - **快速** — 纯 Rust,单线程,可在毫秒内处理抓包数据 - **单一静态二进制文件** — 无需 Python,无需 venv,无需 pip,无运行时依赖 - **支持双格式** — mitmproxy 流量转储 (v19/v20/v21) 和 HAR 1.2 - **两步工作流程** — `discover` 发现端点,由您进行筛选,`generate` 输出整洁的 OpenAPI 3.0 - **Glob 过滤器** — 包含用于自动化流水线的 `--exclude-patterns` 和 `--include-patterns` - **错误恢复** — 跳过损坏的 flow,继续处理 - **自动检测** — 根据文件内容进行启发式格式检测 - **久经沙场** — 针对 Swagger Petstore 和 OWASP crAPI 进行集成测试,并使用 `oasdiff` 进行验证 - **跨平台** — 预编译支持 Linux、macOS、Windows 二进制文件 ## 安装 ### 从二进制发行版安装 从 [GitHub Releases](https://github.com/Arkptz/mitm2openapi/releases) 下载预编译的二进制文件。 ### 从源码安装 ``` cargo install --git https://github.com/Arkptz/mitm2openapi ``` ## 快速开始 ``` # 1. 使用 mitmproxy 捕获流量 mitmdump -w capture.flow # 2. 发现 API 端点 mitm2openapi discover -i capture.flow -o templates.yaml -p "https://api.example.com" # 3. 编辑 templates.yaml — 从要包含的路径中移除 'ignore:' 前缀 # 4. 生成 OpenAPI 规范 mitm2openapi generate -i capture.flow -t templates.yaml -o openapi.yaml -p "https://api.example.com" ``` ### 跳过手动编辑 如果您事先知道需要哪些路径,可以使用 `--exclude-patterns` 和 `--include-patterns` 让 `discover` 完成筛选: ``` mitm2openapi discover \ -i capture.flow -o templates.yaml -p "https://api.example.com" \ --exclude-patterns '/static/**,/images/**,*.css,*.js,*.svg' \ --include-patterns '/api/**,/v2/**' mitm2openapi generate \ -i capture.flow -t templates.yaml -o openapi.yaml -p "https://api.example.com" ``` 匹配 `--include-patterns` 的路径会被自动激活(输出时不带 `ignore:` 前缀)。匹配 `--exclude-patterns` 的路径会被彻底 丢弃。其他路径仍会加上 `ignore:` 前缀,以便手动审查。
CLI 参考(点击展开) ### `discover` 扫描捕获的流量并生成一个模板文件,列出所有观察到的端点。 ``` mitm2openapi discover [OPTIONS] -i -o -p ``` | 选项 | 描述 | |--------|-------------| | `-i, --input ` | 输入文件(flow 转储或 HAR) | | `-o, --output ` | 输出 YAML 模板文件 | | `-p, --prefix ` | 用于过滤请求的 API 前缀 URL | | `--format ` | 输入格式:`auto`、`har`、`mitmproxy`(默认值:`auto`) | | `--exclude-patterns ` | 逗号分隔的 glob 表达式;匹配的路径将被彻底丢弃。`*` = 单个段,`**` = 任意子树。例如:`/static/**,*.css` | | `--include-patterns ` | 逗号分隔的 glob 表达式;匹配的路径不带 `ignore:` 前缀输出(为 `generate` 自动激活) | ### `generate` 使用筛选后的模板文件,从捕获的流量中生成 OpenAPI 3.0 规范。 ``` mitm2openapi generate [OPTIONS] -i -t -o -p ``` | 选项 | 描述 | |--------|-------------| | `-i, --input ` | 输入文件(flow 转储或 HAR) | | `-t, --templates ` | 模板 YAML 文件(来自 `discover`) | | `-o, --output ` | 输出 OpenAPI YAML 文件 | | `-p, --prefix ` | API 前缀 URL | | `--format ` | 输入格式:`auto`、`har`、`mitmproxy`(默认值:`auto`) | | `--param-regex ` | 用于参数检测的自定义正则表达式 | | `--openapi-title ` | 规范的自定义标题 | | `--openapi-version <VER>` | 自定义规范版本(默认值:`1.0.0`) | | `--exclude-headers <LIST>` | 要排除的 headers,以逗号分隔 | | `--exclude-cookies <LIST>` | 要排除的 cookies,以逗号分隔 | | `--include-headers` | 在规范中包含 headers | | `--ignore-images` | 忽略图像内容类型 | | `--suppress-params` | 抑制参数建议 | | `--tags-overrides <JSON>` | 用于标签覆盖的 JSON 字符串 | </details> ## 支持的格式 | 格式 | 版本 | 扩展名 | |--------|----------|-----------| | mitmproxy 流量转储 | v19, v20, v21 | `.flow` | | HAR (HTTP Archive) | 1.2 | `.har` | 格式会根据文件内容自动检测。使用 `--format` 可进行覆盖。 ## 从 Python 版 mitmproxy2swagger 迁移 | Python (`mitmproxy2swagger`) | Rust (`mitm2openapi`) | |-----|-----| | `pip install mitmproxy2swagger` | 单一二进制文件,无运行时 | | `mitmproxy2swagger -i <file> -o <spec> -p <prefix>` | 两步操作:先 `discover` 后 `generate` | | 原地编辑 spec 文件 | 独立的模板文件用于筛选 | | 需要 Python 3.x + mitmproxy | 独立二进制文件 | | 仅支持 mitmproxy | 支持 mitmproxy flow 转储 + HAR | ### 主要区别 - **两步工作流程**:`discover` 生成一个模板文件;您对其进行筛选;`generate` 生成最终的规范。这分离了端点选择和规范生成。 - **模板文件**:发现的端点带有 `ignore:` 前缀。移除前缀即可包含该端点。这取代了直接编辑输出规范的做法。 - **无 Python 依赖**:以单一静态二进制文件发布,支持 Linux、macOS 和 Windows。 - **HAR 支持**:处理来自浏览器 DevTools 或其他 HTTP 工具的 HAR 导出文件。 ## 贡献 欢迎贡献代码!请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解本地测试设置(单元测试、Petstore 黄金测试、crAPI 集成、演示 GIF 流水线)。 ## 许可证 MIT</div><div><strong>标签:</strong>API安全, API文档生成, Docker, HAR, HTTP归档, JSON输出, mitmproxy, OpenAPI 3.0, OpenCanary, Rust, Swagger, Syscall, Web开发, 云资产清单, 单文件二进制, 可视化界面, 安全防御评估, 抓包工具, 接口发现, 文档结构分析, 无运行时依赖, 服务管理, 网络安全, 网络流量审计, 逆向工程, 通知系统, 隐私保护</div></article></div> <!-- 人机验证 --> <script> (function () { var base = (document.querySelector('base') && document.querySelector('base').getAttribute('href')) || ''; var path = base.replace(/\/?$/, '') + '/cap-wasm/cap_wasm.min.js'; window.CAP_CUSTOM_WASM_URL = new URL(path, window.location.href).href; })(); </script> </body> </html>