归档之于 ‘ 2013 年十一月

在mac osx RIV模式中使用tcpdump、wireshark抓取分析iphone数据包

一、Remote Virtual Interface
  在iOS5中新引入了“远程虚拟接口(remote virtual interface ,RVI)“的特性,可以在Mac中建立一个虚拟网络接口来作为iOS设备的网络栈,这样所有经过iOS设备的流量都会经过此虚拟接口,此虚拟接口代替了iOS设备本身的协议栈,但并没有将网络流量中转到Mac本身的网络连接上,这样所有网络连接都是iOS设备本身的,Mac电脑本身连不联网或者连接的网络类型都没有关系,而iOS设备本身可以为任意网络类型,2G/3G/WiFi等。在Mac电脑上使用任意抓包工具抓取RVI接口上的数据包就可以看到iOS设备上的所有网络数据。

二.使用方法
通过USB口将iPhone连接到Mac上。
使用Xcode的organizer工具获取到iPhone的UDID(identifier后的一长串就是)
使用rvictl命令创建RVI接口(remote virtual interface),使用iPhone的UDID作为参数。
$ rvictl -s
如果想捕获多个设备的网络包,可以使用上述命令创建多个设备的RVI,传递每个iOS设备的UDID作为参数即可。
RVI虚拟接口的命名规则为rvi0,rvi1,rvi2,…,可使用ifconfig命令查看
$ ifconfig rvi0
rvi0: flags=3005 mtu 0
使用完之后需要将创建的虚拟接口移除
$ rvictl -x

三、使用tcpdump抓包
tcpdump -i rvi0 -w capture.cap -v -vv -c 100 -X -e

四、使用wireshark打开capture.cap就可以进行分析了

mac osx使用brew安装指定版本subversion

先查看有哪些版本

cd /usr/local
brew versions subversion
1.8.4    git checkout ce669eb Library/Formula/subversion.rb
1.8.3    git checkout 9b438ce Library/Formula/subversion.rb
1.8.0    git checkout f56b641 Library/Formula/subversion.rb
1.8.1    git checkout 55577bb Library/Formula/subversion.rb
1.7.10   git checkout 0060dc3 Library/Formula/subversion.rb
1.7.9    git checkout b0e6223 Library/Formula/subversion.rb
1.7.8    git checkout f7a42d2 Library/Formula/subversion.rb
1.7.7    git checkout a6dcc41 Library/Formula/subversion.rb
1.7.6    git checkout 6b8d25f Library/Formula/subversion.rb
1.7.5    git checkout 5d5cd70 Library/Formula/subversion.rb
1.7.4    git checkout dc4245c Library/Formula/subversion.rb
1.7.3    git checkout eb97154 Library/Formula/subversion.rb
1.7.2    git checkout d89bf83 Library/Formula/subversion.rb
1.6.17   git checkout 6e2d550 Library/Formula/subversion.rb
1.6.16   git checkout 83ed494 Library/Formula/subversion.rb

然后我们要安装1.7.10版本,执行

git checkout 0060dc3 Library/Formula/subversion.rb
brew install --universal --java subversion
A universal build was requested, but neon was already built for a single arch.
You may need to `brew rm neon` first.
A universal build was requested, but sqlite was already built for a single arch.
You may need to `brew rm sqlite` first.
brew rm sqlite neon
Uninstalling /usr/local/Cellar/sqlite/3.7.10...
Uninstalling /usr/local/Cellar/neon/0.29.6...
brew install --universal neon sqlite

然后在进行安装

brew install --universal --java subversion

完成后执行

sudo mkdir -p /Library/Java/Extensions
sudo ln -s /usr/local/lib/libsvnjavahl-1.dylib /Library/Java/Extensions/libsvnjavahl-1.dylib

如果出现Error: No available formula for serf
发现github上的serf.rb不存在了
找到一个历史版本https://raw.github.com/mxcl/homebrew/f689d5232ce824fe6dd4b64df729abfc487a6558/Library/Formula/serf.rb
放入到Library/Formula中就可以安装serf了

如果出现Error: Download failed: http://www.apache.org/dyn/closer.cgi?path=subversion/subversion-1.7.10.tar.bz2
老版本的subversion下载地址都失效了,动手修改subversion.rb对应的下载地址和sha1,superbin修改为Superenv.bin

mac apache checking whether the C compiler works… no

cd /Applications/Xcode.app/Contents/Developer/Toolchains
sudo ln -s XcodeDefault.xctoolchain OSX10.8.xctoolchain

return top