工作中经常需要抓取手机 app 的网络报文,比方说某个图片无法访问的问题,只在手机 app 端出现,web 端正常。这个时候你需要抓包快速定位问题原因,通常的操作都是在电脑上面安装个抓包软件用作代理,手机设置连接这个代理,这样手机的网络报文会经过抓包软件,自然就可抓取解析报文细节了。掌握了网络报文细节,就好像 chrome 的调试工具一样,一切无所遁形。
常见的抓包软件为 Charles、Fiddler、Wireshark 等,Charles 和 Fiddler 都是收费软件,Wireshark 适合较底层的网络报文分析,本文推荐 mitmproxy 是个开软件(MIT License), 不用花钱也够用,看 github 的贡献记录这软件是 2016 年才活跃发力。
有必要介绍下名字,mitm 表示 Man-in-the-middle attack(中间人攻击),proxy 即代理,组合起来 mitmproxy,这样更加便于记住。
1pip install mitmproxy
其它安装方式:
参考官方文档 https://docs.mitmproxy.org/stable/overview-installation/
Linux 用户可以直接去官网下载压缩包,解压即可。
安装完成后,包含三个工具
mitmproxy gives you an interactive command-line interface
命令行界面(CUI?),可以在终端上面完成各种操作。
mitmweb gives you a browser-based GUI
Web 图形界面,类似 chrome 的调试界面,不喜欢命令行的个人建议使用这个
mitmdump gives you non-interactive terminal output
命令行工具,可以简单理解为 tcpdump 类似的工具
环境图示:

电脑上启动 mitmproxy 或者 mitmweb,直接输入命令启动,默认 8080 全网卡监听:
1➜ ~ ss -lnt |grep 8080
2LISTEN 0 100 0.0.0.0:8080 0.0.0.0:*
3LISTEN 0 100 [::]:8080 [::]:*
手机端连接 WiFi,找到代理设置的地方,填上电脑 ip 和 port,意思就是手机访问网络的时候,流量会走代理(即电脑上的 ip:port 服务),这样代理软件才能解析处理。
要点
现在手机 app 大部分都使用 https 了,这涉及到信任证书的问题。 以 iOS 为例,WiFi 设置好代理后,浏览器访问 mitm.it,这个网址 http://mitm.it/,根据页面上面的指引下载对应平台的证书。

安装好证书后(不会安装网上搜下),一定要注意,新版的 iOS 系统还要选择完全信任(这一步很关键,Settings > General > About > Certificate Trust Settings 这样设置)。英文说明如下:
On recent iOS versions you also need to enable full trust for the mitmproxy root certificate:
Go to Settings > General > About > Certificate Trust Settings. Under “Enable full trust for root certificates”, turn on trust for the mitmproxy certificate.
不这样的设置的话,部分 https 流量可能无法分析,握手阶段证书校验不会成功,连接断开。
设置好环境后,即可开始抓包了,手机上开启目标 App,点击后抓包软件就会刷新报文列。
三种方式示例如下:
启动,直接输入命令:
1mitmproxy
命令行界面如图所示,抓取的 B 站。

上方为报文信息,下方为命令指引,报文列移动貌似支持 vim 快捷键(gg G 等),按 Enter 进入详情页,q 退出,也支持鼠标点击,稍微摸索下就会用了,不多解释。
启动,直接输入命令:
1mitmweb
会直接开启个浏览器 tab 页,抓取的手机微信。

点击报文列,右侧界面会显示请求头、反回头等信息。

这个感觉有 tcpdump,暂时用不到,需要使用的可以去翻看下官方文档。
工作中经常需要抓取手机 app 的网络报文,比方说某个图片无法访问的问题,只在手机 app 端出现,web 端正常。这个时候你需要抓包快速定位问题原因,通常的操作都是在电脑上面安装个抓包软件用作代理,手机设置连接这个代理,这样手机的网络报文会经过抓包软件,自然就可抓取解析报文细节了。掌握了网络报文细节,就好像 chrome 的调试工具一样,一切无所遁形。
常见的抓包软件为 Charles、Fiddler、Wireshark 等,Charles 和 Fiddler 都是收费软件,Wireshark 适合较底层的网络报文分析,本文推荐 mitmproxy 是个开软件(MIT License), 不用花钱也够用,看 github 的贡献记录这软件是 2016 年才活跃发力。
有必要介绍下名字,mitm 表示 Man-in-the-middle attack(中间人攻击),proxy 即代理,组合起来 mitmproxy,这样更加便于记住。
1pip install mitmproxy
其它安装方式:
参考官方文档 https://docs.mitmproxy.org/stable/overview-installation/
Linux 用户可以直接去官网下载压缩包,解压即可。
安装完成后,包含三个工具
mitmproxy gives you an interactive command-line interface
命令行界面(CUI?),可以在终端上面完成各种操作。
mitmweb gives you a browser-based GUI
Web 图形界面,类似 chrome 的调试界面,不喜欢命令行的个人建议使用这个
mitmdump gives you non-interactive terminal output
命令行工具,可以简单理解为 tcpdump 类似的工具
环境图示:

电脑上启动 mitmproxy 或者 mitmweb,直接输入命令启动,默认 8080 全网卡监听:
1➜ ~ ss -lnt |grep 8080
2LISTEN 0 100 0.0.0.0:8080 0.0.0.0:*
3LISTEN 0 100 [::]:8080 [::]:*
手机端连接 WiFi,找到代理设置的地方,填上电脑 ip 和 port,意思就是手机访问网络的时候,流量会走代理(即电脑上的 ip:port 服务),这样代理软件才能解析处理。
要点
现在手机 app 大部分都使用 https 了,这涉及到信任证书的问题。 以 iOS 为例,WiFi 设置好代理后,浏览器访问 mitm.it,这个网址 http://mitm.it/,根据页面上面的指引下载对应平台的证书。

安装好证书后(不会安装网上搜下),一定要注意,新版的 iOS 系统还要选择完全信任(这一步很关键,Settings > General > About > Certificate Trust Settings 这样设置)。英文说明如下:
On recent iOS versions you also need to enable full trust for the mitmproxy root certificate:
Go to Settings > General > About > Certificate Trust Settings. Under “Enable full trust for root certificates”, turn on trust for the mitmproxy certificate.
不这样的设置的话,部分 https 流量可能无法分析,握手阶段证书校验不会成功,连接断开。
设置好环境后,即可开始抓包了,手机上开启目标 App,点击后抓包软件就会刷新报文列。
三种方式示例如下:
启动,直接输入命令:
1mitmproxy
命令行界面如图所示,抓取的 B 站。

上方为报文信息,下方为命令指引,报文列移动貌似支持 vim 快捷键(gg G 等),按 Enter 进入详情页,q 退出,也支持鼠标点击,稍微摸索下就会用了,不多解释。
启动,直接输入命令:
1mitmweb
会直接开启个浏览器 tab 页,抓取的手机微信。

点击报文列,右侧界面会显示请求头、反回头等信息。

这个感觉有 tcpdump,暂时用不到,需要使用的可以去翻看下官方文档。