alufers/mitmproxy2swagger

GitHub: alufers/mitmproxy2swagger

这是一个通过捕获网络流量自动将REST API逆向工程为OpenAPI 3.0规范的工具。

Stars: 9348 | Forks: 348

# mitmproxy2swagger [![PyPI version](https://badge.fury.io/py/mitmproxy2swagger.svg)](https://badge.fury.io/py/mitmproxy2swagger) [![Arch Linux repository](https://img.shields.io/badge/archlinux-mitmproxy2swagger-blue)](https://archlinux.org/packages/extra/any/mitmproxy2swagger/) 一个用于自动将 [mitmproxy](https://mitmproxy.org/) 捕获数据转换为 [OpenAPI 3.0](https://swagger.io/specification/) 规范的工具。这意味着您只需运行应用程序并捕获流量,即可自动对 REST API 进行逆向工程。 **🆕 新功能!** 增加了对从浏览器 DevTools 导出的 HAR 文件进行处理的支持。详情请参阅 [使用方法 - HAR](#har)。 ## 安装 首先,您需要安装 python3 和 pip3。 ``` $ pip install mitmproxy2swagger # ... 或 ... $ pip3 install mitmproxy2swagger # ... 或 ... $ git clone git@github.com:alufers/mitmproxy2swagger.git $ cd mitmproxy2swagger $ docker build -t mitmproxy2swagger . ``` 然后克隆该仓库,并按照下面的示例运行 `mitmproxy2swagger`。 ## 使用方法 ### Mitmproxy 要通过检查 HTTP 流量来创建规范,您需要: 1. 使用 mitmproxy 工具捕获流量。我个人推荐使用 mitmweb,这是 mitmproxy 内置的 Web 界面。 $ mitmweb Web server listening at http://127.0.0.1:8081/ Proxy server listening at http://*:9999 ... **重要提示** 要配置您的客户端使用 mitm proxy 暴露的代理,请查阅 [mitmproxy 文档](https://docs.mitmproxy.org/stable/) 以获取更多信息。 2. 将流量保存为 flow 文件。 在 mitmweb 中,您可以通过“File”菜单并选择“Save”来执行此操作: ![显示“File”菜单中“Save”选项位置的屏幕截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/b25d216681235142.png) 3. 运行 mitmproxy2swagger 的第一遍处理: $ mitmproxy2swagger -i -o -p # ... 或者 ... $ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i -o -p 请注意,您可以使用现有的 schema,在这种情况下,现有的 schema 将通过新数据进行扩展。您也可以使用不同的 flow 捕获多次运行它,捕获的数据将被安全地合并。 `` 是您希望逆向工程的 API 的 base url。您需要通过观察 mitmproxy 中的请求来获取它。 例如,如果一个应用程序发出了如下请求: https://api.example.com/v1/login https://api.example.com/v1/users/2 https://api.example.com/v1/users/2/profile 那么可能的 prefix 是 `https://api.example.com/v1`。 4. 运行第一遍处理应该在 schema 文件中创建了如下部分: x-path-templates: # 移除 ignore: 前缀以生成带有其 URL 的 endpoint # 靠近顶部的行优先级更高,匹配是贪婪的 - ignore:/addresses - ignore:/basket - ignore:/basket/add - ignore:/basket/checkouts - ignore:/basket/coupons/attach/{id} - ignore:/basket/coupons/attach/104754 您应该使用文本编辑器编辑 schema 文件,并从您希望生成的路径中移除 `ignore:` 前缀。您还可以调整路径中出现的参数。 5. 运行 mitmproxy2swagger 的第二遍处理: $ mitmproxy2swagger -i -o -p [--examples] # ... 或者 ... $ docker run -it -v $PWD:/app mitmproxy2swagger mitmproxy2swagger -i -o -p [--examples] 第二次运行该命令(使用相同的 schema 文件)。它将拾取编辑过的行并生成 endpoint 描述。 请注意,mitmproxy2swagger 不会覆盖现有的 endpoint 描述,如果您想覆盖它们,可以在运行第二遍处理之前将其删除。 传递 `--examples` 将向请求和响应添加示例数据。使用此选项时请务必小心,因为它可能会将敏感数据(tokens、密码、个人信息等)添加到 schema 中。 传递 `--headers` 将向请求和响应添加 headers 数据。使用此选项时请务必小心,因为它可能会将敏感数据(tokens、密码、个人信息等)添加到 schema 中。 ### HAR 1. 从浏览器 DevTools 捕获并导出流量。 在浏览器 DevTools 中,转到 Network 选项卡并点击“Export HAR”按钮。 ![显示 export har 按钮位置的屏幕截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/bdf389c8cd235143.png) 2. 继续按照处理 mitmproxy dump 的相同方式进行操作。`mitmproxy2swagger` 将自动检测 HAR 文件并对其进行处理。 ## 示例输出 请参阅 [示例](./example_outputs/)。您将在那里找到生成的 schema 以及一个包含生成文档的 html 文件(通过 [redoc-cli](https://www.npmjs.com/package/redoc-cli))。 请在此处查看生成的 html 文件:[here](https://raw.githack.com/alufers/mitmproxy2swagger/master/example_outputs/lisek-static.html)。 ## 开发与贡献 本项目使用了: - [poetry](https://python-poetry.org/) 用于依赖管理 - [pre-commit](https://pre-commit.com/) 用于代码格式化和 linting - [pytest](https://docs.pytest.org/en/stable/) 用于单元测试 要安装依赖项: ``` poetry install ``` 运行 linter: ``` pre-commit run --all-files ``` 安装 pre-commit hooks: ``` pre-commit install ``` 运行测试: ``` poetry run pytest ``` 运行测试并查看覆盖率: ``` poetry run pytest --cov=mitmproxy2swagger ``` ## 许可证 MIT
标签:API 文档生成, DevTools, HAR, HTTP 代理, mitmproxy, OpenAPI, Python, REST API, Swagger, 中间人攻击, 云资产清单, 后端开发, 接口分析, 无后门, 流量捕获, 网络安全, 网络拓扑, 网络调试, 自动化, 请求拦截, 逆向工具, 逆向工程, 隐私保护