一、Fiddler簡介
Fiddler是最強大最好用的Web調試工具之一, 它能記錄所有客戶端和服務器的http和https請求。允許你監視、設置斷點、甚至修改輸入輸出數據。Fiddler包含了一個強大的基於事件腳本的子系統,並且能使用.net語言進行擴展。換言之,你對HTTP 協議越了解,你就能越掌握Fiddler的使用方法。你越使用Fiddler,就越能幫助你了解HTTP協議。Fiddler無論對開發人員或者測試人員來說,都是非常有用的工具。
二、Fiddler的工作原理
Fiddler 是以代理web服務器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。 當Fiddler退出的時候它會自動注銷, 這樣就不會影響別的程序。不過如果Fiddler非正常退出,這時候因為Fiddler沒有自動注銷,會造成網頁無法訪問。 解決的辦法是重新啟動下Fiddler。
個人理解:fiddler是一個抓包工具,當瀏覽器訪問服務器會形成一個請求,此時,fiddler就處於請求之間,當瀏覽器發送請求,會先經過fiddler,然后在到服務器;當服務器有返回數據給瀏覽器顯示時,也會先經過fiddler,然后數據才到瀏覽器中顯示,這樣一個過程,fiddler就抓取到了請求和響應的整個過程。
正常退出方式:
Fiddler界面
三、http協議介紹
協議是指計算機通信網絡中兩台計算機之間進行通信所必須共同遵守的規定或規則,超文本傳輸協議(HTTP)是一種通信協議,它允許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。
HTTP協議的主要特點
1.支持客戶/服務器模式
2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。 請求方法常用的有GET、HEAD、POST。 每種方法規定了客戶與服務器聯系的類型不同。由於HTTP協議簡單, 使得HTTP服務器的程序規模小,因而通信速度很快。
3.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
4.無連接: 無連接的含義是限制每次連接只處理一個請求。 服務器處理完客戶的請求, 並收到客戶的應答后, 即斷開連接。 采用這種方式可以節省傳輸時間。
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
HTTP協議之請求
http請求由三部分組成,分別是:請求行、消息報頭、請求正文
請求方法有多種, 各個方法的解釋如下:
GET請求獲取Request-URI所標識的資源
POST在Request-URI所標識的資源后附加新的數據
HEAD請求獲取由Request-URI所標識的資源的響應消息報頭
PUT請求服務器存儲一個資源, 並用Request-URI作為其標識
DELETE請求服務器刪除Request-URI所標識的資源
TRACE請求服務器回送收到的請求信息,主要用於測試或診斷
CONNECT保留將來使用
OPTIONS請求查詢服務器的性能,或者查詢與資源相關的選項和需求
應用舉例:
GET方法在瀏覽器的地址欄中輸入網址的方式訪問網頁時, 瀏覽器采用GET方法向服務器獲取資源,eg:GET /form.html HTTP/1.1 (CRLF)
POST方法要求被請求服務器接受附在請求后面的數據, 常用於提交表單。
HTTP協議之響應
在接收和解釋請求消息后,服務器返回一個HTTP響應消息。
HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭、響應正文
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操作
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
常見狀態代碼、狀態描述、說明:
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤, 不能被服務器所理解
401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden //服務器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在,eg: 輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間后可能恢復正常
四、Fiddler抓包解析
1.左側面板
抓包工具面板功能
# :HTTP Request的順序,從1開始,按照頁面加載請求的順序遞增。
Result : HTTP響應的狀態 Protocol:請求使用的協議(如HTTP/HTTPS)
HOST:請求地址的域名 URL:請求的服務器路徑和文件名,也包含GET參數
BODY:請求的大小,以byte為單位
Content-Type:請求響應的類型
Caching:請求的緩存過期時間或緩存控制header的值
Process:發出此請求的Windows進程及進程ID
Comments :用戶通過腳本或者菜單給此session增加的備注
custom:用戶可以通過腳本設置的自定義值
2.右側面板
Statistics統計頁簽
通過該頁簽, 用戶可以通過選擇多個會話來得來這幾個會話的總的信息統計,比如多個請求和傳輸的字節數。選擇第一個請求和最后一個請求, 可獲得整個頁面加載所消耗的總體時間。從條形圖表中還可以分別出哪些請求耗時最多, 從而對頁面的訪問進行訪問速度優化
inspectors檢查頁簽
它提供headers、textview、hexview,Raw等多種方式查看單條http請求的請求報文的信息,它分為上下兩部分:上部分為HTTP Request(請求)展示,下部分為HTTPResponse(響應)展示
AutoResponse自動響應頁簽
Fiddler最實用的功能, 它可以抓取在線頁面保存到本地進行調試, 大大減少了在線調試的困難, 可以讓我們修改服務器端返回的數據, 例如讓返回都是HTTP404或者讀取本地文件作為返回內容。
可設置打開某網頁顯示自己想要的內容,比如抓取百度鏈接,點擊add rule,設置如下所示:
到百度頁面刷新即可顯示該圖片
composer構建頁簽
支持手動構建和發送HTTP, HTTPS和FTP請求, 我們還可以從web session列表中拖曳session, 把它放到composer選項卡中, 當我們點擊Execute按鈕, 把請求發送到服務器端。操作如下圖所示:
這樣設置發送的請求,就不是瀏覽器發出的了,而是fiddler發出的,查看inspectors里面的信息便可看出
log日志頁簽: 打印日志
Filters過濾頁簽
過濾器可以對左側的數據流列表進行過濾, 我們可以標記、 修改或隱藏某些特征的數據流。
Timeline時間軸頁簽
時間軸,也稱為Fiddler的瀑布圖,展示網絡請求時間的功能。 每個網絡請求都會經歷域名解析、建立連接、發送請求、接受數據等階段。把多個請求以時間作為 X 軸, 用圖表的形式展現出來, 就形成了瀑布圖。 在左側會話窗口點擊一個或多個(同時按下 Ctrl 鍵),Timeline 便會顯示指定內容從服務端傳輸到客戶端的時間
五、Fiddler命令行工具
Fiddler的左下角有一個命令行工具叫做QuickExec,允許你直接輸入命令。
常見得命令有:
help : 打開官方的使用頁面介紹, 所有的命令都會列出來
cls : 清屏 (Ctrl+x 也可以清屏)
select : 選擇會話的命令, 選擇所有相應類型select image、select css、select html
?sometext : 查找字符串並高亮顯示查找到的會話列表的條目,?qq.com
>size : 選擇請求響應大小小於size字節的會話
=status/=method/@host:查找狀態、方法、主機相對應的session會話,=504,=get,@www.qq.com
quit:退出fiddler
Bpafter,Bps, bpv, bpm, bpu這幾個命令主要用於批量設置斷點
Bpafter xxx: 中斷 URL 包含指定字符的全部 session 響應
Bps xxx:中斷 HTTP 響應狀態為指定字符的全部 session 響應。
Bpv xxx:中斷指定請求方式的全部 session 響應
Bpm xxx:中斷指定請求方式的全部 session 響應,等同於bpv xxx
Bpu xxx:與bpafter類似。
六、Fiddler應用
1.手機抓包
①啟動Fiddler, 打開菜單欄中的 Tools > Fiddler Options, 打開“FiddlerOptions” 對話框
②在“Fiddler Options”對話框切換到“Connections” 選項卡, 然后勾選“Allowromote computers to connect” 后面的復選框, 然后點擊“OK” 按鈕
③在本機命令行輸入: ipconfig, 找到本機的ip地址。
④打開android設備的“設置” ->“WLAN”,找到你要連接的網絡,在上面長按,然后選擇“修改網絡”,彈出網絡設置對話框,然后勾選“顯示高級選項”(不同的手機,設置方法有所不同)
⑤在“代理” 后面的輸入框選擇“手動”,在“代理服務器主機名”后面的輸入框輸入電腦的ip地址,在“代理服務器端口”后面的輸入框輸入8888, 然后點擊“保存” 按鈕
⑥然后啟動android設備中的瀏覽器,訪問百度的首頁,在fiddler中可以看到完成的請求和響應數據
備注: 如果是Android模擬器中ip要填寫10.0.2.2,genymotion模擬器中ip要填寫:10.0.3.2,手機實機中ip填電腦的ip,端口就是burp或者fiddler監聽的端口 ,要處於同一網絡下
2.過濾功能
①選擇Filters頁簽,勾選use Filters勾選 Request Headers 中的 Hide if url contains 過濾項
②在里面輸入:REGEX:(?insx)/[^\?/]*\.(css|ico|jpg|png|gif|bmp|wav)(\?.*)?$
REGEX: 表示啟用正則表達式(?insx) 設置正則解釋的規則,忽略大小寫等。
此表達式表示過濾掉 url 中包括 css、ico、jpg 等后綴的請求
③勾選 Request Headers中的show only if URL contains,在里面輸入
REGEX:(?insx).*\.?baidu.com/home.* 只顯示: baidu.com/Home
Fiddler過濾指定域名
第二個選項是只監控以下網址,如只監控百度,在下面的輸入框里填上www.baidu.com
“No Host Filter”不設置hosts過濾
“Hide The Following Hosts”隱藏過濾到的域名
“Show Only The Following Hosts”只顯示過濾到的域名
“Flag The Following Hosts”標記過濾到的域名