I was trying to emulate a CS 1.6 server but got stuck handling a mysterious packet: b'\xff\xff\xff\xffX'. Observed raw bytes: FF FF FF FF 58 (header FF FF FF FF + single byte X/0x58), but it's not a part of standard A2S protocol (A2S_INFO=0x54, A2S_PLAYER=0x55, etc.). Sent repeatedly by the client if ignored, but no response observed from real servers. I checked traffic to other servers. Same packet FF FF FF FF 58 appears, but servers ignore it (no reply). I tried ignoring it, but client spams it every time when tries to connect. I haven't found anything in Valve’s Server Query Protocol or GoldSrc specs. Source code 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) Continue reading...