【问题标题】:Payload size larger than 125 bytes负载大小大于 125 字节
【发布时间】:2014-03-20 19:43:08
【问题描述】:

我正在使用这个函数来解码通过 html5 websockets 发送的包 但是当有效载荷超过 125 字节时,它就会崩溃。 能不能变大点?


def decode_data(data):
  databyte = bytearray(data)
  datalen = (0x7F & databyte[1])
  str_data = ''
  if(datalen > 0):
    mask_key = databyte[2:6]
    masked_data = databyte[6:(6+datalen)]
    unmasked_data = [masked_data[i] ^ mask_key[i%4] for i in range(len(masked_data))]
    str_data = str(bytearray(unmasked_data))
  return str_data

【问题讨论】:

  • 对于任何正在查看的人:def decode_data(data): if not len(data): return False length = ord(data[1]) & 127 if length == 126: mask = data[4 :8] raw = data[8:] elif length == 127: mask = data[10:14] raw = data[14:] else: mask = data[2:6] raw = data[6:] ret = '' for cnt, d in enumerate(raw): ret += chr(ord(d) ^ ord(mask[cnt%4])) return ret

标签: python html websocket byte


【解决方案1】:

这不是延长它的问题。根据RFC 6455

  • 如果长度为 0-125,则为有效载荷长度。
  • 如果为 126,则解释为 16 位无符号整数的以下 2 个字节是有效负载长度。
  • 如果为 127,则解释为 64 位无符号整数(最高有效位必须为 0)的以下 8 个字节是有效负载长度。

长度必须被分割成单独的字节,这意味着您需要向右移位(八位),然后通过执行和1111 1111(这是255)。

This answer 详细介绍了这个主体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-17
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    相关资源
    最近更新 更多