socatを使用してbase64デコードプロキシを実装する方法は?

socatを使用してbase64デコードプロキシを実装する方法は?

目的:着信データを一方向に復号する間の双方向通信

理論:ポート8080でリッスンするプロキシ/サーバーがあり、複数のクライアントを同時に処理する必要があるとします。着信データはBase64でエンコードされ、デコードされて別のポート(80)に転送される必要があります。

練習:私はsocatのすべての機能のために使用したいと思います(また、このすべての機能を実行できる唯一の製品なので、他のことを知っていれば動作します)。

  • TCPからTCPへ
  • UDPからTCPへ
  • フォークと再利用アドレス
  • 注文の実行

私は似たようなものを探しています:

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

/path/to/myscript.shを使用する:

#!/bin/sh
exec base64 -d | socat - tcp:localhost:80

しかし、残念ながらこれは完全に双方向ではないため、私の場合は機能しません。

ベストアンサー1

あなたの主な問題は、おそらくbase64 -dbase64私の場合はGNU)出力をバッファリングすることです。openssl base64 -d私のテストも同じです。ただし、recodeGNUにバッファリングにGNUを使用しないように指示することは可能ですstdbuf

したがってsocat、2の場合は、次のことができるはずです。

socat tcp-listen:8080,fork,reuseaddr \
      'exec1:stdbuf -o0 recode /b64 % nop | tcp:localhost:80'

1を使用すると、socat次のことができます。

socat tcp-listen:8080,fork,reuseaddr \
      'system:"stdbuf -o0 recode /b64 | socat - tcp:localhost:80"'

これは本質的にあなたと同じですが、中間スクリプトインライン(およびバッファリングされていないBase64デコード)があります。

おすすめ記事