目的:着信データを一方向に復号する間の双方向通信
理論:ポート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 -d
(base64
私の場合はGNU)出力をバッファリングすることです。openssl base64 -d
私のテストも同じです。ただし、recode
GNUにバッファリングに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デコード)があります。