【发布时间】:2020-08-05 02:00:23
【问题描述】:
我想通过主机上的 Fiddler 应用捕获来自模拟设备的所有流量。经过我所有的尝试,我最终得到了无限数量的超时 CONNECT 请求,即使是在 HTTP(非 HTTPS)请求上也是如此。
我做了什么:
Android 模拟器代理设置:
提琴手设置:
将以下行添加到主机主机文件:127.0.0.1 local.test 和 Android 设备主机文件:10.0.2.2 local.test。这样做是为了 1) 防止 Chrome 强制切换到 HTTPS 2) 将此名称指向正确的 IP 地址,因为它在主机和 Android 系统上是不同的。
将 FiddlerRoot 证书从 DER 格式转换为 PEM(以 BEGIN CERTIFICATE 行开头)并将其存储到手机文件系统:/system/etc/security/cacerts/c8450d0d.0 并具有正确的权限:
使用带有可写文件系统的 Google-API 映像 (Android 9) 对 Android 进行了添加。
此根证书出现在系统根证书列表中:
FiddlerRoot 证书也成功安装在主机上,并毫无问题地解密 HTTPS 流量:
结果中:
当我在android模拟器中关闭代理时,我可以使用自定义域名local.test:3200访问本地应用程序。我也可以毫无问题地访问互联网站点。
当我在 android 模拟器中打开代理时,我看到很多 CONNECT 请求都超时了:
当我尝试访问我的本地 HTTP 应用程序 http://local.test:3200 时,我收到了对指定端口的 HTTPS CONNECT 请求:
为什么它试图通过 HTTPS 连接到 3200 端口???此问题仅在 Android Emulator 代理打开时发生。关闭后,我可以通过 HTTP 成功访问我的本地页面。是模拟器应用程序尝试切换到 HTTPS 吗?还是我做错了什么?
目前,我无法捕获和解码来自模拟设备的任何流量。有人可以帮帮我吗?
【问题讨论】:
-
为了测试,我不会在模拟器和主机上将主机条目命名为相同的名称。如果它们相同,您将永远不知道哪个条目处于活动状态。最好将它们命名为
local1.test和local2.test。顺便说一句:您是否在设备上禁用了安全 DNS(DNS over HTTPS)?我不确定是否使用安全 DNS,以防设置了代理但您永远不知道。 -
@Robert 如果我的本地 Web 服务器配置为响应
local1.test,我的本地 Web 服务器将如何响应从电话呼叫的local2.test主机名?主机名必须相同,因为 Fiddler 使用本地解析机制将主机名解析为 IP 地址。如果它将收到电话上已知的local2.test名称,它将无法将此名称解析为要连接的 IP 地址。
标签: android ssl android-emulator fiddler