一、抓包工具介绍
- Charles是一款十分流行的api抓包工具,提供了多种抓包所需的功能。缺点是不支持二次开发。
- mitmproxy是基于python开发的开源的抓包工具,同样功能强大。可惜mitmproxy只能基于控制台或web操作,没有单独的GUI,操作远不如Charles方便。但是mitmproxy有一个极大的优势和亮点---它提供了基于python的API,可以自定义脚本控制请求与响应。
二、关于Charles的思考
在日常抓包测试工作中,Charles提供的rewrite、breakingpoint、maplocal等功能真的很好用。
但是有时候需要对抓包过程进行实时修改、数据提取、批量处理等,Charles就显得力不从心。这时候一般是利用python脚本直接发送请求去处理,但是数据准备会比较繁琐。或者直接用强大的mitmproxy工具,可惜抓包过程不够直观。
有没有办法能够让Charles抓包也支持自定义脚本呢?
答案是可以的。
三、将Charles与mitmproxy组合?
原理:可以将mitmproxy作为Charles的上级代理。客户端发起的请求先经过Charles,再经过mitmdump,最后到达服务器。利用mitmdump提供的python api弥补Charles不能二次开发的缺点。
四、配置方法
3.1 前置条件
- mitmproxy安装
pip3 install mitmproxy
- 安装Charles证书
连接Charles代理,浏览器访问chls.pro/ssl
安装证书。 - 安装mitmproxy证书
连接mitmproxy代理,浏览器访问mitm.it
安装证书。
3.2 使用方法
- 启动mitmproxy,端口8080,并加载自定义的脚本。
mitmdump -p 8080 -s myScript.py
- 启动Charles,打开
Proxy > External Proxy Setting
设置项。 - 勾选
Use external proxy servers
项,使用代理。 - 勾选
Web Proxy (HTTP)
项,右侧server项填入mitmproxy的地址和端口。如:localhost:8080
。该选项表示将http请求代理到mitmproxy。 - 勾选
Secure Web Proxy (HTTP)
项,配置同上。该选项表示将https请求代理到mitmproxy。 - 手机连接Charles代理,按照正常抓包使用即可。
- 若不想使用mitmproxy,关闭Charles中的
External Proxy Setting
+ 停用mitmproxy即可。
3.3 已知存在的问题
- 在Charles中使用repeat功能,重复发送https请求时,mitmproxy会将请求拦截,返回400状态码。原因是mitmproxy的安全校验机制导致。详细可参考:mitmproxy讨论区
网友评论