Python 解析 Minecraft 数据包

标签 python protocols minecraft

我有一个连接到 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

如有任何帮助,我们将不胜感激,如果不够清楚,请随时指出。

最佳答案

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

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

另外,我不太确定您的请求是否发送正确,但我会将其留作练习,让您弄清楚如何设置它。参见 format strings .

关于Python 解析 Minecraft 数据包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9603036/

相关文章:

ios - Swift 2.2 泛型 : "Cannot convert return expression of type ItemPageControllerFactory to return type T"

swift - 如何解决 Swift 不支持一流元类型的问题?

objective-c - Objective C 协议(protocol)循环依赖?

python - 跨进程共享对象状态?

python - 为什么从 Sublime Text 2 调用 Matplotlib 不行?

python - 正则表达式中([^,]*)和(.*,)的区别?使用Python

python - 从 Flask 下载后删除上传的文件

java - 获取附近实体的最佳方式

java - 如何从似乎无法修复的分号中修复此错误?

java - 尝试在聊天事件(Minecraft、Spigot)上设置玩家显示名称时出错