抓包工具之MitmProxy
2018-08-17 00:12:34

前言

​ 作为一名app后端程序员,经常需要对app抓包。说起抓包工具,一般用的是Charles或Fiddler,这两个非常著名的工具。但有些情况下这两个工具并不能满足需求。

​ 场景一:产品或者运营反馈问题时一般都是截图给开发,然后开发去复现、抓包、解决问题。很多时候开发希望产品或者运营能够直接给出抓包链接便于分析,但是很显然叫产品或运营去配置这些工具显然很麻烦,实际情况是写了文档照着配依然可能会出错。

​ 场景二:如果要对抓包的返回结果做进一步的批量处理,此时用Charles或者Fiddler就显得不太方便了。例如之前很火的冲顶大会,在抓包到请求后能看到答题的题目,此时需要编写程序去百度搜索答案,给出结果。

​ MitmProxy是一个能够在服务器上24小时运行的Linux端抓包工具,支持Python对抓包结果进行处理,可以对特定的网址过滤,支持HTTPS抓包,MitmProxy的抓包结果还能转换为Charles能打开的文件,便于进一步分析。

安装

MitmProxy安装需要python环境,至少是3.5版本的python.一般CentOS自带的python版本都是2.7,快速安装python3环境只需要如下几行命令即可:

1
2
3
4
5
6
7
CentOS6用户:
sudo yum install -y https://centos6.iuscommunity.org/ius-release.rpm
sudo yum install -y python35u python35u-pip

CentOS7用户:
sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm
sudo yum install -y python35u python35u-pip

之后就是安装MitmProxy,MitmProxy安装时最好指定版本,不同的版本虽然基本功能是一样的,但是一些脚本的使用还是有不同,推荐安装稳定版本。

1
pip3.5 install mitmproxy==3.0.3

使用

  • 启动mitmproxy
    mitmproxy 默认代理端口是8080,可以使用 -p 命令指定一个端口并启动

    1
    $ mitmproxy -p 8090
  • 配置浏览器和手机

  1. 和手机连接到同一个wifi环境下
  2. 修改浏览器代理服务器地址为运行mitmproxy的那台机器(本机)ip地址,端口设定为你启动 mitmproxy时设定的端口,如果没有指定就使用8080。
  3. 手机做同样操作,修改wifi链接代理为 【手动】,然后指定ip地址和端口

​ 以手机配置为例:

  • 安装CA证书(https抓包用)
    在手机或pc机上打开浏览器访问 mitm.it 这个地址,选择你当前平台的图标,点击安装证书。

    操作

按键 说明
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://mitmproxy.org

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

镜像地址

https://www.cnblogs.com/coderzhw/p/11094322.html
pay