在 iOS 研发、接口联调、逆向调试、网络性能分析等工作中,抓包是最直接、最高效的定位方式。但是随着移动端安全策略不断强化(ATS、证书链校验)、App 内普遍加入证书 pinning、网络协议升级到 HTTP/2 / HTTP/3(QUIC),以及越来越多业务开始采用自定义 TCP / WebSocket 通信,开发者最常遇到的难题之一就是:
iOS 抓不到包怎么办?代理明明开了,却一直没有数据。
Charles、Proxyman、Fiddler 等主流代理工具并不是万能解,只要底层网络协议或安全策略发生变化,它们就可能完全失效。
一、iOS 抓不到包的五大典型原因(按出现频率排序)
App 启用了证书 Pinning(最常见)
特征非常明显:
- Safari 能抓
- App 完全抓不到
- 抓包工具界面毫无流量
- 代理、证书都设置正确
Pinning 直接拒绝中间人代理证书 → 代理方案全部失效。
HTTPS 证书链不完整
导致:
- Charles / Proxyman 只看到 CONNECT
- 解密失败
- App 报 SSL Error
可能原因:
- 中间证书未安装
- Wi-Fi 绕路或插入证书
- ATS 拦截
使用 HTTP/3 / QUIC(UDP 流量不可被代理)
UDP 不走系统 HTTP 代理。
表现:
- 某些接口抓不到
- 视频、直播、社交类接口缺失
- Wireshark 能看到 UDP,代理却无数据
应用使用自定义协议 / WebSocket / 自建网络栈
此时根本不会走系统代理:
- TCP 自定义帧
- WebSocket 通信
- 游戏网络协议
- SDK 内部通信模块
代理工具无能为力。
系统代理被覆盖或无效
包括:
- VPN
- MDM 策略
- 安全软件修改网络设置
- 多代理冲突
代理被覆盖 = 抓不到任何包。
二、iOS 抓不到包怎么办?完整排查链路(可直接写入 Wiki)
第一步:确认代理与证书链是否正确
检查以下内容:
- 代理 IP、端口填写正确
- Charles/Proxyman 的 SSL Proxying 已启用
- iOS 设置中已"完全信任证书"
- 没有 VPN 或其它代理覆盖
若仍只有 CONNECT → 继续排查。
第二步:浏览器能抓 App 不能抓 → 证书 Pinning
这是最常见也是最容易误判的场景。
代理工具无法绕过 pinning → 必须进入底层抓包阶段。
第三步:仅个别域名抓不到 → QUIC 或 HTTP/3
验证方法:
- 关闭 QUIC
- 切换 4G/5G
- 查看是否出现 UDP 流量
QUIC 天生绕过代理,不可捕获。
第四步:自定义协议或 WebSocket
特征:
- 请求不出现在代理软件
- Wireshark 能看到 TCP
- App 内使用二进制协议
此时不支持代理的抓包软件无法继续。
第五步:代理无效或抓不到 HTTPS → 使用底层补抓工具
这一阶段是解决"iOS 抓不到包"的关键点。
抓包大师(Sniffmaster)在排查链路中的作用
Sniffmaster 的定位是:
当代理无法抓包时,用于直接捕获 iOS 流量的底层补抓工具。
它解决代理抓包无法处理的场景,包括:
- 证书 pinning 导致抓不到包
- QUIC / HTTP3(UDP)流量
- 自定义 TCP、WebSocket
- HTTPS/TLS 握手失败分析
- 系统代理被覆盖
- 需要按 App / 域名过滤流量
- 想导出 pcap 到 Wireshark 做详细分析
核心能力:
- 抓取 HTTPS / HTTP / TCP / UDP 数据流
- 自动识别常见协议(HTTP、HTTPS、mdns 等)
- 支持按 App / 域名过滤,降低噪音
- 数据流查看支持文本、HEX、二进制
- 支持 JavaScript 拦截器修改请求与响应
- 支持导出 Wireshark 可直接读取的 pcap 文件
- 跨平台运行(macOS / Windows / iOS)
真正适合用于:
- "代理完全抓不到包"的情况
- "多个接口抓不到但实际上已发出"的情况
- "需要抓 QUIC / TCP 原始流量"的场景
三、典型实战案例:iOS App 完全抓不到 HTTPS 流量
问题:
- Charles 设置正确
- 证书已信任
- Safari 能抓
- App 无任何流量
排查:
- 先确认 SSL Proxying → 正常
- 切换 Wi-Fi 与蜂窝 → 无效
- 浏览器可以抓 → 说明系统代理正常
- App 无流量 → 高度怀疑 Pinning
- 用 Sniffmaster 捕获底层 TLS 数据流
- 导出 pcap → Wireshark 显示 TLS Alert: unknown_ca
- 服务器不存在对应日志
- 进一步确认:App 内的 SDK 进行了证书指纹校验 → 拒绝代理证书
结论:只有底层抓包才能定位根因。
解决 "iOS 抓不到包" 需要多工具协同,而不是单一软件
| 抓包层级 | 工具 | 适用场景 |
|---|---|---|
| 代理层 | Charles / Proxyman / Fiddler | 常规 HTTPS 抓包 |
| 协议层 | Wireshark / tcpdump | 分析 TLS、QUIC、TCP |
| 自动化层 | pyshark / mitmproxy scripting | 批量测试 |
| 补抓层 | 抓包大师(Sniffmaster) | pinning / QUIC / 自定义协议等代理无法覆盖的情况 |
多工具协作是必需的,不存在"万能抓包工具"。