如何让Charles抓包功能更强大?

一、抓包工具介绍

  1. Charles是一款十分流行的api抓包工具,提供了多种抓包所需的功能。缺点是不支持二次开发。
  2. 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 前置条件
  1. mitmproxy安装
    pip3 install mitmproxy
  2. 安装Charles证书
    连接Charles代理,浏览器访问chls.pro/ssl安装证书。
  3. 安装mitmproxy证书
    连接mitmproxy代理,浏览器访问mitm.it安装证书。
3.2 使用方法
  1. 启动mitmproxy,端口8080,并加载自定义的脚本。mitmdump -p 8080 -s myScript.py
  2. 启动Charles,打开 Proxy > External Proxy Setting设置项。
  3. 勾选Use external proxy servers项,使用代理。
  4. 勾选Web Proxy (HTTP)项,右侧server项填入mitmproxy的地址和端口。如:localhost:8080。该选项表示将http请求代理到mitmproxy。
  5. 勾选Secure Web Proxy (HTTP)项,配置同上。该选项表示将https请求代理到mitmproxy。
  6. 手机连接Charles代理,按照正常抓包使用即可。
  7. 若不想使用mitmproxy,关闭Charles中的External Proxy Setting + 停用mitmproxy即可。
3.3 已知存在的问题
  1. 在Charles中使用repeat功能,重复发送https请求时,mitmproxy会将请求拦截,返回400状态码。原因是mitmproxy的安全校验机制导致。详细可参考:mitmproxy讨论区

你可能感兴趣的:(如何让Charles抓包功能更强大?)