用whistle和proxifier抓包除錯任意客戶端的網路請求

avenwu發表於2018-06-07

用web抓包除錯代理工具時,經常會遇到無法抓取命令列工具或某些客戶端的網路請求,因為這些請求不走系統代理,這個給我們的開發工作帶來一些不便,有沒有工具可以實現抓包除錯任意客戶端的請求?當然有,本文將講下如何用whistle和proxifier抓包除錯任意客戶端的網路請求,不僅支援普通的web請求(HTTP、HTTPS、WebSocket),也支援TCP請求。

先簡單介紹下whistle和proxifier:

whistle簡介

whistle是基於Node實現的跨平臺web抓包除錯代理工具:

  1. 完全跨平臺,支援執行在Mac、Windows、Linux/Unix桌面及命令列系統
  2. 支援抓包除錯HTTP、HTTPS、WebSocket及Socket,可以修改請求響應的所有內容
  3. 內建weinre,支援檢視修改移動端網頁的DOM結構
  4. 內建Log功能,支援自動捕獲網頁的所有js異常及console.xxx輸出各種型別資料
  5. 操作簡單,所有操作都可以通過類似配置hosts的方式實現
  6. 支援通過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

  1. 安裝Node(如果已安裝可以忽略此步驟):建議安裝最新版本Node,直接訪問官網安裝即可

  2. 安裝whistle(需要安裝最新版本的whistle(>=v1.10.6)):

    npm i -g whistle --registry=https://registry.npm.taobao.org
    複製程式碼

    有些公司可能自己建了npm的映象,可以用自己公司的npm命令安裝或設定 --registry=公司的映象

  3. 啟動whistle:

    w2 start
    複製程式碼

    停止whistle:

    w2 stop
    複製程式碼

    重啟whistle:

    w2 restart
    複製程式碼

    檢視whistle版本號:

    w2 -V
    複製程式碼

    檢視所有命令:

    w2 --help
    複製程式碼

    whistle的預設埠為 8899,如果需要修改埠可以通過引數 -p 8888 進行修改,如:w2 restart -p 8888

  4. 安裝whistle根證書

  5. 開啟捕獲HTTPS請求

如何使用whistle請直接看Github上的README

安裝配置proxifier

proxifier是收費軟體,有30天免費試用期,可以直接從官網下載安裝,或者通過電腦管家的軟體管理介面下載,網上也有很多破解的免費版本,有需要的話可以自己網上搜尋下載,安裝完proxifier後開啟後做如下配置:

Windows和Mac的介面互動不太一樣,下面會分別給出兩者的配置方法

  1. 去掉自動DNS設定

    • Windows:開啟左上角選單 -> 配置檔案 -> 名詞解析 -> 勾掉 自動檢查 DNS 設定 -> 勾選通過代理解析主機名稱

      Windows客戶端去掉DNS設定

    • Mac:DNS -> 去掉第一個checkbox -> 勾上第二個checkbox

      Mac客戶端去掉DNS設定

  2. 設定無限迴圈連線檢測

    • Windows:開啟左上角選單 -> 配置檔案 -> 高階 -> 勾選 無限迴圈連線檢測
      Windows客戶端勾選無限迴圈連線檢測
    • Mac:會自動檢測,彈出對話方塊時點選確定就可以。
  3. 新增代理伺服器

    • Windows:開啟左上角 -> 配置檔案 -> 代理伺服器 -> 新增代理服務

      地址:127.0.0.1

      埠:8899(whistle的預設埠號,具體按whistle實際啟用的埠設定)

      協議:HTTPS

      Windows客戶端新增代理伺服器

    • Mac:Proxies -> Add

      Mac客戶端新增代理伺服器

  4. 忽略Node發出的請求: 配置完成後,用Chrome瀏覽器開啟l.wproxy.con,這個時候proxifier會彈出檢測到迴圈連線的對話方塊,點選確定即可:

    Windows忽略Node發出的請求

  5. 配置後的效果

    Windows效果

配置完成後就可以愉快的抓包任何客戶端的請求了。

上面是攔截所有客戶端請求,更建議只把想抓包的客戶端通過proxifier代理到whistle,可以通過代理規則新增

可能遇到的問題

  1. 攔截所有客戶端請求後臺,有些客戶端可能採用了SSL pinning技術,導致該客戶端的https請求出現證書校驗失敗(如執行:git push),可以禁用掉應域名的捕獲HTTPS請求 tunnel://github.com disable://capture 或者把該命令列工具新增到proxifier規則裡面並設定動作:Direct
  2. 如果要檢視TCP請求資料包,可以通過設定 tunnel://host enable://inspect (host 為Network上顯示的域名或ip),這樣就可以通過Network右側->Response->Frames檢視TCP請求的幀資料,有關除錯TCP(Socket)請參考:利用whistle除錯WebSocket和Socket請求

更多問題可以提ISSUEPR

相關文章