lihelh
本帖最后由 lihelh 于 2020-10-9 00:24 编辑

编程小白,第一次发编程版的帖子(证明了我的六级号是水出来的)大佬多多关照

前言

  • 一个风和日丽的上午,我忽然想在官网和QQ群里加个获取服务器在线玩家的小功能
  • 于是这个小项目就诞生了

思路开始实现
这个程序使用了socket库来发送请求,struct库来解析数据包(均可pip install)


    1. 握手部分
     其实握手没有那么难,看完wiki之后 可以写出下面的伪代码
  1.                # 握手包 - 用包ID开头 (null byte)

  2.                 byts = self.ID

  3.                 # 编码方法版本(https://wiki.vg/Protocol_version_numbers):

  4.                 byts = byts + self._encode_varint(data[3])

  5.                 # 编码服务器地址:

  6.                 host_bytes = data[4].encode("utf8")

  7.                 byts = byts + self._encode_varint(len(host_bytes)) + host_bytes

  8.                 # 编码服务器端口:

  9.                 byts = byts + struct.pack(">H", data[5])

  10.                 # 编码下一个状态:

  11.                 byts = byts + self._encode_varint(1)

  12.                 # 编码长度:

  13.                 byts = self._encode_varint(len(byts)) + byts

  14.                 return byts
复制代码
    2. 发送ServerListPing请求

      这里就更简单了
  1.    return self._encode_varint(len(self.ID)) + self.ID
复制代码

    3. 加入亿点点细节

成品
整个项目也耗费了不少精力,希望转载能带下原链接 谢谢啦
mstool.py.txt (5.03 KB, 下载次数: 30)


laoshanghao
MCBBS有你更精彩~