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

CS1.6 HLDS服务器收到客户端未知0x58数据包的问题求助

CS 1.6 模拟服务器中的神秘数据包问题

我在模拟CS 1.6服务器时遇到了一个无法处理的神秘数据包:b'\xff\xff\xff\xffX'(原始字节为FF FF FF FF 58)。该数据包不属于标准A2S协议(A2S_INFO=0x54、A2S_PLAYER=0x55等),若忽略它客户端会重复发送,但真实服务器无响应。我抓取其他服务器流量发现同样存在该数据包,服务器均无回复,但我的模拟服务器忽略它时,客户端连接时会持续发送。在Valve服务器查询协议及GoldSrc规范中均未找到相关说明。

相关代码如下:

import socket
import struct
import time
import threading
from random import randint
import os

FAKE_SERVER_IP = "0.0.0.0"
FAKE_SERVER_PORT_START = 27015
FAKE_SERVER_PORT_END = 27115
REDIRECT_IP = "185.97.255.43"
REDIRECT_PORT = 27017

challenge_token = os.urandom(4)
steam_challenge_token = os.urandom(8).hex().encode()

SERVER_ANSWER = f'\xFF\xFF\xFF\xFFS2C_CONNECTION {REDIRECT_IP} {REDIRECT_PORT} {randint(100, 9999999)}'
SERVER_TOKEN_A2S = b'\xFF\xFF\xFF\xFF\x41' + challenge_token
SERVER_TOKEN_STEAM = b'\xFF\xFF\xFF\xFFchallenge ' + steam_challenge_token + b'\n'
SERVER_NAME = "Мой Фейковый Сервер (Редирект)"
MAP_NAME = "de_dust2"
GAME_FOLDER = "cstrike"
GAME_NAME = "Counter-Strike 1.6"
APP_ID = 10
MAX_PLAYERS = 32
BOTS = 0
SERVER_TYPE = b'd'
ENVIRONMENT = b'w'
VISIBILITY = 0
VAC = 1

HEADER_INFO = b'\xFF\xFF\xFF\xFF\x49'
HEADER_CHALLENGE = b'\xFE\xFD\x09'
HEADER_REDIRECT = b'\xFF\xFF\xFF\xFF\x09redirect '
INFO_QUERIES = (
    b'\xFF\xFF\xFF\xFFTSource Engine Query\x00',
    b'\xFF\xFF\xFF\xFF\x54'
)

redirect_packet = (
        b'\xFF\xFF\xFF\xFF'  # Заголовок
        + b'redirect\x00'  # Команда
        + b'185.97.255.43:27017\00'  # Новый адрес
)


def create_info_response():
    response = b'\xFF\xFF\xFF\xFF\x49'  # Заголовок ответа
    response += struct.pack('<b', 17)  # Protocol version
    response += SERVER_NAME.encode('utf-8') + b'\x00'
    response += MAP_NAME.encode('utf-8') + b'\x00'
    response += GAME_FOLDER.encode('utf-8') + b'\x00'
    response += GAME_NAME.encode('utf-8') + b'\x00'
    response += struct.pack('<h', APP_ID)
    response += struct.pack('<bbbb', 0, MAX_PLAYERS, BOTS, SERVER_TYPE[0])
    response += struct.pack('<bb', ENVIRONMENT[0], VISIBILITY)
    response += struct.pack('<b', VAC)
    response += b'\x00'  # No ETV
    return response


def handle_redirect():
    # return HEADER_REDIRECT + f"{REDIRECT_IP}:{REDIRECT_PORT}".encode()
    pass


def run_fake_server(FAKE_SERVER_PORT):
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as sock:
        try:
            sock.bind((FAKE_SERVER_IP, FAKE_SERVER_PORT))
            print(f"Сервер запущен на {FAKE_SERVER_IP}:{FAKE_SERVER_PORT}")

            while True:
                data, addr = sock.recvfrom(1024)
                print(f"Пакет от {addr[0]}:{addr[1]} [{len(data)} байт]")

                print(data)

                if data in INFO_QUERIES:
                    sock.sendto(create_info_response(), addr)
                    print(f"Ответил на A2S_INFO {addr[0]}")
                elif b'getchallenge' in data:
                    if b'steam' in data:
                        sock.sendto(SERVER_TOKEN_STEAM, addr)
                        print("Отправляю токен для стим")
                    else:
                        sock.sendto(SERVER_TOKEN_A2S, addr)
                        print("Отправляю токен для A2C")

                if b'\xff\xff\xff\xffX' in data:
                    # sock.sendto(b'\xff\xff\xff\xffInvalid query', addr)
                    print("Мистический пакет, ignore")
                    sock.sendto(b'\xff\xff\xff\xff', addr)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:13:18