mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似Fiddler、Charles的功能,只不过它是一个控制台的形式操作。
mitmproxy还有两个关联组件。一个是mitmdump,它是mitmproxy的命令行接口,利用它我们可以对接Python脚本,用Python实现监听后的处理。另一个是mitmweb,它是一个Web程序,通过它我们可以清楚观察mitmproxy捕获的请求。
下面我们来了解它们的用法。
一、准备工作
请确保已经正确安装好了mitmproxy,并且手机和PC处于同一个局域网下,同时配置好了mitmproxy的CA证书。
二、mitmproxy的功能
mitmproxy有如下几项功能。
保存HTTP会话并进行分析。
模拟客户端发起请求,模拟服务端返回响应。
利用反向代理将流量转发给指定的服务器。
支持Mac和Linux上的透明代理。
利用Python对HTTP请求和响应进行实时处理。
三、抓包原理
和Charles一样,mitmproxy运行于自己的PC上,mitmproxy会在PC的8080端口运行,然后开启一个代理服务,这个服务实际上是一个HTTP/HTTPS的代理。
手机和PC在同一个局域网内,设置代理为mitmproxy的代理地址,这样手机在访问互联网的时候流量数据包就会流经mitmproxy,mitmproxy再去转发这些数据包到真实的服务器,服务器返回数据包时再由mitmproxy转发回手机,这样mitmproxy就相当于起了中间人的作用,抓取到所有Request和Response,另外这个过程还可以对接mitmdump,抓取到的Request和Response的具体内容都可以直接用Python来处理,比如得到Response之后我们可以直接进行解析,然后存入数据库,这样就完成了数据的解析和存储过程。
四、设置代理
首先,我们需要运行mitmproxy,命令如下所示:
启动mitmproxy的命令如下:
mitmproxy
之后会在8080端口上运行一个代理服务,如下图所示。
右下角会出现当前正在监听的端口。
或者启动mitmdump,它也会监听8080端口,命令如下所示:
mitmdump
运行结果如下图所示。
将手机和PC连接在同一局域网下,设置代理为当前代理。首先看看PC的当前局域网IP。
Windows上的命令如下所示:
ipconfig
Linux和Mac上的命令如下所示:
ifconfig
输出结果如下图所示。
一般类似10.*.*.*或172.16.*.*或192.168.1.*这样的IP就是当前PC的局域网IP,例如此图中PC的IP为192.168.1.28,手机代理设置类似如下图所示。