常见的抓包工具有fiddler 和 charles, 这些工具都是需要安装本地客户端,python 版的抓包工具可以用 mitmproxy。 mitmproxy 相比Charles、fiddler的优点在于,它可以命令行方式或脚本的方式进行mock
mitmproxy(man-in-the-middle attack proxy),中间人攻击工具,可以用来拦截、修改、保存 HTTP/HTTPS 请求 官方文档地址https://docs.mitmproxy.org/stable/ mitmproxy 工具有以下三个组件构成
Windows安装
pip install mitmproxy
Mac安装
brew install mitmproxy
或者跟windows 一样用pip安装
pip install mitmproxy
python 版本我用的 3.9.13 , 版本太低可能会出现不兼容问题。
安装完成后检查版本
mitmproxy --version
python 3.9 版本会安装 Mitmproxy: 9.x 版本
(venv) D:\demo\mitmproxy_xuexi>mitmproxy --version
Mitmproxy: 9.0.1
Python: 3.9.13
OpenSSL: OpenSSL 3.0.7 1 Nov 2022
Platform: Windows-10-10.0.17134-SP0
安装完成后会得到3个命令行工具:mitmproxy/ mitmweb/ mitmdump
除了用命令行安装,还可以用安装包安装,或者可以下载release文件 下载链接地址https://mitmproxy.org/downloads/#9.0.1/
先看第一个基于 Web 的界面命令行工具 mitmweb 的使用, 命令行启动服务
mitmweb
执行命令行后会看到启动成功
(venv) D:\demo\mitmproxy_xuexi>mitmweb
[11:59:49.361] HTTP(S) proxy listening at *:8080.
[11:59:49.363] Web server listening at http://127.0.0.1:8081/
mitmproxy 默认监听的端口是 8080 端口(fiddler 默认监听的是8888),可以加 -p
参数指定监听端口
(venv) D:\demo\mitmproxy_xuexi>mitmweb -p 8099
[12:02:44.095] HTTP(S) proxy listening at *:8099.
[12:02:44.097] Web server listening at http://127.0.0.1:8081/
浏览器默认端口的地址是http://127.0.0.1:8081/
,显示如下
mitmproxy 默认监听的端口是 8080 端口, 所以需要在浏览器上设置代理
开启代理,设置监听8080端口,点保存按钮
Mac 电脑端的配置
接下来浏览器访问一个http的请求,就可以捕获到了
打开百度https://www.baidu.com
页面是 https
请求,默认不会抓取
当打开一个https 请求时,页面上出现”您的连接不是私密连接”
mitmproxy 默认只抓取http的请求,https 的请求需要安装证书。
或者直接访问地址http://mitm.it/
, 出现如下页面说明访问成功
如果出现的是下面这个页面, 说明服务没启动,或者没设置代理。
根据自己的电脑系统下载对应的证书,我的是windows系统,下载的文件是mitmproxy-ca-cert.p12
接下来,点对应系统证书文件右侧按钮,显示安装说明
windows 系统安装说明:
以上证书安装完成后,重新访问百度页面就可以抓包成功了
那就意味着浏览器上的所有https 请求都可以抓到了。