前言
作为一名app后端程序员,经常需要对app抓包。说起抓包工具,一般用的是Charles或Fiddler,这两个非常著名的工具。但有些情况下这两个工具并不能满足需求。
场景一:产品或者运营反馈问题时一般都是截图给开发,然后开发去复现、抓包、解决问题。很多时候开发希望产品或者运营能够直接给出抓包链接便于分析,但是很显然叫产品或运营去配置这些工具显然很麻烦,实际情况是写了文档照着配依然可能会出错。
场景二:如果要对抓包的返回结果做进一步的批量处理,此时用Charles或者Fiddler就显得不太方便了。例如之前很火的冲顶大会,在抓包到请求后能看到答题的题目,此时需要编写程序去百度搜索答案,给出结果。
MitmProxy是一个能够在服务器上24小时运行的Linux端抓包工具,支持Python对抓包结果进行处理,可以对特定的网址过滤,支持HTTPS抓包,MitmProxy的抓包结果还能转换为Charles能打开的文件,便于进一步分析。
安装
MitmProxy安装需要python环境,至少是3.5版本的python.一般CentOS自带的python版本都是2.7,快速安装python3环境只需要如下几行命令即可:
1 | CentOS6用户: |
之后就是安装MitmProxy,MitmProxy安装时最好指定版本,不同的版本虽然基本功能是一样的,但是一些脚本的使用还是有不同,推荐安装稳定版本。
1 | pip3.5 install mitmproxy==3.0.3 |
使用
启动mitmproxy
mitmproxy 默认代理端口是8080,可以使用 -p 命令指定一个端口并启动1
mitmproxy -p 8090
配置浏览器和手机
- 和手机连接到同一个wifi环境下
- 修改浏览器代理服务器地址为运行mitmproxy的那台机器(本机)ip地址,端口设定为你启动 mitmproxy时设定的端口,如果没有指定就使用8080。
- 手机做同样操作,修改wifi链接代理为 【手动】,然后指定ip地址和端口
以手机配置为例:
按键 | 说明 |
---|---|
q | 退出(相当于返回键,可一级一级返回) |
d | 删除当前(黄色箭头)指向的链接 |
D | 恢复刚才删除的请求 |
G | 跳到最新一个请求 |
g | 跳到第一个请求 |
C | 清空控制台(C是大写) |
i | 可输入需要拦截的文件或者域名(逗号需要用\来做转译,栗子:feezu.cn) |
a | 放行请求 |
A | 放行所有请求 |
? | 查看界面帮助信息 |
^ v | 上下箭头移动光标 |
enter | 查看光标所在列的内容 |
tab | 分别查看 Request 和 Response 的详细信息 |
/ | 搜索body里的内容 |
esc | 退出编辑 |
e | 进入编辑模式 |
抓包截图:
其他
Mitmproxy支持编写Python脚本对结果进行处理,具体的脚本可以参考github上的官方脚本。
https://github.com/mitmproxy/mitmproxy/tree/master/examples
以har_dump.py这个脚本为例,他的作用是将mitmproxy的抓包结果导出到har文件,以便于Charles能分析,运行以下命令即可一边抓包,一边导出文件:
1 | mitmdump -s examples/complex/har_dump.py -w dump.mitm --set hardump=dump.har |
更多的用法请参考官方脚本,值得一提的是官方脚本与MitmProxy版本强相关,如果不成功,不妨换个版本试试。
参考链接
https://docs.mitmproxy.org/archive/v3
https://github.com/mitmproxy/mitmproxy/tree/master/examples
https://www.jianshu.com/p/0cc558a8d6a2
https://stackoverflow.com/questions/8087184/installing-python-3-on-rhel