Python Parse Minecraft数据包

时间:2012-03-07 14:11:32

标签: python protocols 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 :(得分:0)

所以,如果我理解这一点,你想要解码数据包响应,这是一个1024字节,以获得正确的信息。看来你可以使用struct.pack语句,有一个类似的解压缩语句,如the documentation所示。基本上,它看起来像这样。

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

另外,我不太相信你的请求是正确发送的,但我会把它作为练习让你弄清楚如何设置它。请参阅format strings