ネットワーク構造
一般的な大学ネットワーク。異なるドミトリーはLAN経由で接続されています。寮のすべてのホストは同じゲートウェイを使用します。他のドミトリーの独自のIPを使用して、他のドミトリーのホストと直接通信できます。
私のクエリ
私はWineを介してLinuxでDota / Warcraftを実行します。 LANゲームの場合、Warcraftは同じゲートウェイを使用しているホスト(私の場合はドミトリールームのホスト)によって作成されたサーバーのみを自動的に検出します。他のすべての人には、次のツールがあります。バトルネットワークここでは、ホスティングサーバーのIPを追加し、ワークラフトに正しく表示されるようにすることができます。残念ながら、このツールはワインを通しては機能しません。しかし、私の考えでは、概念が単純に見え、簡単に実装できると思います。ポート6112で特定のIPをリッスンするにはアプリが必要です(そうですか?)。ヘルプ/手がかりはありますか?
答え1
まず、あなたは他のホテルの所有者と直接通信することなく、少なくとも1つのゲートウェイ(2つの可能性が高い)、つまりあなたとそのゲートウェイを介して間接的に通信します。ゲートウェイはブロードキャストドメインの終わりを示します。これは、ブロードキャストがゲートウェイから離れないことを意味します。しかし、ゲーム、特にウォークラフトでは、サーバーを知らせるためにブロードキャストを使用します。これが他のホステル所有者が作成したサーバーを見ることができない理由です。そのサーバーの放送を受信できないからです。
奇妙なことに、この問題を直接処理していませんでしたが、推測して試してみることができるものは次のとおりです。
実際にこの問題を解決してくれるBattleLanのようなものがありますが、放送メッセージには「andにオープンゲームがあります」という形の情報が含まれているようです。ゲームクライアントはこのブロードキャストを受信した後、サーバーに接続して他の問題を処理します。
確認するには、wireshark
同じツールを使用するか、tcpdump
ローカルネットワークインターフェイスカードからブロードキャストトラフィックを受信してWarcraftゲームを開くようにすることができます。番組は放送をキャプチャして表示します。これらのパケットは255.255.255.255またはサブネットの最高のIPで送信される可能性が高く、まだ255で終わることがあります。 IPパケットにはTCPではなくUDPセグメントを含める必要がありますが、まだポート6112に送信できます。
概念的にすべきことは、これらのIPブロードキャストパケットからUDPセグメントを取得し、IP(ユニキャスト)を介してサーバーのブロードキャストドメイン外のリモートクライアントに送信することです。ご存知のように、IPユニキャストはゲートウェイを超えてリモートコンピュータに転送されます。
Warcraftに実装されているプロトコルの複雑さに応じて、実際にメッセージをキャプチャ、抽出、送信する必要があります。
すでに実装があると思います。ここ。それを適応/試してみて、それがあなたにどのような影響を与えるかを確認してください。