ソケットフォワーダをサーバーにする方法は?

ソケットフォワーダをサーバーにする方法は?

私はソケットサーバーを起動し、そのソケットポートからの着信要求を別の内部ポートに転送するツールを探しています。

socat私は通常ソケットポートを転送することが可能であることを発見しました。

socat tcp-l:8080,fork,reuseaddr tcp:127.0.0.1:12345

これにより、「公式」ポートが8080内部ソケットポートに正常に転送されます12345

しかし、私の問題は、クライアントがポートに接続できる必要があることです。8080 でも12345現在内部ポートが利用できない場合。

socatの問題は、実際のソケットサーバーを作成するようには見えず、ポートを再マップし、ポートをLISTENING状態に設定することです。

私はクライアントに「成功的に接続しました。入力内容を送ってください」と伝えるツールを探しています。ローカルポートが12345利用できない場合、クライアントからデータを送信しようとするとエラーが発生します。

したがって、ローカルアプリケーションがダウンしても、クライアントはまだその公式ウェブサイトに接続できる必要があります。

独自のツールを作成せずにこれを達成できますか?

答え1

次のように起動できます。

socat tcp-l:8080,fork,reuseaddr \
SYSTEM:'nc -z 127.0.0.1 22 >/dev/null && exec nc 127.0.0.1 22 || echo "Fail!"'

tcp:127.0.0.1:12345したがって、shell_fragment / scriptを生成する必要はありません。

Check, if 127.0.0.1 12345 responds
  if yes, connect there and pass over the fds (exec)
  if no, echo "Service@12345 is down"
    Optional: don't exit, but enter a while loop
      Try reaching port 12345, then connect eventually

オプションの部分については、'echo "Fail!"を次のように置き換えます。

{ echo "SomeMsg; MoreCommands; }

私が助けることができます。調整に役立つ場合は、問題のある情報でQを更新してください。

答え2

ncatはあなたが行くべき場所に連れて行きます。ポートでリッスンしてパケットを受け入れます。例をご覧ください。

 ncat -l localhost 8080

関連情報