免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。
网络是移动应用生命线,网络层面的各种问题会给移动应用带来许多迷惑的行为和症状。通过抓取网络包数据,可以针对性地分析由网络层面问题引起的各种症状,包括连接中断、TLS 握手失败、DNS 解析失败等错误。
Charles 和 Fiddler 可以帮助捕获和分析 HTTP 层面的问题,如果问题发生在 TCP/IP 层面,则需要 TCP 报文的捕获和分析工具。Wireshark(支持 Mac/Windows 平台)、Network Monitor(Windows 平台)和 TCPDUMP 是常用的三种网络层抓包工具。比较常见的网络层问题包括 SSL 握手失败和 TCP 链接中断、重发等。
本节介绍 Wireshark 和 TCPDUMP 的基本使用方法。
在 Wireshark 官网 下载安装包,安装并启动后,主界面如下(Mac 和 Windows 版本界面略有差别):
在 Wireshark 主界面上,可以看到本机的网络接口:
以本机为例,双击 Wi-Fi: en0 接口开始抓取该网卡接口上的网络包。
Tcpdump 是一个小巧紧致的命令行网络包捕获、分析工具。虽然易用性上和 Wireshark 比稍微差,但优势是可以运行在更多的平台和环境下,方便直接在客户端或服务端进行抓包。
Tcpdump 在不同环境下支持的参数并不完全相同,建议通过 man tcpdump
命令确认当前支持的参数类型和使用方法。
一个常见的基本命令组合如下:
// 抓取完整报文并报错到文件中
tcpdump -s 0 -w myCapture.pcap
点击这里 查看更多命令。
如文档顶部的图中所示,针对客户端的 TCP 抓包可以在两处进行:
本节介绍在 Point A (即客户端出口)处的抓包方式。
iOS 客户端出口抓包需要把 iOS 移动设备通过 USB 连接到 MacBook 上,并在 Mac 上建立的一个该设备网卡的虚拟映射。Wireshark 通过该虚拟网卡捕获 iOS 移动设备上的网络包。
$ system_profiler SPUSBDataType
$ rvictl -s < Your Device UUID >
Starting device < Your Device UUID > [SUCCEEDED] with interface rvi0
rvi0
即虚拟网卡名。Android 客户端出口抓包需要提前获取设备 root 权限,通过 ADB 在设备上调用 tcpdump
命令实现抓包。
adb push tcpdump /data/local/tcpdump
adb shell chmod 6755 /data/local/tcpdump
点击这里 查看 TCPDUMP 参数详细配置。
cd /data/local
./tcpdump -i any -p -s 0 -w /sdcard/myCapture.pcap
adb pull /sdcard/myCapture.pcap
如文档顶部的图中所示,针对客户端的 TCP 抓包可以在两处进行:
本节介绍在 Point B(即接入设备入口)处的抓包方式。
如文档顶部的图中所示,某些问题需要在服务端启动抓包,本节以 TCPDUMP 为例。
yum install tcpdump
您可前往 TCPDUMP 官网 查看其他详情。
apt-get install tcpdump
更多参数详见 TCPDUMP 官方文档。
tcpdump -s 0 -w myCapture.pcap
在文档使用中是否遇到以下问题
更多建议
匿名提交