Fiddler抓包工具在APP開發過程中使用非常頻繁,對開發者理解HTTP網絡傳輸原理以及分析定位網絡方面的問題非常有幫助。
常見抓包工具主要有MiniSniffer,Fiddler和Wireshark。其中:
- MiniSniffer是一款體積小巧的老牌網絡抓包工具,嗅探、捕獲各種程序開啟的網絡連接數據。
- Wireshark是一款非常流行,功能十分強大的網絡數據分析工具,可以顯示網絡封包的詳細信息,需要網絡協議有一定的了解才比較容易看懂Wireshark。
- Fiddler是一款定位http/https調試的工具,能記錄所有客戶端和服務器的http和https請求,允許你監視,設置斷點,甚至修改輸入輸出數據。
如果平時開發過程中只是涉及到http/https上層網絡協議的話,使用Fiddler足夠了,這里主要總結下Fiddler的使用。
一、概述
Fiddler是一款免費且功能強大的數據包抓取軟件。它通過代理的方式獲取程序http通訊的數據,可以用其檢測網頁和服務器的交互情況,能夠記錄所有客戶端和服務器間的http請求,支持監視、設置斷點、甚至修改輸入輸出數據等功能。fiddler包含了一個強大的基於事件腳本的子系統,並且能夠使用.net框架語言擴展。
二、Fiddler工作原理
Fiddler是位於客戶端和服務器端之間的HTTP代理, 它能夠記錄客戶端和服務器之間的所有 HTTP(S)請求,可以針對特定的HTTP(S)請求,分析網絡傳輸的數據,還可以設置斷點、修改請求的數據和服務器返回的數據。
Fiddler在瀏覽器與服務器之間建立一個代理服務器,Fiddler工作於七層中的應用層,能夠捕獲通過的HTTP(S)請求。Fiddler啟動后會自動將代理服務器設置成本機,默認端口為8888。Fiddler不僅能記錄PC上瀏覽器的網絡請求數據,還可以記錄同一網絡中的其他設備的HTTP(S)請求數據。數據傳遞流程大致如下:
- 客戶端像WEB服務器發送HTTP(S)請求時,請求會先經過代理Fiddler代理服務器。
- Fiddler代理服務器截取客戶端的請求報文,再轉發到WEB服務器,轉發之前可以做一些請求報文參數修改的操作。
- WEB服務器處理完請求以后返回響應報文,Fiddler代理服務器會截取WEB服務器的響應報文。
- Fiddler處理完響應報文后再返回給客戶端。
三、Fiddler抓取HTTPS原理
現在APP中的數據傳輸基本上都使用HTTS傳輸,傳輸的數據都是經過加密的,這增加了我們分析數據包的難度,還好Fiddler除了可以抓取HTTP數據包,還可以抓取HTTPS數據包。由於HTTPS傳輸需要使用到CA證書,所以抓取抓取HTTPS數據包時需要做一些特殊配置。Fiddler截取HTTPS報文的流程大致如下:
- 客戶端請求建立HTTPS鏈接,發送客戶端支持的加密協議及版本列表等信息給服務器端。
- Fiddler接受客戶端請求並偽裝成客戶端向WEB服務器發送相同的請求。
- WEB服務器收到Fiddler的請求以后,從請求中篩選合適的加密協議。並返回服務器CA證書,證書中包括公鑰信息。
- Fiddler收到WEB服務器的響應后保存服務器證書並自簽名一個CA證書,偽裝成服務器,把該證書下發給客戶端。
- 客戶端驗證證書合法性。(Fiddler能否抓取到HTTPS報文關鍵看這一步)
- 客戶端生產對稱密鑰,通過證書的公鑰加密發送給服務器。
- Fiddler攔截客戶端的請求以后,使用私鑰解密該報文,獲取對稱加密秘鑰,並使用服務器證書中帶的公鑰加密該對稱密鑰發送給WEB服務器。此時對稱密鑰已經泄露了,以后可以使用該秘鑰界面客戶端和服務器端傳輸的數據。
- WEB服務器接收到客戶端發送的加密的對稱密鑰后使用私鑰解密,並使用對稱密鑰加密測試數據傳給客戶端。
- Fiddler使用前面獲取的對稱密鑰解密報文。
- 客戶端驗證數據無誤以后HTTPS連接就建立完成,客戶端開始向服務器發送使用對稱密鑰加密的業務數據
- Fiddler使用前面獲取的對稱密鑰解密客戶端發送的數據並重新加密轉發給客戶端。
四、Fiddler配置流程
-
下載安裝
可以到官網下載Fiddler免費安裝包:https://www.telerik.com/fiddler。
舊版本的Fiddler抓包HTPPS時需要用到FiddlerCertMaker插件。 -
Fiddler基本配置
如果只是需要監聽本機瀏覽器HTTP數據包的話不需要做任何額外配置,打開Fiddler即可直接使用。一般我們需要監聽遠程終端設備的網絡請求,需要做以下配置。打開Fiddler,在菜單欄中選擇Tools->Options->Connections。輸入監聽端口(默認是8888),選擇Allow remotecomputers to connect,點擊確認然后重啟Fiddler。
如果需要監手機端的網絡請求,所以還需要對手機端進行設置。首先確保手機網絡和安裝Fiddler的電腦網絡處於同一個wifi網絡中。可以點擊Fiddler主界面的右上角的“Online”按鈕查看Fiddler所在主機的主機名和IP地址,配置手機網絡時需要使用到這個IP地址。
打開手機網絡設置,選擇跟Fiddler主機在統一網絡,打開wifi設置界面,進入wifi的高級設置(不同手機設置不一樣,有一些手機長按選中的wifi名稱可以出來,有一些手機是點擊wifi名稱后面的按鈕,自己嘗試)。Fiddler本身就是代理服務器,在wifi高級設置中的代理欄下面選擇手動設置,設置輸入Fiddler主機的IP地址(上一步顯示的IP)和監聽端口號(前面默認8888那個),點擊確認。
這些配置按成以后,你在APP中打開有網絡請求的操作,即可在Fiddler中看到。
在右邊的Inspectors窗口中可以看到這個請求的請求報文和響應報文信息。
以上配置只能監聽到HTTP報文,對於HTTPS報文無法顯示內容,還需要做其他配置。
- Fiddler抓包HTTPS
前面也講了,HTTPS數據報文傳輸的時候涉及到證書及數據加密的問題,所以Fiddler需要抓取HTTPS報文的話還需要做其他配置。
首先還是打開Fiddler配置:Tools->Options->HTTPS:
勾選Capture HTTPS CONNECTS和Decrypt HTTPS traffic選項,如果只是想抓取本機或者遠程終端的數據報文,可以在…from all processes這個下拉框中選擇。這里還有一點需要注意的就是,低版本的Fiddler自簽名的CA證書有一些問題,后面導入到手機上時無效,這里就需要安裝上面說的FiddlerCertMaker插件。安裝后要重啟Fiddler,如果安裝成功在上圖Certificates generated by CertEnroo engine的位置的內容就會顯示安裝的FiddlerCertMaker插件信息。
設置完成以后點擊OK,重啟Fiddler。此時在手機端操作一些有https傳輸的app就會發現可以看到傳輸的內容,但是有局限性,只有設置了信任所有證書的APP中的HTTPS報文才能查看到,這類APP是非常不安全的。如果需要抓取大部分HTTPS報文怎么辦呢?
大家都知道手機系統中集成了系統認為可信的CA根證書,如果服務器的證書是這些機構頒發了,HTTPS請求時系統才認為是安全的,否則SSL握手失敗(前提是APP中使用系統默認證書信任機機制)。Fiddler自簽名證書肯定不在系統信任的證書列表中,那怎么辦呢?我們可以在手機中把Fiddler自簽名的證書導入到信任證書列表中就可以解決這個問題了。
接下來打開手機中的瀏覽器,在地址欄輸入Fiddler監聽的IP:端口,比如:192.168.1.106:8888。
點擊頁面中的FiddlerRoot Certificate,下載並安裝證書(如果下載了沒有自動提示安裝,可進入設置->系統安全->從存儲設備安裝中手動安裝)。
輸入證書名稱,這里命名fiddler,點擊確認。如果安裝成功在系統安全->信任的憑據->用戶中可以看到剛才安裝的證書(如果證書名稱是亂碼,可能是Fiddler生成的證書有問題,需要安裝FiddlerCertMaker插件,重新操作)。
我們在手機端打開有HTTPS鏈接的APP發現可以抓取HTTPS中的數據報文了。
這樣就大功告成了,大家發現大部分HTTPS請求是可以抓取到的。大家有沒有發現好像HTTPS傳輸也不是100%安全。