wireshark如何抓取WebSocket数据包

wireshark如何抓取WebSocket数据包

前文

WebSocket目前在web端使用广泛,可以使用websocket来传输数据,解决了web端无法跟服务器维持高效的长链接的问题。什么是websocket呢?websocket是一种浏览器与服务器进行全双工通讯的应用层协议。它基于 TCP 传输协议,并复用 HTTP 的握手通道,可以在浏览器里使用,支持双向通讯。
本文来讲述一下如何通过wireshark来抓取websocket数据,进行协议分析。

配置

要使用wireshark抓取websocket包,需要注意一点,wireshark无法解析https协议,如果你的websocket使用的wss,就需要配置wireshark的tls解析,本文使用的是mac,会基于mac讲解如何配置tls解析。
目前chrome和firefox都支持将https的对称秘钥保存到日志文件中,前提是需要设置SSLKEYLOGFILE系统变量。目前Wireshark 1.6.0及更高版本可以使用这些日志文件来解密数据包。

SSLKEYLOGFILE设置

  1. 创建sslkeylog文件
  2. 设置环境变量SSLKEYLOGFILE,打开.zshrc文件,添加如下:export SSLKEYLOGFILE=~/sslkeylogfile/keylogfile.log
  3. 打开浏览器,访问任意https://xxx.com
  4. 打开keylogfile.log,观察对称秘钥是否写入:wireshark如何抓取WebSocket数据包通过上图可以观察到,秘钥已经写入日志文件,这个时候wireshark就可以使用秘钥文件,进行解密了。

wireshark配置

打开wireshark,wireshark->preferences->protocols->tls,见下图:
wireshark如何抓取WebSocket数据包
参照上图,配置上前面配置的keylogfile.log文件

验证

在wireshark的filter中输入websocket,启动抓包,会抓取websocket的包
抓包截图见下:
wireshark如何抓取WebSocket数据包
可以看到我们已经可以正常抓取websocket包了。如果想看到完整的websocket交互,包括连接建立等,可以参照下图配置:
wireshark如何抓取WebSocket数据包追踪TLS流,可以看到完整的交互。