为什么 Charles 有些 App 抓不到包

0 阅读3分钟

在调试过程中,很容易出现这样的情况:

  • Safari 可以正常抓到 HTTPS
  • 同一台 iPhone 上的某个 App 完全没有请求
  • Charles 里看不到任何与该 App 相关的记录

那问题不是证书有没有安装,而是流量有没有经过 Charles


第一步先确认代理线路本身是好的

在排查某个 App 之前,先验证代理环境是否正常。

操作顺序:

  1. 启动 Charles
  2. 确认 Proxy 端口正在监听
  3. iPhone 与电脑连接同一局域网
  4. 在 iPhone Wi-Fi 设置中填写代理地址与端口
  5. 安装并信任 Charles 证书
  6. 用 Safari 打开 HTTPS 网站

如果 Safari 请求能完整解密显示,说明:

  • 代理路径成立
  • HTTPS 解密配置正确

接下来再测试目标 App。


Safari 能抓到,App 没有记录时该做什么

当 Safari 有数据,而目标 App 在 Charles 中完全没有出现任何请求,可以直接判断为该 App 的网络请求没有走系统代理。

在这个状态下,重复安装证书或重启 Charles 没什么用。


验证 App 是否真的发起了网络请求

在更换工具前,可以做一个简单验证:

  • 关闭 iPhone 的网络
  • 重复触发 App 内的同一操作
  • 观察界面是否出现加载失败或错误提示

如果行为发生变化,说明请求确实存在,只是没有经过代理路径。


确认是否存在 TLS 握手行为

如果怀疑 App 使用了自定义网络栈,可以借助底层抓包工具观察连接行为。

关注以下现象:

  • 是否有 DNS 查询
  • 是否建立 TCP 连接
  • 是否出现 TLS ClientHello

如果这些行为存在,说明流量已经离开设备,只是 Charles 没抓到。


当代理抓不到时可以切换抓包方式

如果确认 App 不走系统代理,需要切换到设备直接抓包方式。

使用抓包大师(Sniff Master)在设备中抓取 HTTPS

抓包大师支持通过 USB 在电脑上直接抓取 iOS 设备流量。

操作步骤:

  1. 用 USB 将 iPhone 连接电脑
  2. 保持设备解锁并点击“信任此电脑”
  3. 启动抓包大师
  4. 在设备列表中选择对应 iPhone
  5. 按提示完成驱动与描述文件安装
  6. 进入 HTTPS 暴力抓包相关模式
  7. 启动抓包并触发 App 操作

这一方式不依赖 Wi-Fi 代理,因此不会受到系统代理路径的限制。


通过 App 筛选减少系统干扰

设备中抓包会包含系统服务流量。

在抓包大师中可以:

  • 使用“选择 App”功能
  • 只保留目标应用的数据
  • 再次触发业务操作

这样可以在抓包列表中直接定位到相关请求。 选择app


判断数据是否完整

如果抓包结果中:

  • 能看到 URL 和 Header
  • 请求体或响应体为空

说明 HTTPS 已被捕获,但 App 未使用 iOS 开发证书签名。

此类情况需要:

  • 获取 IPA
  • 使用 iOS 开发证书重新签名
  • 重新安装后再抓包

完成后即可看到完整数据。 暴力抓包


当问题是 SSL Pinning 或双向认证

如果 App 设置了证书校验或双向验证,代理抓包往往会直接失败。

在这种情况下:

  • Charles 中可能只看到连接失败
  • 设备级抓包仍然可以观察到完整 HTTPS 数据

这时代理工具不再适合继续调试,需要根据需求选择合适层级。


工具之间

在 Charles 抓不到某些 App 的场景中,可以把工具拆分:

  • Charles
    • 验证系统代理路径
    • 适合修改请求与响应
  • 抓包大师(Sniff Master)
    • 从设备侧获取真实 HTTPS 数据
    • 不依赖代理
  • Wireshark
    • 用于分析导出的 TCP 数据

参考链接:www.sniffmaster.net/tutorial/zh…