iPhone TCP 抓包

charles 这个神器提供非常简便的方法,查看设备的http甚至https请求,但无法抓到TCP包,所以,要进行TCP抓包,还得用一些较原始的工具。

RVI

要对 iPhone 进行抓包不外乎三种方法。
1、PC 开热点让iPhone连接,最简单粗暴,但很多时候因条件限制没法做,而且不方便
2、用代理,在同一个局域网内,让 iPhone 走 PC 的代理,如 charles
3、利用 iOS 5 后的虚拟网口(RVI remote virtual interface),这样不但可以在 WiFi下抓包,还可以抓蜂窝的流量

下面就针对rvi来进行抓包

建立rvi步骤:

  • 用数据线连接 iPhone
  • 用 iTunes 等工具获取设备的 UDID
  • 打开终端建立 RVI
1
2
3
ifconfig -l  // 查看网口
rvictl -s UDID // 建立RVI 提示 Starting device UDID [SUCCEEDED] 即成功
ifconfig -l // 查看网口,是否多了一个rvi0

tcpdump

我也不知道 tcpdump 是不是mac自带的了,反正 brew 安装也就一句话的事

运行tcmdump,在当前目录输出dump.pcap

1
sudo tcpdump -i rvi0  -w dump.pcap

在 iPhone 上操作,结束后Ctrl + C即可

删除RVI

1
rvictl -x UDID

tcpreplay

上面的数据是没法看的,通过tcpreplay重写数据

brew安装

1
shell install tcpreplay

重写TCP、UDP层

1
tcprewrite --portmap=80:8080,22:8022 --infile=dump.pcap --outfile=dumpFileFinal.pcap

这样就能用 charles 来查看了

wireshark

像上面这样抓包一般是没什么用处的,配合wireshark实时查看才是实际应用场景。建立 rvi 后,打开 wireshark,选择 rvi 网口,然后随意玩耍。