Tancy's Blog

Remote Virtual Interface

Remote Virtual Interface

Remote Virtual Interface 可以直接将iOS设备映射成为Mac上的一块网卡。在Mac上,便可以使用常用的流量监控工具对这块虚拟网卡的流量进行监控.

创建RVI


Apple在iOS5.0以上增加了RVI(Remote Virtual Interface),打开他非常简单,只需要把iOS设备通过USB连接到MAC上,然后打开“终端”,输入

rvictl -s [你的设备UDID]

然后在终端上会显示

Starting device **************[succeeded ]

如果这一步产生了什么错误的话,可能是没有安装XCode 或者UDID 输入错误

接下来在终端可以使用

ifconfig -l

查看当前Mac上的接口,比如(不同Mac可能会有差异):

lo0 gif0 en0 en1 fw0 rvi0

其中rvi0就是 Remote Virtual Interface,这也就意味着在你的Mac上虚拟了一个iOS设备接口。

UDID查找方法

  • 通过Terminal获取:

    system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p' -e '/iPhone/,/Serial/p' | grep "Serial Number:" | awk -F ": " '{print $2}'
    
  • 将iOS设备连接到电脑,打开iTunes点击到iPhone,点击序列号切换到UDID为止 如图:

    iPhone

    iPhone

实时分析


使用Wireshark 来查看实时数据包。打开软件后选择我们刚才创建的rvi0 虚拟接口,点击进入就可以查看到iPhone的数据包。

Wireshark主界面

实时抓包数据

抓包成PCAP文件


通过Tcpdump抓取这个接口上的数据包

sudo tcpdump -i rvi0 -n -s 0 -w test.pcap tcp

解释一下上面重要参数的含义:

  • -i rvi0 选择需要抓取的接口为rvi0(Remote Virtual Interface)

  • -s 0 抓取全部数据包

  • -w test.pcap 设置保存的文件名

  • tcp 只抓取tcp包

当tcpdump运行之后,你可以在iOS设备上开始浏览你想抓取的App,期间产生的数据包均会保存到test.pcap文件中,想要结束抓取直接终止tcpdump即可,Ctrl+C
接下来可以用Wireshark,Charles 等工具分析test.pcap文件。

tcpdump 参数说明


官方文档:http://www.tcpdump.org/

tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ]
               [ -i 网络接口 ] [ -r 文件名 ] [ -s snaplen ]
               [ -T 类型 ] [ -w 文件名  ] [ 表达式 ]

选型介绍:

  • -a 将网络地址和广播地址转变成名字

  • -d 将匹配信息包的代码以人们能够理解的汇编格式给出

  • -dd 将匹配信息包的代码以C语言程序段的格式给出

  • -ddd 将匹配信息包的代码以十进制的形式给出

  • -e 将捕获的包数显示出来

  • -f 将外部的Internet地址以数字的形式打印出来;

  • -l 使标准输出变为缓冲形式;

  • -n 不把网络地址转换成名字;

  • -t 在输出的每一行不打印时间戳;

  • -v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息;

  • -vv 输出详细的报文信息;

  • -c 在收到指定的包的数目后,tcpdump就会停止;

  • -F 从指定的文中读取表达式,忽略其它的表达式;

  • -i 指定监听的网络接口;

  • -r 从指定的文件中读取包(这些包一般通过 -w 选项产生)

  • -w 直接将包写入文件中,并不分析和打印出来

  • -T 将监听到的包直接解释为制定的类型的报文,常见的类型有rpc(远程过程调用)和 snmp(简单网络管理协议)

PCAP查看软件


Mac下X11 地址:http://xquartz.macosforge.org/trac

Wireshark官方文档:http://www.wireshark.org/


晓田 ronntx@gmail.com