You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python检测Minecraft Java版服务器是破解版还是正版验证服

Minecraft Java版服务器正版验证状态检测Python实现

基础前提

  • 标准的MC服务器Ping协议响应中不包含正版验证状态字段,所以mcstatus这类基于Ping协议的工具库原生不支持该功能,仅通过Ping操作无法拿到所需信息
  • 无需完全登录服务器、也无需提供正版账号凭证即可完成判断,仅需要模拟登录流程的前2步交互即可,不会实际进入服务器,也不会触发大多数服务器的登录封禁规则

实现原理

Minecraft Java版登录流程的特征可以直接用于判断正版验证状态:

  1. 和服务器建立TCP连接后,发送握手包切换到登录状态
  2. 发送登录起始包,填写任意随机用户名即可
  3. 读取服务器返回的第一个响应包判断状态:
    • 响应包ID为0x01(加密请求包):服务器开启正版验证
    • 响应包ID为0x02(登录成功包)、或先返回0x03(设置压缩包)后返回登录成功包:服务器关闭正版验证
  4. 拿到结果后直接断开TCP连接即可,无需后续交互

示例代码

import socket
import struct

def check_online_mode(host: str, port: int = 25565, timeout: int = 5) -> bool | None:
    """
    检测Minecraft Java版服务器是否开启正版验证
    返回True为开启正版验证,False为关闭,None为检测失败
    """
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.settimeout(timeout)
    try:
        sock.connect((host, port))
        # 构造握手包
        handshake = b""
        handshake += b"\x00"  # 包ID: 握手
        handshake += b"\x47"  # 协议版本 (759 = 1.19,兼容绝大多数新版本)
        # 写入主机名
        handshake += struct.pack(">B", len(host)) + host.encode("utf-8")
        handshake += struct.pack(">H", port)  # 端口
        handshake += b"\x02"  # 下一个状态: 登录
        # 发送包长度 + 包内容
        sock.sendall(struct.pack(">B", len(handshake)) + handshake)
        # 构造登录起始包
        login_start = b""
        login_start += b"\x00"  # 包ID: 登录开始
        # 随机用户名,长度不超过16字符
        fake_user = "test123"
        login_start += struct.pack(">B", len(fake_user)) + fake_user.encode("utf-8")
        sock.sendall(struct.pack(">B", len(login_start)) + login_start)
        # 读取响应包长度
        length = struct.unpack(">B", sock.recv(1))[0]
        # 读取包内容
        packet = sock.recv(length)
        packet_id = packet[0]
        if packet_id == 0x01:
            return True
        elif packet_id == 0x02 or packet_id == 0x03:
            return False
        else:
            return None
    except Exception as e:
        return None
    finally:
        sock.close()

# 调用示例
if __name__ == "__main__":
    # 测试正版服
    print(check_online_mode("mc.hypixel.net", 25565))  # 输出True
    # 测试本地破解服
    # print(check_online_mode("127.0.0.1", 25565)) # 输出False

注意事项

  • 部分带反机器人、反爬虫机制的服务器可能会阻断请求或返回伪造响应,检测准确率无法保证100%,但兼容绝大多数原版端、Spigot/Paper等主流插件端
  • 如需支持旧版本服务器,可修改代码中的协议版本号为对应版本的数值
  • 如果服务器使用SRV记录做端口转发,需要先完成SRV记录解析再调用检测逻辑

内容的提问来源于stack exchange,提问作者adsgniD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 11:36:03