使用mitmproxy给手机app抓包
工作中经常需要抓取手机 app 的网络报文,比方说某个图片无法访问的问题,只在手机 app 端出现,web 端正常。这个时候你需要抓包快速定位问题原因,通常的操作都是在电脑上面安装个抓包软件用作代理,手机设置连接这个代理,这样手机的网络报文会经过抓包软件,自然就可抓取解析报文细节了。掌握了网络报文细节,就好像 chrome 的调试工具一样,一切无所遁形。
常见的抓包软件为 Charles、Fiddler、Wireshark 等,Charles 和 Fiddler 都是收费软件,Wireshark 适合较底层的网络报文分析,本文推荐 mitmproxy 是个开软件(MIT License), 不用花钱也够用,看 github 的贡献记录这软件是 2016 年才活跃发力。
有必要介绍下名字,mitm 表示 Man-in-the-middle attack(中间人攻击),proxy 即代理,组合起来 mitmproxy,这样更加便于记住。
1. 安装
- 最简单的安装方式,因为是 python 编写的,可直接 pip 安装(推荐 pip 安装,省事):
1pip install mitmproxy
-
其它安装方式:
参考官方文档 https://docs.mitmproxy.org/stable/overview-installation/
Linux 用户可以直接去官网下载压缩包,解压即可。
2. 简介
安装完成后,包含三个工具
-
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 类似的工具
3. 搭建抓包环境
环境图示:
电脑上启动 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,点击后抓包软件就会刷新报文列。
三种方式示例如下:
- mitmproxy
启动,直接输入命令:
1mitmproxy
命令行界面如图所示,抓取的 B 站。
上方为报文信息,下方为命令指引,报文列移动貌似支持 vim 快捷键(gg G 等),按 Enter 进入详情页,q 退出,也支持鼠标点击,稍微摸索下就会用了,不多解释。
- mitmweb
启动,直接输入命令:
1mitmweb
会直接开启个浏览器 tab 页,抓取的手机微信。
点击报文列,右侧界面会显示请求头、反回头等信息。
- mitmdump
这个感觉有 tcpdump,暂时用不到,需要使用的可以去翻看下官方文档。
版权申明:
- 未标注来源的内容全部为原创,未经授权请勿转载(因转载后排版往往错乱、内容不可控、无法持续更新等);
- 非营利为目的,演绎本博客任何内容,请以'原文出处'或者'参考链接'等方式给出本站相关网页地址(方便读者)。
相关文章:
- Linux安装最新版本Python
- Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法
- Minetest试玩
- Gnome任务栏高度更改
- alacritty无法输入中文以及标题栏问题
- Readline常用快捷键
- Ubuntu连接AirPods耳机
- Rime输入法引擎和四叶草输入方案
- k8s的startupProbe探针中initialDelaySeconds是否有效
- zfs快照功能测试