服务器列表Ping


Minecraft支持使用一般的端口来查询MOTD、玩家数量、最大玩家数量和服务端版本。不像Query那样,服务器列表ping接口是一直启用的。

1.7

服务端ping的过程在1.7版本改变为一个非握手的兼容方式,但是1.7服务端两者都支持(看下面)

数据包有一个为VarIntJava示例长度前缀。这数据包含如下所示的length bytes

字段名 字段类型 备注
Packet ID VarInt
Data

Data内容基于数据包来决定。

Ping过程

首先必须发送设置握手包状态为1的握手包。握手包的展示类型如下

包标识符 字段名 字段类型 备注
0x00 Protocol Version VarInt 4表示1.7.2
Server Address (hostname or IP) String A string is a VarInt length followed length bytes which make an UTF-8 string
Server Port Unsigned Short A short has 2 byte size. It should be read in Big-endian order
Next state VarInt 1 for status

后面跟着一个状态请求包。请求包里没有字段。

包标识符 字段名 字段类型 备注

服务器应该会回一个状态回复

包标识符 字段名 字段类型 备注
0x00 JSON Response String A string is a VarInt length followed length bytes which make an UTF-8 string
  1. {
  2. "version": {
  3. "name": "1.7.9",
  4. "protocol": 5
  5. },
  6. "players": {
  7. "max": 100,
  8. "online": 5,
  9. "sample": [
  10. {
  11. "name": "thinkofdeath",
  12. "id": "4566e69f-c907-48ee-8d71-d7ba5aa00d20"
  13. }
  14. ]
  15. },
  16. "description": {
  17. "text": "Hello world"
  18. },
  19. "favicon": "data:image/png;base64,<data>"
  20. }

description字段和聊天的格式相同 samplefavicon部分可选 favicon的格式为Base64编码的png图像,而且需要在前面加上’data:image/png;base64,’

客户端会发送另一个包来帮助计算服务器延迟但是你想要的信息就是上面这些啦。 然后客户端将会发送一个包含之前的ping的Ping

包标识符 字段名 字段类型 备注
0x01 Time Long 长度需为8字节,而且要以大端字节序读取
服务器将会发送相同的数据包然后关闭连接。

示例

Java Python PHP

1.6及更旧版本

因为篇幅限制等原因故未翻译 详情请看原文 http://wiki.vg/Server_List_Ping