如何将浏览器调试工具中获取的非可读Websocket消息转为可读格式?
WebSocket二进制消息可读化解法
1. 消息无法直接阅读的原因
大部分业务场景下WebSocket不会用明文JSON传输,会采用体积更小、性能更高的二进制序列化方案(最常见为Protobuf、MessagePack),所以浏览器调试工具只会展示原始十六进制/二进制内容,不会自动转为可读文本。
2. 已获取Hex内容的解码方法
你提供的样例Hex已经包含可识别的明文片段,符合Protobuf序列化特征,可按以下步骤解码:
- 第一步先把Hex字符串转为原始二进制流,可通过Python快速实现:
raw_bytes = bytes.fromhex("08f8 cac4 0212 380a 0930 2e30 2e30 2d64 6576 122b 4265 6172 6572 2066 6438 3866 6661 642d 3231 6633".replace(" ", ""))
- 第二步解码Protobuf内容:
- 如果你有对应业务的
.proto接口定义文件:直接用protoc工具或对应语言的Protobuf库,将二进制流传入对应消息结构体反序列化,即可得到带字段名的完整可读内容。 - 如果没有
.proto定义:可以用Protobuf原生的盲解功能,执行命令echo 二进制流内容 | protoc --decode_raw即可得到字段编号与对应值的映射关系,你提供的样例盲解后已经可以识别出3个字段:整数字段1值为72131832、字符串字段2值为0.0.0-dev、字符串字段3值为Bearer fd88ffad-21f3。
- 如果你有对应业务的
3. Wireshark无法过滤到WebSocket包的解决方法
- 确认抓包网卡选择正确:如果是本地调试的服务,需要选择Loopback环回网卡,默认选择以太网/无线网卡会抓不到本地回环请求。
- 如果是wss加密WebSocket请求:Wireshark默认抓到的是加密TLS包,无法识别为WebSocket。你可以先配置浏览器导出SSLKEYLOGFILE日志,再在Wireshark「编辑-首选项-Protocols-TLS」中导入该日志文件,即可解密TLS流量,后续用
websocket过滤就能搜到对应包,且能直接查看解密后的payload。 - 临时测试可以将站点改为ws非加密模式访问,Wireshark可直接识别WebSocket流量,无需额外配置密钥。
内容的提问来源于stack exchange,提问作者FromScratch
相关产品推荐
相关产品推荐

