【爬蟲】網頁抓包工具--Fiddler css
Fiddler基礎知識 html
-
Fiddler是強大的抓包工具,它的原理是以web代理服務器的形式進行工做的,使用的代理地址是:127.0.0.1,端口默認爲8888,咱們也能夠經過設置進行修改。 前端
-
代理就是在客戶端和服務器之間設置一道關卡,客戶端先將請求數據發送出去後,代理服務器會將數據包進行攔截,代理服務器再冒充客戶端發送數據到服務器;同理,服務器將響應數據返回,代理服務器也會將數據攔截,再返回給客戶端。 ios
-
Fiddler能夠抓取支持http代理的任意程序的數據包,若是要抓取https會話,要先安裝證書。 web
HTTP協議 面試
-
要分析Fiddler抓取的數據包,咱們首先要熟悉HTTP協議。HTTP即超文本傳輸協議,是一個基於請求與響應模式的、無狀態的、應用層的協議,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。 正則表達式
-
HTTP的工做過程:當咱們請求一個超連接時,HTTP就開始工做了,客戶端先發送一個請求到服務器,請求內容包括:協議版本號、請求地址、請求方式、請求頭和請求參數;服務器收到請求後作相應的處理,並將響應數據返回到客戶端,響應內容包括:協議版本號、狀態碼和響應數據。前端根據響應數據作相應的處理,就是最終咱們看到的內容。這些過程是HTTP自動完成的,咱們只是輸入或點擊請求地址,而後查看前端給咱們展現的內容。更多關於HTTP協議的介紹請參考:http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html chrome
-
請求方式經常使用的有:GET、PUT、POST、DELETE。 數據庫
-
HTTP狀態碼主要分爲5類:以1開頭的表明請求已被接受,須要繼續處理;以2開頭的表明請求已成功被服務器接收、理解、並接受;以3開頭的表明須要客戶端採起進一步的操做才能完成請求;以4開頭的表明了客戶端看起來可能發生了錯誤,妨礙了服務器的處理;以5開頭的表明了服務器在處理請求的過程當中有錯誤或者異常狀態發生,也有多是服務器意識到以當前的軟硬件資源沒法完成對請求的處理。 json
-
常見的主要有: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的使用
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的基本使用方法。經過上一篇的操做咱們能夠直接抓取瀏覽器的數據包。但在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)若在瀏覽器上沒法打開該地址,須要作兩項檢查:1、確保在瀏覽器、wifi中配置的代理與Fiddler所在主機地址和Fiddler中配置的端口,三者保持一致;2、確保在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:有幾種類型,一類是根據響應數據的類型顯示或隱藏;一類是根據響應數據的大小顯示或隱藏;一類是根據響應所須要的時間設置背景顏色;一類是根據文件類型進行限制。
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 下載地址 :https://www.telerik.com/download/fiddler
Fiddler 離線下載地址:https://pan.baidu.com/s/1bpnp3Ef 密碼:5skw
下載Fiddler要FQ,我費了好大得勁才翻出去下載到…
win8以後用「Fiddler for .NET4」而win8以前用「Fiidler for .NET2」比較好
1. Fiddler 抓包簡介
Fiddler是經過改寫HTTP代理,讓數據從它那經過,來監控而且截取到數據。固然Fiddler很屌,在打開它的那一瞬間,它就已經設置好了瀏覽器的代理了。當你關閉的時候,它又幫你把代理還原了,是否是很貼心。。。
1) 字段說明
Fiddler想要抓到數據包,要確保Capture Traffic是開啓,在File –> Capture Traffic。開啓後再左下角會有顯示,固然也能夠直接點擊左下角的圖標來關閉/開啓抓包功能。
Fiddler開始工做了,抓到的數據包就會顯示在列表裏面,下面總結了這些都是什麼意思:
名稱 |
含義 |
# |
抓取HTTP Request的順序,從1開始,以此遞增 |
Result |
HTTP狀態碼 |
Protocol |
請求使用的協議,如HTTP/HTTPS/FTP等 |
Host |
請求地址的主機名 |
URL |
請求資源的位置 |
Body |
該請求的大小 |
Caching |
請求的緩存過時時間或者緩存控制值 |
Content-Type |
請求響應的類型 |
Process |
發送此請求的進程:進程ID |
Comments |
容許用戶爲此回話添加備註 |
Custom |
容許用戶設置自定義值 |
圖標 |
含義 |
|
請求已經發往服務器 |
|
已從服務器下載響應結果 |
|
請求從斷點處暫停 |
|
響應從斷點處暫停 |
|
請求使用 HTTP 的 HEAD 方法,即響應沒有內容(Body) |
|
請求使用 HTTP 的 POST 方法 |
|
請求使用 HTTP 的 CONNECT 方法,使用 HTTPS 協議創建鏈接隧道 |
|
響應是 HTML 格式 |
|
響應是一張圖片 |
|
響應是腳本格式 |
|
響應是 CSS 格式 |
|
響應是 XML 格式 |
|
響應是 JSON 格式 |
|
響應是一個音頻文件 |
|
響應是一個視頻文件 |
|
響應是一個 SilverLight |
|
響應是一個 FLASH |
|
響應是一個字體 |
|
普通響應成功 |
|
響應是 HTTP/300、30一、30二、303 或 307 重定向 |
|
響應是 HTTP/304(無變動):使用緩存文件 |
|
響應須要客戶端證書驗證 |
|
服務端錯誤 |
|
會話被客戶端、Fiddler 或者服務端終止 |
2). Statistics 請求的性能數據分析
好了。左邊看完了,如今能夠看右邊了
隨意點擊一個請求,就能夠看到Statistics關於HTTP請求的性能以及數據分析了(不可能安裝好了Fiddler一條請求都沒有…):
3). Inspectors 查看數據內容
Inspectors是用於查看會話的內容,上半部分是請求的內容,下半部分是響應的內容:
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 |
不匹配 |
4). Composer 自定義請求發送服務器
Composer容許自定義請求發送到服務器,能夠手動建立一個新的請求,也能夠在會話表中,拖拽一個現有的請求
Parsed模式下你只須要提供簡單的URLS地址便可(以下圖,也能夠在RequestBody定製一些屬性,如模擬瀏覽器User-Agent)
5). Filters 請求過濾規則
Fiters 是過濾請求用的,左邊的窗口不斷的更新,當你想看你係統的請求的時候,你刷新一下瀏覽器,一大片不知道哪來請求,看着礙眼,它還一直刷新你的屏幕。這個時候經過過濾規則來過濾掉那些不想看到的請求。
勾選左上角的Use Filters開啓過濾器,這裏有兩個最經常使用的過濾條件:Zone和Host
一、Zone 指定只顯示內網(Intranet)或互聯網(Internet)的內容:
二、Host 指定顯示某個域名下的會話:
若是框框爲黃色(如圖),表示修改未生效,點擊紅圈裏的文字便可
6). Timeline 請求響應時間
在左側會話窗口點擊一個或多個(同時按下 Ctrl 鍵),Timeline 便會顯示指定內容從服務端傳輸到客戶端的時間:
2. Fiddler 設置解密HTTPS的網絡數據
Fiddler能夠經過僞造CA證書來欺騙瀏覽器和服務器。Fiddler是個很會裝逼的好東西,大概原理就是在瀏覽器面前Fiddler假裝成一個HTTPS服務器,而在真正的HTTPS服務器面前Fiddler又裝成瀏覽器,從而實現解密HTTPS數據包的目的。
解密HTTPS須要手動開啓,依次點擊:
1. Tools –> Fiddler Options –> HTTPS
2. 勾選Decrypt HTTPS Traffic
3. 點擊OK
3. Fiddler 抓取Iphone / Android數據包
想要Fiddler抓取移動端設備的數據包,其實很簡單,先來講說移動設備怎麼去訪問網絡,看了下面這張圖,就明白了。
能夠看得出,移動端的數據包,都是要走wifi出去,因此咱們能夠把本身的電腦開啓熱點,將手機連上電腦,Fiddler開啓代理後,讓這些數據經過Fiddler,Fiddler就能夠抓到這些包,而後發給路由器(如圖):
1. 打開Wifi熱點,讓手機連上(我這裏用的360wifi,其實隨意一個都行)
2. 打開Fidder,點擊菜單欄中的 [Tools] –> [Fiddler Options]
3. 點擊 [Connections] ,設置代理端口是8888, 勾選 Allow remote computers to connect, 點擊OK
4. 這時在 Fiddler 能夠看到本身本機無線網卡的IP了(要是沒有的話,重啓Fiddler,或者能夠在cmd中ipconfig找到本身的網卡IP)
5. 在手機端鏈接PC的wifi,而且設置代理IP與端口(代理IP就是上圖的IP,端口是Fiddler的代理端口8888)
6. 訪問網頁輸入代理IP和端口,下載Fiddler的證書,點擊下圖FiddlerRoot certificate
【注意】:若是打開瀏覽器碰到相似下面的報錯,請打開Fiddler的證書解密模式(Fiddler 設置解密HTTPS的網絡數據)
No root certificate was found. Have you enabled HTTPS traffic decryption in Fiddler yet?
![13D99A1D77D5528F3EFBA0C3DEA3BD28 13D99A1D77D5528F3EFBA0C3DEA3BD28](http://static.javashuo.com/static/loading.gif)
![8F268C0A1192E2DF41BD0F5DEFD525D9 8F268C0A1192E2DF41BD0F5DEFD525D9](http://static.javashuo.com/static/loading.gif)
7. 安裝完了證書,能夠用手機訪問應用,就能夠看到截取到的數據包了。(下圖選中是布卡漫畫的數據包,下面還有QQ郵箱的)
![image image](http://static.javashuo.com/static/loading.gif)
4. Fiddler 內置命令與斷點
Fiddler還有一個藏的很深的命令框,就是眼前,我用了幾年的Fiddler都沒有發現它,偶爾在別人的文章發現還有這個小功能,還蠻好用的,整理下記錄在這裏。
FIddler斷點功能就是將請求截獲下來,可是不發送,這個時候你能夠幹不少事情,好比說,把包改了,再發送給服務器君。還有balabala一大堆的事情能夠作,就不舉例子了。
![image image](http://static.javashuo.com/static/loading.gif)
命令 |
對應請求項 |
介紹 |
示例 |
? |
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](http://static.javashuo.com/static/loading.gif)
>
![image image](http://static.javashuo.com/static/loading.gif)
<
![image image](http://static.javashuo.com/static/loading.gif)
=
![image image](http://static.javashuo.com/static/loading.gif)
@
![image image](http://static.javashuo.com/static/loading.gif)
select
![image image](http://static.javashuo.com/static/loading.gif)
cls
![image image](http://static.javashuo.com/static/loading.gif)
dump
![image image](http://static.javashuo.com/static/loading.gif)
斷點命令:
斷點能夠直接點擊Fiddler下圖的圖標位置,就能夠設置所有請求的斷點,斷點的命令能夠精確設置須要截獲那些請求。以下示例:
![image image](http://static.javashuo.com/static/loading.gif)
命令:
bpafter
![image image](http://static.javashuo.com/static/loading.gif)
bps
![image image](http://static.javashuo.com/static/loading.gif)
![image image](http://static.javashuo.com/static/loading.gif)
bpv
![image image](http://static.javashuo.com/static/loading.gif)
![image image](http://static.javashuo.com/static/loading.gif)
g / go
![image image](http://static.javashuo.com/static/loading.gif)
![image image](http://static.javashuo.com/static/loading.gif)
本文基於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 提供的頁面,而後肯定安裝就行了
打開 WiFi 設置頁面,選擇要鏈接的 wifi ,而且長按,在彈出的對話框中,選擇「修改網絡」。在接下來彈出的對話框中,勾選「顯示高級選項」。在接下來顯示的頁面中,點擊「代理」,選擇「手動」。代理服務器主機名設爲 PC 的 IP ,代理服務器端口設爲 Fiddler 上配置的端口 8888,點」保存」。
蘋果手機上的配置
蘋果手機上的配置其實跟 Android 手機基本是同樣的。如圖
至此已配置完成。
Fiddler的使用
視圖功能區域
會話的概念:一次請求和一次響應就是一個會話。
fiddler主界面
下面挑幾個快捷功能區中經常使用幾項解釋,其餘功能本身嘗試:
快捷功能區
1:給會話添加備註信息
2:從新加載當前會話
3:刪除會話選項
4:放行,和斷點對應,後面詳細講解
5:響應模式。也便是,當Fiddler拿到遠程的response後是緩存起來一次響應給客戶端仍是以stream的方式直接響應。
6:解碼。有些請求是被編碼的,點擊這個按鈕後能夠根據響應的編碼格式自動解碼。
7:查找會話。
8:保存會話。
9:截屏。截屏後,會以會話的方式返回一個截圖。
接着來看看會話列表
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
#欄圖標說明
![](http://static.javashuo.com/static/loading.gif)
快捷鍵
刪除一條會話,能夠在選中會話後,按del刪除,如若要清空列表,能夠用Ctrl+X
左鍵點擊單條HTTP請求,能夠在右側的tab面板中看到以下信息:
1. Statistic。
關於HTTP請求的性能和其餘數據分析:
![](http://static.javashuo.com/static/loading.gif)
咱們能夠從中看出一些基本性能數據:如DNS解析的時間消耗是8ms,創建TCP/IP鏈接的時間消耗是8ms等等信息。
2. Inspectors
提供headers、textview、hexview,Raw等多種方式查看單條http請求的請求報文的信息,分爲上下兩個部分,上半部分是請求頭部分,下半部分是響應頭部分。對於每一部分,提供了多種不一樣格式查看每一個請求和響應的內容。
a、ImageView標籤
JPG 格式使用 ImageView 就能夠看到圖片,選擇一條Content-Type是image/jpeg的回話,點擊TextView
![](http://static.javashuo.com/static/loading.gif)
b、TextView 標籤
HTML/JS/CSS 使用 TextView 能夠看到響應的內容。選擇一條Content-Type是text/html的回話,點擊TextView
![](http://static.javashuo.com/static/loading.gif)
c、Raw標籤
Raw標籤能夠查看響應報文和響應正文,可是不包含請求報文
![](http://static.javashuo.com/static/loading.gif)
d、Auth標籤
Auth則能夠查看受權Proxy-Authorization 和 Authorization的相關信息
e、Cookies標籤
Cookies標籤能夠看到請求的cookie和響應的set-cookie頭信息。
![](http://static.javashuo.com/static/loading.gif)
3.AutoResponder標籤
Fiddler 的AutoResponder tab容許你從本地返回文件,而不用將http request 發送到服務器上。
下邊直接說他的使用方式把:
使用的是手機上邊的百度手機助手的棋牌遊戲界面。
一、首先看圖 (咱們來重定向第一個歡樂鬥地主這個圖片)
![](http://static.javashuo.com/static/loading.gif)
二、打開Fiddler,而後點擊棋牌遊戲進入上邊這個界面,就能發現會請求當前顯示的這五張圖片
![](http://static.javashuo.com/static/loading.gif)
這個時候咱們切換到AutoResponder這個界面,點擊鼠標左鍵,把要重定向的這個session會話拖動到AutoResponder界面中
![](http://static.javashuo.com/static/loading.gif)
選擇了咱們要返回的圖片之後,而後點擊save。
而後關掉應該,清楚應用緩存,而後在打開,點擊棋牌遊戲,能夠看到
![](http://static.javashuo.com/static/loading.gif)
這是實現了替換其中一個,也許你會說,是否是原本就是那樣啊,那麼在介紹一個根據別的規則來進行重定向。
咱們經過重定向向,把全部的百度手機助手中的圖片都替換成剛纔的小頭像。
前便的操做時同樣的,拖過來之後咱們能夠點擊Save前邊的倒的小三角,而後就能夠看到,裏邊有不少規則,如今咱們選擇
第一個:這是一個正則表達式。
![](http://static.javashuo.com/static/loading.gif)
而後在選擇剛纔的那個頭像圖片,而後save。
清除緩存,從新打開,能夠看下圖:
![](http://static.javashuo.com/static/loading.gif)
能夠看到,全部的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)
![](http://static.javashuo.com/static/loading.gif)
5.斷點請求/響應
![](http://static.javashuo.com/static/loading.gif)
如圖,箭頭所指的位置時能夠點擊的。共三種狀態:
空白:不設置斷點。
箭頭向上:表示斷點請求。此時客戶端的請求是沒法直接到達目標服務器的,須要手動控制。
箭頭向下:表示斷點響應。此時目標服務器的響應是沒法直接到達客戶端的,須要手動控制。
還有一種打斷點的方式
在命令行中輸入命令:
bpu www.baidu.com (斷點請求)
bpuafter www.baidu.com(斷點響應)
這種方法只會中斷www.baidu.com
斷點請求並修改
如圖,操做步驟:
-
設置斷點請求,訪問網頁
-
點擊對應的會話
-
查看請求報文信息
-
修改請求內容
-
完成斷點,放行,把該請求發送給目標服務器。
圖中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響應的數據返回給應用程序。更接近真實瀏覽器的性能。時序圖更準確,可是不能控制響應。
會話面板
會話面板
會話面板圖標
監控面板
監控面板
-
請求總數、請求包大小、響應包大小。
-
請求起始時間、響應結束時間、握手時間、等待時間、路由時間、TCP/IP、傳輸時間。
-
HTTP狀態碼統計。
-
返回的各類類型數據的大小統計以及餅圖展示。
統計報表
每一個網絡請求都會經歷域名解析、創建鏈接、發送請求、接受數據等階段。把多個請求以時間做爲 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消息的結構
經常使用功能
Fiddler不只能監聽HTTP請求並且默認狀況下也能捕獲到HTTPS請求,Tool -> Fiddler Option -> HTTPS下面進行設置,勾選上「Decrypt HTTPS traffic」,若是沒必要監聽服務器端得證書錯誤能夠勾上「Ignore server certification errors」,也能夠跳過幾個指定的HOST來縮小或者擴大監聽範圍。
監聽HTTPS
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格式一欄爲空:
![](http://static.javashuo.com/static/loading.gif)
Paste_Image.png
對一個從新載入的頁面進行抓包,若是包的條目過多而你須要關注的就那麼幾項的話,可使用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)
所謂請求無非就是須要調用到的一些資源(包括JS、CSS和圖片等),所謂重定向就是將頁面本來須要調用的資源指向其餘資源(你可以控制的資源或者能夠引用到的資源)。
-
你能夠將前臺服務器的諸多或者某個資源在本地作個副本,若是正常網絡訪問環境下該資源出現了BUG而致使開發環境崩潰時,能夠先將這個資源的請求重定向到本地副本,這樣就能夠繼續進行開發調試你的頁面,從而大量節省資源維護的等待時間。
-
你也能夠將多人同時維護的某個JS文件複製一份出來在本地,當你的開發調試收到他人調試代碼干擾時,能夠將這個JS的調用重定向到本地無干擾的JS文件,進行無干擾開發,功能開發完成並調試OK以後再將你的代碼當心合入到開發環境中,這樣就能夠避免受到他人干擾專心搞你的模塊開發,也就是說可以將JS文件脫離開發環境卻不影響線上調試。
-
你還能夠將樣式文件或者圖片指向本地。
![重定向](//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
參考資料
下面開始分析主界面的功能區:
一、Fiddler菜單欄,上圖黑色部分,包括捕獲http請求,中止捕獲請求,保存http請求,載入本地session、設置捕獲規則等功能。
二、Fiddler的工具欄,上圖黃色部分,包括Fiddler針對當前view的操做(暫停,清除session,decode模式、清除緩存等)。
三、Web Session面板,上圖紅色部分,主要是Fiddler抓取到的每條http請求(每一條稱爲一個session),主要包含了請求的url,協議,狀態碼,body等信息,詳細的字段含義以下圖所示:
#欄圖標說明
另外,注意請求的host字段。能夠看到有來自多個www.csdn.net的子域名的響應,說明在大型網站的架構中,大多須要多個子域名,這些子域名多是單獨用於緩存靜態資源的,也多是專門負責媒體資源的,或者是專門負責數據統計的(如pingback)
右鍵單擊其中的一條請求。能夠選擇的操做有:save(保存請求的報文信息,能夠是請求報文,能夠是響應報文),將整條會話做爲txt保存到桌面,固然你能夠保存爲zip,能夠看到整個回話的內容以下:
四、詳情和數據統計板,針對每條http請求的具體統計(例如發送/接受字節數,發送/接收時間,還有粗略統計世界各地訪問該服務器所花費的時間)和數據包分析。如inspector面板下,提供headers、textview、hexview,Raw等多種方式查看單條http請求的請求報文的信息:
選擇單條回話,右鍵save->selected Sessions->as Txt,打開相關的文件
若是想要從新發送某些請求,能夠選中這些請求,而後點擊工具欄中的
,而後就能夠從新發送選中的這些請求。
五、詳情和數據統計板
(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)的請求
1、Fiddler是什麼?
Fiddler是一個http協議調試代理工具,它可以記錄並檢查全部你的電腦和互聯網之間的http通信,設置斷點,查看全部的進出Fiddler的數據。 Fiddler 要比其餘的網絡調試器要更加簡單,由於它不只僅暴露http通信還提供了一個用戶友好的格式。
2、Fiddler抓包原理
3、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 CONNECTs、Decrypt 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
|
|