如何创建套接字转发器作为服务器?

如何创建套接字转发器作为服务器?

我正在寻找一种工具来启动套接字服务器,并将该套接字端口上的传入请求转发到另一个内部端口。

我发现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

相关内容