Networking
如何使用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
但這很遺憾不適合我的情況,因為不是完全雙向的
您的主要問題可能是
base64 -d
(對我來說是 GNUbase64
)緩衝它的輸出,並且從外觀上看,不能被告知不要這樣做。我的測試也是如此openssl base64 -d
。recode
不過可以告訴GNU不要使用 GNU 進行緩衝stdbuf
。因此,使用
socat
2,您應該能夠執行以下操作:socat tcp-listen:8080,fork,reuseaddr \ 'exec1:stdbuf -o0 recode /b64 % nop | tcp:localhost:80'
使用
socat
1,您可以執行以下操作:socat tcp-listen:8080,fork,reuseaddr \ 'system:"stdbuf -o0 recode /b64 | socat - tcp:localhost:80"'
這與您的基本相同,但內聯了中間腳本(以及非緩衝 base64 解碼)。