socatのsedとポート転送?

socatのsedとポート転送?

これがここに属するのか、StackOverflow、SuperUserなのかはわかりません。

リバースTelnetサーバーを実行しているデバイスがあり、そのデバイスにデータを送受信できる必要があります。このようにsocatを実行し、telnetを介してポート8002に接続すると使用できます。

sudo socat TCP-LISTEN:8001 TCP-LISTEN:8002

ただし、送信してはいけない情報を送信するため、sedを使用してデータをフィルタリングしたいと思います。私はこの通信を双方向に維持したいと思います。つまり、localhost:8002でTelnetに入力した内容はすべてlocalhost:8001に送信され、その逆も同様です。

以下を含むbashスクリプトを試してみました。

#!/bin/bash
sed (my regex here) | socat - TCP-LISTEN:8002

次に、次を実行します。

sudo socat TCP-LISTEN:8001 SYSTEM:./replace.sh

しかし、これはTelnetコンソールに何も出力しません。私もEXEC:同じことを試しましたが、何も起こりませんでした。

私も試しました:

sudo socat TCP-LISTEN:8001 "SYSTEM:'sed (my regex here)' || TCP-LISTEN:8002"

効果はありません。

答え1

あなたはポイントを見逃していますfork。コマンドラインは次のとおりです。

socat TCP-LISTEN:8002,fork SYSTEM:/path/to/replace.sh

/path/to/replace.shファイルには実行権限があり、次の内容を含めることができます(これにより、すべての「a」が「b」に変わります)。

#!/bin/bash

sed -u 's/a/b/g'

sed を使用する場合は、バッファ-uリングされていないフラグを追加することが重要です。

関連情報