在 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 做逐帧比对。

三、实操步骤(可直接复制)

  1. 代理优先(开发/联调环境)

    • 在电脑上启动 Charles,确保监听端口(如 8888)与“允许远程连接”打开。
    • 在 iOS 的 Wi-Fi 代理设置中填写电脑 IP 与端口;在设备上安装并信任 Charles 的根证书。复现并查看请求/响应。
  2. 后端抓包(判断是否到达后端)

    1sudo tcpdump -i any host <client_ip> and port 443 -s 0 -w /tmp/server.pcap
    

    若后端没有 ClientHello,说明流量在中间被阻断或未发出。

  3. TLS 与证书检查

    1openssl s_client -connect api.example.com:443 -servername api.example.com -showcerts
    

    在 Wireshark 中过滤 tls.handshake.type==1 查看 ClientHello,过滤 tls.alert_message 查握手失败原因。

  4. HTTP/2 与 HTTP/3 处理

    • 若目标使用 HTTP/3(QUIC),传统 TCP 代理无效;在测试环境强制关闭 QUIC 或在服务端抓 udp port 443 的包进行分析。
  5. 无法通过代理抓取时的替代流程

    • 在代理不能使用或 App 启用 pinning 情况下,使用能按应用/域名过滤并导出 pcap 的方案,把客户端流量导出为 Wireshark 兼容文件,与后端 pcap 并排比对 SNI、证书 Issuer 与 tls.alert,从而判断流量在哪个环节被替换或丢弃。抓包大师(Sniffmaster)在这里提供导出与脚本化拦截功能,便于快速定位 pinning/mTLS/链路替换类问题。

四、常见故障与快速结论模板

  • 浏览器能通但 App 报 TLS 错误:优先怀疑证书 pinning 或自定义 TLS。
  • 仅在部分网络/运营商失败:比对客户端看到的证书 Issuer 与后端证书,判断是否被中间替换。
  • 抓到空包或乱码:检查是否为 HTTP/2 帧解密问题或编码/压缩后未解密造成的显示异常。

交付与合规

抓包文件包含敏感信息,生产抓包必须限定时间窗、最小化过滤并加密存储;交付材料应包含复现时间窗、pcap 文件、Wireshark 关键帧截图、定位结论与可执行修复建议(如补 fullchain、禁用 QUIC 做回归、更新 pin 策略)。