关于websocket抓包时的注意事项

这篇具有很好参考价值的文章主要介绍了关于websocket抓包时的注意事项。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

如下所示,是客户端发往服务端的wireshark的抓包截图,可以看到Masked payload,这是客户端发给服务端的真实数据,不具备可读性,wireshark根据Masking-Key和Masked payload得到Payload,这个是就是异或前的数据,具有可读性。
关于websocket抓包时的注意事项

下面接着看下服务端发往客户端的抓包,如下所示,很明显,没有Masked payload,说明服务端发往客户端的数据没有进行异或运算,具备可读性。
关于websocket抓包时的注意事项

下面说明下客户端发往服务端时,原始数据的异或运算规则
假设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。
关于websocket抓包时的注意事项
现在我们鼠标点击Payload,查看其情况,如下所示,第一个字符是16进制的7b
关于websocket抓包时的注意事项

现在来验证下原始数据中的第一个字节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中的如下代码
关于websocket抓包时的注意事项
很明显,其支持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进制展示,刚好对应。
关于websocket抓包时的注意事项文章来源地址https://www.toymoban.com/news/detail-424553.html

到了这里,关于关于websocket抓包时的注意事项的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于 Go 协同程序(Coroutines 协程)、Go 汇编及一些注意事项。

    参考:  Go 汇编函数 - Go 语言高级编程 Go 嵌套汇编 - 掘金 (juejin.cn) 前言: Golang 适用 Go-Runtime(Go 运行时,嵌入在被编译的PE可执行文件之中)来管理调度协同程式的运行。 Go 语言没有多线程(MT)的概念,在 Go 语言之中,每个 Go 协程就类似开辟了一个新的线程,效率上,肯

    2024年01月25日
    浏览(69)
  • std::map使用方式以及注意事项(关于相同key的问题)

    std::map的使用在C++开发中也是经常会用到的一些东西,这里进行一些简单的使用记录,包括如何插入、删除以及修改等。 map的插入使用的是insert的方式,一个map包含了key与value两个值。首先需要对两个值进行赋值,然后对map执行insert操作,简单代码如下: 注意在map中,key值是

    2024年02月15日
    浏览(47)
  • 关于PostgreSql数据库和mysql的不同点及注意事项

    更新时间戳需要通过触发器来实现。 定义触发器 创建触发器 dapper 判断了connection 是否是npgsql ,如果是,表示支持 数组类型,不展开数组。也就是 in @ids ,在npgsql下不做转化为 in (@p1,@p2…),故 在pgsql 下要用 any(@ids) 例如: upsert是一个组合词,即当往表中插入记录,如果该记录

    2024年02月01日
    浏览(55)
  • 关于 Delphi 11.3跨平台开发Android调用 JNI JAR java 的说明和注意事项

    关于 调用 JNI JAR 的说明和注意事项,调用第三方 JAR SDK 和 翻译 安卓 JAVA 代码 的说明 V2017.10.18 (* ************************************************ *) (* *) (* *) (* 设计:爱吃猪头肉 Flying Wang 2015-04-15  *) (* 上面的版权声明请不要移除。 *) (* *) (* ************************************************ *) 本人所

    2024年02月07日
    浏览(59)
  • 学习Linux的注意事项(使用经验;目录作用;服务器注意事项)

    本篇分享学习Linux过程中的一些经验 Linux严格区分大小写 Linux中所有内容以文件形式保存 ,包括硬件,Linux是以管理文件的方式操作硬件 硬盘文件是 /dev/sd[a-p] 光盘文件是 /dev/sr0 等 对于设置需要写入文件,命令行的设置在重启之后就会失效,只有下入文件才可以保存下来 文

    2024年02月11日
    浏览(69)
  • 弱电线布线注意什么?弱电线布线的注意事项

    弱电 弱电一般是指直流电路或音频、视频线路、网络线路、电话线路,直流电压一般在36V以内。家用电器中的电话、电脑、电视机的信号输入(有线电视线路)、音响设备(输出端线路)等用电器均为弱电电气设备。 弱电线的种类如:电话线、网络线、有线电视线及音响线

    2024年02月07日
    浏览(44)
  • RabbitMQ开发注意事项

    在使用 RabbitMQ 进行消息队列的开发过程中,有一些注意事项需要牢记: 安全性:确保正确配置 RabbitMQ 实例的安全性。限制对 RabbitMQ 服务器的访问权限,并使用安全的认证机制(如用户名和密码)来保护连接。 错误处理:在消费者端,务必处理可能发生的异常或错误情况。

    2024年02月07日
    浏览(48)
  • 算法竞赛个人注意事项

    浅浅记录一下自己在算法竞赛中的注意事项。 注意看数大小,数学库中的函数尽量加上 * 1.0 , 转成double,防止整型溢出。 , int 型相乘如果可能溢出,乘 * 1LL 。 数据范围大于1e6,注意用快读。 浮点数输入输出: 取模,注意取成负数的情况。 全 int ,但是数据太大,全转

    2024年02月09日
    浏览(50)
  • 面试求职-面试注意事项

    面试技巧和注意事项有哪些? 面试是找工作过程中最重要的一个环节,因为面试成功,你才有可能得到一份工作。求职面试技巧有哪些呢?首先,我们来看看面试注意事项。 1、面试前有没有仔细了解过对应企业的情况,对方的企业文化、主营业务、未来的发展方向。如果跑过

    2024年02月09日
    浏览(38)
  • 低代码选型注意事项

    凭借着革命性的生产力优势,低代码技术火爆了整个IT圈。面对纷繁复杂的低代码和无代码产品,开发者该如何选择? 在研究低代码平台的年数上,本人已有3年,也算是个低代码资深用户了,很多企业面临低代码选型上的困难,选平台容易,换平台难。下面基于个人理解给大

    2024年02月03日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包