websocket 消息包粗解

最近在搞websocket解析,记录一下:
原始字符串

在这里插入图片描述

�~�{"t":"d","d":{"b":{"p":"comds/comdssqmosm7k","d":{"comdss":{"cmdn":"success","cmdv":"success","cmdvar":"success","rndm":"success"}}},"a":"d"}}�+{"t":"d","d":{"r":9,"b":{"s":"ok","d":{}}}}

转成字节
在这里插入图片描述

这里重点讲一下字节的前几位,也就是字符串乱码的部分
129 126 0 142

首先我们先看下定义

1.FIN(1 bit): 表示消息是否已经完成。如果是 1,表示这是消息的最后一个帧;如果是 0,表示后面还有帧。

2.RSV1, RSV2, RSV3(各占 1 bit): 这三个标志位一般用于扩展协议或自定义协议的使用。在通常情况下,它们都是 0。

3.Opcode(4 bit): 表示帧的类型,例如,Text Frame、Binary Frame 等。常见的值有:

0x1 表示 Text Frame
0x2 表示 Binary Frame
0x8 表示 Connection Close Frame
0x9 表示 Ping Frame
0xA 表示 Pong Frame

4.Mask(1 bit): 表示是否使用掩码。WebSocket 客户端发送给服务器的消息需要进行掩码处理,而服务器发送给客户端的消息则不需要。

5.Payload Length(7 bit 或 7+16 bit 或 7+64 bit): 表示消息负载的长度。如果长度小于等于 125 字节,则使用 7 位来表示。如果长度在 126 到 65535 之间,则使用 7 位加上 16 位来表示。如果长度大于 65535,则使用 7 位加上 64 位来表示。

6.Masking Key(0 或 4 个字节): 只有在 Mask 标志位被设置为 1 时才会有这个字段。它用于对负载进行异或运算,确保数据在传输过程中不容易被篡改。

7.Payload Data: 消息的实际数据。如果设置了 Mask 标志位,需要对 Payload Data 进行掩码处理。

开始分析过程

129 转成二进制是 10000001

第一位是FIN,这里的fin是1表示这是消息的最后一个帧。

第二,三,四位是RSV1, RSV2, RSV3,这里是000,表示没有扩展协议或自定义协议

后四位是Opcode(4 bit),这里是0001,表示是 Text Frame,即带有文本数据的帧(0x1其实就是16进制的1)

前八位就分析完了,得出结论这个websocket消息是文本类型,是最后一帧,且没有没有扩展协议或自定义协议,

然后是126转成二进制是01111111
第一位是Mask,这里是0,表示没有使用掩码
后7位表示数据长度,这里是11111111,看说明,那么表示数据长度超过了125位,具体长度就要看后面的数据了。再次说明一下,这里的规则是如果长度小于等于 125 字节,则使用 7 位来表示。如果长度在 126 到 65535 之间,则使用 7 位加上 16 位来表示。如果长度大于 65535,则使用 7 位加上 64 位来表示。

接下来是 0 142 转成二进制就是00000000 10001110
从这里可以看出长度只有16位,数据长度即为142.
然后再后面的就是具体的数据了。

差不多这样就能够理解了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/204729.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

postman打开白屏

现状:postman打开白屏如下图 window环境变量: Win R 快捷键打开 sysdm.cpl 增加环境变量: 变量名:POSTMAN_DISABLE_GPU 值:true 重新打开postman

【Python笔记】PyAutoGUI模块知识点整理

PyAutoGUI简介 pyautogul这个模块是用来模拟用户操作的模块,他可以模拟你的鼠标键盘等操作。可以说他是对我们个人而言最实用的库了。(玩游戏再也不用重复无聊的操作,被迫做打工仔了) 模块安装指令 python -m pip install -U py…

统信UOS_麒麟KYLINOS配置日志轮转

原文链接:统信UOS/麒麟KYLINOS配置日志轮转 hello,大家好啊,今天给大家带来一篇在统信UOS/麒麟KYLINOS上配置日志轮转的文章。本文举例的内容如下:首先我们创建一个定时任务,在每天00:00给/var/log/hello路径下的hello…

Yolov8实现瓶盖正反面检测

一、模型介绍 模型基于 yolov8n数据集采用SKU-110k,这数据集太大了十几个 G,所以只训练了 10 轮左右就拿来微调了 基于原木数据微调:训练 200 轮的效果 10 轮SKU-110k 20 轮原木 200 轮瓶盖正反面 微调模型下载地址https://wwxd.lanzouu.co…

新建的springboot项目中application.xml没有绿色小叶子(不可用)

经常有朋友会遇到新建了一个springboot项目,发现为啥我创建的application.xml配置文件不是绿色的??? 下面教大家如何解决,这也是博主在做测试的时候遇到的: 将当前位置application.xml删掉,重新…

销售客户分配管理细则

随着市场竞争的不断加剧,销售团队的有效管理变得愈发重要。其中,客户分配是销售团队成功的关键之一。一个科学合理的销售客户分配管理细则不仅可以提高销售团队的整体工作效率,还能够优化客户体验,促使销售业绩持续增长。下面是一…

排序分析(Ordination analysis)及R实现

在生态学、统计学和生物学等领域,排序分析是一种用于探索和展示数据结构的多元统计技术。这种分析方法通过将多维数据集中的样本或变量映射到低维空间,以便更容易理解和可视化数据之间的关系。排序分析常用于研究物种组成、生态系统结构等生态学和生物学…

将360调配成绿色无弹窗软件

相信很多小伙伴都跟我一样喜欢杀毒软件的功能。而小编认为最好用的杀毒软件就是360了。360功能齐全,界面美观,但总是有很多弹窗小广告,怎么办呢? 今天就来就来教大家如何将360设置为绿色无弹窗软件 将360调配成绿色无弹窗软件 一…

9款高效绘图神器,提升你的工作效率

在日常工作或生活中,我们必须绘制各种图表、流程图、思维导图等图形,或者想用画笔描述自己的想法。然而,我们在许多绘图软件面前感到困惑。我们不知道哪个绘图软件好,也没有足够的时间一一尝试 在接下来的空间里,我们…

python之pyqt专栏9-鼠标事件

目录 需求 UI界面 代码实现 代码解析: Label初始化设置 重写鼠标按下事件 重写鼠标释放事件 重写鼠标移动事件 运行结果 需求 当鼠标进入窗口时,点击鼠标左键,出现一个label并在显示光标在窗口的坐标;按住左键不释放拖动…

Java学习day15:Object类、set集合(知识点+例题详解)

声明:该专栏本人重新过一遍java知识点时候的笔记汇总,主要是每天的知识点题解,算是让自己巩固复习,也希望能给初学的朋友们一点帮助,大佬们不喜勿喷(抱拳了老铁!) 往期回顾 Java学习day14:权限…

软件系统安全漏洞检测应该怎么做?靠谱的软件安全检测公司推荐

软件系统安全漏洞检测是指通过对软件系统进行全面的、系统化的评估,发现和解决其中可能存在的安全漏洞和隐患。这些安全漏洞可能会被不法分子利用,引发数据泄露、系统瘫痪、信息被篡改等安全问题,给企业造成严重的经济和声誉损失。那么软件系…

jenkins 使用 nexus插件,将代码打包好推送到制品库

Nexus是一个开源的、基于Java的应用程序框架和存储库管理系统,可用于管理软件开发和部署的所有相关构件。 它允许用户创建和维护Maven存储库,使其更易于组织,搜索和共享构建工件和库。 Nexus具有安全性和身份验证、多格式支持、镜像管理和自定…

精彩回顾|迪捷软件先进装备软件技术研讨会之行圆满收官

2023年11月24日,为期3个月的先进装备软件高安全、高可靠、智能化验证技术系列研讨会在成都圆满收官。迪捷软件董事长康烁作为研讨会特邀专家,在西安、上海、成都站进行了演讲分享。 以航空航天、船舶、电力电子、汽车、医疗为代表的先进装备软件发展迅速…

ELK+filebeat+kafka

无需创建logstash的端口,直接创建topic 远程收集mysql和httpd的日志 (一)安装nginx和mysql服务 1、打开mysql的日志功能 2、创建日志(创库、创表、添加数据) (1)mysql服务器上安装http system…

Jenkins持续集成Python项目

一、前言   之前学习了很多自动化测试框架,但是写的脚本都是本地执行,多数用来造数据。最近公司掀起一股自动化测试的风,所以就想研究下如何集成jenkins,本次采用pytest,用的是阿里云服务器centos7。 二、服务器环境…

功能测试常见的测试方法及其使用实例说明

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

软文推广如何自然融入品牌?媒介盒子有妙招

软文推广作为一种柔性推广方式,能将品牌信息融入到用户日常浏览的内容中,让用户不知不觉接触品牌,从而产生好感,这种方式既可以避免广告带来的反感,又可以提高广告的有效性。那么在推广中应该如何自然融入品牌信息呢&a…

一文看懂:库存分析如何做?

在之前的文章中,老李给大家简单介绍了制造业数据分析用到的指标体系和典型分析场景。如果你读过那篇文章,你就会知道制造业主要有两个典型的分析场景,一是库存管理,二是生产管理。虽然老李在之前的文章中提到了这两个场景&#xf…

Cesium.CustomShader颜色值显示错误

官方示例: Cesium Sandcastle 测试过程: 1、修改示例,把customshader中的fragmentShaderText替换为如下代码 void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) {//注意:下述颜色的b值是0.1&#x…