假设 socat 监听 TCP:8888。客户端 A 和客户端 B 都连接到它。我应该使用什么命令将客户端A发送的流量转发给客户端B,客户端B发送给客户端A?我知道
socat TCP4-LISTEN:8888 TCP4-LISTEN:8889
可以在两个端口之间转发。所以我可以将客户端A和客户端B分别连接到8888和8889来实现这一点。但是有没有办法使用单个端口呢?
我还发现使用
socat TCP4-LISTEN:8888 TCP4-LISTEN:8889
我必须先将一个客户端连接到8888,然后再将另一个客户端连接到8889。如何使其在两个端口中的任何一个端口接受连接?
socat
默认情况下无法识别连接的客户端。
如果您通过 socat
和 clientA
监听端口,并且 ClientB
连接到它,那么如果您从 socat 终端发送相同的消息,客户端将被随机识别。
意味着有时clientA
有时ClientB
会收到消息。这是 socat
的默认行为。
因为socat TCP 不是有状态连接。 socat
中没有套接字会话标识符,nc
也没有。
但是如果
clientB
在内网中,您可以将收听流量转发到那里。
对我来说,以下命令可以完成您想要的操作(在 Linux 上):
socat TCP4-LISTEN:8888,reuseaddr TCP4-LISTEN:8888,reuseaddr