WebSocket协议分析
点击上方↑↑↑蓝字[协议分析与还原]关注我们
“ 解析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协议分析相关推荐
- BeetleX之Websocket协议分析详解
Websocket应用协议已经普及多年了,它是HTTP1.1的内部升级协议,主要作用是补充HTTP1.1无法灵活地主动推送消息给客户端的缺陷问题.在这里主要介绍一下使用组件如何扩展一个完整的Webso ...
- websocket 带头部信息请求 header_BeetleX之Websocket协议分析详解
Websocket应用协议已经普及多年了,它是HTTP1.1的内部升级协议,主要作用是补充HTTP1.1无法灵活地主动推送消息给客户端的缺陷问题.在这里主要介绍一下使用组件如何扩展一个完整的Webso ...
- 抓包红色_抓包三部曲 WebSocket 协议原理抓包分析
这篇文章通过抓包分析 WebSocket 协议的细节,学习一下 WebSocket 执行流程. 1.WebSocket 流程说明 (1)客户端和服务器之间完成三次握手建立 TCP 连接(TLS/SSL ...
- 一起来用Websocket(二):Websocket协议详细分析
一起来用Websocket(二):Websocket协议详细分析 前言 本节主要翻译一下websocket的协议.其中,socket通信开发,最重要的就是协议了.通信软件(QQ.MSN).杀毒软件(3 ...
- 基于netty实现一个简单的支持http和webSocket协议的的服务器(含xxl-job通信模块源码分析)
文章目录 背景 依赖 包结构 实现 WebSocketServer 业务handler WebSocketServerHandler 测试 xxl-job 源码中基于netty实现的http 总结 参 ...
- websocket python爬虫_python实现基于websocket协议的网络爬虫
WebSocket是一种在单个TCP连接上进行全双工通信的协议,简单来说就是建立一个TCP长连接之后,你可以服务器随时可以给客户端发送消息,客户端随时可以给服务器发送消息,而以前只能是客户端给服务器发 ...
- 【 ➰斗艳争妍の网络协议姐妹花️➰】http协议 VS websocket协议
http协议 http简介 http http(hypertext transfer protocol),"超文本传输协议". 超文本 包含有超链接和各种多媒体元素标记的文本.常见 ...
- Websocket协议的学习、调研和实现
1. websocket是什么 Websocket是html5提出的一个协议规范,参考rfc6455. websocket约定了一个通信的规范,通过一个握手的机制,客户端(浏览器)和服务器(webse ...
- WebSocket协议探究(序章)
一 WebSocket协议基于HTTP和TCP协议 与往常一样,进入WebSocket协议学习之前,先进行WebSocket协议抓包,来一个第一印象. WebSocket能实现客户端和服务器间双向.基 ...
最新文章
- 清华大学人工智能研究院开源“天授”强化学习平台
- Python中的strip()函数的用法
- 高通首席技术官:5G+AI是至关重要的组合
- 原生js和jquery常用的DOM操作
- android形状drawable
- python mock支付_python mock知识03
- 第一次做项目经理的感触和启发
- NUC1937 B.函数【水题】
- 数据库实验5 数据库的嵌套查询实验
- 【ThinkPHP5.0RC2吃螃蟹之】关于ThinkPHP5.0的渲染模板输出
- vins 解读_VINS 中的 IMU 预积分推导和代码解读
- Eap无线加密服务器,使用hostapd做radius服务器进行EAP认证,巩固无线安全
- 【数字电路基础】——逻辑门电路
- 计算机联锁维修管理机,计算机联锁试卷
- Springboot定时任务、Quartz表达式
- 大数据之HBase 实战微博系统 完整使用 (第六章)
- python打开xls文件报错_python处理excel文件(xls和xlsx)
- 深入理解Kube-APIServer
- Mac 电脑添加代理服务器
- 离职 需要注意三个问题