Как отправить TCP-Minecraft пакеты с разными идентификаторами python

Мне нужно отправить несколько пакетов с разными ID (интендефикаторами) на сервер Minecraft с разным содержимым.

1 пакет - ID 0x00
2 пакет - ID 0x03
3 пакет - ID 0x04

Как такое сделать? Ссылка на документацию - https://wiki.vg/index.php?title=Protocol&oldid=13367


Ответы (1 шт):

Автор решения: Silver

Вопрос поставлен странно. С помощью сокетов можно отправлять наборы байтов на целевой сервер. К примеру пакет с id=x00 будет отправлен таким образом:

from socket import socket
mySocket = socket()
mySocket.connect(("127.0.0.1",25565))
mySocket.send(bytes(b'\x10\x00\xf2\x05\t127.0.0.1#\x82\x02'))

Разбор 4 строчки(Если надо):

  • \x10 - длинна следующего пакета в байтах (x10 = 16)
  • \x00 - id пакета (0)
  • \xf2\x05 - версия протокола (тут формать varint. Я значение с лету не скажу)
  • \t - (python отображает этот байт как символ) длинна адреса целевого сервера (проверка на proxy)
  • #\x82 - (python отображает первый байт как символ) порт Unsigned Short
  • \x02 - сообщение о том, что вы хотите подключится к серверу
  • [конец пакета]

В начале подключения ничего не шифруется и не сжимается до того, как сервер не отправит пакет id=x03 или id=x01

→ Ссылка