Networking

如何使用socat實現base64解碼代理?

  • July 27, 2021

目標:雙向通信,同時以單向方式解碼傳入的數據

理論:假設有一個代理/伺服器監聽 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(對我來說是 GNU base64)緩衝它的輸出,並且從外觀上看,不能被告知不要這樣​​做。我的測試也是如此openssl base64 -drecode不過可以告訴GNU不要使用 GNU 進行緩衝stdbuf

因此,使用socat2,您應該能夠執行以下操作:

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

使用socat1,您可以執行以下操作:

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

這與您的基本相同,但內聯了中間腳本(以及非緩衝 base64 解碼)。

引用自:https://unix.stackexchange.com/questions/660171