手机app抓包前须绕过ssl pinning,否则mitmdump会报502或connectionreseterror;需正确配置mitmdump监听局域网ip、安装并信任证书、满足安卓真机调试三条件,并可用frida或python脚本修改流量。

手机App抓包前必须确认是否绕过证书绑定(SSL Pinning)
绝大多数现代App会启用SSL Pinning,直接用mitmdump抓包会看到大量502 Bad Gateway或Connection failed: ConnectionResetError错误——不是mitmdump配置问题,而是App拒绝信任mitm代理的证书。
验证方式很简单:在手机安装mitm证书后,打开浏览器访问任意HTTPS网站(如https://httpbin.org),能正常显示即证书生效;但App仍连不上,基本就是SSL Pinning在起作用。
- Android 7+默认不信任用户证书,需将mitm证书放入
/system/etc/security/cacerts/(需root)或修改App的network_security_config.xml - iOS需在设置→已下载描述文件中安装并手动开启信任,且部分App(如微信、银行类)仍会主动校验证书链,mitm无效
- 临时绕过方案:用Frida hook
OkHttpClient或TrustManager,执行frida -U -f com.example.app -l ssl-pinning-bypass.js
启动mitmdump时必须指定监听地址和端口,并导出证书供手机安装
默认mitmdump只监听127.0.0.1:8080,手机无法连接。必须显式绑定到局域网IP,并开放对应端口防火墙。
假设开发机IP是192.168.1.100,正确启动命令是:
mitmdump --mode regular --listen-host 192.168.1.100 --listen-port 8080 --set confdir=./mitmconf
然后在手机浏览器访问http://192.168.1.100:8080/pac,点击下载并安装证书(iOS需额外在「设置→通用→关于本机→证书信任设置」中启用)。
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 不要用
--set block_global=false这类参数试图“放行”,它不影响SSL Pinning,只控制是否拦截非代理流量 - macOS上若提示“已阻止连接”,需在「系统设置→网络→高级→代理」中关闭「自动发现代理设置」
- Windows防火墙需放行
mitmdump.exe或端口8080的入站连接
用Python脚本修改请求头、参数或响应体,核心是重写request和response对象
mitmdump支持加载自定义Python脚本(-s script.py),所有逻辑写在request()和response()两个函数里。注意:修改必须原地操作,不能赋值新对象。
例如,给所有请求加一个X-Debug: true头:
def request(flow):
flow.request.headers["X-Debug"] = "true"
又比如把某接口返回的JSON中的"status": "fail"改成"status": "success":
def response(flow):
if flow.request.pretty_url == "https://api.example.com/v1/login":
try:
data = flow.response.get_text()
data = data.replace('"status":"fail"', '"status":"success"')
flow.response.text = data
except:
pass
-
flow.request.url是原始URL(含query),flow.request.pretty_url是格式化后的(更易读) - 修改POST body请用
flow.request.get_text()读取,再用flow.request.text = new_body写回;二进制内容要用get_content()/content - 响应体为空(
flow.response.content为None)时别直接调get_text(),先判空
安卓真机调试常见连不上mitmdump的三个硬性条件
即使证书装了、mitmdump跑了、WiFi代理设对了,仍连不上,大概率卡在这三点:
- 手机和电脑不在同一局域网:比如手机连的是手机热点,电脑连的是公司WiFi,IP段不同,
ping 192.168.1.100不通就肯定不行 - 安卓App声明了
android:usesCleartextTraffic="false"且未配置network_security_config.xml允许HTTP代理,此时HTTP请求都发不出去(会静默失败) - 某些国产ROM(如MIUI、EMUI)会强制关闭「开发者选项→网络→代理」开关,需在WLAN设置里长按当前WiFi→修改网络→高级选项→代理→手动,填入IP和端口
mitmdump本身不处理DNS劫持或域名直连逻辑,如果App用OkHttpClient.Builder().dns(…)硬编码DNS服务器,或者走UDP DNS(如DoH),那HTTP/HTTPS流量根本不会经过代理——这种就得从App层改起,不是mitmdump能解决的。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










