使用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-websocketweb

相关文章
相关标签/搜索