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协议包。
在“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数据包可通过共享和代理两种方式:
这两种方式都是将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)主机的IP(117.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
capture under Mac OS X》
《Launching
Wireshark 1.10.0 on Mac OS X Mountain Lion》
《Mac OS X Lion使用Wireshark远程抓包》
《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》
《Mac OS安装Aircrack》《Aircrack
无线破解详细解说》《Aircrack-ng破解WEP、WPA-PSK加密利器》
Mac OS X上使用Wireshark抓包的更多相关文章
- 在Mac Os(苹果)上用手机抓包软件Charles抓取微信小程序中的高清无水印视频
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_118 手机抓包是一名测试工程师常备的技能,比如我想查看一个接口请求的参数.返回值,还有移动设备上的http请求.https请求,这 ...
- 云计算之路-阿里云上:Wireshark抓包分析一个耗时20秒的请求
这篇博文分享的是我们针对一个耗时20秒的请求,用Wireshark进行抓包分析的过程. 请求的流程是这样的:客户端浏览器 -> SLB(负载均衡) -> ECS(云服务器) -> S ...
- Mac+IPAD上使用wireshark抓包
首先先下载wireshark和Xquartz wireshark地址: http://www.wireshark.org/download.html Xquartz 地址:http://xquartz ...
- MAC Wireshark抓包IOS
网络抓包是个基础技能,对于网络协议的掌握有一定的要求.iOS上实现网络抓包可以用Charles(针对http和https),tcpdump(快速分析网络包),和Wireshare.之前写过一篇介绍tc ...
- Wireshark 抓包遇到 you don’t have permission to capture on that device mac 错误的解决方案
Wireshark 抓包遇到 you don’t have permission to capture on that device mac 错误的解决方案 上次有篇博客讲了如何利用wireshark ...
- wireshark 抓包分析 TCPIP协议的握手
wireshark 抓包分析 TCPIP协议的握手 原网址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇 ...
- Mac OS X 在捕捉AppLAN通信包
Mac OS X 在捕捉AppLAN通信包 一.拍摄模式 由于工作关系.经常要分析App wifi通讯协议.我的开发电脑是Mac Book. 大体有例如以下几种模式: + App与server进行ht ...
- Wireshark抓包分析/TCP/Http/Https及代理IP的识别
前言 坦白讲,没想好怎样的开头.辗转三年过去了.一切已经变化了许多,一切似乎从没有改变. 前段时间调研了一次代理相关的知识,简单整理一下分享之.如有错误,欢迎指正. 涉及 Proxy IP应用 原理/ ...
- 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制
关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...
随机推荐
- cf965c Greedy Arkady
呸,大傻逼题,我更傻逼ref #include <iostream> using namespace std; typedef long long ll; ll n, k, m, d, a ...
- Migrate a Domain-based Namespace to Windows Server 2008 Mode
TechNet Library Scripting with Windows PowerShell Windows and Windows Server Automation with Windows ...
- IOS开发---菜鸟学习之路--(十七)-利用UITableView实现个人信息界面
首先来看下我们要实现的效果 需要实现这样的效果 然后我们开始动手吧. 首先选择添加一个新的ViewController 然后打开XIB文件,添加一UITableView 并将样式设置为分组 同时将按住 ...
- 聊聊、Integer 封装特性
前几天在公司内部群,有人分享出了一道题,问谁能口算出来,他就膜拜那个人.题目如下: Class cache = Integer.class.getDeclaredClasses()[0]: Field ...
- yum 快速安装 Rabbitmq for CentOS6
1.安装CENTOS6的系统. 2.配置源 ,说明:https://github.com/rabbitmq/erlang-rpm To use Erlang 20.x on CentOS 6: # I ...
- sql 使用存储过程传递列名或表名作为参数
原网址: http://www.cnblogs.com/85538649/archive/2011/09/23/2186155.html alter procedure Proc_UpdateDate ...
- maven学习(六)——在别的项目中引用通过Maven安装生成的项目的jar包
1.新建HelloFriend项目,同时建立Maven约定的目录结构和pom.xml文件 HelloFriend | --src | -----main | ----------java | - ...
- proteus仿真 引脚显示电平变化但不能显示波形
proteus仿真 引脚显示电平变化但不能显示波形 原来是没有选择通道问题,proteus默认优先使用A通道才会显示波形,如果优先使用B,C,D通道,需要选择...
- Gym 100989F 水&愚&vector
standard input/output You must have heard about Agent Mahone! Dr. Ibrahim hired him to catch the che ...
- shell的使用
删除 http://blog.csdn.net/u011579204/article/details/46709929 #! /bin/bash dir=/webserver/test/(等号之间不能 ...