nodejs中使用socket.io-client並用Fiddler抓包

參考

前言

最近作反垃圾QQ羣機器人的時候用到了socket.io-client,發現socket.io和之前用過的直接走ws協議的鏈接方式有些不一樣,所以有點關心socket.io底層是怎麼實現的,這時候就須要對nodejs的websocket抓包了,這裏記錄一下研究心得。javascript

node.js端設置

由於不是瀏覽器抓包,而是node.js腳本程序抓包,所以須要在javascript代碼中作一些修改,從而讓socket.io客戶端啓用代理java

// const ProxyAgent = require('https-proxy-agent')
const ProxyAgent = require('proxy-agent')
const opts = {
  transports: ['websocket'],
  reconnect:true,
  // secure: true,
  // rejectUnauthorized:false,
  // agent: new ProxyAgent('http://localhost:8888')
  agent:new ProxyAgent('http://localhost:8888')
}

上面代碼用於抓ws,若是是wss,則須要把註釋打開,即換成https-proxy-agentnode

Fiddler端設置

Fiddler默認不顯示WebSocket流量,可是已經內置了相關功能,具體能夠參考這篇文章
簡單總結下流程以下:git

  • 菜單Rules -> Customize Rules,打開Fiddler腳本編輯器
  • 在Handlers類中添加一個靜態方法OnWebSocketMessage,代碼以下,而後保存github

    static function OnWebSocketMessage(oMsg: WebSocketMessage) {
      // Log Message to the LOG tab
      FiddlerApplication.Log.LogString(oMsg.ToString());
    }

界面顯示

能夠看到咱們的socket.io請求已經被抓到了,原來是在代碼中傳入的接入點地址後面添加了/socket.io/?EIO=3&transport=websocket,進一步想看到websocket中傳輸的每一幀數據則能夠雙擊這條請求記錄,右面就會自動打開WebSocket面板,裏面是Frame數據,左面的上下箭頭表示數據的流向,是從C到S仍是從S到C,右下方則是完整數據。
見圖:
ws.pngweb

相關文章
相關標籤/搜索