利用fiddler抓取Android app數據包
前言
做Android開發的朋友經常需要做網絡數據的獲取和提交表單數據等操作,然而對于調試程序而言,很難知道我們的數據到底是以怎樣的形式發送的,是否發送成功,如果發送失敗有是什么原因引起的。fiddler工具為我們提供了很方便的抓包操作,可以輕松抓取瀏覽器的發出的數據,不管是手機APP,還是web瀏覽器,都是可以的。
什么是fiddler
百度百科上是這樣說的:Fiddler是一個http協議調試代理工具,它能夠記錄并檢查所有你的電腦和互聯網之間的http通訊,設置斷點,查看所有的“進出”Fiddler的數據
fiddler下載:http://www.telerik.com/fiddler
fiddler的安裝就不用多說了,傻瓜是安裝。
fiddler的工作原理
fiddler是基于代理來實現抓取網絡數據包的工作的,當我們開啟fiddler以后,fiddler會將我們的瀏覽器的代理默認進行更改為127.0.0.1 端口是8888,這時fiddler的默認端口,也就是說我們發送的每一個請求和收到的每一個響應都會先經過fiddler,這樣就實現了抓取數據包的工作。
路徑:選項–>高級設置–>更改代理服務器設置–>局域網設置–>高級
fiddler常用功能
打開fiddler主界面如下:
我們一次從左到右來說明一下:
1.第一個類似于微信語音的小氣泡的圖標:給一個session回話添加comment,也就是添加備注功能。我們可以選中一個回話,然后為該回話添加備注,添加的備注會展示在該會話的comment選項上。
2.replay:
這個按鈕是用來回放一個會話,比如,我需要重新請求一個回話,可以選中該回話,然后點擊該按鈕,或者點擊鍵盤上的R鍵。
3.過濾請求:
如果我只想過濾從360瀏覽器發過來的請求,此時可以使用鼠標左鍵長按該按鈕,拖動到360瀏覽器的任何一個可視區域:
可以看到此時顯示只過濾360瀏覽器的包。
4.過濾session會話
從上圖 可以看到,這里我過濾了“baidu”這個關鍵字。
5.textWizard
這個選項卡的作用是將給定的字符串進行編碼或者解碼,如下圖:
6.斷點調試
可以看到,最底下有一個按鈕,當點擊該按鈕的時候會出現箭頭方向的變化。當箭頭向上的時候,我們的任何瀏覽器的請求都會阻塞,知道點擊go按鈕,才會執行。
7.控制臺的使用
在fiddler的最下面一個黑色的矩形框,這個是fiddler的命令行。我們可以在該命令行下輸入”help”跳轉到官方網站,這里有詳細的命令行教學。
常見的命令有:
1.cls清空所有會話
2.?.png 過濾所有圖片的請求
8.控制fiddler是否工作
在fiddler的左下方有一個按鈕,是用來控制fiddler是否作為代理服務器來抓取瀏覽器發送和接收的包的。當我點擊一下該按鈕,如果該按鈕顯示則表示fiddler處于工作狀態,如果該按鈕隱藏,表示fiddler不在作為代理服務器。
9.回話面板說明:
session會話的分析
這里我隨便選擇一個會話來進行簡單的分析。
替換服務器端返回的數據
利用”autoresponser”可以替換服務器端返回的文件,當調試的時候需要替換服務器端返回的數據的時候,比如一個已經上線的項目,不可能真正的替換器某一個文件,我們可以這樣來操作
從圖片當中,可以很清晰的看出,當我再次加載該會話的時候,會顯示之前設置好的404代理。
如果需要設置不同的文件代理,也是可以的。比如對于該會話,原本服務器端返回的內容如下圖:
由于該session返回的是一個圖片類型的,所以我選擇ImageView這個選項卡,可以看到此時返回的圖片的樣子,那么如果需要用本地的文件代理該返回的內容,和之前的操作步驟都是一樣的,只是在選擇代理的時候選擇本地文件即可,如下圖:
這次,我選擇了一個本地的文件作為代理,此時當我再次重新請求該會話的時候,會返回本地的文件:
可以看出這個時候該會話返回的內容已經是我本地的代理了。
fiddler網絡限速
fiddler還為我們提供了一個很方便的網絡限速的功能,通過網絡限速的功能,可以來模擬用戶的一些真實環境。fiddler提供了網絡限速的插件,我們可以在他的官網下載:http://www.telerik.com/fiddler/add-ons
點擊”download”,下載完成之后,點擊安裝,需要重新啟動fiddler,在重新啟動fiddler之后,可以看到fiddler的工具欄選項卡,多出了一個FiddlerScript選項。
比如我需要在請求之前延遲一段時間,可以這樣做:
在onBeforeRequest方法中加入這樣一段代碼”oSession[“request-trickle-delay”] = “3000”;”,那么如果需要在服務端響應之間做延遲只需要將”oSession[“request-trickle-delay”] = “3000”;”中的request替換成response即可。
利用fiddler抓取Android app數據包
終于到了今天的主題了,如何利用fiddler抓取Android app數據包,其實也是很簡單的,只需要稍微配置一下就可以了。由于fiddler默認是抓取http協議的數據包,我們需要其能夠抓取https這樣的加密數據包,抓取Android app數據包,需要做如下配置:
1.配置fiddler
點擊工具欄選項”tools–>FiddlerOptions”
配置https:
配置遠程連接:
這些配置完成之后,一定要重新啟動fiddler。
可以看到fiddler的默認端口是8888,我們可以現在瀏覽器上輸入”http://127.0.0.1:8888”
到這里為止我們的fiddler就配置完成了,接下來需要配置手機上的無線網絡。
2.手機無線網絡配置
注意:如果需要fiddler抓取Android app上的數據包,那么兩者必須在同一個無線網絡中。(同時,必要時請關閉電腦的防火墻)
在手機的無線網絡配置之前,必須要首先知道fiddler所在主機的ip地址:
可以看到我的fiddler所在主機,也就是我的電腦在無線網中的ip地址是192.168.1.109
打開手機設置中的無線網絡界面,進行如下四步操作:
選中連接的網絡,點擊修改網絡
點擊高級選項
代理—>手動
輸入代理服務器的ip,也就是我們fiddler所在主機的ip地址,和端口,fiddler默認的端口是8888,IP選項設置為”DHCP”
點擊保存,此時手機端就配置成功了,打開fiddler,使用打開網易新聞客戶端。
此時可以看到fiddler抓取的網易app發送和接收的相關數據包。
ok,左側是我們的所有會話,我隨機的選中一個會話,該會話是image類型的,查看該會話的內容,是我們網易新聞的頭條上的圖片。
總結
fiddler是一個很方便的抓取網絡數據包的工具,他是基于代理的方式來實現的。
注意:
1.關閉電腦的防火墻
2.如果需要抓取手機app的數據包,需要手機和電腦在都連接同一個無線網絡
3.抓完包以后將fiddler關閉(提高訪問網絡的速度)同時將手機上的代理關閉 (如果不關閉代理,當fiddler關閉,或者是兩者連接的不是同一無線網絡,手機會不能正常的訪問網絡)
ok,今天關于fiddler的基本學習,以及使用fiddler抓取app的網絡數據包,就到這里了。希望大家能夠喜歡。碎覺了。
來自: http://blog.csdn.net//mockingbirds/article/details/46402441