Как распаковать данные пакета GamePacket протокола RakNet?

Рейтинг: 0Ответов: 1Опубликовано: 15.05.2023

Я хочу распаковать поле 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

Ответы

▲ 0Принят

В RakNet информация может быть разделена на несколько пакетов данных, если пакет не может быть отправлен из-за ограничения MTU.

Если же пакет соответствует размеру MTU, как вижу, в вашем случае был скорее всего последний кусок цепочки пакетов, поэтому вылезла ошибка неверного заголовка, можете подробнее поискать по этому информацию, мне будет сложно объяснить.

У пакета данных есть информация, разделён ли он, если разделён по частям, тогда есть split id и split index.

Если пакет не разделён, то будет присутствовать байт 78, поэтому визуально можно определить, разделён ли пакет данных или нет.