Mitmproxy 简介
- mitmproxy:交互式的命令行工具
- 注意:不支持 windows
- mitmweb:基于浏览器的界面交互工具
- mitmdump:简单的终端输出,可以编写强大的插件和脚本
官方网站:https://mitmproxy.org/
https://docs.mitmproxy.org/stable/
Mitmproxy 安装
python 3.8版本
推荐使用 python 进行安装
// 方式一
pip install mitmproxy==5.2.0
// 方式二
pip install pipx
pipx install mitmproxy==5.2.0
// 验证是否安装成功
mitmdump --version
//终端启动mitmdump 服务方法
直接输入;mitmdump
PC 端证书配置
- 配置电脑代理
- 启动 mitmproxy
- 在浏览器输入地址 mitm.it
- 选择对应系统下载证书并安装
移动端证书配置
- 在手机配置代理,ip 配置为电脑的 ip 地址,端口配置为 mitmproxy 监听端口
- 启动 mitmproxy
- 在手机浏览器输入地址 mitm.it
- 选择 Android,下载并安装,即可成功抓取手机端的 https 的数据包。
核心工具演示
- mitmproxy
- mitmweb
- mitmdump
mitmdump 参数介绍
-p
参数,指定监听端口,默认监听 8080-s
参数,执行 python 脚本
核心组件
- Addons(插件):https://docs.mitmproxy.org/archive/v5/addons-overview/
- Events(事件):https://docs.mitmproxy.org/archive/v5/addons-events/
脚本编写
# 创建 python 文件 request_demo.py
def request(flow):
flow.request.headers["myheader"] = "value"
// mitmdump 执行命令
mitmdump -p 8999 -s xx/request_demo.py
实现 MapLocal
- 创建一个本地文件,设定响应数据
- 编写脚本,在请求事件中,即给响应对象复制
- 执行命令
- 访问浏览器验证结果
from mitmproxy import http
# request 名称不能被改变
# mitmdump 加载这个脚本的时候
# 当有请求来的时候,就会回调这个request方法
# flow 为抓取到的请求信息
def request(flow: http.HTTPFlow) -> None:
# 发起请求,判断url是不是等于一个路径
if flow.request.pretty_url == "http://example.com/path":
# 一旦请求的url等于我们的预期,我们就会创造一个response
# 这个response比较简单,请求状态码为200,响应数据位hello world
# 响应数据格式为html
flow.response = http.HTTPResponse.make(
200, # (optional) status code
b"Hello World", # (optional) content
{"Content-Type": "text/html"} # (optional) headers
)
实现 Rewrite
- 修改股票名称
- 修改股票价格
from mitmproxy import http
# response 名称不能被改变
# mitmdump 加载这个脚本的时候
# 当拦截到响应之后,就会回调这个 response 方法
# flow 为抓取到的接口信息
def response(flow: http.HTTPFlow):
# 打印响应内容
print(flow.response.content)