SOCAT/Bash 的 HTTP 多端口转发

HTTP Multiple Port Forwarding with SOCAT/Bash

我正在尝试设置一个 shell 脚本来侦听端口,转发到 n 个不同的 IP 地址,以及 return 结果API 个电话之一。

如果我有一个 IP 地址,解决方案很简单

socat TCP4-LISTEN:8080,fork,reuseaddr,crlf tcp4:127.0.0.1:8000

其中 REST API 在端口 8000 上,而我正在侦听端口 8080。

对于多 IP 情况,似乎我需要在某种能力上使用 tee 来拆分成多个 API 调用,例如:

socat TCP4-LISTEN:8080,fork,reuseaddr,crlf - | tee \
      >(socat - tcp4:127.0.0.1:8000 | cat; echo "This ends") \
      >(socat - tcp4:127.0.0.1:8000 | cat; echo "This ends too")
      >/dev/null

虽然我能够从内部打印出 API 调用并且内部 socat 调用终止(因为 This endsThis ends too 都在制作时打印端口 8080 上的调用),外部 socat 调用不会 return 任何东西。有没有办法 return 外部 socattee 值之一?

该问题的一个潜在解决方案是创建一个处理程序脚本,该脚本接受 TCP 侦听输入并对其进行处理。

router.sh:

socat TCP-LISTEN:8080,fork,reuseaddr EXEC:"bash -e ./route_handler.sh"

route_handler.sh:

tee >(socat - TCP4:127.0.0.1:8001 >> /dev/null) | socat - TCP4:127.0.0.1:8000

当端口 8080 被命中时,结果将发送到本地主机端口 8000 并调用 8001。端口 8000 的输出返回给 TCP 侦听器。