在iOS设备上进行抓包(补充)

之前我一般是通过wifi连入我的iMac,然后使用 HttpScoop或者 Charles来进行数据抓取及分析。前者非常好用,在调协议时我的必备工具,就是更新太慢,2.0版本老不出来。后者没用过,听说是java的。而且价格也太贵,前者15美刀,后者50美刀。

Wireshark有装,但是界面实在让人提不起来胃口使用,所以装了就删除了。 HttpScoop虽然好用,但是只适用于http协议,对于socket通讯无能为力。

今天在RESOW看到这篇文章,介绍利用XCode内置工具即可实现对所有类型的数据包进行抓取、查看。

(以下内容转载自RESOW)

可能出于各种需要,你需要在iOS上抓取数据包,比如查看一下安装的软件是否私自上传了什么东西,或者研究一下如何实现某些功能等等。

关于iOS上抓包目前有很多方法,可以看Apple Technical Q&A 1176,里面介绍的内容很全面,有工具的介绍和几种支持方法的具体做法。

不过QA所述没有包含完整的流程,缺失了一些步骤;另外网络上常用的方法是通过HTTP Proxy方式抓包,这种方式的缺点是无法抓取EDGE/3G的数据包,如果WIFI无法设置代理那么这种方式也就没有办法了。

下面要介绍的方式就解决了这个问题。

需求:iOS系统要求5.0以上,拥有Mac OS 并且安装XCode

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

rvictl -s [Your Device's UDID]   

然后在终端上会显示

Starting device ********** [SUCCEEDED]

字样

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

接下来在终端可以使用

ifconfig -l

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

lo0 gif0 en0 en1 fw0 rvi0

其中rvi0就是Remote Virtual Interface,这也就意味着在你的Mac上虚拟了一个iOS设备接口,接下来就是通过tcpdump抓取这个接口上的数据包

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

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

  • -i rvi0 选择需要抓取的接口为rvi0(远程虚拟接口)
  • -s 0 抓取全部数据包
  • -w dump.pcap 设置保存的文件名称
  • tcp 只抓取tcp包

当tcpdump运行之后,你可以在iOS设备上开始浏览你想抓取的App,期间产生的数据包均会保存到dump.pcap文件中,当想结束抓取时直接终止tcpdump即可

接下来就是需要处理抓取的数据,目前通过tcpdump保存的dump.pcap保存的是原始数据,但是一些常用的抓包软件(比如Chales)是解析不了的,所以需要做一个转换。

打开终端,我们需要使用tcprewrite这款工具,如果没有安装的话,可以通过HomeBrew快速安装

brew install tcpreplay

我们需要的tcprewrite是tcpreplay套件中的一个工具,当安装完成后,输入

tcprewritedlt=enetenet-dmac=00:11:22:33:44:55enet-smac=66:77:88:99:AA:BBinfile=dump.pcapoutfile=dumpFinal.pcap

如果没有报错就说明转换成功,之后使用Chales打开dumpFinal.pcap就可以查看到刚才的数据包了。

屏幕快照 2013 03 05 上午11 07 551

----------------最近在这里看到一篇相似题材的文章。前面介绍的方案大致相同,后面倒是介绍了一下,使用HAR来查看http包。也收录在这里做为补充吧。










以下转自:http://blog.csdn.net/phunxm/article/details/38590561

Mac OS X上使用Wireshark抓包






Wireshark针对UNIX Like系统的GUI发行版界面采用的是X Window(1987年更改X版本到X11)。Mac OS X在Mountain Lion之后放弃X11,取而代之的是开源的XQuartz(X11.app)。因此,在Mac OS X上安装Wireshark之前,需要先下载安装XQuartz。

1.安装XQuartz

XQuartz(XQuartz-2.7.6.dmg)安装完成后,按照提示需要注销重新登录,以使XQuartz作为默认的X11 Server。


安装成功后,在终端输入xterm --help”可查看命令行帮助,输入xterm --v”可查看xterm版本信息在终端输入xterm”或通过菜单“Applications->Terminal”可启动X Window(XQuartz)的终端(xterm)。


2.安装Wireshark

安装OS X 10.6 and later Intel 64-bit版本(Wireshark 1.12.0 Intel 64.dmg)。


安装成功后,在终端输入wireshark --help”可查看命令行帮助,输入wireshark --v”可查看wireshark版本信息


3.启动Wireshark

首次启动Wireshark,提示通过前端X11窗口可以操控Wireshark;由于需要编译字体包,可能需要耗费几分钟。


如果事先没有安装X11(XQuartz),则会提示引导安装X11。


如果事先已经安装好XQuartz(X11),则会引导选择X11.app所在路径。


点击Browse到“/Applications/Utilities/XQuartz.app”,将XQuartz作为Wireshark的X11前端。


如果不出意外的话,Wireshark将成功启动。



4.选择网卡, 开始抓包

点击启动首页中的“Interface List”(相当于菜单“Capture->Interfaces”),可以查看本机活跃网卡(通过系统菜单Apple->About This Mac->More Info->Overview->System Report或终端命令ifconfig也可查看)。


由于本人iMac使用无线接入,故en1(Wireless NIC)和lo0(本机环路)活跃(active),有线网卡en0(Wired NIC)未使用(inactive)。

这里可以直接勾选en1,点击Start按钮使用默认Capture Options(默认勾选了混杂模式[promiscuous mode])进行抓包;可以在启动首页点选“Wi-Fi:en1”打开“Edit Interface Settings”,设置(例如可配置Capture Filters只捕捉指定类型或条件的数据包)或使用默认Capture Options开始抓包;也可以从菜单“Capture->Options”着手,选择网卡设置选项开始抓包。



这里选择了无线网卡(Wi-Fi: en1),怎么抓到的是以太网包(Ethernet Packet)呢?实际上它是某些BSD提供的伪以太网头(fake Ethernet headers)。如果要抓取IEEE802.11无线包(Beacon Frame等),则需要开启监听模式[monitor mode],并且将Link-layer header type选为802.11系列选项。

另外,在Display Filters中填写了“http”,将从捕捉到的数据包中过滤出并只显示HTTP协议包。


5.监听抓取802.11无线帧

在“Edit Interface Settings”或“Capture Options”中勾选“Capture packets in monitor mode”开启监听模式,然后勾选Link-layer header type为“802.11”开始抓取无线包。



说明:

(1)iMac开启Monitor Mode时,可能会阻塞网卡导致上不了网,参见下文相关说明。

(2)Windows下抓取802.11无线帧Management/Control/DataFrame),需要Wireshark配合AirPcap或使用OmniPeek

(3)常见802.11无线帧(802.11 frames)类型:

(1)Management Frame

Type/Subtype: Beacon frame (0x0008,Bit[5:0]=00,1000B)

Type/Subtype: Probe Response (0x0005,Bit[5:0]=00,0101B)

(2)Control Frame

Type/Subtype: 802.11 Block Ack (0x0019,Bit[5:0]=01,1001B)

Type/Subtype: Request-to-send (0x001b,Bit[5:0]=01,1011B)

Type/Subtype: Clear-to-send (0x001c,Bit[5:0]=01,1100B)

Type/Subtype: Acknowledgement (0x001d,Bit[5:0]=01,1101B)

(3)Data Frame

Type/Subtype: Data (0x0020,Bit[5:0]=10,0000B)

Type/Subtype: Null function (No data) (0x0024,Bit[5:0]=10,0100B)

Type/Subtype: QoS Data (0x0028,Bit[5:0]=10,1000B)

Type/Subtype: QoS Data + CF-Ack + CF-Poll (0x002b,Bit[5:0]=10,1011B)


6.通过RVI抓取iPhone数据包

(1)RVI简介

使用Mac抓取iPhone数据包可通过共享和代理两种方式:

  • 使用Mac的网络共享功能将Mac的网络通过WiFi共享给iPhone连接;
  • 使用代理软件(例如Charles)在Mac上建立HTTP代理服务器。

这两种方式都是将iPhone的网络流量导入到Mac电脑中,通过Mac连接互联网。这就要求Mac本身是联网的,对于网络共享的方式还要求Mac本身的网络不能使用WiFi,而且在iPhone上只能使用WiFi连接,无法抓取到2G/3G网络包。

苹果在iOS 5中新引入了“远程虚拟接口(Remote Virtual Interface,RVI)”的特性,可以在Mac中建立一个虚拟网络接口来作为iOS设备的网络栈,这样所有经过iOS设备的流量都会经过此虚拟接口。此虚拟接口只是监听iOS设备本身的协议栈(但并没有将网络流量中转到Mac本身的网络连接上),所有网络连接都是iOS设备本身的,与Mac电脑本身联不联网或者联网类型无关。iOS设备本身可以为任意网络类型(WiFi/2G/3G),这样在Mac电脑上使用任意抓包工具(tcpdump、Wireshark、CPA)抓取RVI接口上的数据包就实现了对iPhone的抓包。

Mac OS X对RVI的支持是通过终端命令rvictl提供的,在终端(Terminal)中输入“rvictl ?”命令可查看帮助:

==================================================

rvictl Options:

           -l, -L                     List currently active devices

           -s, -S                     Start a device or set of devices

           -x, -X                    Stop a device or set of devices

==================================================

(2)使用rvictl -s命令创建虚拟接口

首先,通过MFI USB数据线将iPhone连接到安装了Mac OS+Xcode 4.2(or later)的Mac机上。iOS 7以上需要搭配Xcode 5.0(or later),抓包过程中必须保持连接。

然后,通过iTunes->Summary或者Xcode->Organizer->Devices获取iPhone的UDID(identifier)。

接着,使用“rvictl -s”命令创建RVI接口,使用iPhone的UDID作为参数。

==================================================

$rvictl -s <UDID>

==================================================

创建成功后,在终端通过ifconfig命令可以看到多了一个rvi0接口。当有多个iOS设备连接iMac时,依次是rvi1,rvi2…,使用“rvictl -l”命令可以列出所有挂接的虚拟接口。

在Wireshark首页选择rvi0,使用默认的Capture Options即可开始对iPhone进行抓包。


下图为抓取的WiFi数据包:


其中iPhone手机连接WiFi动态获取的IP地址为192.168.199.230。

下图为抓取的3G数据包:


说明:联通3G上网动态分配的都是172.20网段(例如172.20.124.251)的这种B类私网地址(172.16.0.0~172.32.255.255)。手机百度中输入IP,ip138中显示的112.97.24.178是深圳联通附近基站对外的公网网关IP地址。

(3)使用rvictl -x命令删除虚拟接口

使用”rvictl -x“命令删除RVI接口,使用iPhone的UDID作为参数。

==================================================

$rvictl -x <UDID>

==================================================


7.关于监控模式(Monitor Mode)

(1)《Wireshark FAQ》:Q 10.1: How can I capture raw 802.11 frames, including non-data (management, beacon) frames?

NOTE: an interface running in monitor mode will, on most if not all platforms, not be able to act as a regular network interface; putting it into monitor mode will, in effect, take your machine off of whatever network it's on as long as the interface is in monitor mode, allowing it only to passively capture packets.

This means that you should disable name resolution when capturing in monitor mode; otherwise, when Wireshark (or TShark, or tcpdump) tries to display IP addresses as host names, it will probably block for a long time trying to resolve the name because it will not be able to communicate with any DNS or NIS servers.

 (2)AirSnort FAQ》:Q 3: What is the difference betwen monitor and promiscuous mode?

Monitor mode enables a wireless nic to capture packets without associating with an access point or ad-hoc network. This is desirable in that you can choose to "monitor" a specific channel, and you need never transmit any packets. In fact transmiting is sometimes not possible while in monitor mode (driver dependent). Another aspect of monitor mode is that the NIC does not care whether the CRC values are correct for packets captured in monitor mode, so some packets that you see may in fact be corrupted.


8.关于Wireshark的BPF权限问题

实际上,我在OS X 10.9.4上安装XQuartz+Wireshark非常顺利,没有出现什么诸如无法发现网卡(nointerface available)的权限问题。

安装前执行“ls -l /dev/bpf*”,bpf0/bpf1/bpf2/bpf3只有“rw-------”权限;安装完成时,再次执行“ls -l /dev/bpf*”,发现权限已经升级为了 “rw-rw----”,即Wireshark已经给当前安装使用Wireshark的user(administrator)所在的group配置了rw权限。相当于执行过“sudo chmod g+rw /dev/bpf*”,并且已经被配置到随机启动,下次开机不用重新执行该命令。

--------------------------------------------------------------------------------

/CapturePrivileges- you must have sufficient privileges to capture packets, e.g. special privileges allowing capturing as a normal user (preferred) or root / Administrator privileges.

In order to capture packets under BSD (including Mac OS X), you must have read access  to the BPF devices in /dev/bpf*.

Enabling and using the "root" user in Mac OS X

Platform-Specific information about capture privileges

Howto securely configure Mac OS X for network packet sniffing with Wireshark

--------------------------------------------------------------------------------


9.关于数据包的源/目的地址

以第4节中GET http://blog.csdn.net/phunxm为例,仅做简单的分析。

###############################################################

发包的源MAC/IP地址为本机MAC/IP地址。
(1)Destination Mac为00:00:0c:07:ac:24(CISCO All-HSRP-routers_24)
socket编程通常在IP层以上进行,一般不关心MAC地址。我们的电脑也不可能与CSDN博客服务器直接相连,一般要经过很多中间节点(hops)。根据邻居协议,目的MAC地址为下一跳(next hop,[default] gateway/Router)的MAC地址。
通过Network Utility或“route -n get default”或“netstat -rn”命令可获得默认网关为10.64.66.1。通过“arp -a”显示“? (10.64.66.1) at0:0:c:7:ac:24 on en1 ifscope [ethernet]”。
(2)Destination IP为10.14.36.100
按道理,目的IP地址应该为CSDN博客服务器(blog.csdn.net)主机的IP117.79.157.201),为什么这里的却为A类私网地址(10.14.36.100)呢?

这是因为内网使用了HTTP Proxy,10.14.36.100是proxy.pac基于域名判断出口返回的Proxy Server的IP地址。

###############################################################

收包HTTP/1.1 200 OK)的目的MAC/IP地址为接收方(本机)的MAC/IP地址。

(1)源IP地址为Proxy Server的IP地址,同上。

(2)源MAC地址一般应为【默认】网关的MAC地址(进出都要过关),实际抓包却发现MAC地址并非【默认】网关的MAC地址,这是什么情况呢?

通过Windoze的“route print”或Mac OS X/UNIX的 “netstat -r”可查看路由表(Routing Tables)信息。通过Windoze的“tracert  10.14.36.100”或Mac OS X/UNIX的“traceroute 10.14.36.100”查看本机到代理10.14.36.100之间的路由信息,第一跳并非默认网关(10.64.66.1),而是10.64.66.2!

这是因为采用了热备路由(HSRP),HSRP协议利用优先级决定哪个路由器成为活动路由器,收包的那个陌生源MAC地址即是热备路由(10.64.66.2)的MAC地址!


10.在越狱iPhone上指定网卡(WiFi/xG)抓包

上文主要讲解的是在不越狱正常权限情况下,通过RVI虚拟接口挂钩抓取iPhone数据包,一台iPhone通常只对应一个RVI虚拟接口。但是iPhone本身支持两种上网模式——WiFi/xG(类似PC工作站多网卡情形),当xG和WiFi同时活跃时(en0为无线网卡,pdp_ip0为3G网卡),iOS将WiFi作为优先默认路由通道。

那么,当需要调试分析xG/WiFi切换或并存时的一些路由策略或临界流量问题时,如何抓取指定通道(WiFi/xG)的数据包呢?使用RVI通过包源IP可能可以区分,但是由于权限等问题,总是不那么方便。此时,通过越狱,在iPhone上安装远程登录工具包(OpenSSH)、网络诊断分析命令行工具network-cmds(arp,ifconfig,ping,traceroute,netstat),然后在WinPC或iMac上通过SSH隧道发送tcpdump命令指定WiFi/xG网卡进行抓包(SSH远程控制iPhone运行tcpdump抓包),最后通过Wireshark对pcap文件进行分析或统计


参考:

Getting a Packet Trace with Sniffing Tools under OS X


Wireshark 数据包分析实战

Wireshark capture under Mac OS X

Launching Wireshark 1.10.0 on Mac OS X Mountain Lion

Mac OS X Lion使用Wireshark远程抓包


在MAC电脑上抓取iPhone数据包的方法

iOS APP网络分析之RVI在iOS设备上使用RVI进行抓包

iOS联网在MAC机器上进行抓包使用数据线+RVI调试iPhone网络流量

升级iOS7后利用RVI和Wireshark抓包失效?Mavericks- cannot capture from iPhone using RVI


Wireshark抓包针对无线网卡的设置使用Wireshark抓取无线网卡的数据包

About Wireless Diagnostics》 OSX Lion Wi-Fi Diagnostics


蹭WiFi那点破事浅析无线网络数据窥探技术

Mac OS安装AircrackAircrack 无线破解详细解说Aircrack-ng破解WEP、WPA-PSK加密利器


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值