微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 SOCAT/Bash 进行 HTTP 多端口转发

如何解决使用 SOCAT/Bash 进行 HTTP 多端口转发

我正在尝试设置一个 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,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 调用不返回任何内容。有没有办法返回外部 teesocat 值之一?

解决方法

该问题的一个潜在解决方案是创建一个处理程序脚本,该脚本接受 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 侦听器。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。