一.介紹
Fiddler是一個http協議調試工具,能記錄並檢查電腦和互聯網之間的http通信,設置斷點,查看全部的「進出」fiddler的數據(cookie,html,js,css等文件)
一般可從如下3方面理解:css
代理服務器(proxy):Fiddler運行後在客戶端和服務器端之間建立一個代理服務器(地址是127.0.0.1,端口是:8888)客戶端對服務器的請求,服務器對客戶端的響應都要通過Fiddler建立的代理服務器。html
抓包工具(packet capture tool):因爲Fiddler運行後能建立代理服務器,可以記錄客戶端和服務器之間的全部http請求響應的數據,就是所謂的抓包。web
調試工具(debug tool):Fiddler能夠對http請求數據進行分析,修改,調試,還能夠設置斷點,調試web應用。json
二.原理
瀏覽器
啓動Fiddler後,Fiddler在客戶端和服務器之間建立代理服務器。
當客戶端向發送請求時,代理服務器先收到請求,而後再把請求轉發至web server。
web server收到Fiddler轉發的客戶端請求後,發送響應(response),Fiddler收到響應後再轉發給客戶端。緩存
Fiddler有兩種工做模式:流模式(Streaming Mode)、緩衝模式(Buffering Mode)。
流模式(Streaming Mode):Fiddler收到響應後當即返回給客戶端。
緩衝模式(Buffering Mode):Fiddler收到數據後先緩存,等待全部數據都準備好以後才返回給客戶端。 安全
三.下載
1.查看framework版本服務器
(1)打開資源管理器,在地址欄輸入「C:\Windows\Microsoft.NET\Framework」
(2)在文件夾下能夠看到多個文件夾,最高版本就是當前的Net Framework版本cookie
2.肯定Fiddler版本網絡
若是你的計算機上的framework的版本大於等於4.0,那麼就下載fiddler4,
若是小於4.0,就下載fiddler2.
fiddler2和fiddler4在功能上沒有太多的區別,只是在底層封裝上有稍微區別。
四.同類工具
httpwatch,firebug,wireshark
對比同類工具的優缺點:
httpwatch:ie的抓包工具
firebug:firefox的一個插件,超牛的web調試工具
fiddler2:一個網絡調試代理,用來檢測本地計算機和Internet之間全部的HTTP(s)通信。抓包fiddler2要比firebug 強,不過2者都只能 捕獲到http協議的。
WireShark:是一個網絡封包分析軟件,網絡封包分析軟件的功能是獲取網絡封包。應儘量顯示出最爲詳 細的網絡封包 資料,直接獲取網卡數據,系統底層抓包神器。
五.界面佈局
Fiddler默認佈局中,主要分爲6個區域。
菜單欄(Menu bar)
工具欄(Tools bar )
會話列表面板(Session list )
輔助功能面板(Axuxiliary function panel )
命令行控制檯(Command console)
狀態欄(Status bar)
(1)會話列表面板(Session list )
默認的Fiddler會話列表中有11個列項:
#,會話icon和HTTP請求的序列號,點擊可在順序和倒敘排列之間切換。
Result,HTTP響應狀態碼。
Protocol,請求使用的協議,如HTTP、HTTPS等。
Host,請求地址的域名。
URL,請求的服務器路徑和文件名,也包括GET參數。
Body,請求的大小以字節(byte)爲單位。
Caching,請求的緩存過時時間或緩存控制(Cache-control)、Header取值。
Content-Type,響應的類型。
Process,發出請求的本地進程名即進程ID(PID)。
Comments,用戶對會話的備註內容。
Custom,用戶經過腳本設置的自定義值,默認沒有(如IP等)。
(2)工具欄(Tools bar )
1.Winconfig,Windows 使用了一種稱爲「AppContainer」的隔離技術,使得一些進程的流量沒法捕獲,打開WinConfig後可設置解除隔離。
2.氣泡按鈕,給session list中的會話添加備註。選中一條回話,再點擊該氣泡按鈕可直接添加備註內容。
3.replay,對某條會話的請求進行重發。選中一條回話,按下該按鈕,session list末尾會看到一條新的會話請求,和原來的徹底同樣。
4.×號(delete),清空回話列表,帶篩選功能。點擊按鈕,彈出下拉列表,7個選項,按需求選擇不一樣選項刪除會話。
5. Go,對設置了斷點的請求繼續往下執行。
6. stream,在「流模式(Streaming Mode)」和「緩衝模式(Buffering Mode)」兩種代理模式之間切換,Fiddler默認爲緩衝模式,按下該按鈕爲流模式。
7. decode,把http請求裏的東西解壓出來。
8. keep:xx session,選擇session list中存放多少數量的會話。
9 .any process,靶向按鈕,點中靶向圖標再拖拽到目標進程(瀏覽器或其餘客戶端應用程序)進行監聽。
10. find,按關鍵詞查找會話,將查找到的會話以自定義的顏色標註出來。
11. save對當前捕獲到的會話進行保存,可經過file菜單打開已保存的會話。
12. 相機圖標,屏幕截圖,有5s倒計時,按住shift鍵盤可跳過倒計時直接截屏。
13. 秒錶圖標,計時器按鈕。第1次點擊開始計時,第2次結束計時,右鍵復位清零。
14 .browser,快速啓動瀏覽器。
15 .clear cache,該按鈕是清空瀏覽器緩存的快捷鍵。
16 .Textwizard,字符編碼、解碼,字符集轉換工具。
17 .tearoff,讓輔助面板浮動起來(或者說和主窗口分離開來,曾爲一個獨立的窗口)
18. MSDN搜索框,Microsoft Developer Network在線搜索。
19. Fiddler官方在線幫助
20. 網絡連接狀態,Online或Offline。
21. 關閉工具欄,關閉後可經過菜單「View」→「Show toolbar」開啓工具欄。
(3)控制檯
Fiddler的左下角有一個命令行工具叫作QuickExec,容許你直接輸入命令。
help 打開官方的使用頁面介紹,全部的命令都會列出來
cls 清屏 (Ctrl+x 也能夠清屏)
select 選擇會話的命令
?.png 用來選擇png後綴的圖片
bpu 截獲request
bpafter 截獲response
(4)輔助功能面板(Axuxiliary function panel )
a.統計報表
(1) 請求總數、請求包大小、響應包大小;
(2) 請求起始時間、響應結束時間、握手時間、等待時間、路由時間、TCP/IP傳輸時間;
(3) HTTP狀態碼統計;
(4) 返回的各類類型數據的大小統計以及餅圖展示。
b.時間軸
每一個網絡請求都會經歷域名解析、創建鏈接、發送請求、接受數據等階段。把多個請求以時間做爲 X 軸,用圖表的形式展示出來,就造成了瀑布圖。在Fiddler 中,只要在左側選中一些請求,右側選擇Timeline標籤,就能夠看到這些請求的瀑布圖
1)綠色的請求表示這是一個「有條件的請求」。HTTP 協議定義了 5 個條件請求頭部,最多見的兩個是「If-Modified-Since」和「If-None-Match」。服務器根據這兩個頭部來驗證本地緩存是否過時,若是過時則正常返回資源的最新版本;不然僅返回 304 Not Modified,瀏覽器繼續使用本地緩存。包含條件請求頭部的請求用綠色顯示,不然用黑色。
2)有陰影線的請求是緩衝模式下的請求,實心的是流模式下的請求。Fiddler 提供了緩衝(Buffering)和流(Streaming)兩種抓包模式:緩衝模式下,Fiddler 會在響應完成時纔將數據返回給應用程序(一般是瀏覽器),這種模式下能夠控制響應,方便地修改響應內容;流模式下,Fiddler 會實時返回響應數據給瀏覽器,但沒辦法控制響應。通常使用流模式,瀑布圖會更真實一些。這兩種模式能夠經過 Fiddler 的工具欄選擇。特別的,經過 Fiddler 的「AutoResponder」功能返回的響應,只能是緩衝模式。
3)請求條的不一樣顏色對應着不一樣類型的響應,根據響應頭的 MIME Type 來歸類。如淺綠色表示圖片類型的響應;深綠色是 JavaScript;紫色是 CSS;其它都是藍色。
4)請求中的黑色豎線,表示的是瀏覽器收到服務端響應的第一個字節這一時刻。這個時間受 DNS 解析、創建鏈接、發送請求、等待服務端響應等步驟的影響。
5)請求條後面的圖標表示響應的某些特徵。如軟盤圖標表示這個響應正文從本地得到,也就是說服務端返回了 304;閃電錶示這是 Fiddler 的「AutoResponder」的響應;向下的箭頭表示響應是 302,須要重定向;紅色感嘆號說明這個請求有錯誤發生(狀態碼是 4XX 或 5XX)。特別的,若是請求條後面有一個紅色的X,說明服務端響應完這個請求以後,斷開了鏈接。出現這種狀況通常有兩種可能:HTTP/1.0 的響應中沒有 Connection: Keep-Alive;或者是 HTTP/1.1 的響應中包含了 Connection: close。使用持久鏈接能夠省去創建鏈接的開銷,也能夠減少 TCP 慢啓動和其它擁塞控制機制帶來的影響,總之是好處多多。
6)請求前面的紅色圓圈表示這個鏈接是新建的,綠色表示是複用的。上面的圓圈表示的是瀏覽器到 Fiddler 的鏈接,下面的圓圈是 Fiddler 到服務端的鏈接。
六.http協議相關
(1)http:
協議是指計算機通訊網絡中兩臺計算機之間進行通訊所必須共同遵照的規定或規則,
超文本傳輸協議(HTTP)是一種通訊協議,它容許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器,目前咱們使用的是HTTP/1.1 版本。
(2)http消息結構
先看Request 消息的結構, Request 消息分爲3部分,
第一部分叫Request line,
第二部分叫Request header,
第三部分是body. header和body之間有個空行。
第一行中的Method表示請求方法,好比"POST","GET", Path-to-resoure表示請求的資源,
Request
Http/version-number 表示HTTP協議的版本號,當使用的是"GET" 方法的時候, body是爲空的。
Response
Response 消息中的第一行叫作狀態行,由HTTP協議版本號, 狀態碼, 狀態消息 三部分組成。
狀態碼用來告訴HTTP客戶端,HTTP服務器是否產生了預期的Response.
HTTP/1.1中定義了5類狀態碼, 狀態碼由三位數字組成,第一個數字定義了響應的類別
1XX —— 提示信息,表示請求已被成功接收,繼續處理
2XX —— 成功,表示請求已被成功接收,理解,接受
3XX —— 重定向,要完成請求必須進行更進一步的處理
4XX —— 客戶端錯誤,請求有語法錯誤或請求沒法實現
5XX —— 服務器端錯誤,服務器未能實現合法的請求
常見響應碼說明:
200:響應成功,這代表該請求被成功地完成,所請求的資源發送回客戶端
302:重定向,新的URL會在response 中的Location中返回,瀏覽器將會自動使用新的URL發出新的Request
304:表明上次的文檔已經被緩存了, 還能夠繼續使用,例如打開博客園首頁, 發現不少Response 的status code 都是304
[提示: 若是你不想使用本地緩存能夠用Ctrl+F5 強制刷新頁面]
400 : 客戶端請求與語法錯誤,不能被服務器所理解
403:服務器收到請求,可是拒絕提供服務
404 :找不到網頁,請求的資源不存在
500 : 服務器發生了不可預期的錯誤
503 :服務器當前不能處理客戶端的請求,一段時間後可能恢復正常
七.經常使用功能
1.Filters(過濾監控)
使用Filters能夠過濾掉不想要的session,看起來更方便。
Hosts過濾
Zone:指定只顯示內網(Intranet)或互聯網(Internet)的內容;
Host:指定顯示某個域名下的會話;
-No Host Filter:無HOST過濾;
Hide the following Hosts:只顯示以下HOST;
Flag the following Hosts:加粗顯示以下HOST;
輸入多個HOST,多個以前用半角逗號或者回車分隔;
支持通配符:*,baidu.com;
域名: 寫成 baidu.com ,不能寫https://baidu.com
2.AutoResponder(請求重定向)
3.Fiddler中設置斷點修改Request和Response
Fiddler最強大的功能莫過於設置斷點了,設置好斷點後,你能夠修改httpRequest的任何信息包括host, cookie或者表單中的數據。設置斷點有兩種方法:
第一種:打開Fiddler 點擊Rules-> Automatic Breakpoint ->Before Requests(這種方法會中斷全部的會話)
如何消除命令呢? 點擊Rules-> Automatic Breakpoint ->Disabled
第二種: 在命令行中輸入命令: bpu www.baidu.com (這種方法只會中斷www.baidu.com)
如何消除命令呢? 在命令行中輸入命令 bpu
4.模擬低速網絡(限速)
5.模擬 mock
訪問一個url,返回本身想要的結果。
json串本身寫的,保存txt格式,打開url後,產生session,用重定向,指向txt文件。而後強制刷新頁面,就能獲得想要的結果。
6.監聽HTTPS
Fiddler不只能監聽HTTP請求並且默認狀況下也能捕獲到HTTPS請求,
Tool -> Fiddler Option -> HTTPS下面進行設置,勾選上「Decrypt HTTPS traffic」,
若是沒必要監聽服務器端得證書錯誤能夠勾上「Ignore server certification errors」,也能夠跳過幾個指定的HOST來縮小或者擴大監聽範圍。
八.抓取Android機上的包
如今的Android應用程序幾乎都會和網絡打交道,因此在分析一個apk的時候,若是能夠抓取出其發出的數據包,將對分析程序的流程和邏輯有極大的幫助。
對於HTTP包來講,已經有不少種分析的方法了,例如用tcpdump,或者將要分析的程序跑在模擬器中而後直接在物理機上用WireShark抓包。可是如今愈來愈多的應用已經使用HTTPS協議來和服務器端交換數據了,這無疑給抓包分析增長了難度。
幸虧有一個工具Fiddler能夠用來解決這個問題。Fiddler是一個很是強大的Web調試工具,它的原理不一樣於WireShark。WireShark是讓網卡工做在混雜模式下,截取全部網絡上的數據包進行分析,而Fiddler本質上是一個HTTP/HTTPS代理服務器。
既然是代理服務器,那固然能夠拿到全部的包了。
這裏以Google Play爲例,來演示如何操做,步驟以下:
1)請確保你的Android設備和你安裝Fiddler的電腦都鏈接到一個WiFi AP上,兩臺機器在一個局域網段裏,
2)配置Fiddler抓取並解密HTTPS包
Fiddler默認是不抓取HTTPS包的,須要進行相應的配置。
打開Fiddler,選擇「Tools->FiddlerOptions...」在彈出的對話框中選擇「HTTPS」選項卡:勾選「Capture HTTPSCONNECTs」,接着勾選「Decrypt HTTPS traffic」。同時,因爲咱們是經過WiFi遠程連過來,因此在下面的選項框中選擇「...from remote clients only」。
若是你要監聽的程序訪問的HTTPS站點使用的是不可信的證書,則請接着把下面的「Ignore server certificate errors」勾選上。
接着切換到"Connections"選項卡:
監聽端口默認是8888,固然你能夠把它設置成任何你想要的端口。請必定要勾選上「Allow remote computers to connect」。
爲了減小干擾,能夠去掉「Act as system proxy onstartup」。
最後點「OK」退出,Fiddler就算是設置好了。
還有一點提醒你們注意,請必定記住將你本機上的防火牆關閉,筆者在這上面浪費了很多時間。
3)設置Android設備,添加上代理服務器
先查看一下安裝Fiddler的電腦的IP地址是多少,在cmd裏使用ipconfig命令就行了。
能夠看到,筆者電腦分配到的IP地址是192.168.11.8。這就是要在Android設備上設置的代理服務器地址,至於端口嘛,就是在前面設置的監聽端口,默認是8888。
好了,一切準備就緒,下面來設置Android設備上的代理服務器。
打開WiFi設置頁面,選擇要鏈接的AP,而且長按,在彈出的對話框中,選擇「修改網絡」。
在接下來彈出的對話框中,勾選「顯示高級選項」。在接下來顯示的頁面中,點擊「代理」,選擇「手動」。
在「代理服務器主機名」和「代理服務器端口」中寫上前面獲得的地址和端口,最後點「保存」。
最後,鏈接上這個無線AP就能夠了。
4)導證書到Android設備
Fiddler本質上是一個HTTPS代理服務器,其本身帶的證書顯然不會在Android設備的受信任證書列表裏。
有些應用程序會查看服務器端的證書是不是由受信任的根證書籤名的,若是不是就直接跳出。
因此,爲了保險起見,咱們要將Fiddler代理服務器的證書導到Android設備上。
導入的過程很是簡單,打開設備自帶的瀏覽器,在地址欄中輸入代理服務器的IP和端口,例如本例中咱們會輸入192.169.11.8:8888,進入以後會看到一個Fiddler提供的頁面:
點擊頁面中的「FiddlerRoot certificate」連接,接着系統會彈出對話框:
輸入一個證書名稱,而後直接點「肯定」就行了。
(若是安裝不了,把下載的cer證書文件複製到內存卡上,手機設置-高級設置-安全-從SD卡安裝,選擇fiddler證書安裝便可)
一切都設置完成了,咱們來抓包看看效果吧,打開Android設備上的「Google Play」,看看能拿到什麼:
看到了沒有,全都能拿出來,再結合其它的一些動態或靜態的分析方法,破解協議將變得容易一些。
最後,不得不提這種方法的一些優勢和缺點。
首先來談優勢,有如下幾點:
1)手機不須要root就能夠抓包;
2)能夠用真機抓包,有些程序是抗動態分析的,可以判斷本身運行在模擬器中。
缺點嘛,固然也有:
1)必需要用WiFi鏈接(這個很容易知足);
2)要抓包分析的應用程序必須本身支持代理服務器的設置。
原文連接:https://blog.csdn.net/lzmlc0109/article/details/78364263