mitmproxy 中间人代理

 ✒️ @halomaster 📅 02 Mar 2023, 08:07 GMT⋮ 【网络技术】 

## 什么是 [mitmproxy](https://github.com/mitmproxy/mitmproxy) ? [mitmproxy](https://github.com/mitmproxy/mitmproxy) 是一款免费开源的 HTTPS 代理工具,类似于 fiddler ,charles 等抓包工具,但是有以下几个特点 : - mitmproxy 是用 Python 写的,可以进行二次开发,实现高度定制化的需求 - mitmproxy 支持拦截、修改、保存 HTTP/HTTPS 请求和响应,并提供了交互式的命令行界面和网页端界面 - mitmproxy 还提供了 Python API,可以通过关联脚本对请求和响应进行自定义过滤和修改 - mitmproxy 支持 HTTP/1,HTTP/2 和 WebSockets 协议,并具有 SSL/TLS 功能 ## 如何安装和使用 mitmproxy ? mitmproxy 的安装和使用非常简单,只需要以下几个步骤 : - 安装 Python 环境(推荐 Python 3.6+) - 使用 pip 命令安装 mitmproxy:`pip install mitmproxy` - 启动 mitmproxy:`mitmdump` 或 `mitmweb` - 配置代理:在需要抓包的设备上设置代理为本机 IP 和端口(默认为 8080) - 安装证书:在浏览器或设备上访问 `http://mitm.it` 并下载对应的证书并安装 - 开始抓包:在浏览器或设备上访问任意网站或 APP,就可以在命令行或网页端看到请求和响应的详细信息 ## 如何利用 mitmproxy 的强大功能? mitmproxy 的最大优势是它可以通过 Python 脚本对请求和响应进行灵活的处理,例如: - 修改请求或响应的头部、内容、状态码等 - 过滤或标记特定的请求或响应 - 模拟网络延迟或错误 - 保存或重放请求或响应 - 实现自动化测试或爬虫等 要使用脚本功能,只需要编写一个 Python 文件,并在启动 mitmproxy 时指定该文件即可。例如: ```python # myscript.py from mitmproxy import http def request(flow: http.HTTPFlow) -> None: # 修改所有 GET 请求为 POST 请求,并添加一个参数 foo=bar if flow.request.method == "GET": flow.request.method = "POST" flow.request.content = b"foo=bar" def response(flow: http.HTTPFlow) -> None: # 修改所有状态码为 200 的响应为 404,并添加一个头部 X-Mitm: True if flow.response.status_code == 200: flow.response.status_code = 404 flow.response.headers["X-Mitm"] = "True" ``` 然后启动 mitmdump 或者 mitweb 并指定该脚本: ```bash mitmdump -s myscript.py # 或者 mitweb -s myscript.py ``` 这样就可以实现对请求和响应的自定义修改了。 ## 总结 mitmporxy 是一款非常强大且易用的 HTTPS 代理工具,它不仅可以实现基本的抓包功能,还可以通过 Python 脚本进行高度定制化的处理。如果你想要更深入地了解和使用它,请参考官方文档。


[1] @halomaster • 09 Mar 2023, 11:48 GMT 
文档:https://docs.mitmproxy.org/stable/


1 of 1 pages  1 replies