5月30日 22:48

如何用 Whistle 调试移动端 App,代理和证书怎么配置?

用 Whistle 调试移动端应用,本质是让手机的 HTTP/HTTPS 流量先经过电脑上的 Whistle,再由 Whistle 转发到真实服务或 mock 服务。步骤不难,难点通常在三处:手机连不到电脑代理、HTTPS 证书没被系统信任、App 自己做了证书绑定。只要按顺序排查,移动端抓包和改包会稳定很多。

先确认电脑端 Whistle 可访问

电脑上启动 Whistle,默认端口是 8899。如果团队里端口有冲突,可以显式指定端口,但手机代理里也要填同一个端口。启动后先在电脑浏览器打开 http://127.0.0.1:8899/,确认控制台能进入。

bash
w2 start -p 8899 w2 status # macOS 查看局域网 IP ipconfig getifaddr en0 # Windows 查看 IPv4 ipconfig

手机和电脑必须在同一个网络里,常见地址类似 192.168.1.2310.0.0.8。如果公司 Wi-Fi 开了客户端隔离,手机即使和电脑连同一个热点,也可能访问不到电脑端口,这时可以换个人热点或使用 USB/模拟器方案。

手机代理怎么配?

iOS 进入当前 Wi-Fi 的详情页,在 HTTP 代理里选择“手动”,服务器填电脑局域网 IP,端口填 8899。Android 一般在 Wi-Fi 的“修改网络”或“代理”设置里填写同样的信息,不同厂商入口会有差异。配置完成后,用手机浏览器访问 http://电脑IP:8899/,能打开 Whistle 页面才说明链路通了。

如果手机访问不了,先不要急着改规则。检查电脑防火墙、VPN、公司安全软件、端口是否监听在正确网卡上。也可以在电脑上临时换端口启动,例如 w2 start -p 8888,排除端口被占用的问题。

HTTPS 证书怎么安装?

HTTP 请求能看到不代表 HTTPS 能解密。要查看 HTTPS 内容,需要在手机上安装并信任 Whistle RootCA。手机访问 http://电脑IP:8899/,进入 HTTPS 页面下载证书;iOS 安装描述文件后,还要到“关于本机 - 证书信任设置”里开启完全信任;Android 则需要安装为用户证书,部分高版本系统对 App 信任用户证书有限制。

text
# 移动端调试常用规则示例 api.example.com/api/user resBody://{mobile-user.json} m.example.com reqHeaders://{mobile-headers.json} app.example.com/api/* host 192.168.1.23:3000

如何验证规则真的生效?

先用手机浏览器访问一个简单接口,看 Whistle 的 Network 面板是否出现请求。再加一条低风险的响应头或 mock 规则,确认响应确实被改写。不要一开始就调试复杂 App,否则你很难判断问题出在代理、证书、规则还是 App 网络库。

json
{ "code": 0, "data": { "from": "whistle-mobile", "login": true } }

追问

手机访问不了 Whistle 控制台怎么办?

先确认手机和电脑在同一网段,再检查电脑防火墙是否拦截了 8899 端口。取舍上,关闭防火墙排查最快,但长期使用应该只放行 Whistle 端口而不是全关。边界是公司网络可能禁止设备互访,这种情况下继续改 Whistle 规则没有意义。常见踩坑是电脑开着 VPN,手机填的却是局域网不可达的虚拟网卡地址。

为什么 HTTPS 证书装了还是看不到内容?

可能是证书没有被完全信任,也可能是 App 不信任用户安装的根证书。取舍是浏览器调试成本最低,但真实 App 尤其是金融、支付类应用更可能做证书绑定。边界是 Whistle 不能绕过所有安全策略,遇到 certificate pinning 需要换调试包、关闭 pinning 或使用专门的测试构建。踩坑是只安装了证书文件,却忘了在 iOS 里开启“完全信任”。

Android 能不能不用 Wi-Fi 代理?

可以在部分场景下用模拟器代理,或通过 ADB 做端口转发,但真实设备的系统代理仍然最直观。取舍是 Wi-Fi 代理配置简单,ADB 方案更适合本地开发机和模拟器联调。边界在于 adb reverse tcp:8899 tcp:8899 只能解决一部分访问方向问题,不等于所有 App 流量都会自动进 Whistle。踩坑是以为 USB 连上就能抓包,结果 App 仍然走移动网络或直连。

某些 App 请求完全不出现是什么原因?

可能是 App 没走系统代理、用了私有网络库、开启了 QUIC,或者请求走了 WebSocket/长连接。取舍是系统代理对 H5 和普通 HTTP 客户端很友好,但对强安全原生 App 不一定够用。边界是生产包的网络安全策略通常更严格,调试时最好使用测试包。踩坑是只盯着 HTTPS 证书,忽略了 App 可能根本没有把流量发到代理。

调试结束后需要恢复哪些设置?

至少要关闭手机 Wi-Fi 代理,必要时删除或停用 Whistle 证书,并停止本机 Whistle 服务。取舍是保留代理下次调试更省事,但日常使用容易导致网络变慢或访问失败。边界是公共网络和非调试场景不要长期挂代理。踩坑是下班后手机还连着电脑代理,第二天电脑没开,手机所有网页都打不开。

标签:Whistle