個(gè)人站點(diǎn):http://www.669.icu
Web 瀏覽器和 Web 服務(wù)器之間是通過 HTTP 協(xié)議相互通信的梧奢。
1.1 HTTP 協(xié)議介紹
1.1.1 什么是 HTTP 協(xié)議
協(xié)議是指計(jì)算機(jī)通信網(wǎng)絡(luò)中兩臺(tái)計(jì)算機(jī)之間進(jìn)行通信所必須共同遵守的規(guī)定或規(guī)則 福扬。
超文本傳輸協(xié)議( HyperText Transfer Protocol, HTTP )是互聯(lián)網(wǎng)上應(yīng)用最廣泛的一種網(wǎng)絡(luò)協(xié)議,它允許將超文本標(biāo)記語 言( HTML )文檔從 Web 服務(wù)器傳送到客戶端的瀏覽器郑临。
目前我們使用的 HTTP 協(xié)議是 HTTP/1.1 版本 。
1.1.2 如何學(xué)習(xí) HTTP 協(xié)議
必須先了解 HTTP 協(xié)議的基本知識(shí)扎酷;然后找一個(gè)抓包軟件實(shí)實(shí)在在地看到數(shù)據(jù)包的內(nèi)容尚卫,并且看到數(shù)據(jù)包是如何在瀏覽器和 Web 服務(wù)器中進(jìn)行交互的。
Fiddler 就是我們需要的抓包工具 叁征。
1.1.3 HTTP 協(xié)議的工作原理
我們打開瀏覽器纳账,在地址欄中輸入 URL ,然后我們就看到了網(wǎng)頁(yè)捺疼。原理是怎樣的呢疏虫?
實(shí)際上,我們輸入 URL 后啤呼,瀏覽器就給 Web 服務(wù)器發(fā)送了一個(gè) HTTP 請(qǐng)求(HTTP Request),Web 服務(wù)器接到 HTTP 請(qǐng)求后進(jìn)行處理卧秘,生成相應(yīng)的 HTTP 響應(yīng)( HTTP Response),然后發(fā)送給瀏覽器 官扣。瀏覽器解析 HTTP 響應(yīng)中的 HTML翅敌,這樣我們就看到了網(wǎng)頁(yè) 。
瀏覽器客戶端和 Web 服務(wù)器之間是通過 HTTP 協(xié)議來交流的惕蹄。 目前主流的 Web 瀏覽器有微軟的 IE蚯涮、Firefox 和 Chrome 。
Web 瀏覽器會(huì)給 Web 服務(wù)器發(fā)送一條 HTTP 請(qǐng)求 焊唬, 服務(wù)器會(huì)把 Web 對(duì)象發(fā)送給瀏覽器恋昼,瀏覽器解析 Web 對(duì)象看靠,這些對(duì)象就顯示在屏幕上了 赶促。
1.2 Fiddler 的介紹
Fiddler 是世界上最強(qiáng)大最好用的 Web 調(diào)試工具,能記錄所有客戶端和服務(wù)器 的 HTTP 和 HTTPS 請(qǐng)求挟炬,允許你監(jiān)視鸥滨、設(shè)置斷點(diǎn),甚至修改輸入輸出數(shù)據(jù) 谤祖。
Fiddler 包含了一個(gè)強(qiáng)大的基于事件腳本 的子系統(tǒng)婿滓,并且能使用 .NET 語言進(jìn)行擴(kuò)展。
Fiddler 是用 C# 開發(fā)的 粥喜,作者是 Eric Lawrence凸主。
1.2.1 Fiddler 的下載和安裝
Fiddler 的官方網(wǎng)站是 www.fiddler2.com,下載地址是 http://www.getfiddler.com额湘。
Fiddler 有 2 個(gè)版本卿吐,F(xiàn) iddler2 和 Fiddler4 旁舰,兩者功能相同。建議使用 Fiddler4 嗡官。
1.2.2 Fiddler 的基本界面
Fiddler 基本界面包括如下區(qū)域:
- 主菜單欄:菜單 中幾乎可以啟 動(dòng)所有的 Fiddler 功能
- 工具欄 :提供了很多常見的命令
- Web Sessions 列表(會(huì)話列表):顯示捕捉到的每個(gè) Session 的簡(jiǎn)短信息箭窜。平常都需要在這里選擇一個(gè)或者多個(gè) Ses sion 后再進(jìn)行操作
- 功能面板:這里有很多選項(xiàng)卡 ,提供了 很多功能衍腥。我們 常用的是 Inspectors 選項(xiàng)卡
- QuickExec:命令行工具磺樱,可以輸入簡(jiǎn)單的命令, 例如輸入 cls 可以清空 Web Sessions
- 狀態(tài)欄:上面顯示 了 Fiddler 的一些配置信 息
1.2.3 Inspectors 選項(xiàng)卡
Inspectors 選項(xiàng)卡下可以查看 HTTP 請(qǐng)求和 HTTP 響應(yīng)的報(bào)文結(jié)構(gòu) 婆咸。其中 Raw 選項(xiàng)卡可以查看完整的消息竹捉,Headers 選項(xiàng)卡只查看消息中的 Header 。
1.2.4 Web Sessions 列表
Fiddler 窗口的左邊是 Web Sessions 列表尚骄,是 Fiddler 中 最重要的部分 活孩,顯示了每個(gè) Session 的摘要信息。Fiddler 中的大部分操作都需要在 Web Sessions 列表中選擇一個(gè)或者多個(gè) Session乖仇,再進(jìn)行其他操作憾儒。Web Sessions 列表中的表頭可以排序。
一個(gè) Session 包含了 一個(gè) HTTP 請(qǐng)求和一個(gè) HTTP 響應(yīng)乃沙。
Web Sessions 列表欄中包含的信息如下:
- #:這是 Fiddler 生成的 ID(最好是按順序排列〉起趾。
- Result:響應(yīng)的狀態(tài)碼。
- Protocol :使用的協(xié)議 HTTP 或者 HTTPS
- Host:服務(wù)器的主機(jī)名和端口號(hào)
- URL: URL 的路徑
- Body: HTTP 響應(yīng)中包含的字節(jié)數(shù)
- Caching:跟緩存相關(guān)的字段的值
- Content-Type:響應(yīng)中 Content-Type 的值
- Process:對(duì)應(yīng)本地 Windows 的進(jìn)程
1.2.5 Fiddler 捕獲 HTTP 協(xié)議的數(shù)據(jù)包
- 啟動(dòng) Fiddler警儒,打開任何一個(gè)瀏覽器训裆,輸入 http://www.cnblogs.com/tankxiao/
- 選擇任何一個(gè) Session,然后選擇 Inspectors 選項(xiàng)卡蜀铲,就可以查看詳細(xì)內(nèi)容
1.2.6 Fiddler 設(shè)置開始捕獲和停止捕獲
我們把捕獲 HTTP 數(shù)據(jù)包的過程簡(jiǎn)稱為抓包 边琉。 在 Fiddler 的使用過程中 , 當(dāng)我們已經(jīng)抓到自己想要的數(shù)據(jù)包后记劝,可以停止抓包变姨,以避免抓到一些不需要的數(shù)據(jù)包。接下來介紹兩種設(shè)置方法厌丑。
方法一:在 Fiddler 中單擊 File -> Capture Traffic(快捷鍵是 Fl2) 來開始抓包或者停止抓包 定欧。
方法二:?jiǎn)螕?Fiddler 左下角的“ Capturing "按鈕來開始抓包或者停止抓包。
1.3 HTTP 協(xié)議報(bào)文的結(jié)構(gòu)
HTTP 報(bào)文分 2 個(gè):一個(gè)是 HTTP 請(qǐng)求報(bào)文怒竿,一個(gè)是 HTTP 響應(yīng)報(bào)文砍鸠。
1.3.1 HTTP 請(qǐng)求報(bào)文的結(jié)構(gòu)
瀏覽器發(fā)送給 Web 服務(wù)器的 HTTP 請(qǐng)求報(bào)文內(nèi)容。
HTTP 請(qǐng)求報(bào)文的詳細(xì)內(nèi)容:
HTTP 請(qǐng)求報(bào)文分為 3 部分 :第一部分 叫 起始行( Request line )耕驰,第二部分叫首部(Request Header)爷辱,第三部分叫主體(Body)
- 第一行中的 Method 表示請(qǐng)求方法,比如“ POST ”或者“ GET ”,現(xiàn)在使用的 HTTP 協(xié)議版本是 HTTP/ 1.1
- 第二部分是首部(Header)饭弓,后面會(huì)詳細(xì)介紹這些首部的用法
- 第三部分是主體(Body)
【注意】Header 首部和 Body(主體)之間有一個(gè)空行
1.3.2 HTTP 響應(yīng)報(bào)文的結(jié)構(gòu)
Web 服務(wù)器發(fā)送給瀏覽器的 HTTP 響應(yīng)報(bào)文內(nèi)容:
HTTP 響應(yīng)報(bào)文的詳細(xì)內(nèi)容:
Response 消息的結(jié)構(gòu)和 Request 消息 的 結(jié)構(gòu)基本一樣 巩检,同樣也分為 3 部分:第一部分 叫響 應(yīng)行( Response Line ) , 第 二部分 叫響 應(yīng)首部(Response Header)示启,第三部分是主體(Body) 兢哭。
- 第一部分是起始行,有狀態(tài)碼和狀態(tài)碼消息
- 第二部分是首部( Header )夫嗓,后面會(huì)詳細(xì)介紹這些首部的用法
- 第三部分是主體( Body )迟螺,如果是 GET 方法,就沒有主體
【注意】Header 首部和 Body(主體)之間有一個(gè)空行
1.3.3 Fiddler 捕獲博客主頁(yè)舍咖,查看 HTTP 請(qǐng)求和 HTTP 響應(yīng)報(bào)文
- 啟動(dòng) Fiddler矩父,打開瀏覽器 ,輸入 http://www.cnblogs.com/tankxiao
- 在 Fiddler 的界面中找到 www.cnblogs.com/tankxiao排霉,然后選擇 Inspectors 選項(xiàng)卡
- 在 HTTP 請(qǐng)求中選擇 Raw 選項(xiàng)卡 窍株,這樣就能看到完整的 HTTP 請(qǐng)求報(bào)文。由于這是個(gè) GET 方法攻柠,所以 HTTP 請(qǐng)求沒有 Body
- 在 HTTP 響應(yīng)中選擇 Raw 選項(xiàng)卡球订,這樣就能看到完整的 HTTP 響應(yīng)報(bào)文。
1.4 Fiddler 抓包的原理
Fiddler 為什么能抓包呢瑰钮?Fiddler 本質(zhì)上是一個(gè) Web 代理服務(wù)器冒滩。它的默認(rèn)工作端口是 8888。
我們可以查看 Fiddler 的工作端口浪谴。啟動(dòng) Fiddler开睡,如圖所示,在菜單欄中單擊 Tools -> Fiddler options苟耻。
1.4.1 什么是代理服務(wù)器
Web 代理( Proxy Server)服務(wù)器是網(wǎng)絡(luò)的中間實(shí)體篇恒。代理位于 Web 客戶端和 Web 服務(wù)器之間,扮演“中間人”的角色凶杖。
HTTP 的代理服務(wù)器既是 Web 服務(wù)器又是 Web 客戶端胁艰。
代理服務(wù)器是網(wǎng)絡(luò)信息的中轉(zhuǎn)站,它具有以下功能:
- 共享網(wǎng)絡(luò)官卡。能解決僅僅有一條線路 蝗茁、 一個(gè)公有 IP 的問題醋虏。在公有 IP 資源嚴(yán)重不足的情況下寻咒,可以滿足局域網(wǎng)大量用戶同時(shí)共享上網(wǎng)的需求
- 提高了訪問速度。因?yàn)榇蟛糠值拇矸?wù)器都有緩沖功能颈嚼,可以直接讀取毛秘,無須再連接到遠(yuǎn)程 Web 服務(wù)器。這樣可以達(dá)到加快訪問網(wǎng)站的速度、節(jié)約通信帶寬的目的
- 突破了訪問限制 叫挟。當(dāng)訪問權(quán)限受到限制時(shí)艰匙,可以使用有權(quán)限的代理服務(wù)器
- 隱藏身份。內(nèi)部網(wǎng)的用戶要對(duì)外發(fā)布信息抹恳,就需要使用代理服務(wù)器的反向代理功能 员凝。 這樣就不會(huì)影響內(nèi)部網(wǎng)絡(luò)的安全性能,起到隱藏身份的目的
1.4.2 Fiddler 的工作原理
Fiddler 是以代理 Web 服務(wù)器的形式工作的奋献,它使用代理地址:127.0.0.1健霹,端口:8888。
Fiddler 啟動(dòng)的時(shí)候瓶蚂,會(huì)偷偷地把 Internet 選項(xiàng)中的代理修改為 127.0.0.1 糖埋,端口:8888 。
當(dāng) F iddler 退出的時(shí)候窃这,它會(huì)自動(dòng)在 Internet 選項(xiàng)中取消代理瞳别,這樣就不會(huì)影響別的程序 。
如果 Fiddler 非正常退出杭攻,這時(shí)候因?yàn)?Fiddler 沒有自動(dòng)注銷祟敛,會(huì)造成網(wǎng)頁(yè)無法訪問 。解決的辦法是重新啟動(dòng) Fiddler 兆解。
1.4.3 查看 Internet 選項(xiàng)代理設(shè)置
先啟動(dòng) Fiddler垒棋,打開控制面板,找到 Internet 屬性痪宰,然后選擇連接 -> 局域網(wǎng)設(shè)置 -> 高級(jí)叼架,可以看到代理服務(wù)器地址己經(jīng)被 Fiddler 設(shè)置為 127.0.0.1 :8888 了。
關(guān)閉 Fiddler衣撬,可以看到代理服務(wù)器地址已經(jīng)取消了乖订。
1.4.4 Fiddler 如何捕獲 Firefox
有時(shí)候我們會(huì)發(fā)現(xiàn) ,F(xiàn)iddler 能捕獲 IE 和其他瀏覽器發(fā)出的請(qǐng)求具练,但是不能捕獲 Firefox 發(fā)出的請(qǐng)求乍构。
之所以不能捕獲 Firefox 的請(qǐng)求,那是因?yàn)?Firefox 的代理服務(wù)器沒有配置成 Fiddler 扛点。
打開 Firefox哥遮,在菜單欄中選擇工具 -> 選項(xiàng),-> 高級(jí)陵究,-> 網(wǎng)絡(luò) -> 設(shè)置眠饮。選擇使用系統(tǒng)代理設(shè)置。
或者手動(dòng)配置铜邮,指向 Fiddler仪召。
1.4.5 Fiddler 能捕獲哪些設(shè)備的 HTTP 數(shù)據(jù)包
任何支持代理的 HTTP 請(qǐng)求都能被 Fiddler 捕獲到寨蹋,首先 Fiddler 能捕獲各種瀏覽器,比如 IE扔茅、Firefox已旧,Chrome 發(fā)出來的數(shù)據(jù)包 。
Fiddler 還能捕獲各種移動(dòng)設(shè)備召娜,比如 Android 手機(jī)运褪、蘋果手機(jī)、iPad 等發(fā)出的數(shù)據(jù)包玖瘸。
Fiddler 能捕獲任何程序發(fā)出來的 HTTP/HTTPS 請(qǐng)求吐句,只要這個(gè)程序支持 Web 代理服務(wù)器即可。
比如 Fiddler 能抓到 QQ 發(fā)出的包 店读,當(dāng)然 QQ 中發(fā)的聊天消息是抓不到的嗦枢,因?yàn)?QQ 中的聊天信息使用的是 OICQ 協(xié)議,不是 HTTP 協(xié)議 屯断。
只要在 QQ 中設(shè)置代理服務(wù)器即可實(shí)現(xiàn)抓包文虏。
1.4.6 解壓 HTTP 響應(yīng)
在 Fiddler 抓包的過程中,我們經(jīng)持逞荩看到 HTTP 響應(yīng)是亂碼氧秘,單擊“ Response body is encoded. Click to decode. "按鈕可以解壓 HTTP 響應(yīng) 。
參考
- [書籍]:《HTTP 抓包實(shí)戰(zhàn)》