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 重写版。
[](https://github.com/Arkptz/mitm2openapi/actions/workflows/ci.yml)
[](https://github.com/Arkptz/mitm2openapi/actions/workflows/integration-level2.yml)
[](https://crates.io/crates/mitm2openapi)
[](https://crates.io/crates/mitm2openapi)
[](https://docs.rs/mitm2openapi)
[](LICENSE)
## 为什么选择?
[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标签:API安全, API文档生成, Docker, HAR, HTTP归档, JSON输出, mitmproxy, OpenAPI 3.0, OpenCanary, Rust, Swagger, Syscall, Web开发, 云资产清单, 单文件二进制, 可视化界面, 安全防御评估, 抓包工具, 接口发现, 文档结构分析, 无运行时依赖, 服务管理, 网络安全, 网络流量审计, 逆向工程, 通知系统, 隐私保护