残稿
起因
我的手机用的是 PixelExperience ROM,某一天突然收到了更新提示,要是国内系统倒也没那么多事,但是噩梦才刚刚开始,直接在系统设置里面下载显示网络错误(毕竟网站在国外),挂了代理(还是 TProxy 透明代理网关)下载只有 100KB/s,打开了官方网站使用 ADM 下载总是给我重定向到下载页面陷入无限循环,用 Google Chrome 下载也只有 100KB/s,于是突发奇想想用抓包工具揪出最终地址,虽然手机上有抓包软件但是觉得没有电脑操作舒服,而且日后也肯定会用到电脑抓包软件,然后找了找一些老牌工具,但是 Charles 收费,界面难看,字体没有抗锯齿,Fiddler 老版本只有 Windows 版本,新版本收费,最后找到了 mitmproxy - 一个免费开源的交互式 HTTPS 代理。简称:中间人。
安装
sudo pacman -S mitmproxy
使用
三种命令对应三种使用方式:
- mitmproxy - CLI 界面
- mitmweb - Web 界面
- mitmdump - CLI 纯输出,不带交互
工作模式
mitmproxy 具有五种工作模式(其实算是是四种,HTTP 代理和 Socks 代理能并为一种:常规代理)
官方推荐的选择流程:
抓取来自客户端的流量
还是去往服务器的流量 --- 去往服务器 ---> 反向代理
|
来自客户端
|
是否能够对客户端配置 --- 不能 ---> 透明代理
|
能
|
是否需要前置代理 --- 需要 ---> 上游代理
|
不需要
|
常规代理
常规代理
HTTP 代理: mitmproxy
Socks 代理: mitmdump --mode socks5
透明代理
透明代理可以在不配置客户端代理的情况下实现抓包,但是需要客户端连接到 mitmproxy 网关
mitmdump --mode transparent
如果你的网络中有 NAT 网关(常见于家庭网络):
如果你对网关具有控制权:
但请注意,请不要将 mitmproxy 放在 NAT 前,否则会使 mitmproxy 无法确定真正的目的地址:
反向代理
mitmdump --mode reverse:https://example.com
通常用于调试服务器 API
上游代理
mitmdump --mode upstream:http://example.com:8081
抓取 HTTPS
需要在客户端安装证书
在被代理后打开 http://mitm.it 下载对应证书后安装