在开发测试WebSocket过程中,经常需要模拟WebSocket的一些行为,如:延迟、忽略、修改或构造发送到服务器或客户端的数据包,以及主动断开WebSocket连接等,本文将讲下如何用抓包调试工具whistle实现上述操作。
准备工作
如果你还不知道whistle是什么,可以访问whistle的Github了解及安装:github.com/avwo/whistl…。
如果你已经安装过whistle,需要升级到最新版本(w2 -V >= v1.11.1),具体参见:whistle帮助文档。
基本功能
安装配置启动好最新版本whistle后,在whistle的抓包界面Network上点击要操作的WebSocket请求,可以在右侧 Frames 看到如下界面:
Replay
重发选中的WebSocket数据包。
Composer
构造数据包,支持手动输入数据包文本,并通过按钮 Send to client 或 Send 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
断开连接。
例子
延迟发送
通过在 Send 或 Receive 按钮里面选择 Pause 状态,这时发送到服务器或客户端的数据包会把阻塞住,等待时间到后,再切换到 Send 或 Receive 状态。
断点调试
通过 Ignore -> Pause -> Replay -> Send(Receive) 状态的切换实现对指定数据包进行修改。
Replay这步操作一般不需要用到,主要是用来解决忽略数据包时把其它不该忽略的数据包也忽略掉的问题