0

問題
私の友人の中には、最大4人のプレーヤーが参加するゲームをプレイする人がいます。私は、5人目の人が実際にゲームに参加していなくても、ゲームで何が起こっているかを監視できるプログラムを作成しようとしています。

背景
ゲームのマルチプレイヤー部分は、次のように機能します
。1人のプレイヤーが「ホスト」として指定されます。他のすべてのプレーヤーは、ホストのIPアドレスを入力してホストに接続します。ホストのマシンは、ゲームのAIを制御する責任があります。ゲームでイベントが発生すると、ゲームのホストコピーが、他の各プレーヤーのゲーム(クライアント)にイベントを送信します。クライアントプレーヤーがアクションを実行すると、ゲームはそのアクションをホストに送信し、ホストはそれを残りのプレーヤーに送信して、任意のプレーヤーによるアクションが他のすべてのプレーヤーに表示されるようにします。ホストとクライアントはすべて、ゲームの構成ファイルで事前定義された単一のTCPポートを利用します(例:ポート58282)。ゲームはリアルタイムストラテジーゲームです(ターン制ではありません)。

制約
1.ゲームの仕組みは変更できません。これはプリコンパイルされており、マルチプレイヤーの仕組みを変更する方法はありません。2.ゲームはTCPを使用してサーバーとクライアント間の通信を行います

質問
ホストまたはクライアントコンピューターのいずれかで実行されている別のプログラムでゲームのポートを(ゲームの進行中に)リッスンする方法はありますか?TCPはIPアドレスごとにポートごとに1つのソケットしか許可しないことを知っているので、ゲームと別のプログラムの両方が同時に同じポートをリッスンするのは問題があります。ゲームの前に外部アプリを起動し、アプリにゲームのポートをリッスンさせると仮定すると、アプリがゲームポートを介してホストの音を聞き、その情報を取得/コピーして、ゲームに転送する方法はありますか?(地元の中間者攻撃のようなソート)

究極の質問

これは制約を考えると可能ですか?私はそれを最善の方法で行っていますか?

4

1 に答える 1

1

最初に 2 番目の質問に答えます。あなたは正しい道を進んでいません。正しい方法は、サーバーに何らかの機能を実装して、別の「クライアント」が別のポートに接続して定期的に統計を収集できるようにすることです。

アプリがゲーム ポート経由でホストを受信し、その情報を取得/コピーしてからゲームに転送する方法はありますか?

ミットをする必要はありません。tcpdumpまたはのようなユビキタスなものを使用して、単純なパケット キャプチャを実行できますwireshark。たとえば、その TCP ポートのすべてをキャプチャするには、次のようにします。

tcpdump -n -w capture.pcap tcp port 58282

他のアプリケーションは、あなたがデータをキャプチャしたことを決して知りません。

于 2013-02-15T21:59:11.693 に答える