【问题标题】:Python Parse Minecraft PacketPython 解析 Minecraft 数据包
【发布时间】:2012-03-25 01:44:51
【问题描述】:

我有一个脚本可以连接到 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

任何帮助都将不胜感激,如果不够清楚,请不要犹豫。

【问题讨论】:

  • 不够清楚。请包含代码示例。
  • 更好吗?我添加了一些代码,尽管实际上并没有太多需要。大多数必需的信息都在 wiki 页面中。

标签: python protocols minecraft


【解决方案1】:

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

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

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

【讨论】:

  • 这不太对,但我意识到我的问题并不清楚,它帮助我解决了如何很多解包。
  • 哦,你认为我犯了什么错误?我似乎找不到它。 ://
  • 记住 %s 被替换为字符串 len,它最终会变成这样:>bih20shiibBB。也是客户端>服务器数据包。
猜你喜欢
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 2012-08-28
  • 2019-04-09
  • 2015-02-02
  • 2012-12-21
相关资源
最近更新 更多