MITMProxy 7.0.4与Android AVD 30代理配置后无法正常抓包的问题排查求助
解决MITMProxy在Android AVD上无法代理HTTPS连接的问题
结合你描述的场景(Windows 10 + MITMProxy 7.0.4 + Android AVD 30),我给你几个具体的排查和解决方向:
1. 确保代理设置正确且mitmproxy监听正确地址
- 模拟器的代理不能填
127.0.0.1,必须设置为你Windows主机的局域网IPv4地址(可以通过Windows命令行执行ipconfig查看以太网/WLAN的IPv4地址),端口保持mitmproxy默认的8080(如果没修改过配置的话)。 - 启动mitmproxy时,要确保它监听所有网卡地址,而不是仅本地回环。启动命令改成:
或者用mitmdump的话:mitmweb --listen-host 0.0.0.0mitmdump --listen-host 0.0.0.0
2. 验证Android系统证书的有效性
虽然adb ls能看到证书文件,但Android 11(API 30)对系统证书的要求更严格:
- 打开Chrome访问
mitm.it,如果能看到mitmproxy的官方验证页面,说明证书已生效;如果仍提示连接不安全,那证书安装可能存在问题。 - 检查证书的SELinux上下文是否正确,执行命令:
正常输出应该以adb shell ls -Z /system/etc/security/cacerts/c8750f0d.0u:object_r:system_cert_file:s0开头。如果不是,需要修复上下文:adb shell chcon u:object_r:system_cert_file:s0 /system/etc/security/cacerts/c8750f0d.0
3. 处理应用的证书固定问题
Youtube和部分谷歌应用会使用证书固定(Certificate Pinning),它们会拒绝mitmproxy的自定义根证书,导致无法代理:
- 可以使用Xposed框架模块
JustTrustMe来绕过应用的证书验证逻辑(需要模拟器已root并安装Xposed)。 - 或者用Frida工具hook应用的证书验证方法,比如执行以下Frida脚本(仅用于测试):
Java.perform(function() { var TrustManagerImpl = Java.use('com.android.org.conscrypt.TrustManagerImpl'); TrustManagerImpl.checkTrustedRecursive.implementation = function() { return; }; }); - 临时方案可以启动mitmproxy时加上
--ssl-insecure参数,跳过证书验证,但这会降低安全性,仅适合测试场景。
4. 检查Windows防火墙是否拦截端口
Windows防火墙可能会阻止Android模拟器访问mitmproxy的8080端口:
- 可以临时关闭Windows防火墙测试,如果问题解决,就需要给mitmproxy添加防火墙允许规则:允许mitmproxy应用通过私有网络访问。
内容的提问来源于stack exchange,提问作者Toteph42
相关产品推荐
相关产品推荐

