Python Parse Minecraft Packet - PullRequest
       16

Python Parse Minecraft Packet

2 голосов
/ 07 марта 2012

У меня есть скрипт, который подключается к серверу Minecraft, получает пакеты и отправляет пакеты.

Итак, я отправляю пакет «логин» и получаю пакет «логин». К сожалению, полученный логин-пакет закодирован (информация о кодировке здесь: http://wiki.vg/Protocol#0x01).

Полученный пакет входа в систему сохраняется в переменной с именем received_login_packet. Мне нужно декодировать его, чтобы я мог получить отдельные биты данных, такие как тип пакета, размерность и т. Д. *

Я немного огляделся, но понятия не имею, как это сделать.

Вот некоторый код, если он помогает:

#encoding the packet to send
encuserlen = str(len(enc_user)) # enc_user is just my username
packfmt = '>bih%sshiibBB' % encuserlen
packetbytes = struct.pack(packfmt, 1, 28, len(data['user']), enc_user, 0, 0, 0, 0, 0, 0)
s.send(packetbytes)
time.sleep(2)
#login packet sent, waited for response
response = s.recv(1024) #this is the raw login response.
#it's encoded as detailed above. i want to decode it

Буду признателен за любую помощь, и, пожалуйста, не стесняйтесь сказать, если это не достаточно ясно.

1 Ответ

0 голосов
/ 07 марта 2012

Итак, если я правильно понимаю, вы хотите декодировать ответ пакета, который составляет 1024 байта, чтобы получить правильную информацию.Похоже, вы смогли использовать инструкцию struct.pack, есть аналогичная инструкция для распаковки, как видно из документации .По сути, это выглядит так.

packfmt = '>issiibBB'
output=struct.unpack(packfmt,response)

Кроме того, я не совсем уверен, что ваш запрос был отправлен правильно, но я оставлю это в качестве упражнения, чтобы вы выяснили, как его настроить.,См формат строки .

...