Как отправить пакеты на удаленный классический сервер Minecraft в Python? - PullRequest
3 голосов
/ 01 марта 2012

Привет, добрые люди из StackOverflow.

Я пытаюсь создать своего рода «бот», который может подключаться к серверу Minecraft Classic, публиковать сообщения и, возможно, создавать.

В любом случае, у меня возникают проблемы с пониманием того, как отправлять пакеты в python и как правильно их кодировать.

Вот пакеты, которые мне нужно отправить, я хочу отправить «Идентификатор игрока»: http://www.minecraftwiki.net/wiki/Classic_server_protocol#Client_.E2.86.92_Server_packets Я знаю, что мне нужно использовать сокеты, и мне нужно использовать struct.pack, но как именно я могу отправить его?

Пример кода, который отправляет пакет входа в систему, был бы изумительным.

Спасибо.

1 Ответ

4 голосов
/ 01 марта 2012

Я получу мяч:

import socket
import struct

username = "username_value"
verification_key = "verification_key"

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # boilerplate
s.connect(("example.com", 1234))  # adjust accordingly

# now for the packet
# note that the String type is specified as having a length of 64, we'll pad that

packet = ""

packet += struct.pack("B", 1)  # packet type
packet += struct.pack("B", 7)  # protocol version
packet += "%-64s" % username  # magic!
packet += "%-64s" % verification_key
packet += struct.pack("B", 0)  # that unused byte, assuming a NULL byte here

# send what we've crafted
s.send(packet)

"% -20s" могут быть странными для вас, если вы никогда не использовали строки форматирования.По существу ..

print "%s" % 5

.. будет выводить 5 ..

print "%10s" % 5

.. будет дополнять вывод, чтобы быть точно 10 символов в ширину.Но он дополняет их с правой стороны, мы хотим, чтобы этот отступ был слева - следовательно, - ..

print "%-10s" % s, "<this will be 9 spaces away from the '5'>"

.. поэкспериментируйте с ним.

Если что-тонеясно, дайте мне знать.Мне нравится то, что ты делаешь, напоминает мне о моем старом проекте.За исключением того, что у меня не было аккуратной спецификации протокола, как у вас, счастливчик.;)

...