轻松篡改WebSocket数据包

4,028 阅读2分钟

在开发测试WebSocket过程中,经常需要模拟WebSocket的一些行为,如:延迟、忽略、修改或构造发送到服务器或客户端的数据包,以及主动断开WebSocket连接等,本文将讲下如何用抓包调试工具whistle实现上述操作。

准备工作

如果你还不知道whistle是什么,可以访问whistle的Github了解及安装:github.com/avwo/whistl…

如果你已经安装过whistle,需要升级到最新版本(w2 -V >= v1.11.1),具体参见:whistle帮助文档

基本功能

安装配置启动好最新版本whistle后,在whistle的抓包界面Network上点击要操作的WebSocket请求,可以在右侧 Frames 看到如下界面:

Frames

Replay

重发选中的WebSocket数据包。

重发选中数据包

Composer

构造数据包,支持手动输入数据包文本,并通过按钮 Send to clientSend 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

断开连接。

断开连接

例子

延迟发送

通过在 SendReceive 按钮里面选择 Pause 状态,这时发送到服务器或客户端的数据包会把阻塞住,等待时间到后,再切换到 SendReceive 状态。

延迟发送

断点调试

通过 Ignore -> Pause -> Replay -> Send(Receive) 状态的切换实现对指定数据包进行修改。

断点调试

Replay 这步操作一般不需要用到,主要是用来解决忽略数据包时把其它不该忽略的数据包也忽略掉的问题