点击上方蓝字[协议分析与还原]关注我们


 解析websocket数据格式。

好久不见,一晃一年又过去了,祝大家新年好运。

今天,给大家分析一个常见的协议——WebSocket,这是一个标准协议,虽然没有HTTP历史悠久,但具备一些优势,发展很快,应用也很广泛,特别是一些需要长连接传输数据的应用,典型的例如部分需要保持长连接进行数据交互的游戏类应用。

WebSocket是建立在TCP基础上的全双工协议,它与HTTP协议不同,但兼容HTTP协议,标准的WebSocket使用HTTP相关的80和443端口,并支持HTTP代理,它在握手过程中使用HTTP Upgrade头来将HTTP协议更改为WebSocket协议,它的长连接,使得客户端和服务器的数据实时交互变得更简单。Websocket的统一资源标志符是ws或wss,而不是HTTP或HTTPS,其中,ws对应http,wss对应https。大部分浏览器都支持WebSocket协议,很多移动端的APP也使用WebSocket协议。和http协议相同,它使用的端口也可以是任意自定义的端口。

一个典型的未加密WebSocket握手过程如下:

GET / HTTP/1.1
Pragma: no-cache
Cache-Control: no-cache
Host: 8.134.56.122
Origin: http://8.134.56.122:16011
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: cH4PdZBVe+oVAiPsRNF5QQ==
Sec-WebSocket-Version: 13HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: vnK7LjHZedFwyA8p86q9K5zVEA4=

与HTTP协议没啥区别。

看一个wireshark里的WebSocket:

在头之后,就是WebSocket协议数据了。

协议格式定义在rfc6455等相关标准中,每块数据的格式如下:

它由块头部和块内容两个部分组成,块头是变长的,上图中从FIN开始到Payload Data之前,块内容为后面的所有PayloadData。

块头的详细说明可以去参考相关RFC文档,这里着重描述几个重点。

第一个是块头的变长,块头的最小长度为2,即从包标记FIN开始到块长Payload len。

如果Mask位为1,则存在Masking-key,占4字节。

块长Payload len在块头的前两字节中只占7位,最大只能表示127,很多情况下,传输的数据会超过127,因此,采用一个特殊的表示法。当这7位的值为小于126时,表示块内容长度为当前值,如果这7位的值为126时,表示紧跟的2字节为块内容长度,这容得下65535字节,如果这7位的值为127时,表示紧跟的8字节为块内容长度,这样很大地扩展了数据的表示空间,当然,块头的长度就达到了最长的14字节。

下一个重点是Mask位,会导致数据块内容的加密。

mask算法就是异或,masking-key为4字节,这4字节与Payload data每四位进行循环异或,进行简单的加密,这样,在数据流层面,一般人就没法看到数据了。

一个完整的使用了Mask的WebSocket数据如下所示:

根据解析可以知道,它的Masking-key为0x758f5546,内容为:0x748f550d0ead263f06ad6f3d57fb2c3610ad6f641ffc783110ed262916e4303257a3773010fd262f1ae1777c57bf7b765bbe776a57fd262757b52e3b59ad25341afb3a1010fd262f1ae1777c45f228

使用异或很容易得到原始数据:

至于Fin和opcode,则为分包和操作码,具体查RFC啦。

至于应用了tls加密的wss,则使用中间人抓包工具进行内容的分析即可。

别忘点“在看”、“赞”和“分享”

新的规则,及时收推文要先给公号星标

别忘了星标一下,不然就错过了

长按进行关注,时刻进行交流。

WebSocket协议分析相关推荐

  1. BeetleX之Websocket协议分析详解

    Websocket应用协议已经普及多年了,它是HTTP1.1的内部升级协议,主要作用是补充HTTP1.1无法灵活地主动推送消息给客户端的缺陷问题.在这里主要介绍一下使用组件如何扩展一个完整的Webso ...

  2. websocket 带头部信息请求 header_BeetleX之Websocket协议分析详解

    Websocket应用协议已经普及多年了,它是HTTP1.1的内部升级协议,主要作用是补充HTTP1.1无法灵活地主动推送消息给客户端的缺陷问题.在这里主要介绍一下使用组件如何扩展一个完整的Webso ...

  3. 抓包红色_抓包三部曲 WebSocket 协议原理抓包分析

    这篇文章通过抓包分析 WebSocket 协议的细节,学习一下 WebSocket 执行流程. 1.WebSocket 流程说明 (1)客户端和服务器之间完成三次握手建立 TCP 连接(TLS/SSL ...

  4. 一起来用Websocket(二):Websocket协议详细分析

    一起来用Websocket(二):Websocket协议详细分析 前言 本节主要翻译一下websocket的协议.其中,socket通信开发,最重要的就是协议了.通信软件(QQ.MSN).杀毒软件(3 ...

  5. 基于netty实现一个简单的支持http和webSocket协议的的服务器(含xxl-job通信模块源码分析)

    文章目录 背景 依赖 包结构 实现 WebSocketServer 业务handler WebSocketServerHandler 测试 xxl-job 源码中基于netty实现的http 总结 参 ...

  6. websocket python爬虫_python实现基于websocket协议的网络爬虫

    WebSocket是一种在单个TCP连接上进行全双工通信的协议,简单来说就是建立一个TCP长连接之后,你可以服务器随时可以给客户端发送消息,客户端随时可以给服务器发送消息,而以前只能是客户端给服务器发 ...

  7. 【 ➰斗艳争妍の网络协议姐妹花‍‍️➰】http协议 VS websocket协议

    http协议 http简介 http http(hypertext transfer protocol),"超文本传输协议". 超文本 包含有超链接和各种多媒体元素标记的文本.常见 ...

  8. Websocket协议的学习、调研和实现

    1. websocket是什么 Websocket是html5提出的一个协议规范,参考rfc6455. websocket约定了一个通信的规范,通过一个握手的机制,客户端(浏览器)和服务器(webse ...

  9. WebSocket协议探究(序章)

    一 WebSocket协议基于HTTP和TCP协议 与往常一样,进入WebSocket协议学习之前,先进行WebSocket协议抓包,来一个第一印象. WebSocket能实现客户端和服务器间双向.基 ...

最新文章

  1. 清华大学人工智能研究院开源“天授”强化学习平台
  2. Python中的strip()函数的用法
  3. 高通首席技术官:5G+AI是至关重要的组合
  4. 原生js和jquery常用的DOM操作
  5. android形状drawable
  6. python mock支付_python mock知识03
  7. 第一次做项目经理的感触和启发
  8. NUC1937 B.函数【水题】
  9. 数据库实验5 数据库的嵌套查询实验
  10. 【ThinkPHP5.0RC2吃螃蟹之】关于ThinkPHP5.0的渲染模板输出
  11. vins 解读_VINS 中的 IMU 预积分推导和代码解读
  12. Eap无线加密服务器,使用hostapd做radius服务器进行EAP认证,巩固无线安全
  13. 【数字电路基础】——逻辑门电路
  14. 计算机联锁维修管理机,计算机联锁试卷
  15. Springboot定时任务、Quartz表达式
  16. 大数据之HBase 实战微博系统 完整使用 (第六章)
  17. python打开xls文件报错_python处理excel文件(xls和xlsx)
  18. 深入理解Kube-APIServer
  19. Mac 电脑添加代理服务器
  20. 离职 需要注意三个问题

热门文章

  1. 02-CoreData 的增删改查
  2. 积极拥抱.NET Core开源社区
  3. flask的客户端服务端
  4. 利用Oracle GoldenGate记录源系统所有表的操作
  5. 3-openstack之keystone上
  6. php.ini 中开启短标签
  7. OpenGL学习(hello)
  8. Ka的回溯编程练习 Part1|整划什么的。。
  9. xcode6 dyld_sim is not owned by root
  10. 不用se11创建表结构,作smartforms