android - 无法将 Fiddler 代理与 Android 模拟器一起使用

标签 android ssl android-emulator fiddler

我想通过主机上的 Fiddler 应用程序捕获来自模拟设备的所有流量。经过所有尝试后,即使在 HTTP(非 HTTPS)请求上,我也遇到了无限数量的超时 CONNECT 请求。

我做了什么:

Android 模拟器代理设置:

android emulator proxy setup

fiddler 设置:

fiddler options

将以下行添加到主机主机文件: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 具有正确的权限:

root cert on the device

Android 的添加是使用具有可写文件系统的 Google-API 镜像 (Android 9) 完成的。

此根证书出现在系统根证书列表中:

system root cert list

FiddlerRoot 证书也已成功安装在主机上并且可以毫无问题地解密 HTTPS 流量:

https decryption on host

在结果中:

当我在android 模拟器中关闭代理时,我可以使用自定义域名local.test:3200 访问本地应用程序。我也可以毫无问题地访问互联网网站。

当我在 android 模拟器中打开代理时,我看到很多 CONNECT 请求总是超时:

CONNECT requests

当我尝试访问我的本地 HTTP 应用 http://local.test:3200 时,我收到了指定端口的 HTTPS CONNECT 请求:

CONNECT on 3200

local on android

为什么它会尝试通过 HTTPS 连接到端口 3200???此问题仅在 Android Emulator 代理打开时发生。关闭后,我可以通过 HTTP 成功访问我的本地页面。是模拟器应用程序尝试切换到 HTTPS 吗?或者我做错了什么?

目前,我无法捕获和解码来自模拟设备的任何流量。有谁能帮帮我吗?

最佳答案

我也遇到了这个问题。 Fiddler 正确处理和拦截到端口 80 的 HTTP 请求,但不能正确处理到其他端口的 HTTP 请求或 HTTPS 请求。

原来是a bug of Android Emulator (应该在 2014 年修复,但补丁永远不会进入开发分支,所以它永远不会修复)。它不适用于在 HTTP/1.1 200 Connection Established 之后添加额外 header 的 HTTP 代理服务器,例如 Proxy-Agent: xxxFiddlerGateway: Direct 在代理响应中。

试试我的 gost 无 header 分支,它充当代理服务器并能够转发到其他代理服务器:https://github.com/shunf4/gost/releases/tag/v2.11.1-without-header

你只要像这样运行它

gost(.exe) -L :8090 -F (Upstream HTTP proxy server address, e.g. http://127.0.0.1:3408)

将您的 HTTP 代理转换为没有额外 header 的代理。然后,在 Android Emulator 中将代理服务器设置为 127.0.0.1:8090。砰的一声,一切正常!

关于android - 无法将 Fiddler 代理与 Android 模拟器一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63257362/

相关文章:

Android 10 @ionic-native/file-transfer/file-opener 不工作

ruby-on-rails - example.com 重定向您的次数过多。 ERR_TOO_MANY_REDIRECTS

java - 如何在 Eclipse 模拟器运行时切换方向

java - Android AccessibilityDelegate 强制读取 ViewGroup 而不是 child

Android 1.5 在设备上不再显示 Android 应用程序

java - 安卓。添加 Firebase 依赖项时出现问题

apache - .htaccess 使用子文件夹重写规则强制 SSL

c++ - 如何在 C++ gSOAP 生成的类中使用 SSL

android - 将 Android 应用程序调试到手机

android - VT-x 不工作,即使它在 bios 中启用并且我的 CPU 支持它