web-dev-qa-db-ja.com

DebianSqueezeで着信TCPトラフィックを複製する

単一のポートで大量の着信TCPトラフィックを受け入れる自作サーバーをテストする必要があります。プロトコルも自作です。

テストの目的で、このトラフィックを次の両方に送信したいと思います:-本番サーバー(たとえば、ポート12345でリッスン)-テストサーバー(たとえば、ポート23456でリッスン)

私のクライアントアプリは「ダム」です。データを読み戻すことはなく、サーバーはとにかく応答することはありません。サーバーは接続のみを受け入れ、統計計算を行い、生データと計算データの両方を保存/転送/サービスします。

実際、クライアントアプリとハードウェアは非常に単純なので、両方のサーバーでストリームを送信するようにクライアントに指示する方法はありません...そして「偽の」クライアントを使用するだけでは十分ではありません。

最も簡単な解決策は何でしょうか?もちろん、受信データをコピーして、クライアントになりすましてテストサーバーに送り返す中間アプリを作成することもできます。

私はSqueezeを実行している単一のサーバーを持っており、それを完全に制御しています。

返信ありがとうございます。

6

何も書きたくない場合は、netcatが1つのポートでリッスンし、teeにパイプし、teeが2つの名前付きパイプに行き、次にnetcatがprodおよびtestサーバーポートに行きますか?

何かのようなもの:

mkfifo /tmp/prodpipe
mkfifo /tmp/testpipe
nc -l 9999 -k | tee /tmp/prodpipe | tee /tmp/testpipe

そして、別々の端末で:

cat /tmp/prodpipe | nc 127.0.0.1 12345

そして

cat /tmp/testpipe | nc 127.0.0.1 23456

そして、クライアントはポート9999で吐き出します。

7
cjc

トラフィックがUDPの場合、これはiptablesで非常に簡単に実行できるはずです。

IptablesのTEEターゲットが利用可能であり、基本的にパケットのコピーを別の宛先に送信できます。

デフォルトではカーネルに組み込まれていませんが、ソースとツールは xtables-addons-source パッケージで入手できます。

1
Zoredache