如何使用socat实现base64解码代理?

如何使用socat实现base64解码代理?

目标:双向通信,同时以单向方式解码传入数据

理论:假设有一个代理/服务器侦听端口 8080,需要同时处理多个客户端。传入的数据是 Base64 编码的,应该对其进行解码并转发到另一个端口 ( 80 )。

实践:我想使用 socat 因为它的所有功能(也因为它是我知道的唯一一个可以做所有这些事情的人,如果你知道其他东西也可以):

  • TCP 到 TCP
  • UDP 转 TCP
  • fork和reuseaddr
  • 执行命令

我正在寻找类似的东西:

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(GNUbase64对我来说)缓冲它的输出,并且从它的外观来看,不能被告知不要这样做。openssl base64 -d我的测试也是如此。不过,recode可以告诉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 解码)。

相关内容