Fiddler簡介
1主菜單欄:菜單中幾乎可以啟動所有的fiddler功能
2工具欄:提供了很多常見的命令
3 Web sessions:顯示捕捉到的每個sessions的簡短信息,平常需要在這里選擇一個或多個session后再進行操作
4功能面板:提供了很多功能和選項卡
5 QuickExec(命令行工具):可以輸入簡單的命令
6狀態欄:展示了一些fiddler的配置信息
Web session列表
位於左側窗口,是fiddler中最重要的部分,顯示了每個session的摘要信息。可以排序
1 #:這是fiddler生成的ID
2 Result:響應的狀態碼
3 protocol:使用的協議http或https
4 Host:服務器的主機名和端口號
5 URL:URL的路徑
6 Body:http響應中包含的字節數
7 Catching:跟緩存相關的字段的值
8 Content-Type:響應中Content-Type的值
9 Process:對應本地Windows的進程
1抓包
抓包==獲取http數據包的過程
開啟和關閉:
方法1
打開fiddler->工具欄點擊file->點擊Capture Traffic,開啟抓包或停止抓包(快捷鍵F12)
方法2
單機fiddler左下角的“Capturing”按鈕來開始抓包或者停止抓包
捕獲請求,查看請求和響應報文:
打開fiddler,打開瀏覽器發送請求
在fiddler界面中找到對應url的session,點擊inspectors選項卡
在inspectors選項卡中請求部分(上)和響應部分(下)均選擇Raw選項卡,這樣就能看到完整的http請求和響應報文了,由於是個get方法,所以http請求中沒有body
除了Raw之外其他選項卡可以查看請求和響應的其他部分
1.Fiddler抓包的原理:
fiddler本質上是一個代理服務器。它的默認工作端口是8888
打開fiddler,在菜單欄中點擊Tools->Fiddler options
在彈出的框中選擇Connections
代理服務器即是Web服務器又是Web客戶端,是網絡信息的中轉站,具有以下功能:
1共享網絡-可以共享IP
2提高訪問速度-具有緩沖作用
3突破了訪問速度-速度提升
4 隱藏身份-內部網用戶對外發布信息,用反向代理功能,保證內部安全性,起到隱藏身份目的
Fiddler 工作原理:
工作方式:Fiddler是以代理Web服務器的形式工作
代理地址:127.0.0.1
端口:8888
在瀏覽器和網絡服務器之間起到代理的作用:
Fiddler啟動的時候,會把internet選項中的代理修改為127.0.0.1,端口8888
Fiddler退出的時候,會自動在internet選項中取消代理,這樣就不會影響到別的程序
如果fiddler非正常退出,這時候因為fiddler沒有自動注銷,會造成網頁無法訪問,解決辦法是重新啟動fiddler
查看internet選項代理設置:
1先啟動fiddler
2打開控制面板——internet選項,選擇連接--局域網設置--高級,看到代理設置已被更改
3關閉fiddler,再查看代理設
*Fiddler可以捕獲任何程序發出來的http/https請求,只要這個程序支持web代理服務即可
只要在程序內設置代理服務器即可實現抓包*
fiddler解壓http響應:
抓包的過程中,會看到響應中是亂碼,點擊“Response body is encoded Click to decode”按鈕可以解壓http響應。
Web通信安全:
http協議是不安全的容易被中間人攔截到
1只有雙方能看到通信內容
2 http請求內容和響應不被第三方篡改(加密算法:對稱加密、非對稱加密、DES、RSA等)
對稱加密-密鑰同時扮演加密和解密的角色
每個Web服務器與每個客戶端使用不同的對稱加密算法(每條通信使用的加密算法不同)
3 https==加密后的http,https=http+tls或者ssl證書,采用https的網站需要去數日證書認證機構申請證書(Certificate Authority,CA)
Fiddler捕獲https會話
默認狀態下,fiddler不會捕獲https會話,需要設置
1啟動fiddler
2菜單欄中點擊Tools-Fiddler Option->https,選中“Capture https traffic”和“Decrypt https traffic”彈出對話框點“yes”,同時選中“Ignore server certificate errors”來忽略一些證書錯誤
3點擊Actions選擇信任證書后點擊OK保存設置,並在cmd命令行輸入ipconfig查看本地ip地址
4打開網頁輸入http://ip:8888訪問,下載並安裝證書
安裝后fiddler可以正常抓取https協議信息了
手動單獨瀏覽器安裝證書:
點擊下圖中Actions,並點擊export root certificate to desktop
導出
然后打開瀏覽器,選擇工具-選項-隱私與安全-證書,點擊查看證書,打開證書管理器,選擇“證書頒發機構”,點擊導入,選擇“fiddlerRoot.cer”
點擊確定導入,之后瀏覽器就可以捕獲https的請求了
手機抓包
手機抓包要在手機的開發者模式下並且與電腦使用同一網絡,端口號為8888(與電腦配置的代理),訪問電腦IP:8888並在手機設置中安裝證書,操作流程與電腦端類似
查看windows本地安裝的證書:
點擊下圖中Actions,並點擊open windows certificate manager
2 HTTP請求
常見的http請求方法:get(查)、put(增)、post(改)、delete(刪)、head(只要響應頭)
Fiddler查看http響應header
點擊inspectors->request->headers
Cache相關的header 是用於緩存的header
Cookie是一種http header
Accept表示瀏覽器客戶端可以接受的媒體類型
Accept-encoding 跟壓縮有關,高速服務器,瀏覽器支持什么類型的壓縮
Accept-language 的作用是聲明瀏覽器自己接受的語言
User-agent 的最用是瀏覽器用來告訴服務器,客戶端使用的操作系統及版本,瀏覽器及版本,瀏覽器渲染引擎,瀏覽器語言,瀏覽器插件等
例如:fiddler實現修改user-agent,偽裝客戶端
1啟動fiddler
2點擊Rules->User-Agents,選擇ipad
3打開瀏覽器,輸入任意一個網站
4在fiddler中,我們可以查看user-agent的值為ipad
Referer
referer:http協議頭中的Referer主要是來讓服務器判斷來源頁面,即用戶是從哪個頁面來的,網站通常用來統計用戶來源,查看用戶是用搜索頁面來的,還是從其他網站鏈接過來的,或是從書簽頁等訪問的,以便合理定位網絡。有時也被用作防盜鏈,即下載時判斷來源地址是不是在網站域名之內,否則就不能下載或顯示。很多網站就是通過Referer來判斷用戶是否能夠下載圖片的
1打開fiddler
2打開瀏覽器
3點擊網頁上的跳轉鏈接
4查看fiddler
Host:指定被請求的主機和端口號,通常從http url中提取出來
Fiddler查看http響應header
1打開fiddler
2打開網頁
3查看fiddler
網頁抓包
網頁組成:一個html,多個圖片,css文件,javascript文件,json文件
瀏覽器請求一個網頁的過程:
1輸入網址
2瀏覽器會發送一個http請求去獲取頁面布局的html==“父請求”
3瀏覽器會分析http響應中的html,如果發現html中引用了很多其他文件,比如圖片、css文件、js文件等,瀏覽器會自動再次發送很多http請求,去獲取圖片、css文件或者js文件。這些http請求叫做==“子請求”子請求的加載速度會影響網頁加載的總體速度
4當所有自請求的響應都返回后,瀏覽器會把1個父請求加上多個子請求渲染出來,這樣就形成了一個頁面,網頁就在瀏覽器上顯示出來
用fiddler選擇請求
查找父請求:
先找到子請求,右鍵選擇select->parent request 或者快捷鍵P
查找子請求:
先找到父請求,右鍵選擇select->child request 或者快捷鍵C
根據父請求和子請求的加載時間可以看作做一個web頁面簡單的性能測試
Fiddler查看響應
http響應可能是一個html文檔,也可能是一個圖片
Raw可以查看完整的HTTP響應
如果HTTP響應是圖片,可以用imageview來查看
如果http響應是html文檔,可以用webview來查看
如果HTTP響應是json,可以用json來查看
Fiddler打斷點,修改HTTP報文
抓包+改包
1全局斷點
啟動fiddler 點擊菜單欄Rule->Automatic Breakpoint->Before Requests 或者快捷鍵F11
這樣會攔截所有的會話
取消全局斷點
啟動fiddler 點擊菜單欄Rule->Automatic Breakpoint->Disabled 或者快捷鍵shift+F11
2單個斷點,一直某個請求的URL地址,這時候只需要針對這一個請求打斷點調試,其他的請求不攔截
啟動fiddler 在左下角的quickexec命令行輸入命令:“bpu 域名/URL” 這種方法只會攔截輸入的域名網址,
要想消除單個斷點,可以在命令行輸入命令:“bpu”
Fiddler 修改http請求
例如:瀏覽器訪問www.baidu.com,則通過fiddler修改http請求,讓瀏覽器去訪問www.cnblog.com/superhin
1啟動fiddler,在菜單欄中點擊Rules->Automatic Breakpoints->Before Requests.
2打開瀏覽器,輸入www.baidu.com,這時候你會發現任務欄上的fiddler圖標在閃爍,說明fiddler攔截住了http請求
3回到fiddler界面,在菜單欄中點擊Rules->Automatic Breakpoints->Disabled(目標請求已經攔截成功,其余的請求放行)
4被攔截的http請求有一個紅色的T圖標,選中需要修改的http請求,選擇inspectors面板,使用Raw選項卡(必須要在Raw選項卡下才能修改)
5把URL修改為“www.cnblogs.com/superhin”,同時把host修改成“www.cnblogs.com”
6 URL修改並跳轉成功
Fiddler設置斷點修改http響應
1全局斷點
啟動fiddler 點擊菜單欄Rule->Automatic Breakpoint->After Response
這樣會攔截所有的會話
取消全局斷點
啟動fiddler 點擊菜單欄Rule->Automatic Breakpoint->Disabled 或者快捷鍵shift+F11
使用Fiddler修改網頁的標題
1啟動fiddler設置全局斷點
2打開瀏覽器,輸入
“https://weibo.com/u/3176010690?nick=%E5%B8%A6%E5%B8%A6%E5%A4%A7%E5%B8%88%E5%85%84&is_hot=1#_rnd1568892417818”
3在fiddler中選擇
“https://weibo.com/u/3176010690?nick=%E5%B8%A6%E5%B8%A6%E5%A4%A7%E5%B8%88%E5%85%84&is_hot=1#_rnd1568892417818”,選中“inspectors”面板,Response下使用Raw選項卡(必須要在Raw選項卡下才能修改),並關閉全局斷點
4修改html代碼,然后單擊“Run to Completion”,查看網頁標題修改成功
fiddler偽造Referer
1啟動fiddler,設置全局斷點
2打開瀏覽器,輸入
“https://weibo.com/u/3176010690?nick=%E5%B8%A6%E5%B8%A6%E5%A4%A7%E5%B8%88%E5%85%84&is_hot=1#_rnd1568892417818”
Fiddler中會提示攔截到該請求,在Raw選項卡中修改http請求,添加一個“Referer:www.baidu.com”
點擊綠色的“Run to completion”放行,成功進入頁面
Fiddler中查看緩存的新鮮度
緩存(cache)在http請求Header中
1瀏覽器把緩存文件的最后修改時間通過header“If-Modified-Since”告訴Web服務器
2瀏覽器把緩存文件的ETag通過Header“If-None-Match”告訴Web服務器
兩種方式
1:當瀏覽器客戶端像請求一個文檔,首先檢查本地緩存,發現存在這個文檔的緩存,獲取緩存中文檔的最后修改時間,通過“If-Modified-Since”發送http請求給Web服務器
2:Web服務器收到http請求,將服務器的文檔修改時間(Last-Modified)跟http請求Header中的If-Modified-Since相比較。如果時間是一樣的,說明緩存還是最新的,Web服務器將發送狀態碼304(Not Modified)給瀏覽器客戶端,告訴客戶端直接使用緩存里的版本
http請求中跟緩存相關的Header
名稱 |
釋義 |
Cache-Control:max-age=0 |
以秒為單位 |
If-Modified-Since:Mon,20 Dec 2018 08:38:01 GMT |
緩存文件的最后修改時間 |
If-None-Match:”0693f67a67cc1:0” |
緩存的文件的Etag值 |
Cache-Control:no-cache |
不使用緩存 |
Pragma:no-cache |
不使用緩存 |
Cache-Control:public |
響應被緩存,並且在多用戶間共享 |
Cache-Control:private |
響應只能作為私有緩存,不能在用戶之間共享 |
Cache-Control:no-cache |
提醒瀏覽器要從服務器提取文檔進行驗證 |
Cache-Control:no-store |
絕對禁止緩存(用於機密/敏感文件) |
Cache-Control:max-age=60 |
60s之后緩存過期(相對時間) |
Date:Mon,20 Dec 2018 08:38:01 GMT |
當前響應發送的時間 |
Expires:Mon,20 Dec 2018 08:38:01 GMT |
緩存過期的時間(絕對時間) |
Last-Modified:Mon,20 Dec 2018 08:38:01 GMT |
服務器端文件的最后修改時間 |
ETag:”20biadd7ec1cd1:0” |
服務器端文件的ETag值 |
ETag是Entity Tag(實體標簽)的縮寫,是根據實體內容生成的一段hash字符串(類似於MD5或者SHA1之后的結果),可以標識資源的狀態。當資源發生改變時,ETag也隨之發生變化。
ETag是服務端產生的,然后發送給瀏覽器客戶端。目的是為了解決一些Last-Modified無法解決的問題
1某些服務器不能精確得到文件的最后修改時間,這樣就無法通過最后修改時間來判斷文件是否更新了
2某些文件的修改非常繁瑣,在以秒為單位以下的時間內進行修改,而Last-Modified只能精確到秒
3一些文件的最后修改時間改變了,但是內容並未改變,我們不希望客戶端認為這個文件修改了
實例:啟動fiddler,打開博客園首頁,可以看到很多圖片或者CSS文件都使用了緩存。這些都是通過比較ETag的值來判斷文件是否更新
瀏覽器不使用緩存
快捷鍵:Ctrl+F5強制刷新瀏覽器,可以讓瀏覽器不使用緩存
直接使用緩存,不去服務器驗證
在地址欄里輸入網址然后按回車鍵,瀏覽器會直接使用有效的緩存,而不會發送http請求去服務器驗證緩存,這種情況叫做緩存命中
(按F5快捷鍵刷新瀏覽器,瀏覽器回去Web服務器驗證緩存)
公有緩存和私有緩存的區別:
“Cache-Control:public”指可以公有緩存,緩存可以由數千名用戶共享。“Cache-Control:private”指只支持私有緩存,是單個用戶專用的
http壓縮的過程
1瀏覽器發送http請求給Web服務器,請求中的Header能Accept-Encoding:gzip deflate(告訴服務器,瀏覽器支持gizp壓縮)
2Web服務器接到http請求后,生成原始的http響應,其中有原始的Content-Type和Content-Length
3Web服務器通過gzip來對http響應進行編碼,編碼后Header中有Content-Type和Content-Length(壓縮后的大小),並且增加了Content-Encoding:gzip,然后把http響應發送給瀏覽器
4瀏覽器接到http響應后,根據Content-Encoding:gzip來對http響應進行解碼,獲取到原始http響應后顯示出網頁
在fiddler中,每次都要手動去decode實在是太麻煩,單機工具欄上的Decode按鈕,就可以自動解壓了
內容編碼類型
gzip表明屍體采用GUN zip編碼
Compress表明屍體采用UNIX的文件壓縮程序
Deflate表明時提示用zlib的格式壓縮的
Identity表明沒有對實體進行編碼:當沒有Content-Encoding header時,就默認為這種情況
Gzip/compress以及deflate編碼都是無損壓縮算法,用於減少傳輸報文的大小,不會導致信息損失,其中gzip通常效率最高,使用最為廣泛。
壓縮的好處
可以將純文本壓縮至原內容大小的40%,從而節省了60%的數據傳輸,
Gzip不足之處
jpeg這類文件用gzip壓縮的效果不夠好,gzip占用了一些服務器和客戶端的CPU
Gzip是如何壓縮的
Gzip壓縮是在一個文本文件中找出類似的字符串,並臨時替換他們,從而使整個文件變小,這種形式的壓縮對Web來說非常合適,因為HTML和CSS文件通常包含大量重復的字符串,例如空格,符號,標簽等
URL Encoding介紹
就是把所有非英文字母,數字字符都替換成百分號(%)后面頰兩位十六進制數,比如空額的編碼為“%20”
POST中的主體在傳輸的是偶同樣會被轉義
Fiddler中的TextWizard功能面板可以對字符和字符串機型URL Encoding或者Decode
Fiddler使用技巧
Fiddler與其他軟件的比較
1可以通過fiddler script寫腳本來擴展功能,charles則不能
2開源免費
3跨平台(Windows Linux Mac)
4支持多種瀏覽器
5wireshark支持更多的協議,主要是來監聽TCP/IP協議,直接與網卡進行數據報文交互,監聽http協議不方便也大材小用
Fiddler抓包失敗的解決方法
1確定是http協議還是https協議,如果是https協議,檢查證書的原因,錯了重新安
2檢查換瀏覽器的http代理設置是否正確,或者換一個瀏覽器嘗試
3檢查fiddler的捕獲開關是否打開
4檢查過濾的設置
5確定是否是捕獲Localhost的流量
Fiddler抓包建議
先清空session列表,然后再進行抓包
清空操作:工具欄“×”圖標,點后再點“remove all”或者命令行輸入“cls”命令后回車
抓到想抓的包后可以關閉抓包捕獲,以免再獲取更多的session
Fiddler異常退出后無法上網(沒注銷代理)
重啟開啟fiddler后再關閉
fiddler中查詢會話
菜單欄點擊Edit->Find Session 或者快捷鍵【Ctrl+F】打開“Find Sessions”對話框,輸入關鍵字查詢session,查詢到的session會以黃色顯示(漢字或者圖書字符很可能查詢不到,因為在http請求中被轉譯了)
Fiddler中保存抓到的包
1選擇將要保存的會話,然后點擊File->Save->Selected Sessions,保存后的后綴名是.saz,文件保存完整的http請求和http響應
2雙擊.saz文件,或者點擊fiddler菜單欄中的File->Load Archive,就能打開文件
Fiddler中編輯會話
Inspectors中編輯,上文有說到
過濾會話
找到“User Filters”,可以啟動過濾功能
Filters的Actions中,我們可以保存好當前的過濾配置,也可以加載已經保存好的過濾配置
常用快捷鍵:
快捷鍵 |
用途 |
CTRL+X |
刪除所有的session |
CTRL+A |
選擇所有的session |
ESC |
不選擇任何的session |
CTRL+I |
反選session |
Delete |
刪除選擇的session |
Shift+Delete |
刪除未選擇的session |
R |
重放選擇的session(可以重放多個session) |
SHIFT+R |
多次重放選擇的session(隨后會提示你輸入,重放幾次) |
U |
無條件的重放選擇的session(不會發送If-Modified-Since和If-None-Match Headers) |
SHIFT+U |
無條件地重放選擇的session(隨后會提示你輸入,重放幾次) |
P |
選擇“當前session”的“父session”(這個功能取決於Referer Header) |
C |
選擇“當前session”的“子session” |
D |
選擇“上次選擇的session” |
Insert |
|
CTRL+1 CTRL+2 CTRL+3 CTRL+4 CTRL+5 CTRL+6 |
用粗體和顏色標記選擇的sessoin |
M |
給選擇的session添加注釋 |
QuickExec命令行的使用
1help:打開官方的使用頁面介紹,所有的命令都會列出來
2cls:清屏sessions
3select:選擇會話的命令
4?.png:用來選擇.png后綴的圖片
5bpu:截獲request
還可以“urlreplace www.baidu.com www.cnblogs.com/superhin”替換掉host
fiddler比較會話的不同
位置:Tools->compare session
選中兩個session點擊上面位置的選項,否則置灰無法點擊
Fiddler插件
插件下載地址:http://www.telerik.com/fiddler/add-ons
前端調試javascript文件
使用AutoResponse模塊,在AutoResponder中,在RuleEditor中點擊“Find a file”選擇本地js文件,選中“Unmatched requests passthrough”放行匹配的合同談判請求,點擊save。
在瀏覽器訪問對應的網址,查看js文件相應結果
替換網頁中的圖片
1啟動fiddler,使用瀏覽器訪問
https://weibo.com/u/3176010690?nick=%E5%B8%A6%E5%B8%A6%E5%A4%A7%E5%B8%88%E5%85%84&is_hot=1#_rnd1568892417818
2在瀏覽器中把一張圖片保存到本機中,命名為superh.jpg
3在fiddler中,找到這個圖片的session,並拖拽到AutoResponse中
4在RuleEditor中,單機“Find a file..”,選擇本地的superh.jpg。選中Enable rules,激活規則,選中“Unmatched requests passthrough”,並且點擊Save
5刷新瀏覽器,可以查看到圖片已經被替換了
Fiddler中此模塊也可以進行mock測試,設定請求和響應返回的內容,然后通過瀏覽器進行訪問
手機弱網測試更改網速
通過修改fiddler script來實現
修改fiddler script:
上傳於下載的初始腳本內容為:
上傳upload“每上傳1KB數據,延時0.3秒”
下載dowmload“每下載1KB數據,延時0.15秒”
(腳本中的數值越大速度越慢、越小下載速度越快)
算法:1000/上傳(下載)速度=需要延遲的時間
例如:50kbit/s需要延遲200ms來接收數據
使用修改后的腳本數據
修改保存后勾選(修改保存后再次查看Simulate Modem Speeds,為未勾選狀態,勾選=啟用)
Rules->Performances->Simulate Modem Speeds
查看日志
Fiddler中的接口請求發送
Fiddler script
Fiddler script是一個可以自動修改http請求和http相應的腳本文件,不需要再手動去對請求和相應進行操作,屬於高級內容,它可以讓fiddler的擴展性更好,功能更加強大