【问题标题】:HTTP Multiple Port Forwarding with SOCAT/Bash使用 SOCAT/Bash 进行 HTTP 多端口转发
【发布时间】:2021-07-21 04:29:47
【问题描述】:

我正在尝试设置一个 shell 脚本来侦听端口,转发到 n 个不同的 IP 地址,并返回其中一个 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 调用终止(因为在端口 8080 上进行调用时 This endsThis ends too 都被打印),但外部 socat调用不返回任何内容。有没有办法为外部 socat 返回其中一个 tee 值?

【问题讨论】:

    标签: bash socat


    【解决方案1】:

    该问题的一个潜在解决方案是创建一个处理程序脚本,该脚本接受 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被命中时,结果被发送到本地主机端口80008001被调用。端口8000 的输出返回给TCP 监听器。

    【讨论】:

      猜你喜欢
      • 2020-03-29
      • 2016-04-19
      • 1970-01-01
      • 2016-02-04
      • 2014-06-17
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 2012-07-02
      相关资源
      最近更新 更多