使用Chrome或Fiddler抓取WebSocket包



首先,HTTP是建立在TCP協議基礎上的,而WebSocket通常也是建立在TCP上,所以說為什么有些網頁游戲抓不到包而有些又可以,這僅是因為你使用的抓包工具是針對了HTTP的通信協議。

我先從抽象的層面,舉一個可能不太恰當的例子,只為了讓不明白HTTP和WebSocket兩者之間抓包有何區別的同學大概了解這兩個協議的異同。客戶端/服務端用C/S簡稱,我把數據抽象成水流,而HTTP是用水槍傳遞水流的(無狀態),至於WEBSOCKET則是使用水管傳遞水流(實時)。

HTTP通訊方式:

客戶端C把數據封裝好了要交給服務端S,所以把水放到水槍里面,射過去給S
S用桶把水擋下來了,然后分析水的成分(數據內容),完成后再把新的水(返回的數據)射回去給C
這個過程中,任何人都可以隨時在C和S之間用海綿吸一點水然后拿去分析(嗅探數據),或者是直接用桶把水都擋下來分析完后再裝到水槍中,模仿C的動作射給S(也就是代理抓包)
WEBSOCKET方式:

客戶端C和服務端S,雙方之間先用一條水管連起來(用的是HTTP握手),然后水流都通過這個小水管來傳輸
水管里面一直有水在流動,所以要通訊只需要C或者是S把數據水流放到水管中,則會立刻傳輸到對方那邊
這個過程中,要嗅探就比較麻煩了,需要先在水管中先打個洞,然后再把分析器放進去、或者是斬斷這個水管在中間接個水表之類的設備去分析水質成分
好了,亂說一通完畢,說一下抓取WebSocket的兩個工具,都是常見的程序,只是可能很多同學不清楚有這樣的功能而已。

第一個:Chrome,也就是谷歌的瀏覽器

進入你要抓包的網頁,然后按F12打開我們最愛的開發者工具
然后點Network,再從過濾器中找到WebSockets(上方或下方的狀態欄)
選中過濾出來的WebSocket,在彈出來的右邊欄中可以找到Frames,里面就是抓到的包
如果要看新通訊產生的數據包,則要先點其他的位置比如Headers再點Frames才可以刷新
第二個:Fiddler,抓包調試的利器,已經人手一個了吧

打開Fiddler,點開菜單欄的Rules,選擇Customize Rules...
這時會打開CustomRules.js文件,在class Handlers中加入以下代碼
static function OnWebSocketMessage(oMsg: WebSocketMessage) {
// Log Message to the LOG tab
FiddlerApplication.Log.LogString(oMsg.ToString());
}
保存后就可以在Fiddler右邊欄的Log標簽里,看到WebSocket的數據包
到了這里,還有一個情況要說明,就算是有工具可以抓到WebSocket中的包,看到的也不一定是明文。這個要看傳輸的水是什么,如果是普通水那誰都可以分析;但如果是水銀,那這個分析水的設備很可能就顯示亂碼了。 所以也就有同學明明使用了可以抓WebSocket包的程序,卻抓出來的是亂碼。那是因為別人傳輸的是二進制數據流(比如AMF包),而不是JSON之類的對人類可讀的明文。

參考資料:

Debug Inspect WebSocket traffic with Fiddler 【薦】

Logging WebSocket Frames using Chrome Developer Tools, Net-internals and Wireshark
原始鏈接: http://blog.jtwo.me/post/use-chrome-or-fiddler-sniffer-websocket


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM