使用 netcat/socat 桥接两个端口

问题描述 投票:0回答:2

我需要通过 TCP 从 ModBus 设备(modbus 从站)获取数据,但该设备必须作为 TCP 客户端公开(在这种情况下,它消耗的电池要少得多)。这意味着两台机器都必须作为 TCP 客户端连接到第三台机器,我必须在两个端口之间建立一座桥,就像这样

[modbus slave] -> [4444:bridge:5555] <- [modbus master]

我确实在桥接机器上用netcat尝试过

$ /bin/netcat -lk 5555 | /bin/netcat -lk 4444

它的工作原理是:我可以用我的从设备连接到 4444,用我的主设备连接到 5555,并且流量从主设备流向从设备。然而,我没有看到任何相反方向的交通。在这种情况下如何构建双向桥梁?

提前非常感谢!

network-programming port modbus netcat bridge
2个回答
3
投票

您可以使用这样的 fifo 运行 2 个 netcat 实例:

# mkfifo fifo
# nc -l -p 4444 < fifo | nc -l -p 5555 > fifo

您也可以仅使用 socat 来完成。

# socat TCP4-LISTEN:4444 TCP4-LISTEN:5555

顺便说一句,我想运行客户端(需要保持连接)比服务器(仅等待传入连接)消耗更多的电量。也许我错过了一些其他设计考虑。


0
投票

您可以让连接在任一端断开连接后自动恢复(以便客户端可以立即重新连接)。通过设置 -k 标志来做到这一点。 另请注意,您可能希望使用 -m 参数将两侧的连接数限制为 1。否则,您可以将数千个客户联系在一起! 综合起来:

while [ 1 ]; do nc -lk -p 4444 -m 1 < fifo | nc -lk -p 5555 -m 1 > fifo; sleep 5; done
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.