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

无RCON权限时如何获取服务器玩家的SteamID?

获取无RCON权限服务器的在线玩家SteamID方案

以下是几个能避开RCON权限、同时解决重名问题的可行方案:

1. 使用Steam查询协议(A2S_PLAYER)

绝大多数基于Steam的多人游戏都支持Steam Query Protocol,无需服务器权限,只要知道服务器的IP和端口,就能发送A2S_PLAYER请求获取在线玩家的原生SteamID,完全绕开昵称重名的问题。

实现示例(Python)

import socket

def fetch_online_steam_ids(server_ip, server_port):
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    udp_socket.settimeout(5)
    
    # 构造A2S_PLAYER请求包
    request_packet = b'\xFF\xFF\xFF\xFF\x55' + b'\x00' * 4
    udp_socket.sendto(request_packet, (server_ip, server_port))
    
    try:
        response = udp_socket.recv(4096)
        player_list = []
        offset = 10  # 跳过固定响应头长度
        player_count = response[4]
        
        for _ in range(player_count):
            # 跳过玩家昵称的字节流(直到遇到终止符0)
            while response[offset] != 0:
                offset += 1
            offset += 1
            
            # 解析SteamID64并转换为标准STEAM_格式
            steam_id64 = int.from_bytes(response[offset:offset+8], byteorder='little')
            steam_id = f"STEAM_1:{steam_id64 % 2}:{steam_id64 // 2}"
            player_list.append(steam_id)
            
            offset += 12  # 跳过剩余的玩家数据字段(分数、时长等)
        
        return player_list
    except socket.timeout:
        return []

注意:不同游戏的响应字段可能有细微差异,需要根据目标游戏调整解析逻辑,但核心的A2S_PLAYER请求逻辑通用。

2. 游戏客户端本地提取

如果你能亲自连接目标服务器,很多游戏允许在本地客户端控制台执行status命令(无需服务器RCON权限),输出结果会包含所有在线玩家的SteamID。另外,部分游戏会把玩家信息写入本地日志文件,你也可以直接从日志里提取:

  • 比如CS:GO的日志文件路径通常是Steam\steamapps\common\Counter-Strike Global Offensive\csgo\console.log
  • Rust的客户端日志会记录玩家加入时的SteamID信息

3. 社区服务器公开列表(限部分服务器)

如果目标是社区运营的服务器,有些运营方会在官网或论坛展示实时在线玩家列表,其中可能直接附带SteamID。这个方法依赖服务器运营方的设置,通用性不强,但如果有公开渠道可以直接使用。

这些方案都直接获取SteamID,完全不会受玩家重名的影响,满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:16:56