三、iOS 应用抓包的完整工程流程(可复用 SOP)
在移动应用开发与调试中,“iOS 应用抓包”往往是工程师定位问题的第一步。无论是接口联调、线上 Bug 排查、性能优化,还是分析第三方 SDK 的行为,抓包都是最直接且最具证据价值的方式。
但对 iOS 来说,抓包远比多数人想象的复杂:证书校验、ATS、pinning、QUIC、自定义协议、流量混合……任何一步都可能导致抓不到包。
一、为什么 iOS 应用抓包比其他平台更难?
一般开发者遇到的问题集中在以下五类:
HTTPS 证书信任链严格,稍有偏差即可失败
常见表现:
只有 CONNECT,没有解密数据
App 报 TLS 错误
Charles/Fiddler 能抓 HTTP,但抓不到 HTTPS
这是由于 iOS 的信任链机制与 ATS 限制导致。
App 启用了证书 Pinning
这是“抓不到包”的头号原因。
表现:
Safari 能抓
App 完全抓不到
抓包工具界面一直空白
许多银行、金融、电商类 App 都会启用 pinning。
流量使用 QUIC(HTTP/3)绕过系统代理
QUIC 使用 UDP,不走客户端的 TCP 代理,因此:
无法通过 Charles 抓取
视频/社交类 App 常默认开启
部分 CDN 或 API 已在使用
若 QUIC 不关掉,代理工具基本无效。
App 使用自定义网络协议
例如:
自定义 TCP 协议
内部 SDK 走独立网络栈
WebSocket 等长连接协议
代理抓包无法处理这些场景。
流量噪音太多,难以定位某个 App
一个 iPhone 上几十个 App 都在发包,工具端很难精准过滤。
二、iOS 应用抓包的工具体系(按功能分层,不做优劣比较)
为了覆盖所有类型的抓包需求,我们采用“分层工具链”的方式构造完整方案。
代理抓包(调试 HTTPS 内容)
代表工具:
Charles
Proxyman
Fiddler
mitmproxy(开源)
能做的事:
查看 HTTPS 明文
拦截/修改请求与响应
模拟错误响应
无法解决:
pinning
QUIC
自定义协议
无法按 App 过滤流量
TCP/TLS 底层抓包(链路证据)
代表:
tcpdump
Wireshark
适用于:
判断请求是否到达服务器
TLS 握手失败分析
三次握手、重传、窗口等底层诊断
是定位“为什么抓不到包”的核心工具。
自动分析与脚本能力
例如:
pyshark
scapy
mitmproxy scripting
适用于 CI 测试、自动提取异常包等。
无需代理的补抓工具(解决代理抓不到的问题)
抓包大师(Sniffmaster)补足代理工具无法处理的部分:
无需代理即可抓取 HTTPS、TCP、UDP 数据流
按 App 或域名过滤流量,解决噪音问题
自动识别 HTTP/HTTPS/mdns、自定义协议
查看 TCP 数据流的 HEX/文本/二进制内容
导出 Wireshark 兼容 pcap,可与服务器端 tcpdump 对比
内置脚本拦截器,可使用 JavaScript 修改请求与响应
跨平台支持:Windows / macOS / iOS
Sniffmaster 不是用来替代 Charles,而是用于:
代理工具失败
遇到 pinning
遇到 QUIC
遇到自定义协议
需要抓底层 TCP 数据流
的场景。
三、iOS 应用抓包的完整工程流程(可复用 SOP)
下面给出一套可直接应用的 iOS 抓包流程。
首先尝试代理抓包(快速验证)
设置 Wi-Fi 代理
安装信任证书
开启 SSL Proxying
若能抓包 → 继续在代理工具中调试业务逻辑。
如果只能看到 CONNECT → 证书链问题
此时排查:
是否使用公司 Wi-Fi(常注入证书)
是否信任证书
ATS 是否拒绝中间证书
可以尝试切换网络环境验证。
如果浏览器能抓、App 抓不到 → pinning
无需继续尝试代理工具,直接进入补抓阶段。
④ 部分域名抓不到 → QUIC(HTTP/3)问题
判断方式:
强制关闭 HTTP/3
或切换到 LTE/4G
若恢复 → 即为 QUIC。
代理失败情况下的关键补抓:使用 Sniffmaster
具体步骤:
使用 Sniffmaster 抓取目标 App 的流量
按 App / 域名过滤,只保留关键数据
将数据导出为 pcap
在 Wireshark 中分析:
TLS 握手
重传
证书链
QUIC 等 UDP 流量
与服务器 tcpdump 的 pcap 进行逐帧比对
此流程几乎能定位所有 iOS 抓包失败问题。
若能正常解密,则在 HTTP 层做最终分析
重点分析:
请求头/响应头
token 或鉴权参数
加密内容
状态码
业务错误场景
四、真实工程案例:iOS 应用抓不到 HTTPS
某 App 在公司 Wi-Fi 下抓不到包,在家庭网络中又正常。
排查过程:
Charles 有 CONNECT,但无 HTTPS
使用 Sniffmaster 补抓 → 出现 TLS Alert
Wireshark 分析证书链 → 企业网关注入了中间证书
切换网络 → 抓包恢复
最终确认:链路证书替换导致 ATS 拒绝连接
这种问题只依靠代理工具无法定位。
iOS 应用抓包必须“多工具协同”
iOS 抓包失败的本质来自:
TLS 安全策略
pinning
QUIC
自定义协议
流量混合
因此成熟的抓包方案必须是:
抓包维度
使用工具
HTTPS 内容
Charles / Proxyman / Fiddler
TCP/TLS 证据
Wireshark + tcpdump
自动分析
scapy / pyshark
代理失败补抓
抓包大师(Sniffmaster)
只有如此组合,才能覆盖所有抓包场景。