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

相关文章
相关标签/搜索