关于websocket抓包时的注意事项

news2025/1/15 20:09:39

总是需要一些原因,需要查看客户端和服务端的websocket数据交互,为了使得查看方便,客户端和服务端使用ws而非wss。
服务端部署在linux上,用tcpdump抓包后,在windows上用wireshark打开,如下所示:
在这里插入图片描述
红色部分的是客户端发往服务端的,蓝色部分是服务端发往客户端的,很明显,客户端发往服务端的字符串无法看懂。

这是一些安全的原因,从客户端发送到服务端的帧全部要与掩码进行异或运算过才有效,而服务端发送到客户端的帧不需要进行异或运算

所以客户端发往服务端的数据是真实数据经过异或后处理的。

如下所示,是客户端发往服务端的wireshark的抓包截图,可以看到Masked payload,这是客户端发给服务端的真实数据,不具备可读性,wireshark根据Masking-Key和Masked payload得到Payload,这个是就是异或前的数据,具有可读性。
在这里插入图片描述

下面接着看下服务端发往客户端的抓包,如下所示,很明显,没有Masked payload,说明服务端发往客户端的数据没有进行异或运算,具备可读性。
在这里插入图片描述

下面说明下客户端发往服务端时,原始数据的异或运算规则
假设payload长度为pLen,masking-key长度为mLen,i作为payload的游标,j作为masking-key的游标,代码如下:

for (i = 0; i < pLen; i++){    int j = i % mLen;
    maskedPayload[j] = payload[j] ^ maskingKey[j];
}

下面用抓包的数据进行演示:
如下所示:Maked payload是经过掩码处理的,第一个字节是16进制的76。
在这里插入图片描述
现在我们鼠标点击Payload,查看其情况,如下所示,第一个字符是16进制的7b
在这里插入图片描述

现在来验证下原始数据中的第一个字节7b经过掩码的异或运算变为76.

对照前面发的掩码运算代码,masking-key是0d02747e,4个字节。
maskedPayload[0] = payload[0] ^ maskingKey[0];

payload[0]为7b,二进制表示为0111 1011
而maskingKey是0d02747e,则maskingKey[0]为0d,二进制表示为0000 1101
这两个二进制进行异或,结果的二进制表示为0111 0110,16进制表示即为76。

下面就websocket中的开始交互时的报文做下阐述,如下所示,是交互的过程

GET / HTTP/1.1
Connection: Upgrade
Host: 10.0.0.197:9002
Sec-WebSocket-Key: tUR8nKgcWk3ObiwSAkJXSw==
Sec-WebSocket-Protocol: janus-protocol
Sec-WebSocket-Version: 13
Upgrade: websocket
User-Agent: WebSocket++/0.8.2

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Sec-WebSocket-Accept: YMmVJR32roxutjWu514lSm++izY=
Server: WebSocket++/0.8.2
Upgrade: websocket

本人此处想解释客户端发的Sec-WebSocket-Key,Sec-WebSocket-Protocol,以及服务端回复的Sec-WebSocket-Accept这三个字段。

首先Sec-WebSocket-Protocol代表着协议,比如大名鼎鼎的janus,要求必须填写此字段,否则无法连接到janus服务端。

我们看下janus中的如下代码
在这里插入图片描述
很明显,其支持http-only和janus-protocol两种连接方式,如果ws客户端不指定Sec-WebSocket-Protocol,或者指定值出错,则janus拒绝。

Sec-WebSocket-Key和Sec-WebSocket-Accept主要用于客户端校验服务端确实是ws服务端,这里的校验规则如下:
服务端将Sec-WebSocket-Key 的内容与标准定义的唯一GUID字符(258EAFA5-E914-47DA-95CA-C5AB0DC85B11)串拼接起来,计算出SHA1散列值,结果是一个base-64编码的字符串,把这个字符串发给客户端即可

本示例中的Sec-WebSocket-Key是tUR8nKgcWk3ObiwSAkJXSw==,跟GUID组合成下面字符串
tUR8nKgcWk3ObiwSAkJXSw==258EAFA5-E914-47DA-95CA-C5AB0DC85B11
将此字符串进行sha1运算,得到如下字符串:
60c995251df6ae8c6eb635aee75e254a6fbe8b36
该字符串是16进制表示,很遗憾本人未能找到sha1后编码成base64的在线网页。
而实际上本人经过处理,发现60c995251df6ae8c6eb635aee75e254a6fbe8b36和YMmVJR32roxutjWu514lSm++izY=分别是同一个字符串的16进制表示和base64表示。

如下所示,本人将YMmVJR32roxutjWu514lSm++izY=还原,然后内存窗口中查看out地址,16进制展示,刚好对应。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端基础(十)_标签分类(行级标签、块级标签、行块标签)

标签分类 可以分为三类&#xff1a;行级标签、块级标签、行块标签 行级元素 常用的行级元素&#xff1a;span、b、i、em、strong、a、del、sub、sup等 注意&#xff1a; 1、默认宽度随元素的内容的变化而变化&#xff1b; 2、默认情况下高度由内容撑开&#xff1b; 3、不会…

【快速学习系列】Spring理解,IOC、DI、AOP的使用和代码示例及spring扩展(bean作用域、自动装配类型和拆分策略)

【快速学习系列】Spring理解&#xff0c;IOC、DI、AOP的使用和代码示例及spring扩展&#xff08;bean作用域、自动装配类型和拆分策略&#xff09; Spring概述 Spring设计理念 Spring是面向Bean的编程 Spring三大核心容器&#xff1a; Beans&#xff0c;Core&#xff0c;Conte…

使用vue-cli创建一个新项目

1&#xff0c;在文件夹中打开命令行输入&#xff1a; vue create educationcloud-pc 2&#xff0c;这里我选择手动创建配置 3&#xff0c;我会选择我用到的几个 空格键是选中 取消 a是全选 4&#xff0c;这里我暂时使用vue2版本 5&#xff0c;是否使用history路由 6&#xf…

skyBox 近地时角度倾斜问题,天空倾斜

近地出现角度不对问题 将下面代码放入js文件&#xff0c;引入项目。 本质是在Cesium.skyBox的代码上修改&#xff0c;并给Cesium重新增添近地的天空盒 需要注意的是&#xff0c;代码最后的Cesium.GroundSkyBox SkyBoxOnGround 调用方式&#xff1a; import ‘…/…/路径’ 然后…

地址汇总详细讲解(内附非纯末梢)

♥️作者&#xff1a;小刘在这里 ♥️每天分享云计算网络运维课堂笔记&#xff0c;疫情之下&#xff0c;你我素未谋面&#xff0c;但你一定要平平安安&#xff0c;一 起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;…

5.2 词向量Word Embedding

在自然语言处理任务中&#xff0c;词向量&#xff08;Word Embedding&#xff09;是表示自然语言里单词的一种方法&#xff0c;即把每个词都表示为一个N维空间内的点&#xff0c;即一个高维空间内的向量。通过这种方法&#xff0c;实现把自然语言计算转换为向量计算。 如 图1 …

转转用户画像平台实践

文章目录1. 背景2. 什么是用户画像3. 标签画像的应用场景4. 转转用户画像平台的实践4.1 系统结构图4.2 标签画像的构建原则4.3 标签类型和规则4.4 标签的生产加工4.5 标签的存储设计4.6 用户洞察4.7 用户分群计算4.8 ID-MAPPING5 未来规划6 总结1. 背景 转转作为二手电商交易领…

Linux C编程一站式学习笔记2

Linux C编程一站式学习笔记 chap2 常量、变量和表达式 本书以C99为标准 一.继续hello world 加入更多注释的hello world 可以用ctrl(shift)v复制到vim里面 #include <stdio.h>/* * comment1* main: generate some simple output*/int main(void) {printf(/* comment2 */…

【JS ES6】了解Symbol类型

✍️ 作者简介: 前端新手学习中。 &#x1f482; 作者主页: 作者主页查看更多前端教学 &#x1f393; 专栏分享&#xff1a;css重难点教学 Node.js教学 从头开始学习 ajax学习 目录声明定义Symbol的几种方式使用Symbol解决字符串耦合问题扩展特性与对象属性保护声明定义Sym…

Qt5.6.1移植海思Hi3521d(三)

系列文章目录 Qt5.6.1移植海思Hi3521d&#xff08;一&#xff09; Qt5.6.1移植海思Hi3521d&#xff08;二&#xff09; 前言 本章讲解如何将编译好的qt程序移植到海思Hi3521D板子上&#xff0c;并且能够启动qt界面&#xff0c;和正常显示中文 一、移植qt库 创建qt.conf&#…

不再封控,各高校要如何开展教学

疫情政策逐步放开&#xff0c;石家庄、福州、广西等地各高校发布寒暑假和期末课程安排。 广西科技大学要求从2022年12月13日下午起&#xff0c;停止所有线下课程&#xff0c;未完成的教学任务启动线上教学。 在疫情这三年里&#xff0c;线上教学已经成为学校的主要教学手段&…

Python操作Excel

文章目录xlrd模块安装xlrd库打开Excel文件读取获取指定工作表操作指定行操作指定列操作指定单元格使用示例xlrd模块 xlrd是Python处理Excel表格数据的一个模块&#xff0c;能够对Excel中的数据进行读取。 安装xlrd库 在命令行或终端中输入以下命令进行安装&#xff1a; pip…

python数据分析 之 pandas数据统计

目录 一&#xff1a;数据集准备 二&#xff1a;加载文件 三&#xff1a;分组操作进行统计 一&#xff1a;数据集准备 可以创建一个txt&#xff0c;并放置pycharm工程目录下 下面是博主的数据集测试&#xff0c;所用数据&#xff0c;需要的自取 1001,Chinese,1,80 1001,Chine…

富芮坤蓝牙FR801xH开发环境搭建

富芮坤蓝牙FR801xH方案开发资源包网盘下载链接&#xff1a;网盘 提取码&#xff1a;30qu 搭建过程&#xff1a; 安装Keil开发工具:mdk525.exe 可以从Keil官网下载&#xff1a;http://www.keil.com/files/eval/MDK525.EXE 也可以使用网盘tools目录里的包装包 其中需要注意选择的…

Qt扫盲-QScrollArea理论总结

这里写目录标题1. 概述2. 滚动条策略3. 子控件4. 尺寸提示1. 概述 QScrollArea 用于显示滚动区域框架内的子控件的内容。如果控件超过框架的大小&#xff0c;视图可以提供滚动条&#xff0c;以便可以查看子控件的整个区域。子控件必须使用 setWidget() 指定。但是在 QDesigner…

【车载开发系列】UDS诊断---请求下载($0x34)

【车载开发系列】UDS诊断—请求下载&#xff08;$0x34&#xff09; UDS诊断---请求下载&#xff08;$0x34&#xff09;【车载开发系列】UDS诊断---请求下载&#xff08;$0x34&#xff09;一.概念定义二.产生背景三.报文格式1&#xff09;请求报文2&#xff09;肯定响应3&#x…

[附源码]Nodejs计算机毕业设计基于的民宿租赁系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

MySQL处理非结构化JSON数据(附 MyBatis-Plus 集成)

概述 MySQL 自5.7起开始支持JSON格式的非结构化数据&#xff0c;并且在8.x版本进行性能优化 关于 JSON JSON&#xff08;JavaScript Object Notation, JS对象简谱&#xff09;是一种轻量级的数据交换格式。它基于 ECMAScript&#xff08;European Computer Manufacturers Asso…

Spring Cloud Alibaba

Spring Cloud Alibaba第五部分 第二代 Spring Cloud 核心组件&#xff08;SCA&#xff09;第 1 节 Nacos 服务注册和配置中心1.1 Nacos 介绍1.2 Nacos 单例服务部署1.3 微服务注册到Nacos1.4 负载均衡1.5 Nacos 数据模型&#xff08;领域模型&#xff09;1.6 Nacos 配置中心1.6…

智能家居DIY创意之智能灯泡

一、什么是智能灯 传统的灯泡是通过手动打开和关闭开关来工作。有时&#xff0c;它们可以通过声控、触控、红外等方式进行控制&#xff0c;或者带有调光开关&#xff0c;让用户调暗或调亮灯光。 智能灯泡内置有芯片和通信模块&#xff0c;可与手机、家庭智能助手、或其他智能…