用web抓包除錯代理工具時,經常會遇到無法抓取命令列工具或某些客戶端的網路請求,因為這些請求不走系統代理,這個給我們的開發工作帶來一些不便,有沒有工具可以實現抓包除錯任意客戶端的請求?當然有,本文將講下如何用whistle和proxifier抓包除錯任意客戶端的網路請求,不僅支援普通的web請求(HTTP、HTTPS、WebSocket),也支援TCP請求。
先簡單介紹下whistle和proxifier:
whistle簡介
whistle是基於Node實現的跨平臺web抓包除錯代理工具:
- 完全跨平臺,支援執行在Mac、Windows、Linux/Unix桌面及命令列系統
- 支援抓包除錯HTTP、HTTPS、WebSocket及Socket,可以修改請求響應的所有內容
- 內建weinre,支援檢視修改移動端網頁的DOM結構
- 內建Log功能,支援自動捕獲網頁的所有js異常及console.xxx輸出各種型別資料
- 操作簡單,所有操作都可以通過類似配置hosts的方式實現
- 支援通過Node模組的外掛擴充套件功能
有關whistle的詳細內容直接訪問Github:github.com/avwo/whistl…。
proxifier簡介
proxifier是一個跨平臺的設定代理客戶端,支援socks和http代理協議,它可以攔截任意客戶端的所有網路請求,並把請求代理到指定的代理伺服器,proxifier基本用法可以先參考:代理工具Proxifier如何使用。
有關proxifier的詳細內容直接訪問其官網:www.proxifier.com
proxifier官方只有Windows和Mac版本,其它平臺如Linux可以有很多替代方案,有需要的話可以自己網上搜尋
從上面的介紹可知,通過proxifier攔截任意指定客戶端的請求,並通過HTTP代理轉發到whistle,即可實現抓包除錯任意客戶端的請求,下面詳細講下如何安裝配置whistle和proxifier實現該功能:
安裝配置whistle
-
安裝Node(如果已安裝可以忽略此步驟):建議安裝最新版本Node,直接訪問官網安裝即可。
-
安裝whistle(需要安裝最新版本的whistle(
>=v1.10.6
)):npm i -g whistle --registry=https://registry.npm.taobao.org 複製程式碼
有些公司可能自己建了npm的映象,可以用自己公司的npm命令安裝或設定
--registry=公司的映象
-
啟動whistle:
w2 start 複製程式碼
停止whistle:
w2 stop 複製程式碼
重啟whistle:
w2 restart 複製程式碼
檢視whistle版本號:
w2 -V 複製程式碼
檢視所有命令:
w2 --help 複製程式碼
whistle的預設埠為
8899
,如果需要修改埠可以通過引數-p 8888
進行修改,如:w2 restart -p 8888
如何使用whistle請直接看Github上的README。
安裝配置proxifier
proxifier是收費軟體,有30天免費試用期,可以直接從官網下載安裝,或者通過電腦管家的軟體管理介面下載,網上也有很多破解的免費版本,有需要的話可以自己網上搜尋下載,安裝完proxifier後開啟後做如下配置:
Windows和Mac的介面互動不太一樣,下面會分別給出兩者的配置方法
-
去掉自動DNS設定
-
Windows:開啟左上角選單 -> 配置檔案 -> 名詞解析 -> 勾掉
自動檢查 DNS 設定
-> 勾選通過代理解析主機名稱 -
Mac:DNS -> 去掉第一個checkbox -> 勾上第二個checkbox
-
-
設定無限迴圈連線檢測
- Windows:開啟左上角選單 -> 配置檔案 -> 高階 -> 勾選
無限迴圈連線檢測
- Mac:會自動檢測,彈出對話方塊時點選確定就可以。
- Windows:開啟左上角選單 -> 配置檔案 -> 高階 -> 勾選
-
新增代理伺服器
-
Windows:開啟左上角 -> 配置檔案 -> 代理伺服器 -> 新增代理服務
地址:
127.0.0.1
埠:
8899
(whistle的預設埠號,具體按whistle實際啟用的埠設定)協議:
HTTPS
-
Mac:Proxies -> Add
-
-
忽略Node發出的請求: 配置完成後,用Chrome瀏覽器開啟l.wproxy.con,這個時候proxifier會彈出檢測到迴圈連線的對話方塊,點選確定即可:
-
配置後的效果
配置完成後就可以愉快的抓包任何客戶端的請求了。
上面是攔截所有客戶端請求,更建議只把想抓包的客戶端通過proxifier代理到whistle,可以通過代理規則新增
可能遇到的問題
- 攔截所有客戶端請求後臺,有些客戶端可能採用了SSL pinning技術,導致該客戶端的https請求出現證書校驗失敗(如執行:
git push
),可以禁用掉應域名的捕獲HTTPS請求tunnel://github.com disable://capture
或者把該命令列工具新增到proxifier規則裡面並設定動作:Direct
。 - 如果要檢視TCP請求資料包,可以通過設定
tunnel://host enable://inspect
(host
為Network上顯示的域名或ip),這樣就可以通過Network右側->Response->Frames檢視TCP請求的幀資料,有關除錯TCP(Socket)請參考:利用whistle除錯WebSocket和Socket請求。