對終端進行抓包是客戶端測試中的一種重要手段。本文主要介紹了ios設備(iphone、ipad和ipodtouch)的幾種常用的抓包方法。
一、准備條件
需要進行抓包的設備必須經過root,俗稱越獄,主要利用redsn0w和各種iOSFirmwares進行,如越獄不用更換固件版本,只需使用 redsn0w安裝Cydia即可,網上有詳細教程,此處省略。安裝完畢,在3G或WiFi環境下啟動Cydia,確認身份為“開發者”,如下圖。

通過Cydia源,用戶可以下載和安裝比appstore更高權限的軟件,但是在Cydia源中下載程序時,如果ios設備鎖頻待機就會中斷下載。我們可以在“設置-通用-自動鎖定”中把時間設置為“永不”來防止待機。此外如果有同學發現在簡體中文環境下使用Cydia搜索會閃退,請不要驚慌,參見附錄即可解決該問題。
Root后的設備,如不及時修改密碼,容易被他人破壞你的系統,因此作為抓包的准備條件之一,請修改root密碼,初始密碼為alpine,可通過SSH連接訪問或者直接在ios設備上的MobileTerminal上進行密碼修改。
二、抓包方式
方法1:SSH連接訪問ios設備抓包(通過USB)--強烈推薦
【准備工作】
ios設備上安裝tcpdump
PC上安裝iPhoneTunnel(集成終端工具putty功能,附近中為免安裝版本)
【操作步驟】
1.用USB線纜連接手機與PC,確保手機連接正確,啟動iPhoneTunnel,綠燈表示TunnelStatus正常,此時點擊LaunchTerminal按鈕即可SSH進入手機,如下圖;

2.Putty出現一個提示窗口,如果你不是經常使用SSH,請直接點擊“否”即可,如下圖;

3.接着PuTTY會以root用戶身份嘗試登錄設備,並輸入root密碼;
4.使用tcpdump進行抓包(參見附錄),如下圖。

【方法點評】
通過USB方式直接SSH進入設備,無論設備在WiFi還是2G/3G下,都可以進行抓包,而且使用簡單,方法無局限性,值得采用。
方法2:SSH連接訪問ios設備抓包(通過WiFi)
【准備工作】
ios設備上安裝tcpdump(參見附錄)
PC上安裝putty(附近中為免安裝版本)
ios設備連接WiFi網絡,且與PC處於同一個網絡中,如無WiFi網絡,可使用PC作為熱點虛擬一個WiFi網絡供ios設備連接
【操作步驟】
1.在ios設備上查看ip地址(設置Wi-Fi中,點擊已連接WiFi右側的小箭頭可看到);
2.點擊putty,輸入設備的ip地址,並選擇連接類型為SSH,點擊打開,如下圖;

3.以下操作同方法1的2-4步。
【方法點評】
PuTTY是通過WiFi方式SSH進入到手機的,必須知道手機的IP地址,如果手機沒有WiFi就不能使用這種方法,因此該方法有一定的局限性。
方法3:直接在終端上操作進行抓包
【准備工作】
ios設備上安裝MobileTerminal、tcpdump(參見附錄)
【操作步驟】
1.點擊設備桌面“Teminal”圖標;
2.切換至root用戶登錄;
3.使用tcpdump進行抓包(參見附錄),如下圖。

【方法點評】
不受網絡條件制約,但由於是在終端上操作抓包,對ios設備來講,MobileTerminal切至后台就不再工作,因此該抓包方法可行性較低,盡管如此,MobileTerminal對終端測試人員來說依然是一款很實用的工具。
三、導出及其它
Pcap文件生成后可通過91手機助手(IOS版)將文件下載至PC,然后通過Wireshark或Ethereal打開文件,分析報文。
四、附錄
1.中文環境下Cydia搜索閃退問題解決方法
首先把系統語言改為英文,之后進入Cydia,添加第一中文源(
http://apt.178.com), 添加源的方法如下:進入Cydia,點擊Manage,然后點擊Source,進入后點擊右上角的Edit,再點擊左上角的Add,輸入源地址,點擊添 加,出現警告的話,點仍然添加。等待列表刷新完成即可,返回Cydia后在Manage>第一中文源下查找ios5Cydia中文崩潰解決補丁安裝 即可,如下圖。再次將系統切換至簡體中文后可正常使用Cydia搜索功能。

2.OpenSSH安裝
OpenSSH提供了服務端后台程序和客戶端工具,用來加密遠程控件和文件傳輸過程的中的數據。安裝完畢后,用戶才可以使用PC通過遠程訪問來控制終 端。啟動Cydia后點右下角的“搜索”,即可找到OpenSSH。進入安裝頁面,點擊右上角的Install完成安裝,如下圖。

3. MobileTerminal安裝
MobileTerminal是一款在iOS設備上使用的終端管理軟件,采用類似於命令行的非圖形界接口管理iOS設備的進程,運行並不依賴於 Openssh或者Telnet,是獨立運行於系統上的app程序。進入Cydia后在Manage>第一中文源下查找能與系統適配的 MobileTerminal並進行安裝,如下圖。

4.tcpdump安裝
通過91手機助手(IOS版)可在終端上安裝tcpdump,下載地址:http://apt.saurik.com/debs/如不確定哪一個適用自己手機,可對附件中的tcp安裝包進行全部安裝。
如果在安裝完畢后執行tcpdump提示libpcap的錯誤,需安裝libpcap,如不確定哪一個適用自己手機,可對附件中的lib安裝包進行全部安裝。
5.ios設備上tcpdump的使用
對於一些ios設備如iphone及ipad,既可以接入WiFi,也可以接入2G/3G,在使用tcpdump命令時請注意網口類型,WiFi接入時網卡為en0,而2G/3G接入時網卡為pdp_ip0,而網卡不指定時默認為pdp_ip0。舉例來說,
WiFi下抓包tcpdump -i en0 -X -s0 -wdata.pcap
2G/3G下抓包tcpdump -i pdp_ip0 -X -s0 -w data.pcap或tcpdump-X -s0 -w data.pcap
五、Q&A
(Ⅰ)如果SSH連接ios設備時提示“ServerUnexpectedly Closed Network Connection”,該怎么辦?
A:可通過重新安裝OpenSSH來嘗試解決問題。
(Ⅱ)如果在安裝了tcp安裝包和lib安裝包后執行tcpdump仍提示失敗,該怎么辦?
A:有可能是缺少libcrypto.0.9.8.dylib文件造成,可從其它ios設備usr/lib路徑下copy至本機再進行嘗試。
在進行iOS開發過程中,經常會遇到各種各樣的網絡訪問問題,以前苦於沒有抓包工具,很多網絡問題解決起來很痛苦。現在終於好了,本文提供兩種方式進行網絡抓包:
1. 網絡共享 + 可視化抓包工具
基本原理
原理比較簡單,ios設備通過代理方式共享連接mac電腦的無線網卡,使用抓包工具抓包,然后進行分析(我們推薦使用Wireshark,在MAC系統上也可以使用Paros工具)。
現在以MAC系統下Paros工具為例,詳細描述下抓包過程:
操作步驟:
1) 首先將MAC電腦的以太網共享給airport,使iOS設備能夠通過wifi連接
打開系統偏好設置,找到共享,選擇internet共享,在右側“通過以下方式將”選擇以太網,“連接共享給其他電腦”選擇airPort。
2) 打開paros ,設置paros的本地代理paros下載地址(http://www.parosproxy.org/)
在paros的tools-》options中選擇local proxy,在Address 中輸入AirPort的ip地址。輸入端口8080。打開系統偏好設置,找到網絡,選擇左側的AirPort,可以看到AirPort的地址為 169.254.69.225,將該地址填入到上面提到的Address欄中。
3) 使用ios設備連接mac共享出來的網絡:在iOS設備中,選擇設置-》通用-》網絡-》wifi,找到共享的網絡,加入。然后在該網絡的纖細內容中的http代理部分,選擇手動,輸入paros中設置的代理ip和端口。
4) 下面就可以使用paros來監控iOS設備的網絡,我們打開Safiri,在paros中即可察看到網絡的所有請求。
2. tcpdump命令 + 可視化抓包工具
基本原理
tcpdump命令是一個網絡的抓包的命令行,他能指定具體的設備,也能制定具體的五元組進行捕獲鏈路上的數據包。它可以再終端上打印出來也可以將捕獲到得數據寫入到一個文件,文件的格式是二進制形式,所以,我在打開該文件的時候才用的工具是UltraEdit。
當然也可以保存成Wireshark能夠識別的pcap格式,然后使用Wireshark進行查看。
操作步驟
1) 采用ssh登陸iphone手機,使用top命令獲取:
具體步驟如下:
a) 獲取設備IP地址(wifi地址):
b) 在PC上打開終端,輸入ssh root@IP地址:
輸入密碼:alpine (root用戶的默認密碼)
2) 通過“tcpdump -X -s0 -w /data.pcap”命令將tcp數據包保存到iOS設備的根目錄下。
3) 通過91助手等工具取出pcap文件,在Windows下使用雙擊使用Wireshark打開查看。
當然也可以不輸出到文件,tcpdump的命令格式和參數說明:
tcpdump [ -adeflnNOpqStvx ] [ -c 數量 ] [ -F 文件名 ]
[ -i 網絡接口 ] [ -r 文件名] [ -s snaplen ]
[ -T 類型 ] [ -w 文件名 ] [表達式 ]
選型介紹:
-a 將網絡地址和廣播地址轉變成名字;
-d 將匹配信息包的代碼以人們能夠理解的匯編格式給出;
-dd 將匹配信息包的代碼以c語言程序段的格式給出;
-ddd 將匹配信息包的代碼以十進制的形式給出;
-e 將捕獲的包數顯示出來
-f 將外部的Internet地址以數字的形式打印出來;
-l 使標准輸出變為緩沖行形式;
-n 不把網絡地址轉換成名字;
-t 在輸出的每一行不打印時間戳;
-v 輸出一個稍微詳細的信息,例如在ip包中可以包括ttl和服務類型的信息;
-vv 輸出詳細的報文信息;
-c 在收到指定的包的數目后,tcpdump就會停止;
-F 從指定的文件中讀取表達式,忽略其它的表達式;
-i 指定監聽的網絡接口;
-r 從指定的文件中讀取包(這些包一般通過-w選項產生);
-w 直接將包寫入文件中,並不分析和打印出來;
-T 將監聽到的包直接解釋為指定的類型的報文,常見的類型有rpc (遠程過程調用)和snmp(簡單網絡管理協議;)
在使用該命令的時候,我主要使用的主要選項是: -i [接口名] -w [文件名] -v -vv -c -X -e
例如:
我在從eth0捕獲100個數據包的時候,並將數據寫入到capture.cap文件中,命令格式為:
tcpdump -i eth0 -w capture.cap -v -vv -c 100 -X -e
抓取一個一個ip段之間的數據包:
tcpdump –s 0 –w socket host 10.1.3.9 and host 10.1.3.84
如果從eth0且通信協議端口為22,目標IP為192.168.1.100獲取數據:
tcpdump -i eth0 port 22 and src host 192.168.1.100
此外還有其他的一些關鍵詞:host,(主機) , net( 網關), port(端口) , src(源IP) , dst(目的IP), 正則表達式:and , or。
未越獄ios設備的抓包方法
2014-04-24 22:33 181人閱讀 評論(0) 收藏 舉報
Remote Virtual Interface
在iOS 5以后增加了RVI(Remote Virtual Interface),它讓我們使用OS X來抓取ios device上數據包。
基本的方法就是把設備通過USB連上mac上。然后為這台設備安裝RVI,這個虛擬的在Mac上的網卡,就代表這台ios設備的使用網卡。然后在mac上跑抓包的工具,定位到這個虛擬的網卡上,來抓包。
(1)安裝RVI,需要使用rvictl工具,以下步驟在mac的終端中操作:
$ # First get the current list of interfaces.
$ ifconfig -l
lo0 gif0 stf0 en0 en1 p2p0 fw0 ppp0 utun0
$ # Then run the tool with the UDID of the device.
$ rvictl -s 74bd53c647548234ddcef0ee3abee616005051ed
Starting device 74bd53c647548234ddcef0ee3abee616005051ed [SUCCEEDED]
$ # Get the list of interfaces again, and you can see the new virtual
$ # network interface, rvi0, added by the previous command.
$ ifconfig -l
lo0 gif0 stf0 en0 en1 p2p0 fw0 ppp0 utun0 rvi0
(2)安裝成功后,此時其實可以用任何抓包工具來抓取。包括wireshark等。因為這時就會看到一個rvi0的網卡。不過今天我們介紹的是通過tcpdump來搞。
在終端中輸入如下命令:
sudo tcpdump -i rvi0 -n -s 0 -w dump.pcap tcp
解釋一下上面重要參數的含義:
-i rvi0 選擇需要抓取的接口為rvi0(遠程虛擬接口)
-s 0 抓取全部數據包
-w dump.pcap 設置保存的文件名稱
cp 只抓取tcp包
當tcpdump運行之后,你可以在iOS設備上開始瀏覽你想抓取的App,期間產生的數據包均會保存到dump.pcap文件中,當想結束抓取時直接終止tcpdump即可。然后在mac中找到dump.pcap文件。用wireshark打開就ok。
(3)去掉RVI這個虛擬網卡,使用下面的命令:
$ rvictl -x 74bd53c647548234ddcef0ee3abee616005051ed
Stopping device 74bd53c647548234ddcef0ee3abee616005051ed [SUCCEEDED]
整個流程就是這樣的。自己動手操作一下吧。