輕鬆篡改WebSocket資料包

avenwu發表於2018-07-15

在開發測試WebSocket過程中,經常需要模擬WebSocket的一些行為,如:延遲、忽略、修改或構造傳送到伺服器或客戶端的資料包,以及主動斷開WebSocket連線等,本文將講下如何用抓包除錯工具whistle實現上述操作。

準備工作

如果你還不知道whistle是什麼,可以訪問whistle的Github瞭解及安裝:github.com/avwo/whistl…

如果你已經安裝過whistle,需要升級到最新版本(w2 -V >= v1.11.1),具體參見:whistle幫助文件

基本功能

安裝配置啟動好最新版本whistle後,在whistle的抓包介面Network上點選要操作的WebSocket請求,可以在右側 Frames 看到如下介面:

Frames

Replay

重發選中的WebSocket資料包。

重發選中資料包

Composer

構造資料包,支援手動輸入資料包文字,並通過按鈕 Send to clientSend to server 把資料分別傳送到客戶端(瀏覽器)或伺服器,也支援通過上傳本地檔案的方式傳送(接收)資料。

Frames上方的 Composer 按鈕用於把選擇的資料包填充到下方Composer的文字框

構造資料包

Send

用於暫停或忽略傳送到服務端的資料包,包含3種狀態:

  • Send:預設狀態,表示對請求不做額外操作
  • Pause:暫停傳送資料,所有後續傳送的資料會被阻塞住
  • Ignore:忽略傳送資料,所有後續傳送的資料會被忽略

操作傳送到伺服器的資料包

Receive

用於暫停或忽略傳送到客戶端的資料包,包含3種狀態:

  • Send:預設狀態,表示對請求不做額外操作
  • Pause:暫停接收資料,所有後續接收的資料會被阻塞住
  • Ignore:忽略接收資料,所有後續接收的資料會被忽略

操作傳送到客戶端的資料包

如果需要在建立連線的時候就設定Pause或Ignore狀態,可以通過 pattern enable://ignoreSend|ignoreReceive|pauseSend|pauseReceive 設定所需的狀態,如:ws://echo.websocket.org enable://ignoreSend|pauseReceive

Abort

斷開連線。

斷開連線

例子

延遲傳送

通過在 SendReceive 按鈕裡面選擇 Pause 狀態,這時傳送到伺服器或客戶端的資料包會把阻塞住,等待時間到後,再切換到 SendReceive 狀態。

延遲傳送

斷點除錯

通過 Ignore -> Pause -> Replay -> Send(Receive) 狀態的切換實現對指定資料包進行修改。

斷點除錯

Replay 這步操作一般不需要用到,主要是用來解決忽略資料包時把其它不該忽略的資料包也忽略掉的問題

相關文章