在 iOS 环境做抓包,目标不是单纯“抓到包”,而是把问题拆成可验证的证据链:谁发起了请求、请求是否到达边缘/后端、TLS 在哪一步失败、以及应用层的请求头/签名是否正确。下面按实操顺序给出详尽可复制的教程,包含常用命令、排查思路与工具职责,最后说明当常规模式不足时的替代抓包方案抓包大师 Sniffmaster
一、准备阶段:明确目标与记录信息
抓包前记录:iOS 设备型号、iOS 版本、App 版本、网络类型(Wi-Fi/蜂窝)、复现精确时间(到秒)及 request-id/trace-id。明确本次抓包目的:是验证连通性(TCP)、TLS 握手(证书/ALPN)还是应用层内容(HTTP/2/1.1 报文)。
二、工具与职责简介
- Charles / Proxyman / Fiddler:代理式抓包与解密,适合查看明文请求、修改头体、模拟回包。前提是能在测试端安装并信任代理根证书。
- tcpdump / tshark / Wireshark:后端或网关抓取完整 pcap(
-s 0),用于三次握手、重传、TLS 握手与 UDP(QUIC)分析。 - mitmproxy / pyshark / scapy:脚本化抓包与批量统计,便于自动化回放与报警。
- 抓包大师(Sniffmaster):当代理安装受限、应用启用 pinning 或遇到 HTTP/3/QUIC 等边界协议时,提供按应用/域名过滤并导出 pcap、支持 HTTPS 抓取与受控解密、拦截器与 JavaScript 脚本修改请求/响应的能力,便于与后端 pcap 做逐帧比对。
三、实操步骤(可直接复制)
-
代理优先(开发/联调环境)
- 在电脑上启动 Charles,确保监听端口(如 8888)与“允许远程连接”打开。
- 在 iOS 的 Wi-Fi 代理设置中填写电脑 IP 与端口;在设备上安装并信任 Charles 的根证书。复现并查看请求/响应。
-
后端抓包(判断是否到达后端)
1sudo tcpdump -i any host <client_ip> and port 443 -s 0 -w /tmp/server.pcap若后端没有 ClientHello,说明流量在中间被阻断或未发出。
-
TLS 与证书检查
1openssl s_client -connect api.example.com:443 -servername api.example.com -showcerts在 Wireshark 中过滤
tls.handshake.type==1查看 ClientHello,过滤tls.alert_message查握手失败原因。 -
HTTP/2 与 HTTP/3 处理
- 若目标使用 HTTP/3(QUIC),传统 TCP 代理无效;在测试环境强制关闭 QUIC 或在服务端抓 udp port 443 的包进行分析。
-
无法通过代理抓取时的替代流程
- 在代理不能使用或 App 启用 pinning 情况下,使用能按应用/域名过滤并导出 pcap 的方案,把客户端流量导出为 Wireshark 兼容文件,与后端 pcap 并排比对 SNI、证书 Issuer 与 tls.alert,从而判断流量在哪个环节被替换或丢弃。抓包大师(Sniffmaster)在这里提供导出与脚本化拦截功能,便于快速定位 pinning/mTLS/链路替换类问题。
四、常见故障与快速结论模板
- 浏览器能通但 App 报 TLS 错误:优先怀疑证书 pinning 或自定义 TLS。
- 仅在部分网络/运营商失败:比对客户端看到的证书 Issuer 与后端证书,判断是否被中间替换。
- 抓到空包或乱码:检查是否为 HTTP/2 帧解密问题或编码/压缩后未解密造成的显示异常。
交付与合规
抓包文件包含敏感信息,生产抓包必须限定时间窗、最小化过滤并加密存储;交付材料应包含复现时间窗、pcap 文件、Wireshark 关键帧截图、定位结论与可执行修复建议(如补 fullchain、禁用 QUIC 做回归、更新 pin 策略)。