Как распаковать данные пакета GamePacket протокола RakNet?
Я хочу распаковать поле body из пакета GamePacket (0xfe). Если верить этой странице, оно сжато. Имею вот такие данные:
b'\x06\xc1\x01\x00\x00\x02F'
Пробую это:
zlib.decompress(data)
Ошибка:
zlib.error: Error -3 while decompressing data: incorrect header check
Пробую это:
zlib.decompress(data, -zlib.MAX_WBITS)
Ошибка:
zlib.error: Error -3 while decompressing data: invalid block type
Использую библиотеку zlib и python.
UPD: Попробовал добавить в начало байты b"\x78\x9c", результат:
zlib.error: Error -3 while decompressing data: invalid stored block lengths
Ответы (1 шт):
В RakNet информация может быть разделена на несколько пакетов данных, если пакет не может быть отправлен из-за ограничения MTU.
Если же пакет соответствует размеру MTU, как вижу, в вашем случае был скорее всего последний кусок цепочки пакетов, поэтому вылезла ошибка неверного заголовка, можете подробнее поискать по этому информацию, мне будет сложно объяснить.
У пакета данных есть информация, разделён ли он, если разделён по частям, тогда есть split id и split index.
Если пакет не разделён, то будет присутствовать байт 78, поэтому визуально можно определить, разделён ли пакет данных или нет.