天天看點

手機資料抓包以及wireshark技巧

本文主要讨論一種非常友善的抓取Android和iphone手機網絡資料包的辦法,以及介紹wireshark最常用的技巧

抓包工具介紹

(1).網頁抓包工具

   Chrome浏覽器插件

   FireBug 插件  

   HttpWatch

   Fiddler

   在浏覽器chrome和firefox中可以使用插件抓取網絡包,httpwatch會以插件的形式安裝在IE和firefox浏覽器中,對web請求進行抓包。而Fiddler則是一個獨立的程式,其原理是在啟動之後開啟對127.0.0.1:8888的端口進行監聽,并将計算機上的浏覽器的代理設定為指向其監聽的8888端口,這樣當浏覽器請求網頁的時候,會通過fiddler監聽的8888端口,這樣fiddler會擷取到所有請求的資料和web伺服器回複的資料。Fiddler可以自動對IE和非IE浏覽器的代理進行設定,打開fiddler之後,點選IE的“工具”— “Internet選項”—“連接配接”頁籤 – 點開“區域網路設定”  在彈出的對話框中你會發現 “代理伺服器”設定中的“為LAN使用代理伺服器”這個複選框是勾選上的,點選下面的“進階”按鈕,可以看到代理伺服器已經被設定為127.0.0.1:8888了。

如下圖:

手機資料抓包以及wireshark技巧
手機資料抓包以及wireshark技巧
手機資料抓包以及wireshark技巧

對非IE浏覽器的設定也是自動的,在fiddler的選項中可以看出來

點選fiddler的菜單“Tools”—“Fiddler Options…” 可以看到如下圖:

手機資料抓包以及wireshark技巧

點選圖中的“Copy BrowserProxy Confiuration URL”得到一個路徑,也就是BrowserPAC.js的路徑,該檔案是fiddler用來設定非IE浏覽器的代理的,至于是什麼原理,不太清楚,但是根據該js的注釋,以及fiddler選項連結的Tools tips提示,可以看出其作用就是設定非IE浏覽器的代理的

手機資料抓包以及wireshark技巧

這是fiddler軟體的智能之處,每當開啟fiddler軟體之後,他會自動對系統中安裝的浏覽器進行代理設定,關閉fiddler之後,他也會還原這些浏覽器的代理設定。

從這點上來講我覺得fiddler比httpwatch更加好用。而浏覽器的插件也可以滿足大部分的web抓包需求。

(2).網絡抓包工具

   Wireshark

   Sniffer

   這類工具主要原理是通過底層驅動,監視網卡上流過的資料,而這個資料包含網絡上所有的資料,包括從鍊路層一直到最上層應用層的所有資料包。這種抓包工具擷取的網絡資料包是最全面的,可以抓獲除了http協定之外的其他資料包。針對網卡捕獲,不需要設定。

Wireshark手機抓包

從網絡上面搜尋到的資料看,要抓取手機中app的網絡包有下面幾種方式:

(1).将tcpdump移植到Android平台,然後在指令行下啟動tcpdump進行抓包。Tcpdump程式實際上可以看作是wireshark的指令行版本,将該程式移植到Android平台直接抓包,這是一種最直接的抓包方式,然後将抓獲的資料封包件,從手機傳到windows系統上用wireshark打開進行分析,這種方式貌似不能用于蘋果手機。

(2).使用fiddler,在windows系統上打開fiddler軟體,該軟體會将我們的電腦變成一個代理,然後在手機上設定wifi網絡,将代理指定為開啟fiddler的那台電腦,并且端口設定為fiddler偵聽的8888端口,這時候使用手機通路的資料,就會通過該代理,在fiddler中就可以看到http的資料包。這種方法我試了半天怎麼都看不到資料包,不知道哪裡出問題了,根據原理,這種方式支援可以通過代理通路網絡的手機。是以從原理上說是支援Android和蘋果手機的。

(3).通過各種方式在pc電腦上建立wifi熱點,然後使用wireshark在pc電腦上監視該wifi熱點,通過手機連接配接該熱點通路網絡。這樣wireshark會擷取所有流經該熱點的資料包這種方式适用于所有能夠無線通路的手機,也就是說所有的Android和蘋果手機。

那麼如何在pc電腦上建立wifi熱點呢,有這麼幾種辦法:

(1).Win7電腦經過設定,可以将無線網卡設定為wifi熱點,這種方法我以前用過,可以成功,但是步驟繁瑣,而且不一定能夠成功,其他的windows系統估計就沒戲了。

(2).使用軟體自動建立wifi熱點,不需要自己手工配置,這樣的軟體有Connectify Hotspot,獵豹免費wifi,360免費wifi軟體,這幾個軟體我都使用過,比較好用,這種方式同樣也隻能針對有無線網卡的筆記本電腦,原理也是将筆記本電腦上的無線網卡建立熱點了,隻不過是軟體自動的,不需要人工設定,比方法1要友善。

注意:經過實驗發現,手機連接配接這種方式建立的熱點,所發送的資料,用wireshark去抓包,需要捕獲電腦上本身聯網的那個“網絡連接配接”,例如我的筆記本上面有一個“本地連接配接”,該連接配接是使用有線網絡的。我用獵豹免費wifi軟體建立一個熱點之後,我的電腦上多出一個“無線網絡連接配接3”,可以看到該“無線網絡連接配接3”是獵豹生成的,但是我抓包的時候,wireshark需要捕獲“本地連接配接”上的包,也就是我的手機通路的資料實際上還是使用的“本地連接配接”,通信IP也是“本地連接配接”上的IP位址,而在手機的wifi連接配接設定中看到的ip位址,在我抓的包中也搜不到,也就是說手機通過該熱點通路網絡,實際上還是使用的“本地連接配接”的IP位址,至于是什麼原理,我目前也不太清楚。但是下面要說的随身wifi硬體則與此不同,随身wifi是建立了網卡。

(3).使用随身wifi硬體。這種也是很友善的方法,而且比較穩定,對筆記本電腦和桌上型電腦都可以使用。我之前買了一個360的随身wifi(不是打廣告,本人對360公司不感冒,但是他的随身wifi做的确實還可以,同僚中有買小米wifi的,不太穩定)。隻要在360的官網上下載下傳驅動,直接插上随身wifi就可以使用,我推薦使用這種方法。

如果你用的是筆記本電腦可以使用方法2,如果是桌上型電腦器可以使用方法3。

下面重點說明,通過随身wifi建立熱點,然後使用wireshark抓包的辦法,其他方式建立熱點抓包的原理一樣,隻不過是建立熱點的方式不同而已,抓包過程沒有差別:

首先插入随身wifi:

手機資料抓包以及wireshark技巧

使用手機連接配接上面的wifi,然後打開“網絡和共享中心”,在裡面點選我們使用随身wifi建立的網絡連接配接:

手機資料抓包以及wireshark技巧
手機資料抓包以及wireshark技巧

裡面可以看到該連結的網卡實體位址,以及ipv6的位址資訊,這應該是随身wifi建立的一個網卡,之是以要檢視這些資訊,是因為我們要确定wireshark抓包的時候抓取那個網卡的資訊,一般電腦上有多網卡或者是有虛拟機可能也會生成虛拟網卡。

打開wireshark,選擇菜單“Capture”—“Interface”在彈出的對話框中有一列是IP欄,可以看到除了本機的網絡連接配接以外,好像其他的網絡連結這一欄顯示的都是IPv6的位址,其中我們可以找到與上面網絡連接配接資訊中比對的IP位址:

手機資料抓包以及wireshark技巧

還可以點選該條目右邊的“Details”按鈕,打開詳細資訊對話框,在“802.3(Ethernet)”頁籤中,可以看到網卡的實體位址,該實體位址與上面的網絡連接配接對話框中顯示的實體位址是對應的:

手機資料抓包以及wireshark技巧

這樣可以确定我們需要抓取哪個網卡的資料,确定之後,直接點選該條目的“Start”按鈕,使用連上該wifi的手機随便通路網絡,就可以抓取所有包了,如果嫌檢視網卡資訊麻煩,你可以把這幾個顯示有資料包的網卡都抓包試一下,就應該可以看出來随身wifi對應的是那個網絡連接配接了。

在手機上檢視連接配接該wifi被配置設定的IP位址資訊:

手機資料抓包以及wireshark技巧

在wireshark的抓包結果中,通過位址與http協定過濾出該位址172.24.160.3相關的資料包得到如下的結果:

手機資料抓包以及wireshark技巧

這些資料是我在小米手機上,通過UC浏覽器浏覽博格園電腦版網頁抓獲的所有資料包。

對于iphone手機的抓包過程沒有任何差別。該方法可以抓獲所有發送自手機的資料包,包括http與非http的所有資料包。

個人認為這種方式非常簡單友善,抓取的資料包全面,而且通過随身wifi設定熱點不需要任何繁瑣的配置,僅僅是安裝一個驅動而已,實際上随身wifi好像是建立了一個網卡。我們隻要用wireshark抓獲該随身wifi建立的網卡的資料就可以了。對于從事app開發的園友來說19塊錢買一個wifi是非常值得的,這會為你的調試,以及研究别人的協定提供非常大的幫助。

Wireshark常用技巧

本節主要講解wireshark使用的一些常用的技巧,其實主要是使用過程中,用的最為頻繁的一些包的篩選規則。

Wireshark中有兩種過濾器:

(1).捕獲過濾器:告訴wireshark我們隻需要捕獲滿足什麼條件的包,而不滿足條件的包則不需要捕獲。由于捕獲過濾器是在wireshark在捕獲過程中采用的,是以捕獲過濾器的過濾條件最多局限在傳輸層的協定,也就是可以通過ip和端口指定規則,而更加上層的應用層協定則不能用在捕獲過濾器中。

文法:

Protocol  Direction  Host(s)   Value  LogicalOperations  Other  expression

例子: tcp       dst              10.1.1.1  80     or             tcp   dst  10.2.2.2 3128

解釋:Protocol表示協定,Direction表示方向,Host指定IP位址,Value一般指定端口,可以使用邏輯操作連接配接其他的表達式來生成複合表達式。例如:

tcp dst port 8888

捕獲目的tcp端口為8888的包

ip src host 10.1.1.1

捕獲來源位址為10.1.1.1的包

host 10.1.1.1

捕獲目的或者來源位址為10.1.1.1的包

not icmp

捕獲除了icmp包的所有包

有關更多的捕獲過濾器請參考wireshark的文檔

(2).顯示過濾器:該過濾器是在已經抓到的包中篩選出自己想分析的資料包,也就是說該過濾器是在捕獲工作已經完成之後做的,其資料基礎就是已經捕獲到的那些資料包,該過濾器支援的協定就是wireshark能夠識别的所有協定,由于是在已經捕獲下來的包中進行篩選,是以該過濾器中的條件表達式可以支援所有的上層協定,其篩選條件也可以根據每個協定的不同部分進行篩選。下面以HTTP協定為例子:

手機資料抓包以及wireshark技巧

檢視所有http請求的資料包(包括GET,POST等等的請求,隻要是web請求都算)

手機資料抓包以及wireshark技巧

所有POST請求的資料包

手機資料抓包以及wireshark技巧

所有請求的URL中包含字元串”.jpg”的包

手機資料抓包以及wireshark技巧

所有http響應狀态碼為200的包

手機資料抓包以及wireshark技巧

可以看到HTTP協定有很多字段提供篩選,wireshark還支援matches操作符,進行正則篩選

手機資料抓包以及wireshark技巧

查找所有http請求URL中包含 /mvc/字元串并且請求的是帶參數的aspx頁面的包

關于各種協定的字段文檔可以查閱wireshark的文檔,都有詳細說明,包括協定的每個字段部分的含義。其實對于做app或者是web開發的來說常見的http篩選字段已經足夠用了

此外wireshark除了可以根據協定的每個字段的内容值進行篩選之外,還可以指定資料包中的第幾個位元組的二進制資料值進行篩選,這種通過包中二進制資料進行篩選的方法一般在socket的私有二進制協定中比較有用,這些協定一般是私有定義的,并且是基于二進制的協定,例如第幾個位元組表示什麼意思,wireshark肯定是不能識别這些包的,那麼我們可以自己根據二進制資料進行篩選

手機資料抓包以及wireshark技巧

篩選出ip源或目标位址為172.16.1.126 并且udp端口為50798 并且rtp包的第2個位元組的值是0xE0的包,這樣的包是rtp資料包一幀結束的包。

當然上面的例子我們是可以通過rtp協定的字段rtp.marker==1為條件來進行篩選的,舉上面的例子是為了說明如何根據包中的二進制資料值進行篩選。

Wireshark有非常強大的抓包與過濾功能,本節也僅僅列舉了其中最常用的篩選規則,在顯示過濾器的規則中wireshark可以根據每一層的協定進行篩選,例如網絡層(IP,ARP,ICMP等協定),傳輸層(TCP,UDP)等協定,應用層(HTTP,RTMP,RTSP等協定),各層協定的字段可以通過邏輯與(&&,and),或(||,or),非(|,not)等運算符連接配接成複合表達式進行過濾。

更加詳細的wireshark的過濾規則可以參考wireshark的官方文檔。

對部落格園提點建議:上傳相冊的圖檔要是能批量上傳就好了,每次寫篇文章,上傳十幾二十張圖檔非常痛苦

繼續閱讀