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 -version”可查看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所在路径。——最新版本的Wireshark 1.12.4 Intel 64.dmg貌似会自动识别已安装的X11路径而无需手动指定。

点击Browse到“/Applications/Utilities/XQuartz.app”,将XQuartz作为Wireshark的X11前端。——最新版本的Wireshark 1.12.4 Intel 64.dmg貌似会自动识别已安装的X11路径而无需手动指定。

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

4.选择网卡,开始抓包

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

(如果弹出错误提示“There are no interfaces on which a capture can be done.”,在终端输入sudo wireshark给wireshark授root权限再重新登陆)

由于本人iMac使用无线接入,故en1(Wireless NIC)和lo0(本机环路)活跃(active),有线网卡en0(Wired NIC)未使用(inactive)。注意:MBP上无线网卡是en0,可通过ifconfig区分识别。

这里可以直接勾选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文件进行分析或统计。

Mac下抓包的更多相关文章

  1. Mac 下抓包工具 Charles 修改特定请求

    Charles 是 Mac 下常用的抓包工具,它通过将自己设置成系统的代理服务器,从而完成了抓包的工作. 同类的工具还有 fiddler 和 Wireshark,其中 fiddler 是微软公司使用 ...

  2. Mac下抓包工具Charles4.0下载及使用

    Charles是一款运行在你自己计算机上的web代理工具,可以有效地获取http通信信息,主要用于网页的开发和调试等. 安装 以下为来自史蒂芬周的博客的Charles 4.0 Mac破解版 下载地址: ...

  3. mac下抓包工具charles

    图片没带过来,想看截图的可以直接点击有道云笔记的链接: http://note.youdao.com/share/?id=f5c7369a0c1e1e37cdcd08a04d33be7e 1.下载 h ...

  4. iOS之 Mac下抓包工具使用wireshark

    主要是mac上面网卡的授权 分三个步骤:    1.wireshark安装        wireshark运行需要mac上安装X11,mac 10.8的系统上默认是没有X11的.先去http://x ...

  5. linux下抓包学习--tcpdump的使用

    一.为什么需要学这个 很多时候,开发环境上不会出现问题.但在测试或者现场时,总是会有很多莫名其妙的问题. 这时候,能在出问题的环境上,开启抓包,然后再去重现问题的话,这时候,就可以拿到第一手的资料了. ...

  6. 监控io性能、free、ps命令、查看网络状态、Linux下抓包 使用介绍

    第7周第2次课(5月8日) 课程内容: 10.6 监控io性能 10.7 free命令10.8 ps命令10.9 查看网络状态10.10 linux下抓包扩展tcp三次握手四次挥手 http://ww ...

  7. Linux centos7日常运维——监控io性能、free内存命令、ps进程命令、查看网络状态、linux下抓包

    一.监控io性能 Linux系统出现了性能问题,一般我们可以通过top.iostat.free.vmstat等命令来查看初步定位问题.其中iostat可以给我们提供丰富的IO状态数据. iostat ...

  8. 使用Wireshark mac下抓取分析iphone数据包 --IOS端

    mac系统版本:mac 10.10 Yosemite xcode版本:6.3.1 在追踪bug或者分析借鉴其他公司的app通讯思路时,抓包这件事是非常有必要的.下面说说Wireshark怎么截获iph ...

  9. linux下抓包工具tcpdump详解

    本文转自:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 简介 用简单的话来定义tcpdump,就是:dump the ...

随机推荐

  1. DD_belatedPNG.js解决透明PNG图片背景灰色问题

    <!--[]> <script type="text/javascript" src="http://www.phpddt.com/usr/themes ...

  2. Android-修改TabWidget字体大小颜色及对齐

    在Android中,我们可以定义TabWidget来分页.在上一篇文章中有说到使用TabWidget定义Tab分页布局,但大部分用户可能会觉得默认的字体有点小,但Tab选项卡默认又不能设定字体大小,如 ...

  3. HK&&CC JS学习:第一周——NO.2this

    1)常用的命名规范:     aXXXX:aBtn 说明获取的是一组元素:--类数组     oXXX:oBtn 说明获取的是一个元素->对象         对象有两个重要的特点:属性 和 方 ...

  4. Python入门(二)

    Python版本:Python 2.7.5 1.列表切片 >>> numbers = [1,2,3,5,6,7,8] >>> numbers[3] 5 >&g ...

  5. 记录一下git 的常用命令

    以后如果要写一个东西,最好先搭建一个本地仓库,用版本控制对其进行操作,可能一开始有一些麻烦,但是很有可能会受益无穷. 说到git,必然会和github联系起来. 不管是在ubuntu里面还是在Wind ...

  6. C#静态常量和动态常量的区别

    C#拥有两种不同的常量:静态常量(compile-time constants)和动态常量(runtime  constants).它们有不同的特性,错误的使用不仅会损失效率,还可能造成错误.相比之下 ...

  7. Angular2 架构

      1. 说明 Angular 2 是一个用 HTML 和 JavaScript (或者可以编译成JavaScript)来构建应用程序的框架.该框架包含了一系列的库. 在 Angular 里,我们这样 ...

  8. 【转】Android Studio系列教程六--Gradle多渠道打包

    原文链接:http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ 由于国内Android市场众多渠道,为了统计每个渠道的 ...

  9. securecrt设置 (外观,中文不乱码)

    最终效果图 这叫做先入为主,哈哈~~ 详细设置,action!!!! ############### 菜单栏:  选项---会话选项   一.终端---仿真 1.终端选择 linux 2.ANSI颜色 ...

  10. oracle中lead和lag函数 (转载)

    解决上一户和下一户问题这两个函数,是偏移量函数,其用途是:可以查出同一字段下一个值或上一个值. lead(col_name,num,flag) col_name是列名:num是取向下第几个值:flag ...