设备锁定

设备锁定

一款支持设备级封禁的模组,让服务器管理更加便捷。

概述

Device Lock 是一个客户端-服务端 Fabric 模组,用于实现设备级封禁。客户端收集硬件设备标识符并将其上报给服务器,服务器可按设备 ID 进行封禁。被封禁的设备将被拒绝访问服务器。同时包含虚拟机检测功能——虚拟机客户端的连接将被直接拒绝。

> 注意:此模组为双端必需模组。未安装模组的客户端将被拒绝连接。

必需依赖:Fabric-api

服务器管理命令

所有命令都需要权限等级 3(OP)。

1. 封禁设备

/device lock <deviceId> [reason] [duration]
  • deviceId:设备 ID(32 位十六进制字符串)
  • reason:封禁原因(可选,支持多个单词;包含空格时需加引号)
  • duration:封禁时长(天)(可选;尾部的数字会被自动识别;省略则为永久封禁)

示例:

/device lock ABC123DEF456                      # 永久封禁,无原因
/device lock ABC123DEF456 cheating             # 永久封禁,含原因
/device lock ABC123DEF456 using xray 30        # 封禁 30 天,含原因
/device lock ABC123DEF456 "using X-Ray" 7      # 封禁 7 天,原因含空格并加引号

2. 解封设备

/device unlock <deviceId>

3. 通过玩家 UUID 查询设备 ID

/device client <UUID>

返回指定 UUID 最近使用的设备 ID,以及封禁状态。

4. 查看设备登录历史

/device check <deviceId>

列出所有曾使用此设备登录过的玩家(昵称、UUID、最后登录时间),以及该设备的封禁状态。

5. 列出所有设备

/device list

列出所有已知的设备 ID、封禁状态及相关玩家数量。

数据存储

服务器数据存储在 mods/DeviceLock/ 目录下:

  • bans.json — 封禁记录(设备 ID、原因、封禁时间、到期时间)
  • devices.json — 设备-玩家映射(设备 ID、玩家 UUID、玩家昵称、最后登录时间)

客户端设备标识符收集

客户端收集以下硬件信息,并通过 SHA-256 生成 32 位设备 ID:

  • 物理网络接口 MAC 地址
  • CPU 信息(品牌、型号)
  • 主板 / 系统序列号
  • 操作系统及架构

设备 ID 会在本地缓存,以确保跨会话的稳定性。

虚拟机检测

检测启发式规则(任一匹配即判定为虚拟机):

  • CPU 品牌字符串包含 VMware / VirtualBox / QEMU / KVM / Hyper-V / Xen / Parallels 等
  • MAC 地址 OUI 属于已知虚拟机厂商
  • 系统产品名称 / BIOS 厂商包含虚拟化标识
  • 操作系统特定信号(Linux hypervisor 标志、macOS ioreg、Windows 注册表)

断开连接消息

  • 虚拟机:“此服务器禁止使用虚拟机”
  • 被封禁设备:显示封禁原因、封禁时间和到期时间
  • 未安装模组:提示用户安装 Device Lock