为了账号安全,请及时绑定邮箱和手机立即绑定

WebSocket的Frame协议解析

标签:
Html/CSS

先给出WebSocket Frame的协议

webp

image

复制抓包抓到的数据:

81 85 30 6c e2 9a 54 19 80 f8 49

字段分析:

8185306ce29a541980f849
1000000110000101001100000110110011100010100110100101010000011001100000001111100001001001
FIN:1,RSV1-3=0,OpCode=1mask=1,payloadLen=101Masking-keyMasking-keyMasking-keyMasking-keyPayload DataPayload DataPayload DataPayload DataPayload Data
  • FIN=1,说明这是这个消息的最后一个片段,我们这次的消息很短,第一个也就是最后一个

  • RSV1, RSV2, RSV3:分别是1bit,且一般时候都是0

  • OpCode=1(表示是一个text frame)

    • %x0 连续的frame

    • %x1 文本frame

    • %x2 二进制frame

    • %x3-7 预留

    • %x8 连接关闭

    • %x9 ping

    • %xA pong

    • %xB-F 预留

  • 如果mask=1,那么Masking-key存在,且都是4个字节(32位)

  • payloadLen=101(5),说明字节长度是4

最后我们看到数据部分是:

0101010000011001100000001111100001001001
541980f849

掩码解码逻辑:

//掩码byte[] maskingKeyBytes = {(byte) 0x30, (byte) 0x6c, (byte) 0xe2, (byte) 0x9a};//掩码编码过得payloadbyte[] maskedBytes = {(byte) 0x54, (byte) 0x19, (byte) 0x80, (byte) 0xf8, (byte) 0x49};int length = maskedBytes.length;//解码的结果byte[] unmaskedByte = new byte[length];for (int i = 0; i < length; ++i) {    byte masking = maskingKeyBytes[i % 4];
    unmaskedByte[i] = (byte) (maskedBytes[i] ^ masking);
}for (byte b : unmaskedByte) {
    System.out.print(b + " ");
}

输出:

100 117 98 98 121

转成16进制,正好是

64 75 62 62 79

dubby的utf-8编码后是:

0110010001110101011000100110001001111001
6475626279



作者:我是杨正
链接:https://www.jianshu.com/p/9cd229384726


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消