Socat - それは可能ですか?

Socat - それは可能ですか?

socat でポート転送中に、コマンドをリッスンして実行する方法はありますか (接続ごとに)? わかりやすくするために、動作しない例を示します。

socat TCP-LISTEN:8080、reuseaddr、「exec:ls」フォーク tcp:localhost:80

答え1

このような?

socat tcp-listen:8080,reuseaddr,fork system:'ls; exec socat - tcp\:localhost\:80'
  • 1番目のパラメータは、より多くの接続を待機し続ける,fork必要がありますsocat

  • system:exec:シェルインタープリターを使用してコマンドの後に簡単に追加のコマンドを実行するよりもls

  • これは新しいsocatコマンドです

    stdin/stdout をリモートクライアントの出力/入力に接続し、次の宛先に双方向で転送します。:区切り文字 (および他のいくつかの特殊文字)\は、初め socatコマンド。この行が複雑になると、次のようなスクリプトを実行する方が簡単になります。

    socat tcp-listen:8080,reuseaddr,fork exec:/path/to/myscript.sh
    

    /path/to/myscript.sh

    #!/bin/sh
    ls
    exec socat - tcp:localhost:80
    

    execシェルコマンドではオプションですが、シェル内に無駄に残ることを回避できます。

socatまた、スクリプト内で再利用できる独自の変数もいくつかエクスポートします。たとえば、次のように確認できます (接続が確立されている場合)。

$ env - socat TCP-LISTEN:8080,reuseaddr,fork exec:printenv
SOCAT_PID=1057351
SOCAT_PPID=1057284
SOCAT_VERSION=1.7.4.1
SOCAT_SOCKADDR=127.0.0.1
SOCAT_SOCKPORT=8080
SOCAT_PEERADDR=127.0.0.1
SOCAT_PEERPORT=42970

関連情報