在開發測試WebSocket過程中,經常需要模擬WebSocket的一些行為,如:延遲、忽略、修改或構造傳送到伺服器或客戶端的資料包,以及主動斷開WebSocket連線等,本文將講下如何用抓包除錯工具whistle實現上述操作。
準備工作
如果你還不知道whistle是什麼,可以訪問whistle的Github瞭解及安裝:github.com/avwo/whistl…。
如果你已經安裝過whistle,需要升級到最新版本(w2 -V
>= v1.11.1
),具體參見:whistle幫助文件。
基本功能
安裝配置啟動好最新版本whistle後,在whistle的抓包介面Network上點選要操作的WebSocket請求,可以在右側 Frames
看到如下介面:
Replay
重發選中的WebSocket資料包。
Composer
構造資料包,支援手動輸入資料包文字,並通過按鈕 Send to client
或 Send 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
斷開連線。
例子
延遲傳送
通過在 Send
或 Receive
按鈕裡面選擇 Pause
狀態,這時傳送到伺服器或客戶端的資料包會把阻塞住,等待時間到後,再切換到 Send
或 Receive
狀態。
斷點除錯
通過 Ignore
-> Pause
-> Replay
-> Send
(Receive
) 狀態的切換實現對指定資料包進行修改。
Replay
這步操作一般不需要用到,主要是用來解決忽略資料包時把其它不該忽略的資料包也忽略掉的問題