Filddler抓包

學習Fiddler的前置知識

B/S架構

  • B/S架構即瀏覽器和服務器架構模式

編寫程序部署到Web服務器html

web服務器運行在服務器上,綁定ip地址並監聽某端口,接受和處理http請求git

客戶端經過http協議h獲取服務器上的網頁、文檔等資源github

HTTP協議

  • Hyper Text Transfer Protocol (超文本傳輸協議)web

  • 用於從萬維網服務器傳輸超文本到本地瀏覽器的傳送協議windows

  • http協議是基於TCP的應用層協議,它不關心數據傳輸的細節,主要是用來規定客戶端和服務後端

    端的數據傳輸協議,最初是用來客戶端傳輸HTML頁面的內容,默認端口是80瀏覽器

  • http是基於請求與響應模式的,無狀態的、應用層的協議緩存

HTTP協議的主要特色

1.支持客戶/服務器模式服務器

2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。 請求方法經常使用的有GET、HEAD、POST。 每種方法規定了客戶與服務器聯繫的類型不一樣。因爲HTTP協議簡單, 使得HTTP服務器的程序規模小,於是通訊速度很快。網絡

3.靈活:HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。

4.無鏈接: 無鏈接的含義是限制每次鏈接只處理一個請求。 服務器處理完客戶的請求, 並收到客戶的應答後, 即斷開鏈接。 採用這種方式能夠節省傳輸時間。

5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。

完整的HTTP協議

  • 完整的HTTP協議包含請求和響應兩塊內容

HTTP報文

一、報文: HTTP在 應用層 交互數據的方式 (網絡中交換和傳輸的數據單元)

二、HTTP的報文分爲:請求報文 & 響應報文

HTTP請求報文

  • HTTP請求報文由四個部分組成:請求行、請求頭部、空行、請求數據。

img

請求頭

​ Accept:用於告訴瀏覽器,客戶機支持的數據類型

​ Accept-Charset:用於告訴服務器,客戶機採用的編碼

​ Accept-Encoding:用於告訴服務器,客戶機支持的數據壓縮格式

​ Accept-Language:客戶機的語言環境

​ Host:客戶機經過這個頭告訴服務器,想訪問的主機名

​ If-Modified-Since:客戶機經過這個頭告訴服務器,資源的緩存時間

​ Refer:客戶機經過這個頭告訴服務器,他是從哪一個資源來訪問服務器的(用於防盜鏈)

​ User-Agent:客戶機經過這個頭告訴服務器,客戶機的軟件環境

​ Authorization: 客戶端提供給服務端,進行權限認證的信息

​ Cookie:客戶機經過這個頭能夠向服務器帶數據​

HTTP響應報文

  • HTTP響應報文由四部分組成:狀態行、響應頭 、空行、響應體

img

響應頭

Location:這個頭配合302狀態碼使用,用於告訴客戶機找誰

​ Server:服務器經過這個頭,告訴瀏覽服務器的類型

​ Content-Encoding:服務器經過這個頭,數據的壓縮格式

​ Content-Length:服務器經過這個頭,告訴瀏覽器回送數據的長度

​ Content-Type:服務器經過這個頭,告訴瀏覽器回送數據的類型

​ Last-Modified:服務器經過這個頭,告訴瀏覽器當前資源緩存時間

​ Refresh:服務器經過這個頭,告訴瀏覽器隔多長時間刷新一次

​ Content-Disposition:服務器經過這個頭,告訴瀏覽器如下載方式打開數據

​ Transfer-Enconding:服務器經過這個頭,告訴瀏覽器數據的傳送格式

​ ETag:緩存相關的頭

​ Expires:服務器經過這個頭,告訴瀏覽器回送的資源緩存多長時間,-1或0,則是不緩存

​ Cache-Control:no-cache、 Pragma:no-cache :服務器經過這兩個響應頭,也是控制瀏覽器不要緩存數據

完整的http請求處理過程

(1) 創建或處理鏈接:接收請求或拒絕請求(三次握手的過程)

(2) 接收請求:接收來自於網絡上的主機請求報文中對某特定資源的一次請求的過程;

(3) 處理請求:對請求報文進行解析,獲取客戶端請求的資源及請求方法等相關信息;

(4) 訪問資源:獲取請求報文中請求的資源;

(5) 構建響應報文:響應客戶端請求;

(6) 發送響應報文

(7) 記錄日誌

請求方法

1) GET

傳遞參數長度受限制,由於傳遞的參數是直接表示在地址欄中,而特定瀏覽器和服務器對url的長度是有限制的。

所以,GET不適合用來傳遞私密數據,也不適合拿來傳遞大量數據。

通常的HTTP請求大多都是GET。

2)POST

POST把傳遞的數據封裝在HTTP請求數據中,以名稱/值的形式出現,能夠傳輸大量數據,對數據量沒有限制,也不會顯示在URL中。

表單的提交用的是POST。

3)HEAD

HEAD跟GET類似,不過服務端接收到HEAD請求時只返回響應頭,不發送響應內容。因此,若是隻須要查看某個頁面的狀態時,用HEAD更高效,由於省去了傳輸頁面內容的時間。

4)DELETE

刪除某一個資源。

5)OPTIONS

用於獲取當前URL所支持的方法。若請求成功,會在HTTP頭中包含一個名爲「Allow」的頭,值是所支持的方法,如「GET, POST」。

6)PUT

把一個資源存放在指定的位置上。

本質上來說, PUT和POST極爲類似,都是向服務器發送數據,但它們之間有一個重要區別,PUT一般指定了資源的存放位置,而POST則沒有,POST的數據存放位置由服務器本身決定。

7)TRACE

回顯服務器收到的請求,主要用於測試或診斷。

8)CONNECT

CONNECT方法是HTTP/1.1協議預留的,可以將鏈接改成管道方式的代理服務器。一般用於SSL加密服務器的連接與非加密的HTTP代理服務器的通訊。

狀態碼

  • 狀態碼:由3位數字組成,第一個數字定義了響應的類別
  1. 1xx:指示信息,表示請求已接收,繼續處理

  2. 2xx:成功,表示請求已被成功接受,處理。

    • 200 OK:客戶端請求成功
    • 204 No Content:無內容。服務器成功處理,但未返回內容。通常用在只是客戶端向服務器發送信息,而服務器不用向客戶端返回什麼信息的狀況。不會刷新頁面。
    • 206 Partial Content:服務器已經完成了部分GET請求(客戶端進行了範圍請求)。響應報文中包含Content-Range指定範圍的實體內容
  3. 3xx:重定向 - 要完成請求必須進行更進一步的操做

    • 301 Moved Permanently:永久重定向,表示請求的資源已經永久的搬到了其餘位置。
    • 302 Found:臨時重定向,表示請求的資源臨時搬到了其餘位置
    • 303 See Other:臨時重定向,應使用GET定向獲取請求資源。303功能與302同樣,區別只是303明確客戶端應該使用GET訪問
    • 307 Temporary Redirect:臨時重定向,和302有着相同含義。POST不會變成GET
    • 304 Not Modified:304告訴緩存器資源沒有被修改,而且響應體是空的,不會浪費帶寬。
  4. 4xx:客戶端錯誤 -請求有語法錯誤或請求沒法實現

    • 400 Bad Request:客戶端請求有語法錯誤,服務器沒法理解。
    • 401 Unauthorized:請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用。
    • 403 Forbidden:服務器收到請求,可是拒絕提供服務
    • 404 Not Found:請求資源不存在。好比,輸入了錯誤的url
    • 415 Unsupported media type:不支持的媒體類型
  5. 5xx:服務器端錯誤,服務器未能實現合法的請求。

    • 500 Internal Server Error:服務器發生不可預期的錯誤。
    • 503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間後可能恢復正常,

Fiddler簡介

  • Fillder是位於客戶端和服務器端的HTTP代理

  • 目前最經常使用的HTTP抓包工具之一

  • 功能很是強大,是Web調試的利器

    • 修改請求的數據,甚至能夠修改服務器返回的數據

    • 監控瀏覽器全部的HTTP/HTTPS流量

    • 查看、分析請求內容細節

    • 僞造客戶端請求和服務器響應

    • 測試網站的性能

    • 解密HTTPS的web會話

    • 全局、局部斷點功能

    • 第三方插件

  • 是windows下首選的抓包工具

  • 使用場景

    • 接口調試、接口測試、線上環境調試、web性能分析
    • 判斷先後端bug、開發環境hosts配置、mock、弱網斷電測試

Fiddler工做原理

​ 在本機開啓了一個http的代理服務器,而後它會轉發全部的http請求和響應

​ Fiddler 是以代理web 服務器的形式工做的,它使用代理地址:127.0.0.1,端口:8888。

  • Fildder充當的是中間代理服務器
    • 能夠監控客戶端和服務器之間通訊的全過程
    • 它可以記錄客戶端和服務器之間的全部 HTTP請求
  • Fildder一打開,就會修改系統代理,也就是使用代理服務器

Fiddler增長IP列

一、 運行fiddler,菜單,Rules->Customize Rules…或者點擊右側tab 「FiddlerScript」

二、Ctrl+F查找「static function Main()」字符串,而後添加下面這行代碼:

三、FiddlerObject.UI.lvSessions.AddBoundColumn("ServerIP", 120, "X-HostIP");

4.保存CustomRules.js或者點擊「Save Script」按鈕

SwitchyOmega插件

  • 當Fiddler 的設置完了,這時候還須要在你的瀏覽器上設置代理服務器才能進行抓取。

  • 使用 Chrome 瀏覽器的能夠直接使用 SwitchyOmega 插件進行修改便可,操做簡單

  • <github.com/FelisCatus/… github下載

  • SwitchyOmega是一款在Google Chrome 瀏覽器上的一個代理擴展程序,能夠輕鬆快捷地管理和切換多個代理設置。

抓取HTTPS包

Fiddler設置

一、打開Fiddler,經過Tools->Fiddler Options進入設置界面:

二、選擇HTTPS,勾選Decrypt HTTPS traffic 解密HTTPS流量

  • from all processes:抓取全部進程的流量

  • from browsers only:只抓取瀏覽器的流量

  • from non-browsers only:不抓取瀏覽器的流量

  • from remote clients only:抓取遠程的客戶端,當須要抓取的是手機端的流量,就須要用到這個

三、安裝證書

  • 當咱們不知道有沒有安裝證書的話,咱們能夠選擇Reset All Certificates (重置全部證書),而後一直選yes

  • 以後就會提示安裝一個證書,這個證書就是用來作中間人進行抓包的, Fiddler使用此證書來解密所捕捉到的包,再加密轉發到相對應的服務器端或者客戶端

四、重啓瀏覽器和Filddler

相關文章
相關標籤/搜索