使用WireShark 调试真机网络
需求:调试UIWebView加载缓慢问题
-
获取iPhone的UDID
-
-
2:根据获取的 UDID 创建一个虚拟的网卡
rvictl -s <UDID>
通过 ifconfig
可以看到多了一个 rvi0
接口
通过 rvictl -l
命令可以列出所有挂接的虚拟接口
-
3: 在 Wireshark 首页选择 rvi0,使用默认的 Capture Options 即可开始对 iPhone 进行抓包。
其中 iPhone 手机连接 WiFi 动态获取的 IP 地址为 192.168.100.1。
黑色的内容表示遇到错误,需要重点关注
关闭wifi,可以抓取移动网络数据包
-4 : 使用rvictl -x
命令删除虚拟接口, 使用 iPhone 的 UDID 作为参数。
WireShark 抓包技巧
-
第一步:找到请求网址的 IP 地址
方法一:用ping命令得到对应的IP地址(可能不对,此时要用方法二)
方法二:使用DNS包来确定IP地址
注意手机上 DNS 解析的结果并不总是和电脑上的解析结果一致。这种情况下我们可以通过查看 DNS 数据包来确定
DNS 是基于 UDP 的协议,不会有 TCP 重传
-
第二步:过滤 IP 地址
-
第三步:确定端口号
注意红框中的 SourcePort,这是客户端端口。我们知道 HTTP 支持并发请求,不同的并发请求肯定是占用不同的端口。所以在图中看到的上下两个数据包,并非一定是请求与响应的关系,他们可能属于两个不同的端口,彼此之间毫无关系,只是恰好在时间上最接近而已。
如果只想显示某个端口的数据,可以使用:
ip.addr == 220.194.203.68 and tcp.dstport == 52914
如果只想看 HTTP 协议的 GET 请求与响应,可以使用
``ip.addr == 220.194.203.68 and (http.request.method == "GET" || http.response.code == 200)来过滤。
如果想看丢包方面的数据,可以用
ip.addr == 220.194.203.68 and (tcp.analysis.fast_retransmission || tcp.analysis.retransmission)
# 参考