mitmproxy抓包工具的使用
mitmproxy 是一个支持 HTTP/HTTPS 协议的抓包程序,和 Fiddler、Charles 有类似的功能,只不过它以控制台的形式操作。
mitmproxy 还有两个关联组件。一个是 mitmdump,这是 mitmproxy 的命令行接口,利用它我们可以对接 Python 脚本,用 Python 实现监听后的处理。另一个是 mitmweb,这是一个 Web 程序,通过它我们可以清楚地观察到 mitmproxy 捕获的请求。
本节来了解一下 mitmproxy 的用法。
mitmproxy 的功能
mitmproxy 有如下几项功能:
-
拦截 HTTP/HTTPS 的请求和响应;
-
保存并分析 HTTP 会话;
-
模拟客户端发起请求,模拟服务端返回响应;
-
利用反向代理将流量转发给指定服务器;
-
支持 Mac 系统和 Linux 系统上的透明代理;
-
利用 Python 实时处理 HTTP 请求和响应。
整体来看,mitmproxy 相当于一个命令行版本的 Charles,同样可以捕获与修改请求内容和响应内容。其实,相比 Charles,mitmproxy 最有优势的是它的关联组件 mitmdump,mitmdump 可以使用 Python 脚本实时处理请求和响应,功能非常强大。
本节我们先了解 mitmproxy 的基本功能,12.3 节再来介绍 mitmdump 对接 Python 的实现。
准备工作
和 Charles 一样,mitmproxy 运行之后会默认在当前电脑的 8080 端口开启一个代理服务,这个服务实际上是一个 HTTP/HTTPS 的代理。
请确保已经正确安装好了 mitmproxy,并且让手机和 mitmproxy 所在的电脑处于同一个局域网下。
然后配置好 mitmproxyCA,具体的安装和配置方法见 https://setup.scrape.center/mitmproxy 。
抓包原理
让手机和电脑处在同一个局域网下,将手机代理设置为 mitmproxy 的代理服务的地址。这样手机在访问互联网的时候,数据包就会先流经 mitmproxy,再由 mitmproxy 把这些数据包转发给真正的服务器; 同样,服务器返回的数据包也会先到达 mitmproxy,再由 mitmproxy 转发给手机。整个过程中的 mitmproxy 相当于中间人,能够抓取所有请求和响应。
这个过程还可以对接 mitmdump,直接用 Python 脚本处理抓取的请求和响应的具体内容。例如得到响应之后,直接解析其内容,然后存入数据库。
总结
本节介绍了 mitmproxy 的简单用法,其基本功能和 Charles 是类似的,只是不像 Charles 那样有方便操作的 UI 界面,不过快捷键使用熟练后,也是非常方便的。
利用 mitmproxy,我们可以观察手机上的所有请求,以及对请求进行修改并重新发送。Fiddler、Charles 也有这个功能,而且它们的 UI 界面操作起来更加方便。那么 mitmproxy 的优势何在? 其实,mitmproxy 的强大之处体现在它的关联组件 mitmdump 上,有了 mitmdump,我们便可以直接对接 Python 脚本对请求和响应做处理。12.3 节我们就来学习 mitmdump 的用法。