Server Query Fake Player Count(サーバークエリのフェイクプレイヤー数)

Tool

概要

このリポジトリは、Steamのサーバークエリ(A2S)プロトコルで返されるプレイヤー数を改変してクライアントに返す“フェイクプレイヤーカウント”用のプロキシです。A2S_INFOとA2S_PLAYERという、サーバー情報やプレイヤー一覧に関するパケットのみを書き換え、その他のパケットはそのまま転送します。もともとはDayZ向けに作られましたが、A2S互換のゲームであれば応用できます。実行はGoで実装されており、軽量で扱いやすく、ネットワークの中継点として動作させるだけで利用可能です。

GitHub

リポジトリの統計情報

  • スター数: 62
  • フォーク数: 3
  • ウォッチャー数: 62
  • コミット数: 30
  • ファイル数: 7
  • メインの言語: Go

主な特徴

  • A2S_INFOおよびA2S_PLAYERパケットのレスポンスを改変して報告プレイヤー数を操作
  • それ以外のパケットは透過的に中継し、プロトコル互換性を維持
  • DayZ用に作成されているが、A2S互換の他タイトルでも利用可能
  • Goによるシンプル実装で単一バイナリ化しやすい

技術的なポイント

本プロジェクトの核心は、Steamのゲームサーバーとクライアント間に割り込んでパケットを解析・再構成するプロキシ処理にあります。A2S(Source Engine Server Queries)プロトコルは主にUDPベースの問い合わせ/応答で、サーバーの基本情報(A2S_INFO)や接続プレイヤーの一覧(A2S_PLAYER)を返します。本ツールはこれら特定レスポンスのペイロードをデコードして当該フィールド(例:プレイヤー数やプレイヤー配列)を書き換え、再度正しいパケットフォーマットでクライアントへ返却します。

実装言語にGoを選んでいるため、netパッケージを用いたUDPソケット処理や、goroutineによる軽量な並列処理が期待できます。プロキシは「受信 → 判定(パケット種別)→ 必要に応じて書き換え → 送信」というフローを取り、書き換えを行わないパケットはオーバーヘッドを最小にして転送します。パケット改変時はヘッダや長さ、エンコーディング(バイト順や文字列エンコーディング)を保持する必要があり、チャレンジレスポンスやシーケンス番号の扱いにも注意が必要です。

UDPはコネクションレスであるため、NATやルーティングの影響、パケットロスへの対処(再送やタイムアウトの設計)を考慮する必要があります。さらに、ゲームやSteamのアップデートでプロトコル仕様が変わると破綻する恐れがあるため、パケットの構造検証や互換性チェックを盛り込むと堅牢性が高まります。また、こうした改変はサービス利用規約やコミュニティ規範に抵触する可能性があるため、利用は自己責任で行う旨の注意喚起がREADMEにも想定されます。

ソースコードは比較的コンパクトで、解析ロジックを中心に構成されており、Goでのネットワークプログラミングやバイナリプロトコルの扱いを学ぶ参考にもなります。設定方法や実行フローはREADMEのUsage節に記載されているため、実環境で試す際はそれを参照してください(例:待ち受けポートの指定やターゲットサーバーの設定など)。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .github: dir
  • .gitignore: file
  • Makefile: file
  • README.md: file
  • go.mod: file

…他 2 ファイル

まとめ

A2Sプロトコルを狙った軽量なGo製プロキシで、手早く表示上のプレイヤー数を偽装したい場面に向くツールです(50字程度)。

リポジトリ情報:

READMEの抜粋:

Server query fake player count

This script allows you to change how many players are reported to Steam as online. It modifies the A2S_INFO and A2S_PLAYER packets and passes all other packet types through untouched.

The project was originally made for DayZ, but may work with other titles, since the protocol is the same.

sequenceDiagram

Client->>Faker: SSQ request
Faker->>Game: SSQ request
Game->>Faker: SSQ response
Faker->>Client: SSQ response modified

Usage

| Parameter …