有次排查一个 App 的偶发连接超时问题------用户在弱网环境下操作时某些请求会卡住,Charles 里看到的 HTTPS 请求都正常返回了,但客户端就是收不到响应。跟后端对了好几遍接口文档和参数格式,双方日志也都看不出异常。最后怀疑问题可能出在 TCP 传输层。
移动端数据流抓包的几种方式
要排查传输层的问题,首先想到的是 Wireshark。装好 Remote Virtual Interface 用 Mac 抓 iOS 设备的流量,数据确实全,但操作链路长:Mac 开 rvictl、连设备、起 Wireshark 选接口、再配过滤条件,每个环节都可能会踩坑。而且 Wireshark 抓 iOS 流量只能用 Mac,Windows 上没法这么操作。
Charles 和 Proxyman 主要做 HTTP 代理抓包,对 TCP 和 UDP 层面的数据流支持有限------能看到 TLS 握手细节,但看不到底层传输状态和重传情况。换个思路找了找专门做设备直连抓包的工具。
用 SniffMaster 抓 iOS 数据流的操作流程
SniffMaster 进入数据流抓包模式的流程比较直接。iOS 设备通过 USB 连上电脑,解锁并亮屏。首次连接需要点手机上的"信任此电脑",Windows 系统会提示安装驱动,按确定走完就行。如果之前没用过抓包大师抓包,需要按提示安装描述文件。iOS 17.4 以上的设备还要在设置里开启开发者模式,软件会引导操作流程。左下角的高级管理服务变绿之后,选择功能区里的"数据流抓包"。
数据流抓包模式下能看到 iOS 设备的所有网络数据------HTTPS、Socket 通信、TCP、UDP、DNS 解析等。支持按目标地址、源地址、端口和协议过滤,最实用的是"选择 App"功能:指定目标 App 后只显示它的流量,不会被系统服务和后台 push 的数据干扰。网络传输面板展开后能看到从应用层到链路层的完整请求链路。数据面板支持切换字符串、16 进制和二进制格式来查看数据内容。发现可疑数据包后可以右键保存单个包的二进制数据,或者把整个会话导出为 pcap 文件,用 Wireshark 打开做深层分析。
排查场景落地
那次用 SniffMaster 抓了目标 App 的 TCP 数据流之后,配合过滤只关注特定端口。数据面板里看到了几次 TCP 重传和 RST 标记,客户端和服务端之间在某些网络条件下确实存在连接重置。定位到具体原因后,在客户端侧加了重试机制和连接池保活,后续版本上线后超时率降了下来。
组合使用的建议
排查 HTTP 层面的接口问题,Charles 和 Proxyman 仍然是首选。涉及 TCP/UDP 传输层或自定义协议的分析,设备直连抓包工具配合 Wireshark 导出的组合会更有效。两种方案各有侧重,根据问题定位的阶段选对应的工具。