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 ends
和 This ends too
都在制作时打印端口 8080 上的调用),外部 socat
调用不会 return 任何东西。有没有办法 return 外部 socat
的 tee
值之一?
该问题的一个潜在解决方案是创建一个处理程序脚本,该脚本接受 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 侦听器。
我正在尝试设置一个 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 ends
和 This ends too
都在制作时打印端口 8080 上的调用),外部 socat
调用不会 return 任何东西。有没有办法 return 外部 socat
的 tee
值之一?
该问题的一个潜在解决方案是创建一个处理程序脚本,该脚本接受 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 侦听器。