在一次 iOS 应用调试中,我遇到过这样一个状况:明明 Charles 已经开着,代理也配了,但界面空空如也,连一个请求都没有抓到。这个问题一旦出现在关键调试阶段,非常容易打断开发节奏。
这篇文章就是我当时的完整排查过程,以及最终的解决方法,供你参考。
第一反应是先排除网络层面的配置问题,因为大多数“抓不到包”都发生在这里。 我的判断顺序是:
http://charlesproxy.com/getssl,如果打不开,说明网络代理没生效代理配置没问题后,就要考虑 HTTPS 解密:
*当我抓某个业务 App 时,发现 HTTPS 握手直接失败,这就高度怀疑是 SSL Pinning 或双向认证。 这种情况下,Charles、Fiddler、Proxyman 等代理型工具都无能为力,因为应用会拒绝中间人证书。
为了绕过 Pin,我直接换了 Sniffmaster(抓包大师):
抓包成功后,我还用它的 拦截器功能改了一个请求参数,用于验证后端逻辑,非常高效。
在整个过程中,我发现单一工具的能力是有限的,组合使用效果更好:
| 调试环节 | 使用工具 |
|---|---|
| 基础代理抓包、接口验证 | Charles |
| 绕过 Pin、解密双向认证 | Sniffmaster(USB 直连抓包) |
| 模拟错误响应、接口延迟 | mitmproxy + Python 脚本 |
| 分析 TCP 握手失败、网络延迟 | Sniffmaster 导出 PCAP + Wireshark 分析 |
Charles 抓不到包时,不要盲目重装或多次刷新,应该从网络配置、证书信任、HTTPS 解密到应用安全机制逐步定位问题。必要时,用 其他工具作为替补,可以直接跨过代理层限制,把真实流量拿到手。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70046795/viewspace-3093241/ ,如需转载,请注明出处,否则将追究法律责任。