我正在寻找一种工具来启动套接字服务器,并将该套接字端口上的传入请求转发到另一个内部端口。
我发现socat
一般能够转发套接字端口:
socat tcp-l:8080,fork,reuseaddr tcp:127.0.0.1:12345
这将成功地将“官方”端口转发8080
到内部套接字端口12345
。
但是:我的问题是客户端应该能够连接到端口8080
甚至如果内部端口12345
当前不可用。
socat 的问题在于,它似乎没有创建真正的套接字服务器,而只是重新映射端口,并将端口置于 LISTENING 状态。
我正在寻找一种工具,告诉客户端“您已成功连接,请将您的输入发送给我”。如果我的本地端口12345
不可用,客户端在尝试发送数据时应该会收到错误。
因此,如果我的本地应用程序出现故障,客户端仍然应该能够建立与该官方网站的连接。
无需编写自己的工具就可以实现这一点吗?
答案1
你可以从以下开始:
socat tcp-l:8080,fork,reuseaddr \
SYSTEM:'nc -z 127.0.0.1 22 >/dev/null && exec nc 127.0.0.1 22 || echo "Fail!"'
因此,您不必tcp:127.0.0.1:12345
生成 shell_fragment/script,或多或少:
Check, if 127.0.0.1 12345 responds
if yes, connect there and pass over the fds (exec)
if no, echo "Service@12345 is down"
Optional: don't exit, but enter a while loop
Try reaching port 12345, then connect eventually
对于可选部分,只需替换 'echo "Fail!"从上面与
{ echo "SomeMsg; MoreCommands; }
我可以提供帮助,如果您需要帮助适应这一点,只需用您遇到困难的信息更新您的 Q
答案2
ncat 将带您到达您需要去的地方。它侦听端口并接受数据包。参见示例:
ncat -l localhost 8080