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 -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也可查看)。


由於本人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文件進行分析或統計。


參考:

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加密利器

BT5 + Wireshark玩wifi捕獲和中間人攻擊》《BT5 aircrack-ng破解無線密碼(wpa/wep)

發佈了5 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章