
HWID(防小号)
阻止玩家通过硬件ID检查替代账号来绕过封禁。
你在运行服务器时,是否偶尔会遇到一些想赶走的玩家,但他们换了小号并挂 VPN 又回来了?现在,你有机会根据硬件 ID 来识别他们的账号,而不是依赖不可靠的 IP、皮肤或行为!
这个模组做什么
- 这个模组注册了一个空参数,如果你的服务器安装了它,客户端必须带上该参数才能加入。试图从自己的模组包中移除这个模组的玩家将无法加入你的服务器。
- 当玩家加入你的服务器时,客户端会根据玩家的硬件计算一个半唯一的哈希值,并由服务器存储(
<服务器根目录>/config/hwid),同时记录账号的 UUID。
这个模组不做什么
- 不根据硬件 ID 自动封禁玩家
- 不提供多人在游戏内查找硬件 ID 的简单方法
那么如何使用?
请看下面的一些示例脚本,我不想把以下两点埋在代码块中,因为阅读它们很重要。
隐私
虽然硬件 ID 听起来有侵犯性,但它比 IP 地址包含的机密信息少得多。硬件 ID 是在客户端使用 SHA-256 算法计算的,该算法不可逆,因此服务器操作员无法得知使用了哪些硬件。硬件 ID 只能用于区分不同的硬件配置。
局限性
- 硬件 ID 是半唯一的。如果玩家升级或彻底更换了电脑,硬件 ID 将会改变。如果玩家碰巧拥有相同的电脑(例如常见的预装机),也可能具有相同的硬件 ID。在哈希计算中会包含序列号(如果存在),以尽量减少这种情况的发生。
- 那些懂 Java 的“专业捣蛋分子”可以反编译此模组并创建一个“邪恶版”,每次加入时发送随机或特定的硬件 ID。
Bash
#!/bin/bash
destination_path="/home/minecraftserver/config/hwid"
for file in "$destination_path"/*
do
line_count=$(wc -l <"$file") # 统计文件中的行数
if [ "$line_count" -gt 1 ] # 检查行数是否大于 1
then
echo ""; echo "$(basename "$file")" # 打印一个空行和文件名
while IFS= read -r line # 从文件中读取每一行
do
uuid=${line} # 将行内容赋给变量 'uuid'
response=$(curl -s https://sessionserver.mojang.com/session/minecraft/profile/${uuid}) # 向 Mojang API 发送请求以获取配置文件信息
name=$(echo "$response" | jq -r '.name') # 使用 jq 从 API 响应中提取 'name' 字段
echo "${uuid} - ${name}" # 打印 UUID 和对应的名称
done < "$file" # 从文件中读取
fi
done
Python 3
import os, json, requests
search = "" # 设置搜索词,例如:用户名、UUID 或其任意部分
for filename in os.listdir("/home/minecraftserver/config/hwid"): # 遍历指定目录中的每个文件
with open(f"/home/minecraftserver/config/hwid/{filename}", "r") as file: # 以读取模式打开每个文件
lines = file.readlines() # 读取文件的所有行
if len(lines) > 1: # 检查文件中的行数是否大于 1
result = "" # 初始化结果字符串
for line in lines:
uuid = line.strip() # 获取每行的 UUID
response = requests.get(f"https://sessionserver.mojang.com/session/minecraft/profile/{uuid}") # 向 Mojang API 发送 GET 请求以获取玩家配置文件
name = json.loads(response.text)['name'] # 从响应中提取玩家名称
result += f"{uuid} - {name}\n" # 将 UUID 和名称追加到结果字符串中
if search in result: # 检查搜索结果字符串中是否有搜索词
print(result) # 打印结果
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。