【爬蟲】網頁抓包工具--Fiddler--Request和Response



【爬蟲】網頁抓包工具--Fiddler


Fiddler基礎知識

  • Fiddler是強大的抓包工具,它的原理是以web代理服務器的形式進行工作的,使用的代理地址是:127.0.0.1,端口默認為8888,我們也可以通過設置進行修改。

  • 代理就是在客戶端和服務器之間設置一道關卡,客戶端先將請求數據發送出去后,代理服務器會將數據包進行攔截,代理服務器再冒充客戶端發送數據到服務器;同理,服務器將響應數據返回,代理服務器也會將數據攔截,再返回給客戶端。

  • Fiddler可以抓取支持http代理的任意程序的數據包,如果要抓取https會話,要先安裝證書。

HTTP協議

  • 要分析Fiddler抓取的數據包,我們首先要熟悉HTTP協議。HTTP即超文本傳輸協議,是一個基於請求與響應模式的、無狀態的、應用層的協議,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。

  • HTTP的工作過程:當我們請求一個超鏈接時,HTTP就開始工作了,客戶端先發送一個請求到服務器,請求內容包括:協議版本號、請求地址、請求方式、請求頭和請求參數;服務器收到請求后做相應的處理,並將響應數據返回到客戶端,響應內容包括:協議版本號、狀態碼和響應數據。前端根據響應數據做相應的處理,就是最終我們看到的內容。這些過程是HTTP自動完成的,我們只是輸入或點擊請求地址,然后查看前端給我們展示的內容。更多關於HTTP協議的介紹請參考:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html

  • 請求方式常用的有:GET、PUT、POST、DELETE。

  • HTTP狀態碼主要分為5類:以1開頭的代表請求已被接受,需要繼續處理;以2開頭的代表請求已成功被服務器接收、理解、並接受;以3開頭的代表需要客戶端采取進一步的操作才能完成請求;以4開頭的代表了客戶端看起來可能發生了錯誤,妨礙了服務器的處理;以5開頭的代表了服務器在處理請求的過程中有錯誤或者異常狀態發生,也有可能是服務器意識到以當前的軟硬件資源無法完成對請求的處理。

  • 常見的主要有:200:服務器成功處理了請求;404:未找到資源;500:內部服務器錯誤;503:服務器目前無法為請求提供服務;302:請求的URL已臨時轉移;304:客戶端的緩存資源是最新的,要客戶端使用緩存。

  • 每個狀態碼的詳細介紹請參考:https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin

Fiddler的使用

  • Fiddler是一個很好用的抓包工具,可以將網絡傳輸發送與接收的數據包進行截獲、重發、編輯等操作。也可以用來檢測流量。

  • Fiddler安裝后,設置的端口默認為8888,當Fiddler啟動后,默認將IE的代理設為了127.0.0.1:8888,而其他如火狐瀏覽器需要手動設置代理后才可以抓包。設置內容如圖:

  •  

1)要使用Fiddler進行抓包,首先需要確保Capture Traffic是開啟的(安裝后是默認開啟的),勾選File->Capture Traffic,也可以直接點擊Fiddler界面左下角的圖標開啟和關閉抓包。

2)所以基本上不需要做什么配置,安裝后就可以進行抓包了。那么我們怎么分析抓到的這些數據包呢?如圖所示的區域為數據包列表,要分析這些數據包,首先要了解各字段的含義。

#:順序號,按照抓包的順序從1遞增

Result:HTTP狀態碼      

Protocol:請求使用的協議,如HTTP/HTTPS/FTP等

HOST:請求地址的主機名或域名

URL:請求資源的位置

Body:請求大小

Caching:請求的緩存過期時間或者緩存控制值

Content-Type:請求響應的類型

Process:發送此請求的進程ID

Comments:備注 

Custom:自定義值

3)每個Fiddler抓取到的數據包都會在該列表中展示,點擊具體的一條數據包可以在右側菜單點擊Insepector查看詳細內容。主要分為請求(即客戶端發出的數據)和響應(服務器返回的數據)兩部分。

 4)HTTP Request Header:以百度為例,查看請求百度主頁這條數據包的請求數據,從上面的Headers中可以看到如下內容:

請求方式:GET

協議: HTTP/1.1

Client 頭域:

Accept: text/html, application/xhtml+xml, image/jxr, */*                             ---------瀏覽器端可以接受的媒體類型

Accept-Encoding: gzip, deflate                                                                  ---------壓縮方法

Accept-Language: zh-CN                                                                          ---------語言類型

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393                             ---------客戶端使用的操作系統和瀏覽器的名稱和版本

COOKIE頭域:將cookie值發送給服務器

Transport 頭域:

Connection:當網頁打開完成后,客戶端和服務器之間用於傳輸HTTP數據的TCP連接是否關閉。keep-alive表示不會關閉,客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接;close表示關閉,客戶端再次訪問這個服務器上的網頁,需要重新建立連接。

HOST:主機名或域名,若沒有指定端口,表示使用默認端口80.

  5)HTTP Response Header:繼續以百度為例,如圖所示:

協議:HTTP/1.1

狀態碼:200

Cache頭域:
Cache-Control: private                                               ---------此響應消息不能被共享緩存處理,對於其他用戶的請求無效

Date: Sat, 05 Aug 2017 04:37:43 GMT                      ---------生成消息的具體時間和日期

Expires: Sat, 05 Aug 2017 04:37:42 GMT                  ---------瀏覽器會在指定過期時間內使用本地緩存

Cookie/Login 頭域:

Set-Cookie: BDSVRTM=264; path=/                           ---------把cookie發送到客戶端
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=1425_21097_22157; path=/; domain=.baidu.com

Entity頭域

Content-Length: 202740                                              ---------正文長度
Content-Type: text/html;charset=utf-8                         ---------告知客戶端服務器本身響應的對象的類型和字符集

Miscellaneous 頭域:
Bdpagetype: 2

Bdqid: 0x99791efd00036253

Bduserid: 2577220064
Server: BWS/1.1                                                          ---------指明HTTP服務器的軟件信息

X-Ua-Compatible: IE=Edge,chrome=1
Security頭域:
Strict-Transport-Security: max-age=172800                ---------基於安全考慮而需要發送的參數,關於這個參數的解釋,請參考:http://www.freebuf.com/articles/web/66827.html

Transport頭域:

Connection: Keep-Alive

6)TextView:顯示請求或響應的數據。

7)WebForms:請求部分以表單形式顯示所有的請求參數和參數值;響應部分與TextView內容是一樣的。

8)Auth:顯示認證信息,如Authorization

9)Cookies:顯示所有cookies

10)Raw:顯示Headers和Body數據

11)JSON:若請求或響應數據是json格式,以json形式顯示請求或響應內容

12)XML:若請求或響應數據是xml格式,以xml形式顯示請求或響應內容

13)上面是以百度主頁為例,百度主頁采用的是GET請求,在TextView中沒有請求body,我們再無憂行網站登錄接口為例,它是一個POST請求,除了請求頭外,在TextView中多了請求數據。這也是GET請求和POST請求的一個區別。GET請求是將請求參數放在url中,而POST請求一般是將請求參數放在請求body中。

 

 

總結:通過Fiddler可以抓取請求和響應參數,通過對參數進行分析,可以定位是前端還是后台問題。例如我們在測試登錄接口時,輸入了正確的手機號和密碼,但前端提示“請輸入正確的用戶名和密碼”;僅僅通過界面提示我們只能描述bug表象,但不能分析出問題原因。假設通過抓包我們發現是由於前端參數名錯誤或參數值為空,從而導致后台報錯。這個時候我們將bug指向前端開發人員,並將參數數據和接口文檔中對應的報文數據作為附件上傳,是不是可以提高bug的解決效率呢?Fiddler在實際的功能測試中有很大的作用,一方面幫助我們更好的了解某個業務中客戶端和服務器端是通過哪些接口進行請求的,從而更好的了解代碼邏輯;另一方面,我們還可以通過響應數據判斷哪里出現了問題,例如可能服務器程序掛了,導致前端報“服務器故障”,這時我們通過抓包發現響應數據返回502,這時我們可以手動去重啟服務或是聯系運維重啟服務,從而提高問題的解決效率。

 

大體分為Request和Response兩部分。

Requests部分

Header 解釋 示例
Accept 指定客戶端能夠接收的內容類型 Accept: text/plain, text/html
Accept-Charset 瀏覽器可以接受的字符編碼集。 Accept-Charset: iso-8859-5
Accept-Encoding 指定瀏覽器可以支持的web服務器返回內容壓縮編碼類型。 Accept-Encoding: compress, gzip
Accept-Language 瀏覽器可接受的語言 Accept-Language: en,zh
Accept-Ranges 可以請求網頁實體的一個或者多個子范圍字段 Accept-Ranges: bytes
Authorization HTTP授權的授權證書 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control 指定請求和響應遵循的緩存機制 Cache-Control: no-cache
Connection 表示是否需要持久連接。(HTTP 1.1默認進行持久連接) Connection: close
Cookie HTTP請求發送時,會把保存在該請求域名下的所有cookie值一起發送給web服務器。 Cookie: $Version=1; Skin=new;
Content-Length 請求的內容長度 Content-Length: 348
Content-Type 請求的與實體對應的MIME信息 Content-Type: application/x-www-form-urlencoded
Date 請求發送的日期和時間 Date: Tue, 15 Nov 2010 08:12:31 GMT
Expect 請求的特定的服務器行為 Expect: 100-continue
From 發出請求的用戶的Email From: user@email.com
Host 指定請求的服務器的域名和端口號 Host: www.zcmhi.com
If-Match 只有請求內容與實體相匹配才有效 If-Match: “737060cd8c284d8af7ad3082f209582d”
If-Modified-Since 如果請求的部分在指定時間之后被修改則請求成功,未被修改則返回304代碼 If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
If-None-Match 如果內容未改變返回304代碼,參數為服務器先前發送的Etag,與服務器回應的Etag比較判斷是否改變 If-None-Match: “737060cd8c284d8af7ad3082f209582d”
If-Range 如果實體未改變,服務器發送客戶端丟失的部分,否則發送整個實體。參數也為Etag If-Range: “737060cd8c284d8af7ad3082f209582d”
If-Unmodified-Since 只在實體在指定時間之后未被修改才請求成功 If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
Max-Forwards 限制信息通過代理和網關傳送的時間 Max-Forwards: 10
Pragma 用來包含實現特定的指令 Pragma: no-cache
Proxy-Authorization 連接到代理的授權證書 Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Range 只請求實體的一部分,指定范圍 Range: bytes=500-999
Referer 先前網頁的地址,當前請求網頁緊隨其后,即來路 Referer: http://www.zcmhi.com/archives/71.html
TE 客戶端願意接受的傳輸編碼,並通知服務器接受接受尾加頭信息 TE: trailers,deflate;q=0.5
Upgrade 向服務器指定某種傳輸協議以便服務器進行轉換(如果支持) Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
User-Agent User-Agent的內容包含發出請求的用戶信息 User-Agent: Mozilla/5.0 (Linux; X11)
Via 通知中間網關或代理服務器地址,通信協議 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 關於消息實體的警告信息 Warn: 199 Miscellaneous warning

Responses 部分 

Header 解釋 示例
Accept-Ranges 表明服務器是否支持指定范圍請求及哪種類型的分段請求 Accept-Ranges: bytes
Age 從原始服務器到代理緩存形成的估算時間(以秒計,非負) Age: 12
Allow 對某網絡資源的有效的請求行為,不允許則返回405 Allow: GET, HEAD
Cache-Control 告訴所有的緩存機制是否可以緩存及哪種類型 Cache-Control: no-cache
Content-Encoding web服務器支持的返回內容壓縮編碼類型。 Content-Encoding: gzip
Content-Language 響應體的語言 Content-Language: en,zh
Content-Length 響應體的長度 Content-Length: 348
Content-Location 請求資源可替代的備用的另一地址 Content-Location: /index.htm
Content-MD5 返回資源的MD5校驗值 Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==
Content-Range 在整個返回體中本部分的字節位置 Content-Range: bytes 21010-47021/47022
Content-Type 返回內容的MIME類型 Content-Type: text/html; charset=utf-8
Date 原始服務器消息發出的時間 Date: Tue, 15 Nov 2010 08:12:31 GMT
ETag 請求變量的實體標簽的當前值 ETag: “737060cd8c284d8af7ad3082f209582d”
Expires 響應過期的日期和時間 Expires: Thu, 01 Dec 2010 16:00:00 GMT
Last-Modified 請求資源的最后修改時間 Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT
Location 用來重定向接收方到非請求URL的位置來完成請求或標識新的資源 Location: http://www.zcmhi.com/archives/94.html
Pragma 包括實現特定的指令,它可應用到響應鏈上的任何接收方 Pragma: no-cache
Proxy-Authenticate 它指出認證方案和可應用到代理的該URL上的參數 Proxy-Authenticate: Basic
refresh 應用於重定向或一個新的資源被創造,在5秒之后重定向(由網景提出,被大部分瀏覽器支持)  

 

Refresh: 5; url=
http://www.zcmhi.com/archives/94.html
Retry-After 如果實體暫時不可取,通知客戶端在指定時間之后再次嘗試 Retry-After: 120
Server web服務器軟件名稱 Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Set-Cookie 設置Http Cookie Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1
Trailer 指出頭域在分塊傳輸編碼的尾部存在 Trailer: Max-Forwards
Transfer-Encoding 文件傳輸編碼 Transfer-Encoding:chunked
Vary 告訴下游代理是使用緩存響應還是從原始服務器請求 Vary: *
Via 告知代理客戶端響應是通過哪里發送的 Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning 警告實體可能存在的問題 Warning: 199 Miscellaneous warning
WWW-Authenticate 表明客戶端請求實體應該使用的授權方案 WWW-Authenticate: Basic




Accept

作用: 瀏覽器端可以接受的媒體類型,

例如:  Accept: text/html  代表瀏覽器可以接受服務器回發的類型為 text/html  也就是我們常說的html文檔,

如果服務器無法返回text/html類型的數據,服務器應該返回一個406錯誤(non acceptable)

通配符 * 代表任意類型

例如  Accept: /  代表瀏覽器可以處理所有類型,(一般瀏覽器發給服務器都是發這個)

Accept-Encoding:

作用: 瀏覽器申明自己接收的編碼方法,通常指定壓縮方法,是否支持壓縮,支持什么壓縮方法(gzip,deflate),(注意:這不是只字符編碼);

例如: Accept-Encoding: zh-CN,zh;q=0.8

Accept-Language

作用: 瀏覽器申明自己接收的語言。

語言跟字符集的區別:中文是語言,中文有多種字符集,比如big5,gb2312,gbk等等;

例如: Accept-Language: en-us

Connection

例如: Connection: keep-alive   當一個網頁打開完成后,客戶端和服務器之間用於傳輸HTTP數據的TCP連接不會關閉,如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接

例如:  Connection: close  代表一個Request完成后,客戶端和服務器之間用於傳輸HTTP數據的TCP連接會關閉, 當客戶端再次發送Request,需要重新建立TCP連接。

Host(發送請求時,該報頭域是必需的)

作用: 請求報頭域主要用於指定被請求資源的Internet主機和端口號,它通常從HTTP URL中提取出來的

例如: 我們在瀏覽器中輸入:http://www.hzau.edu.cn

瀏覽器發送的請求消息中,就會包含Host請求報頭域,如下:

Host:www.hzau.edu.cn

此處使用缺省端口號80,若指定了端口號,則變成:Host:指定端口號

Referer

當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的,服務器籍此可以獲得一些信息用於處理。比如從我主頁上鏈接到一個朋友那里,他的服務器就能夠從HTTP Referer中統計出每天有多少用戶點擊我主頁上的鏈接訪問他的網站。可用於防盜鏈

User-Agent

作用:告訴HTTP服務器, 客戶端使用的操作系統和瀏覽器的名稱和版本.

我們上網登陸論壇的時候,往往會看到一些歡迎信息,其中列出了你的操作系統的名稱和版本,你所使用的瀏覽器的名稱和版本,這往往讓很多人感到很神奇,實際上,服務器應用程序就是從User-Agent這個請求報頭域中獲取到這些信息User-Agent請求報頭域允許客戶端將它的操作系統、瀏覽器和其它屬性告訴服務器。

例如: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)


Fiddler工具使用介紹二

在上一篇中介紹了Fiddler的基本使用方法。通過上一篇的操作我們可以直接抓取瀏覽器的數據包。但在APP測試中,我們需要抓取手機APP上的數據包,應該怎么操作呢?

Andriod配置方法:

1)確保手機和Fiddler所在主機在同一個局域網中

2)獲取Fiddler所在主機的ip地址,通過cmd命令進入命令編輯器,輸入ipconfig -all,找到IPv4地址,記下該地址

 

3)對手機所連接的無線網絡進行設置,點擊WLAN,長按與Fiddler所在主機在同一個局域網的wifi,長按點擊【修改網絡】,選中【顯示高級選項】,代理設置為手動,輸入代理服務器的主機名和端口后保存。代理服務器的主機名即2)中的IPv4地址,端口為Fiddler上配置的端口(默認為8888),可以到Fiddler菜單欄中【Tool】-【Fiddler Option】的【Connections】中查看。

 

4)在手機瀏覽器上輸入:http://IPv4地址:端口(例如:http://192.168.11.29:8888),點擊【FiddlerRoot certificate】下載安裝Fiddler證書。

 

5)若在瀏覽器上無法打開該地址,需要做兩項檢查:一、確保在瀏覽器、wifi中配置的代理與Fiddler所在主機地址和Fiddler中配置的端口,三者保持一致;二、確保在Fiddler-【Tools】-【Fiddler Option]-[Connection]中【Allow remote computers to connect】已經勾選上,若沒有勾選,則需要勾選后保存並重啟Fiddler。

 

6)這時我們打開手機上的瀏覽器或APP,可以在Fiddler上看到手機上的數據包了。

 IOS配置方法:

1)基本與andriod的配置方法一致,除了安裝證書方式與andriod略有不同,另外ios在下載證書后,需要手動信任證書。設置方法:打開【設置】-【通用】-【關於本機】-【證書信任證書】,找到對應的證書,啟用即可。

HTTPS抓包

上面都是針對HTTP協議進行抓包的設置,那么HTTPS需要進行什么配置呢?

1)打開Fiddler-【Tools】-【Fiddler Option】,切換到HTTPS選項卡,勾選【Capture HTTPS CONNECTs】和【Decrypt HTTPS traffic】,然后點擊【Actions】-【Trust Root Certificate】,然后按照提示一路yes,直到彈框提示“Trust Cert success”點擊確定后,重啟Fiddler就可以抓取HTTPS協議的數據包了。

Fiddler過濾會話

我們在使用Fiddler進行抓包時,發現只要是使用了Fiddler代理服務器的所有HTTP/HTTPS數據包都會在Fiddler數據列表中顯示出來,但有時我們只關注從某個或某些服務器發出的請求,不想要看到其他服務器的數據包,應該怎么進行設置呢?我們都知道Fiddler是一款強大的抓包工具,我們可以通過設置來過濾只篩選出我們想要的數據包。

1)在右側菜單中,找到Fittlers選項,共有9個部分進行設置

 

2)Use Filters:勾選則表示使用過濾,不勾選則表示不進行過濾

3)Actions:有四個選項,Run Filterset now:立即運行過濾設置;Load Filterset:加載保存的過濾設置;Save Filterset:保存過濾設置;help:幫助

4)Hosts:該設置項有兩個選項

  • 第一個下拉框是只顯示內網或者外網選項

  • 第二個下拉框是根據主機名信息顯示或者隱藏或者標記指定請求

5)Client Process:有三個選項,Show only traffic from:根據進程信息進行過濾,選擇后,將只顯示由該進程發出的請求;Show only Internet Explorer traffic:只關心由IE瀏覽器發出的請求;Hide traffic from Service Host:隱藏來自service host(即由svchost.exe進程發出)的請求

6)Request Headers:有五個選項,Show only if URL contains:可以通過正則表達式過濾請求地址中包含或不包含的內容,例如REGEX:\.(js|css|js\?.*|css\?.*)$(隱藏所有js和css請求);Hide if URL contains:與Show only if URL contains相反,一個是顯示,一個是隱藏;Flags requests with headers:支持指定某個http請求頭名稱,如果在web session列表中存在該請求頭,會加粗顯示該session;Delete requests headers:與Flags requests with headers類似,這里是如果包含該請求頭,則刪除該請求頭;Set request header:將HTTP請求頭更新為所輸入的值。

7)Breakpoints:斷點設置,有四個選項。Break request on POST:對POST請求設置斷點;Break request on GET with query string:會為所有方法為GET且URL中包含了給定查詢條件的請求設置斷點;Break on XMLHttpRequest:對所有能夠確定是通過XMLHTTPRequest對象發送的請求設置斷點;Break response on Content-Type:會為所有響應頭Content-Type中包含了指定文本的響應設置響應斷點。

8)Response Status Code:根據響應狀態碼設置斷點。

9)Response Type and Size:有幾種類型,一類是根據響應數據的類型顯示或隱藏;一類是根據響應數據的大小顯示或隱藏一類是根據響應所需要的時間設置背景顏色;一類是根據文件類型進行限制。

  • type有以下幾種類型:

  • Time HeatMap復選框會基於服務器返回給定響應所需要的時間為每個session設置背景顏色。

10)Response Headers:與Request Headers不同的是,這塊區域是針對響應數據的頭部進行過濾。

這么多設置項,比較常用的就是1.2.3部分。通過過濾設置,可以快速的幫助我們找到我們需要抓包分析的數據包,從而提高效率,避免過多的數據包信息干擾我們找到正確的數據包。


我們知道Fiddler是位於客戶端和服務器之間的代理,它能夠記錄客戶端和服務器之間的所有 HTTP請求,可以針對特定的HTTP請求,分析請求數據、設置斷點、調試web應用、修改請求的數據,甚至可以修改服務器返回的數據,功能非常強大,是web調試的利器。前面我們介紹了如何使用Fiddler進行抓包和分析,以及如何抓取APP上的數據包。這里我們介紹下如何修改請求和響應數據,也就是設置斷點。

對request設置斷點

1)通過菜單選項或快捷鍵F11進行設置,如圖

當我們設置斷點后,進行HTTP請求,數據包順序列會有中斷的標記,單擊該數據包可以看到在右側會增加一行操作欄。這個時候我們在前端是沒有正常加載網頁的,點擊【Run to Completion】后可以返回響應數據。

 

接下來為了看我們的斷點設置是否生效,我們以登錄為例子進行測試。登錄無憂行網站,輸入正確的用戶名和密碼,點擊登錄。我們斷點規則設置為before request,然后將密碼清空,看看服務器給我們返回了什么響應數據。

 

 

繼續以登錄為例子,這次我們將手機號改成非移動賬號進行登錄。

 

 

 由此可見,我們的斷點已經設置成功,並且成功修改了HTTP的請求數據。

 2)通過菜單選項或快捷鍵進行設置時,會將所有的HTTP請求都設置斷點,但有時我們只想針對某個服務器發出的請求設置斷點,應該怎么操作呢?Fiddler是支持命令操作的,我們可以通過“bpu 服務器地址”命令來對特定的請求設置斷點。

在下圖所示的位置輸入命令,然后回車運行。

這個時候從該服務器發出的所有請求都會被中斷,而從其他服務器發出的請求可以正常響應。

如果要清除原來的斷點,可以在命令行輸入“bpu”,就會清除所有的斷點。

對response設置斷點

1)同樣的也可以通過菜單選項或快捷鍵alt+F11進行設置

2)通過命令“bpafter 服務器地址”

我們也用一個實例來驗證通過設置斷點修改響應數據。以百度主頁為例,我們攔截到響應數據中的title值為”百度一下,你就知道“,我們將響應數據中的title改成”test百度一下,你就知道“,然后在前端看看最終展示的是什么數據。

通過幾個實例,更好的幫助我們理解斷點的含義,也鞏固了Fiddler作為代理服務器的概念。接下來我們再來說說,Fiddler另一個很實用的功能:Fiddler的編碼和解碼。

 Fiddler的編碼和解碼

1)響應body解碼

有時候我們在Fiddler上看到響應數據是幾個亂碼字符,首先我們可以點擊,上方黃色提示區域直接進行解碼。如下面的兩個圖所示。

 

 

2)請求和響應數據解碼

有的時候,基於安全性考慮,開發人員會將請求和響應的body根據一定規則進行解碼。如果是普通的編碼規則,我們可以直接通過Fiddler操作進行解碼。例如在登錄百度網站的時候,有個參數的值是一個url地址,這個url經過urlEncode進行轉碼了。我們就可以將該參數通過urlDecode進行解碼。

首先,找到這個參數,選中后右鍵選擇【send to TextWizard】

然后,在【transform】中找到【URLDecode】,字段值就被成功解碼,我們就可以很清楚的看到里面有哪些參數以及參數的值是什么了。

上面都是解碼的例子,編碼在實際運用中很少,就不介紹了。另外里面還有很多其他的編碼/解碼方法,就不一一舉例啦~~




Fiddler 抓包工具總結

 

序章

Fiddler是一個蠻好用的抓包工具,可以將網絡傳輸發送與接受的數據包進行截獲、重發、編輯、轉存等操作。也可以用來檢測網絡安全。反正好處多多,舉之不盡呀!當年學習的時候也蠻費勁,一些蠻實用隱藏的小功能用了之后就忘記了,每次去網站上找也很麻煩,所以搜集各大網絡的資料,總結了一些常用的功能。

 

Fiddler 下載地址 :https://www.telerik.com/download/fiddler

Fiddler 離線下載地址:https://pan.baidu.com/s/1bpnp3Ef 密碼:5skw

下載Fiddler要FQ,我費了好大得勁才翻出去下載到…

win8之后用“Fiddler for .NET4”而win8之前用“Fiidler for .NET2”比較好

image

1. Fiddler 抓包簡介

Fiddler是通過改寫HTTP代理,讓數據從它那通過,來監控並且截取到數據。當然Fiddler很屌,在打開它的那一瞬間,它就已經設置好了瀏覽器的代理了。當你關閉的時候,它又幫你把代理還原了,是不是很貼心。。。

image

 

1) 字段說明

Fiddler想要抓到數據包,要確保Capture Traffic是開啟,在File –> Capture Traffic。開啟后再左下角會有顯示,當然也可以直接點擊左下角的圖標來關閉/開啟抓包功能。

image

Fiddler開始工作了,抓到的數據包就會顯示在列表里面,下面總結了這些都是什么意思:

image

名稱

含義

#

抓取HTTP Request的順序,從1開始,以此遞增

Result

HTTP狀態碼

Protocol

請求使用的協議,如HTTP/HTTPS/FTP等

Host

請求地址的主機名

URL

請求資源的位置

Body

該請求的大小

Caching

請求的緩存過期時間或者緩存控制值

Content-Type

請求響應的類型

Process

發送此請求的進程:進程ID

Comments

允許用戶為此回話添加備注

Custom

允許用戶設置自定義值

圖標

含義

clip_image001[13]

請求已經發往服務器

clip_image002[4]

已從服務器下載響應結果

clip_image003[4]

請求從斷點處暫停

clip_image004[4]

響應從斷點處暫停

clip_image005[4]

請求使用 HTTP 的 HEAD 方法,即響應沒有內容(Body)

clip_image006[4]

請求使用 HTTP 的 POST 方法

clip_image007[4]

請求使用 HTTP 的 CONNECT 方法,使用 HTTPS 協議建立連接隧道

clip_image008[4]

響應是 HTML 格式

clip_image009[4]

響應是一張圖片

clip_image010[4]

響應是腳本格式

clip_image011[4]

響應是 CSS 格式

clip_image012[4]

響應是 XML 格式

clip_image013[4]

響應是 JSON 格式

clip_image014[4]

響應是一個音頻文件

clip_image015[4]

響應是一個視頻文件

clip_image016[4]

響應是一個 SilverLight

clip_image017[4]

響應是一個 FLASH

clip_image018[4]

響應是一個字體

clip_image019[4]

普通響應成功

clip_image020[4]

響應是 HTTP/300、301、302、303 或 307 重定向

clip_image021[4]

響應是 HTTP/304(無變更):使用緩存文件

clip_image022[4]

響應需要客戶端證書驗證

clip_image023[4]

服務端錯誤

clip_image0244

會話被客戶端、Fiddler 或者服務端終止

 

 

2). Statistics 請求的性能數據分析

好了。左邊看完了,現在可以看右邊了

隨意點擊一個請求,就可以看到Statistics關於HTTP請求的性能以及數據分析了(不可能安裝好了Fiddler一條請求都沒有…):

image

 

3). Inspectors 查看數據內容

Inspectors是用於查看會話的內容,上半部分是請求的內容,下半部分是響應的內容:

image

 

4). AutoResponder 允許攔截指定規則的請求

AutoResponder允許你攔截指定規則的求情,並返回本地資源或Fiddler資源,從而代替服務器響應。

看下圖5步,我將“baidu”這個關鍵字與我電腦“f:\Users\YukiO\Pictures\boy.jpeg”這張圖片綁定了,點擊Save保存后勾選Enable rules,再訪問baidu,就會被劫持。

這個玩意有很多匹配規則,如:

1. 字符串匹配(默認):只要包含指定字符串(不區分大小寫),全部認為是匹配

字符串匹配(baidu) 是否匹配
http://www.baidu.com 匹配
http://pan.baidu.com 匹配
http://tieba.baidu.com 匹配

 

2. 正則表達式匹配:以“regex:”開頭,使用正則表達式來匹配,這個是區分大小寫的

字符串匹配(regex:.+.(jpg | gif | bmp ) $) 是否匹配
http://bbs.fishc.com/Path1/query=foo.bmp&bar 不匹配
http://bbs.fishc.com/Path1/query=example.gif 匹配
http://bbs.fishc.com/Path1/query=example.bmp 匹配
http://bbs.fishc.com/Path1/query=example.Gif 不匹配

image

image

 

4). Composer 自定義請求發送服務器

Composer允許自定義請求發送到服務器,可以手動創建一個新的請求,也可以在會話表中,拖拽一個現有的請求

Parsed模式下你只需要提供簡單的URLS地址即可(如下圖,也可以在RequestBody定制一些屬性,如模擬瀏覽器User-Agent)

image

 

 

5). Filters 請求過濾規則

Fiters 是過濾請求用的,左邊的窗口不斷的更新,當你想看你系統的請求的時候,你刷新一下瀏覽器,一大片不知道哪來請求,看着礙眼,它還一直刷新你的屏幕。這個時候通過過濾規則來過濾掉那些不想看到的請求。

image

勾選左上角的Use Filters開啟過濾器,這里有兩個最常用的過濾條件:Zone和Host

1、Zone 指定只顯示內網(Intranet)或互聯網(Internet)的內容:

image

 

2、Host 指定顯示某個域名下的會話:

image

如果框框為黃色(如圖),表示修改未生效,點擊紅圈里的文字即可

 

 

6). Timeline 請求響應時間

在左側會話窗口點擊一個或多個(同時按下 Ctrl 鍵),Timeline 便會顯示指定內容從服務端傳輸到客戶端的時間:

image

 

 

2. Fiddler 設置解密HTTPS的網絡數據

Fiddler可以通過偽造CA證書來欺騙瀏覽器和服務器。Fiddler是個很會裝逼的好東西,大概原理就是在瀏覽器面前Fiddler偽裝成一個HTTPS服務器,而在真正的HTTPS服務器面前Fiddler又裝成瀏覽器,從而實現解密HTTPS數據包的目的。

解密HTTPS需要手動開啟,依次點擊:

1. Tools –> Fiddler Options –>  HTTPS

image

2. 勾選Decrypt HTTPS Traffic

image

3. 點擊OK

image

 

3. Fiddler 抓取Iphone / Android數據包

想要Fiddler抓取移動端設備的數據包,其實很簡單,先來說說移動設備怎么去訪問網絡,看了下面這張圖,就明白了。

image

可以看得出,移動端的數據包,都是要走wifi出去,所以我們可以把自己的電腦開啟熱點,將手機連上電腦,Fiddler開啟代理后,讓這些數據通過Fiddler,Fiddler就可以抓到這些包,然后發給路由器(如圖):

image

1. 打開Wifi熱點,讓手機連上(我這里用的360wifi,其實隨意一個都行)

image

2. 打開Fidder,點擊菜單欄中的 [Tools] –> [Fiddler Options]

image

3. 點擊 [Connections] ,設置代理端口是8888, 勾選 Allow remote computers to connect, 點擊OK

image

4. 這時在 Fiddler 可以看到自己本機無線網卡的IP了(要是沒有的話,重啟Fiddler,或者可以在cmd中ipconfig找到自己的網卡IP)

image

image 

5. 在手機端連接PC的wifi,並且設置代理IP與端口(代理IP就是上圖的IP,端口是Fiddler的代理端口8888)

image

 

6. 訪問網頁輸入代理IP和端口,下載Fiddler的證書,點擊下圖FiddlerRoot certificate

image

【注意】:如果打開瀏覽器碰到類似下面的報錯,請打開Fiddler的證書解密模式(Fiddler 設置解密HTTPS的網絡數據)

No root certificate was found. Have you enabled HTTPS traffic decryption in Fiddler yet?

208B4A022896FE5008CFDBD54105185D          13D99A1D77D5528F3EFBA0C3DEA3BD28

FDE79CDC9CB62CC6CF68F98C33CB281A          8F268C0A1192E2DF41BD0F5DEFD525D9

 

7. 安裝完了證書,可以用手機訪問應用,就可以看到截取到的數據包了。(下圖選中是布卡漫畫的數據包,下面還有QQ郵箱的)

image

 

4. Fiddler 內置命令與斷點

Fiddler還有一個藏的很深的命令框,就是眼前,我用了幾年的Fiddler都沒有發現它,偶爾在別人的文章發現還有這個小功能,還蠻好用的,整理下記錄在這里。

FIddler斷點功能就是將請求截獲下來,但是不發送,這個時候你可以干很多事情,比如說,把包改了,再發送給服務器君。還有balabala一大堆的事情可以做,就不舉例子了。

image

命令

對應請求項

介紹

示例

?

All

問號后邊跟一個字符串,可以匹配出包含這個字符串的請求

?google

>

Body

大於號后面跟一個數字,可以匹配出請求大小,大於這個數字請求

>1000

<

Body

小於號跟大於號相反,匹配出請求大小,小於這個數字的請求

<100

=

Result

等於號后面跟數字,可以匹配HTTP返回碼

=200

@

Host

@后面跟Host,可以匹配域名

@www.baidu.com

select

Content-Type

select后面跟響應類型,可以匹配到相關的類型

select image

cls

All

清空當前所有請求

cls

dump

All

將所有請求打包成saz壓縮包,保存到“我的文檔\Fiddler2\Captures”目錄下

dump

start

All

開始監聽請求

start

stop

All

停止監聽請求

stop

斷點命令 

bpafter

All

bpafter后邊跟一個字符串,表示中斷所有包含該字符串的請求

bpafter baidu(輸入bpafter解除斷點)

bpu

All

跟bpafter差不多,只不過這個是收到請求了,中斷響應

bpu baidu(輸入bpu解除斷點)

bps

Result

后面跟狀態嗎,表示中斷所有是這個狀態碼的請求

bps 200(輸入bps解除斷點)

bpv / bpm

HTTP方法

只中斷HTTP方法的命令,HTTP方法如POST、GET

bpv get(輸入bpv解除斷點)

g / go

All

放行所有中斷下來的請求

g

 

示例演示:

?

image

>

image

<

image

=

image

@

image

select

image

cls

image

dump

image

 

斷點命令:

斷點可以直接點擊Fiddler下圖的圖標位置,就可以設置全部請求的斷點,斷點的命令可以精確設置需要截獲那些請求。如下示例:

image

命令:

bpafter

image   image

bps

image

image

 

bpv

image

image

 

g / go

image

image



fiddler配置及使用教程

本文基於Fiddler4講解基本使用

fiddler抓包原理

注意:Fiddler 是以代理web服務器的形式工作的,它使用代理地址:127.0.0.1,端口:8888。當Fiddler退出的時候它會自動注銷,這樣就不會影響別的 程序。不過如果Fiddler非正常退出,這時候因為Fiddler沒有自動注銷,會造成網頁無法訪問。解決的辦法是重新啟動下Fiddler。

配置

打開Fiddler  Tool->Fiddler Options->HTTPS 。  (配置完后記得要重啟Fiddler).

選中"Decrpt HTTPS traffic",    Fiddler就可以截獲HTTPS請求,第一次會彈出證書安裝提示,若沒有彈出提示,勾選Actions-> Trust Root Certificate

另外,如果你要監聽的程序訪問的 HTTPS 站點使用的是不可信的證書,則請接着把下面的 “Ignore servercertificate errors” 勾選上。

證書安裝提示:

點擊Yes,留意一下紅框里面的內容,DO_NOT_TRUST_FiddlerRoot ,這個就是證書的名稱。 

點擊是。 

點擊確定,這樣Fiddler證書就已經添加成功了。

查看一下證書,Actions—>open windows certificate Manager 

可以證書已經添加進去了,證書名稱就是之前提醒大家留意的,【DO_NOT_TRUST_FiddlerRoot】

 

 手機端抓包配置

 

fiddler監聽端口默認是 8888,你可以把它設置成任何你想要的端口。勾選上 “Allow remote computersto connect” ,允許遠程設備連接。

為了減少干擾,可以去掉 “Act assystem proxy on startup” 。

手機端(客戶端)設置

首先查看電腦的 IP 地址,確保手機和電腦在同一個局域網內

Android 手機上的配置

將 Fiddler 代理服務器的證書導到手機上才能抓這些 APP 的包。導入的過程:打開瀏覽器,在地址欄中輸入代理服務器的 IP 和端口(即電腦的IP加fiddler的端口),會看到一個Fiddler 提供的頁面,然后確定安裝就好了

瀏覽器輸入下載證書.png

打開 WiFi 設置頁面,選擇要連接的 wifi ,並且長按,在彈出的對話框中,選擇“修改網絡”。在接下來彈出的對話框中,勾選“顯示高級選項”。在接下來顯示的頁面中,點擊“代理”,選擇“手動”。代理服務器主機名設為 PC 的 IP ,代理服務器端口設為 Fiddler 上配置的端口 8888,點”保存”。

手機配置代理.png

蘋果手機上的配置

蘋果手機上的配置其實跟 Android 手機基本是一樣的。如圖

至此已配置完成。

Fiddler的使用

視圖功能區域

會話的概念:一次請求和一次響應就是一個會話。

fiddler主界面

 

下面挑幾個快捷功能區中常用幾項解釋,其他功能自己嘗試:

快捷功能區

1:給會話添加備注信息
2:重新加載當前會話
3:刪除會話選項
4:放行,和斷點對應,后面詳細講解
5:響應模式。也即是,當Fiddler拿到遠程的response后是緩存起來一次響應給客戶端還是以stream的方式直接響應。
6:解碼。有些請求是被編碼的,點擊這個按鈕后可以根據響應的編碼格式自動解碼。
7:查找會話。
8:保存會話。
9:截屏。截屏后,會以會話的方式返回一個截圖。

接着來看看會話列表

 

#欄圖標說明

快捷鍵

刪除一條會話,可以在選中會話后,按del刪除,如若要清空列表,可以用Ctrl+X

左鍵點擊單條HTTP請求,可以在右側的tab面板中看到如下信息:

1. Statistic。

關於HTTP請求的性能和其他數據分析:

 

我們可以從中看出一些基本性能數據:如DNS解析的時間消耗是8ms,建立TCP/IP連接的時間消耗是8ms等等信息。

2. Inspectors

提供headers、textview、hexview,Raw等多種方式查看單條http請求的請求報文的信息,分為上下兩個部分,上半部分是請求頭部分,下半部分是響應頭部分。對於每一部分,提供了多種不同格式查看每個請求和響應的內容。

a、ImageView標簽 

JPG 格式使用 ImageView 就可以看到圖片,選擇一條Content-Type是image/jpeg的回話,點擊TextView

 

b、TextView 標簽

HTML/JS/CSS 使用 TextView 可以看到響應的內容。選擇一條Content-Type是text/html的回話,點擊TextView

 

c、Raw標簽

Raw標簽可以查看響應報文和響應正文,但是不包含請求報文

d、Auth標簽

Auth則可以查看授權Proxy-Authorization 和 Authorization的相關信息

e、Cookies標簽

Cookies標簽可以看到請求的cookie和響應的set-cookie頭信息。

3.AutoResponder標簽

Fiddler 的AutoResponder tab允許你從本地返回文件,而不用將http request 發送到服務器上。

下邊直接說他的使用方式把:

使用的是手機上邊的百度手機助手的棋牌游戲界面。

1、首先看圖 (我們來重定向第一個歡樂斗地主這個圖片)

2、打開Fiddler,然后點擊棋牌游戲進入上邊這個界面,就能發現會請求當前顯示的這五張圖片

 這個時候我們切換到AutoResponder這個界面,點擊鼠標左鍵,把要重定向的這個session會話拖動到AutoResponder界面中

選擇了我們要返回的圖片以后,然后點擊save。

然后關掉應該,清楚應用緩存,然后在打開,點擊棋牌游戲,可以看到

這是實現了替換其中一個,也許你會說,是不是本來就是那樣啊,那么在介紹一個根據別的規則來進行重定向。

 

我們通過重定向向,把所有的百度手機助手中的圖片都替換成剛才的小頭像。

 

前便的操作時一樣的,拖過來以后我們可以點擊Save前邊的倒的小三角,然后就可以看到,里邊有很多規則,現在我們選擇

第一個:這是一個正則表達式。

然后在選擇剛才的那個頭像圖片,然后save。

清除緩存,重新打開,可以看下圖:

可以看到,所有的jpg格式的都變成了我們的頭像了。

關於重定向還有很多,剩下的就需要自己慢慢研究了。

小結:AutoResponder功能是Fiddler最實用的功能之一,Rule可以自由地設定,可以使用搜索(默認)、精確匹配(EXACT)、正則表達式匹配(REGEX)。處理方式可以選擇使用文件,也可以選擇合適的時間暫停數據流(*bpu、*bpafter),人工干預。通過以上幾個步驟,我們演示了怎樣將HTTP請求重定向到本地的文件,進行調試,這在我們診斷跟蹤一些js文件但卻不能修改js文件時非常有用。比 如:在用瀏覽器測試P頁面時,P頁面引入了一個js資源文件R.js,由於R.js文件在服務器S上,而我此時又不能登錄S服務器(沒有S服務器的帳 號),此時我們就可以通過瀏覽器將R.js文件下載到本地,然后對本地的R.js文件進行調整,最后通過設置Fiddler,將R.js文件的請求使用本 地的R.js文件。

4.Composer 自定義請求發送服務器

Composer允許自定義請求發送到服務器,可以手動創建一個新的請求,也可以在會話表中,拖拽一個現有的請求

Parsed模式下你只需要提供簡單的URLS地址即可(如下圖,也可以在RequestBody定制一些屬性,如模擬瀏覽器User-Agent)

 

5.斷點請求/響應

 

如圖,箭頭所指的位置時可以點擊的。共三種狀態:
空白:不設置斷點。
箭頭向上:表示斷點請求。此時客戶端的請求是無法直接到達目標服務器的,需要手動控制。
箭頭向下:表示斷點響應。此時目標服務器的響應是無法直接到達客戶端的,需要手動控制。

還有一種打斷點的方式

在命令行中輸入命令: 

bpu www.baidu.com  (斷點請求)

bpuafter www.baidu.com(斷點響應)

這種方法只會中斷www.baidu.com

斷點請求並修改

如圖,操作步驟:

  1. 設置斷點請求,訪問網頁

  2. 點擊對應的會話

  3. 查看請求報文信息

  4. 修改請求內容

  5. 完成斷點,放行,把該請求發送給目標服務器。

圖中Break On Response表示把請求發給服務器,但是服務器的響應被fiddler攔截,此時可以修改響應內容(和斷點響應類似)。

斷點響應並修改

和斷點請求操作類似,只是在響應區域修改報文信息即可。
在斷點響應時,請注意超時時間。

6.過濾域名

Fiddler抓包可以完成我們移動開發者的調試測試需求。但是多余的網頁請求和手機的其他鏈接影響我們手機開發的需求。所以我們需要排除其他無用的包,只關注我們指定的域名的請求包。

打開fiddler,找到Filters選項並點擊打開。如圖所示

默認情況下,這個頁面是灰色的,代表默認不過濾任何請求。現在我們勾選 Use Filters 。

一般常用的有三種過濾條件:

1.域名過濾,只顯示特定域名的記錄:

*.baidu.com表示所有的百度二級域名會話;*baidu.com表示一級域名+二級域名的會話。設置好了后一定要點擊Actions生效;

2.類型過濾,一般對各種圖片、CSS、JS這類的靜態素材也不需要看的情況下,直接全部過濾掉

 .*\.(bmp|css|js|gif|ico|jp?g|png|swf|woff) 

需要過濾多少自己直接加入就好了

3.根據返回狀態碼,比如只想顯示200的狀態,其他的不顯示

Fiddler 的內置命令

?

問號(?)后邊跟一個字符串,Fiddler 將所有會話中存在該字符串匹配的全部高亮顯示(下圖輸入的是 ?google.com)

溫馨提示:匹配的字符串是 Protocol、Host 和 URL 中的任何子字符串。

> 和 <

大於號(>)和小於號(<)后邊跟一個數值,表示高亮所有尺寸大於或小於該數值的會話。

比如我輸入 >5000,按下回車后結果如下:

溫馨提示:你可以直接輸入 >5k 表示你想高亮所有尺寸大於 5KB 的會話。

=

等於號(=)后邊可以接 HTTP 狀態碼或 HTTP 方法,比如 =200 表示高亮所有正常響應的會話。

下圖輸入了 =POST,表示希望高亮所有 POST 方法的會話:

@

@ 后邊跟的是 Host,比如我想高亮所有魚C論壇的連接,我可以 @bbs.fishc.com

溫馨提示:下邊 bpafter、bps、bpv、bpm 和 bpu 用於設置斷點。

會話被中斷下來之后,點擊頁面上方的 Go 按鈕放行當前中斷下來的會話,但新的匹配內容還是會被斷下來,輸入命令但不帶參數表示取消之前設置的斷點。

bpafter

bpafter 后邊跟一個字符串,表示中斷所有包含該字符串的會話。

比如我想中斷所有包含 fishc 的響應,那么我輸入 bpafter fishc,然后在瀏覽器輸入 bbs.fishc.com,發現並沒有收到服務器響應,因此都給 Fiddler 斷下來了:

bps

bps 后邊跟的是 HTTP 狀態碼,表示中斷所有為該狀態碼的會話。

bpv 或 bpm

bpv 或 bpm 后邊跟的是 HTTP 方法,表示中斷所有為該方法的會話。

bpu

跟 bpafter 類似,區別:bpu 是在發起請求時中斷,而 bpafter 是在收到響應后中斷。

cls 或 clear

清除當前的所有會話。

dump

將所有的會話打包成 .zip 壓縮包的形式保存到 C 盤根目錄下。

g 或 go

放行所有中斷下來的會話。

hide

將 Fiddler 隱藏。

show

將 Fiddler 恢復。

urlreplace

urlreplace 后邊跟兩個字符串,表示替換 URL 中的字符串。比如 urlreplace baidu fishc 表示將所有 URL 的 baidu 替換成 fishc。

溫馨提示:直接輸入 urlreplace 不帶任何參數表示恢復原來的樣子。

start

Fiddler 開始工作。

stop

Fiddler 停止工作。

quit

關閉 Fiddler。

select

select 后邊跟響應的類型(Content-Type),表示選中所有匹配的會話。

比如希望 Fiddler 選中所有的圖片,可以使用 select image;

而 select css 則選中所有的 css 文件;

當然,select htm 就是選中所有的 html 文件啦~

allbut 或 keeponly

跟 select 類似,不過 allbut 和 keeponly 會將所有無關的會話刪除。

比如我只想看圖片,那么我可以 keeponly image,表示將所有與圖片無關的會話刪除:

!dns

后邊跟一個域名,執行 DNS 查找並在右邊的 LOG 欄打印結果:

!listen

設置其他監聽的端口,默認是 8888。。



【Fiddler學習】Fiddler教程,比較經典全面(轉)

簡介

Fiddler(中文名稱:小提琴)是一個HTTP的調試代理,以代理服務器的方式,監聽系統的Http網絡數據流動,Fiddler可以也可以讓你檢查所有的HTTP通訊,設置斷點,以及Fiddle所有的“進出”的數據(我一般用來抓包),Fiddler還包含一個簡單卻功能強大的基於JScript .NET事件腳本子系統,它可以支持眾多的HTTP調試任務。

Fiddler官方網站提供了大量的幫助文檔和視頻教程,這是學習Fiddler的最好資料

工作原理

 

工作原理

Fiddler是以代理WEB服務器的形式工作的,瀏覽器與服務器之間通過建立TCP連接以HTTP協議進行通信,瀏覽器默認通過自己發送HTTP請求到服務器,它使用代理地址:127.0.0.1, 端口:8888. 當Fiddler開啟會自動設置代理, 退出的時候它會自動注銷代理,這樣就不會影響別的程序。不過如果Fiddler非正常退出,這時候因為Fiddler沒有自動注銷,會造成網頁無法訪問。解決的辦法是重新啟動下Fiddler。

主界面

 

主界面


Fiddler的主界面分為 工具面板、會話面板、監控面板、狀態面板

工具面板

 

工具面板

說明注釋、重新請求、刪除會話、繼續執行、流模式/緩沖模式、解碼、保留會話、監控指定進程、尋找、保存會話、切圖、計時、打開瀏覽器、清除IE緩存、編碼/解碼工具、彈出控制監控面板、MSDN、幫助

兩種模式

  • 緩沖模式(Buffering Mode)Fiddler直到HTTP響應完成時才將數據返回給應用程序。可以控制響應,修改響應數據。但是時序圖有時候會出現異常

  • 流模式(Streaming Mode)Fiddler會即時將HTTP響應的數據返回給應用程序。更接近真實瀏覽器的性能。時序圖更准確,但是不能控制響應。

會話面板

 

會話面板

 

會話面板圖標

監控面板

 

監控面板

  • 統計報表

  1. 請求總數、請求包大小、響應包大小。

  2. 請求起始時間、響應結束時間、握手時間、等待時間、路由時間、TCP/IP、傳輸時間。

  3. HTTP狀態碼統計。

  4. 返回的各種類型數據的大小統計以及餅圖展現。

 

統計報表

  • 時間軸

每個網絡請求都會經歷域名解析、建立連接、發送請求、接受數據等階段。把多個請求以時間作為 X 軸,用圖表的形式展現出來,就形成了瀑布圖。在Fiddler中,只要在左側選中一些請求,右側選擇Timeline標簽,就可以看到這些請求的瀑布圖

 

時間軸

  • 綠色的請求表示這是一個“有條件的請求”。HTTP 協議定義了 5 個條件請求頭部,最常見的兩個是“If-Modified-Since”和“If-None-Match”。服務器根據這兩個頭部來驗證本地緩存是否過期,如果過期則正常返回資源的最新版本;否則僅返回 304 Not Modified,瀏覽器繼續使用本地緩存。包含條件請求頭部的請求用綠色顯示,否則用黑色。

  • 有陰影線的請求是緩沖模式下的請求,實心的是流模式下的請求。Fiddler 提供了緩沖(Buffering)和流(Streaming)兩種抓包模式:緩沖模式下,Fiddler 會在響應完成時才將數據返回給應用程序(通常是瀏覽器),這種模式下可以控制響應,方便地修改響應內容;流模式下,Fiddler 會實時返回響應數據給瀏覽器,但沒辦法控制響應。一般使用流模式,瀑布圖會更真實一些。這兩種模式可以通過 Fiddler 的工具欄選擇。特別的,通過 Fiddler 的“AutoResponder”功能返回的響應,只能是緩沖模式。

  • 請求條的不同顏色對應着不同類型的響應,根據響應頭的 MIME Type 來歸類。如淺綠色表示圖片類型的響應;深綠色是 JavaScript;紫色是 CSS;其它都是藍色。

  • 請求中的黑色豎線,表示的是瀏覽器收到服務端響應的第一個字節這一時刻。這個時間受 DNS 解析、建立連接、發送請求、等待服務端響應等步驟的影響。

  • 請求條后面的圖標表示響應的某些特征。如軟盤圖標表示這個響應正文從本地獲得,也就是說服務端返回了 304;閃電表示這是 Fiddler 的“AutoResponder”的響應;向下的箭頭表示響應是 302,需要重定向;紅色感嘆號說明這個請求有錯誤發生(狀態碼是 4XX 或 5XX)。特別的,如果請求條后面有一個紅色的X,說明服務端響應完這個請求之后,斷開了連接。出現這種情況一般有兩種可能:HTTP/1.0 的響應中沒有 Connection: Keep-Alive;或者是 HTTP/1.1 的響應中包含了 Connection: close。使用持久連接可以省去建立連接的開銷,也可以減小 TCP 慢啟動和其它擁塞控制機制帶來的影響,總之是好處多多。

  • 請求前面的紅色圓圈表示這個連接是新建的,綠色表示是復用的。上面的圓圈表示的是瀏覽器到 Fiddler 的連接,下面的圓圈是 Fiddler 到服務端的連接。

狀態面板

 

狀態面板


控制台Fiddler的左下角有一個命令行工具叫做QuickExec,允許你直接輸入命令。
常見得命令有:

命令 解釋
help 打開官方的使用頁面介紹,所有的命令都會列出來
cls 清屏 (Ctrl+x 也可以清屏)
select 選擇會話的命令
?.png 用來選擇png后綴的圖片
bpu 截獲request
bpafter 截獲response

Request消息的結構

 

Request消息的結構

Response消息的結構

 

Response消息的結構

常用功能

  • 監聽HTTPS

Fiddler不僅能監聽HTTP請求而且默認情況下也能捕獲到HTTPS請求,Tool -> Fiddler Option -> HTTPS下面進行設置,勾選上“Decrypt HTTPS traffic”,如果不必監聽服務器端得證書錯誤可以勾上“Ignore server certification errors”,也可以跳過幾個指定的HOST來縮小或者擴大監聽范圍。

 

監聽HTTPS

  • HOST切換

 

HOST

  • 模擬各類場景

  • 通過GZIP壓縮,測試性能

  • 模擬Agent測試,查看服務端是否對不同客戶端定制響應

  • 模擬慢速網絡,測試頁面的容錯性

  • 禁用緩存,方便調試一些靜態文件或測試服務端響應情況

  • 根據一些場景自定義規則


     

    自定義規則

  • 低網速模擬有時出於兼容性考慮或者對某處進行性能優化,在低網速下往往能較快發現問題所在也容易發現性能瓶頸,可惜其他調試工具沒能提供低網速環境,而強大的Fiddler考慮到了這一點,能夠進行低網速模擬設置Rules > Performance > Stimulate Modem Speeds。

  • Compare(對比文本)


     

    對比文本

  • Composer(構造器)

請求構造顧名思義就是我們可以模擬請求,也就是說我們可以借助Fiddler的Composer 在不改動開發環境實際代碼的情況下修改請求中的參數值並且方便的重新調用一次該請求,然后相比較2次請求響應有何具體不同。任何一個請求參數只要是合法的取值再次調用后都會有相應的響應,那么你想要的任意一個合法請求組合自然也能夠按照你的意願構造出來,然后再次調用以及查看返回數據。

 

Paste_Image.png


將該請求鼠標左鍵單擊拖入Fiddler右側Request Builder標簽內並修改原請求參數OutPutType=JSON為OutPu tType=XML,然后點擊Execute按鈕再次觸發調用請求

![Paste_Image.png](//upload-images.jianshu.io/upload_images/947566-5aaac0b84a397c58.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

雙擊這次請求包在Inspectors標簽下查看返回數據為XML格式,而JSON格式一欄為空:

 

Paste_Image.png

  • Filters(過濾監控)

對一個重新載入的頁面進行抓包,如果包的條目過多而你需要關注的就那么幾項的話,可以使用Fiddler的過濾器Filters進行抓包,那么抓包時只會抓取你希望抓到的那些包。切換到Filters標簽勾選Use filter,以便激活過濾器,這樣下面的各種過濾方式就可以進行選擇了。


 

Filter_1

![Filter_2](//upload-images.jianshu.io/upload_images/947566-b6ed61685e13315e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  • AutoResponder(請求重定向)

所謂請求無非就是需要調用到的一些資源(包括JS、CSS和圖片等),所謂重定向就是將頁面原本需要調用的資源指向其他資源(你能夠控制的資源或者可以引用到的資源)。

  1. 你可以將前台服務器的諸多或者某個資源在本地做個副本,如果正常網絡訪問環境下該資源出現了BUG而導致開發環境崩潰時,可以先將這個資源的請求重定向到本地副本,這樣就可以繼續進行開發調試你的頁面,從而大量節省資源維護的等待時間。

  2. 你也可以將多人同時維護的某個JS文件復制一份出來在本地,當你的開發調試收到他人調試代碼干擾時,可以將這個JS的調用重定向到本地無干擾的JS文件,進行無干擾開發,功能開發完成並調試OK之后再將你的代碼小心合入到開發環境中,這樣就可以避免受到他人干擾專心搞你的模塊開發,也就是說能夠將JS文件脫離開發環境卻不影響線上調試。

  3. 你還可以將樣式文件或者圖片指向本地。

![重定向](//upload-images.jianshu.io/upload_images/947566-18f9c105596ef543.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

移動端抓包

Fiddler不但能截獲各種瀏覽器發出的HTTP請求, 也可以截獲各種智能手機發出的HTTP/HTTPS請求。
Fiddler能捕獲IOS,Andriod,WinPhone,設備發出的請求,同理,也可以截獲IPad, MacBook的等設備發出的HTTP/HTTPS。
前提條件是:安裝Fiddler的機器,跟Iphone 在同一個網絡里, 否則IPhone不能把HTTP發送到Fiddler的機器上來。

具體操作步驟如下:

  • Fiddler設置打開Fiddler, Tools-> Fiddler Options。(配置完后記得要重啟Fiddler).

  •  

     

    選中"Allow remote computers to connect". 是允許別的機器把HTTP/HTTPS請求發送到Fiddler上來

     

    APP

  • 獲取Fiddler所在機器的IP

  • 安裝Fiddler證書這一步是為了讓Fiddler能捕獲HTTPS請求。 如果你只需要截獲HTTP請求, 可以忽略這一步

  • 首先要知道Fiddler所在的機器的IP地址: 假如我安裝了Fiddler的機器的IP地址是:192.168.1.104打開IPhone 的Safari, 訪問 http://192.168.1.104:8888, 點"FiddlerRoot certificate" 然后安裝證書

     

    APP_1


     

    APP_2

     

  •  

     

    打開IPhone, 找到你的網絡連接, 打開HTTP代理, 輸入Fiddler所在機器的IP地址(比如:192.168.1.104) 以及Fiddler的端口號8888

     

    APP_3

參考資料

 

下面開始分析主界面的功能區:

1、Fiddler菜單欄,上圖黑色部分,包括捕獲http請求,停止捕獲請求,保存http請求,載入本地session、設置捕獲規則等功能。

2、Fiddler的工具欄,上圖黃色部分,包括Fiddler針對當前view的操作(暫停,清除session,decode模式、清除緩存等)。

3、Web Session面板,上圖紅色部分,主要是Fiddler抓取到的每條http請求(每一條稱為一個session),主要包含了請求的url,協議,狀態碼,body等信息,詳細的字段含義如下圖所示:

#欄圖標說明

另外,注意請求的host字段。可以看到有來自多個www.csdn.net的子域名的響應,說明在大型網站的架構中,大多需要多個子域名,這些子域名可能是單獨用於緩存靜態資源的,也可能是專門負責媒體資源的,或者是專門負責數據統計的(如pingback)

右鍵單擊其中的一條請求。可以選擇的操作有:save(保存請求的報文信息,可以是請求報文,可以是響應報文),將整條會話作為txt保存到桌面,當然你可以保存為zip,可以看到整個回話的內容如下:

 

4、詳情和數據統計板,針對每條http請求的具體統計(例如發送/接受字節數,發送/接收時間,還有粗略統計世界各地訪問該服務器所花費的時間)和數據包分析。如inspector面板下,提供headers、textview、hexview,Raw等多種方式查看單條http請求的請求報文的信息:

選擇單條回話,右鍵save->selected Sessions->as Txt,打開相關的文件

如果想要重新發送某些請求,可以選中這些請求,然后點擊工具欄中的,然后就可以重新發送選中的這些請求。

5、詳情和數據統計板

(1)、inspector面板

提供headers、textview、hexview,Raw等多種方式查看單條http請求的請求報文的信息,分為上下兩個部分,上半部分是請求頭部分,下半部分是響應頭部分。對於每一部分,提供了多種不同格式查看每個請求和響應的內容。

a、ImageView標簽 

JPG 格式使用 ImageView 就可以看到圖片,選擇一條Content-Type是image/jpeg的回話,點擊TextView

 

b、TextView 標簽

HTML/JS/CSS 使用 TextView 可以看到響應的內容。選擇一條Content-Type是text/html的回話,點擊TextView

 

c、Raw標簽

Raw標簽可以查看響應報文和響應正文,但是不包含請求報文

d、Auth標簽

Auth則可以查看授權Proxy-Authorization 和 Authorization的相關信息

e、Cookies標簽

Cookies標簽可以看到請求的cookie和響應的set-cookie頭信息。

 

(2)、AutoResponder標簽

Fiddler比較重要且比較強大的功能之一。可用於攔截某一請求,並重定向到本地的資源,或者使用Fiddler的內置響應。可用於調試服務器端代碼而無需修改服務器端的代碼和配置,因為攔截和重定向后,實際上訪問的是本地的文件或者得到的是Fiddler的內置響應。當勾選allow autoresponser 並設置相應的規則后(本例中的規則是將http://blog.csdn.net/aaa的請求攔截到本地的文件http://localhost:54321/WebForm1.aspx),如下圖所示

 

(2)、Statistics面板

HTTP請求的性能和其他數據分析

我們可以從中看出一些基本性能數據:如DNS解析的時間消耗是8ms,建立TCP/IP連接的時間消耗是8ms等等信息。

(3)、composer面板

可以模擬向相應的服務器發送數據的過程(不錯,這就是灌水機器人的基本原理,也可以是部分http flood的一種方式)。

(3)、Filters面板

Filter標簽則可以設置Fiddler的過濾規則,來達到過濾http請求的目的。最簡單如:過濾內網http請求而只抓取internet的http請求,或則過濾相應域名的http請求。Fiddler的過濾器非常強大,可以過濾特定http狀態碼的請求,可以過濾特定請求類型的http請求(如css請求,image請求,js請求等),可以過濾請求報文大於或則小於指定大小(byte)的請求

 

一、Fiddler是什么?

    Fiddler是一個http協議調試代理工具,它能夠記錄並檢查所有你的電腦和互聯網之間的http通訊,設置斷點,查看所有的進出Fiddler的數據。 Fiddler 要比其他的網絡調試器要更加簡單,因為它不僅僅暴露http通訊還提供了一個用戶友好的格式。

二、Fiddler抓包原理

三、Fiddler軟件簡介(參考:http://blog.csdn.net/gld824125233/article/details/52621456)

   安裝完成之后,點擊啟動Fiddler,Fiddler界面如下:

   

1.Fiddler開關

         界面左下角或點擊F12控制Fiddler開關,開關是“Capturing”;

        

2.啟動之后Fiddler代理永遠是開着的;

3.瀏覽器代理設置

(1)IE或360瀏覽器代理都是自動開啟的;

         代理查看方式:瀏覽器菜單欄上:工具—>Internet選項—>連接—>局域網設置—>高級代理。

        

         Fiddler開啟之后,代理自動修改;

(2)火狐瀏覽器

         火狐瀏覽器啟動之后,Fiddler沒有反應,是因為火狐代理是自己獨立的,不會像IE、360那樣自動改變;

         代理設置:——>選項——>高級——>網絡——>連接——>設置——>手動配置代理——>Http代理和端口輸入(與Fiddler代理端口保持一致);

(3)谷歌瀏覽器代理設置

         工具——>設置——>拖動頁面到底部,點擊:顯示高級設置按鈕——>網絡——>更改代理服務器設置——>點擊:局域網設置——>高級——>進入代理服務器設置;

         谷歌和IE都是用的系統代理。

4.Fiddler自己的端口:

         查看方式:Tools——>TelerikFiddler Options——>Connections下的Fiddler listens on port:8888,8888就是我們Fiddler默認的端口號;

         Fiddler默認端口號是8888(文章中有圖說明端口號是哪一個),如果要修改,修改之后要重啟Fiddler

5.Fiddler抓包格式

         Fiddler只能抓取Http和https格式的,但是默認只能抓取http,想要抓取https我們的設置一下,步驟見下:

         Tools——>Telerik Fiddler Options——>HTTPS下,勾選:CaptureHTTPS CONNECTsDecrypt HTTPS traffic 、ignore server certificate errors(unsafe)——>點擊OK,彈出證書之后直接確認就行。

6.Fiddler遠程機制

         Fiddler是代理機制,所以我們也可以實現遠程操作,Fiddler默認只開啟本地,若要抓取遠程需要打開遠程設置。

         設置: Tools——>TelerikFiddler Options——>Connections——>勾選Allow remote computers connect,此時就可以遠程操作;

7.Fiddler遠程實例

         我直接用另一台電腦,遠程捕獲我自己電腦。

(1)另一台電腦相關設置

         另一台電腦上安裝Fiddler並啟動,查詢另一台電腦的IP,開始——>運行或(win+R)——>輸入cmd,然后輸入ipconfig,查看IP和Fiddler端口號,並記錄:

         Ip為:192.168.103.171,Fiddler端口號為:8888;

(2)我的電腦相關設置

         點擊瀏覽器,以搜狐瀏覽器來說,修改代理

         http代理為:另一個機子上的IP,端口值為Fiddler的端口

 

(3)結果

         在我本地瀏覽器點擊,另一個機子中Fiddler上捕獲的數據界面見下:

(4)說明

         指定代理之后,無論Fiddler開關是關閉還是打開,數據都會傳輸過來,見上圖。

         本地遠程其他機子,方法一致,就是講要遠程的機子代理改為本地電腦IP+Fiddler端口號即可。

 

轉自:http://blog.csdn.net/gld824125233/article/details/52621456







 


About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網絡,若有侵權請聯系小麥苗刪除

● 本文在itpub(http://blog.itpub.net/26736162)、博客園(http://www.cnblogs.com/lhrbest)和個人weixin公眾號(xiaomaimiaolhr)上有同步更新

● 本文itpub地址:http://blog.itpub.net/26736162

● 本文博客園地址:http://www.cnblogs.com/lhrbest

● 本文pdf版、個人簡介及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/

● 數據庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址:http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群號:230161599(滿)、618766405

● weixin群:可加我weixin,我拉大家進群,非誠勿擾

● 聯系我請加QQ好友646634621,注明添加緣由

● 於 2018-12-01 06:00 ~ 2018-12-31 24:00 在魔都完成

● 最新修改時間:2018-12-01 06:00 ~ 2018-12-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網絡,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的數據庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網絡班http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁https://lhr.ke.qq.com/

........................................................................................................................

使用weixin客戶端掃描下面的二維碼來關注小麥苗的weixin公眾號(xiaomaimiaolhr)及QQ群(DBA寶典)、添加小麥苗weixin,學習最實用的數據庫技術。

........................................................................................................................

歡迎與我聯系

 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM