![使用 netcat 和命名管道的桥接/隧道](https://linux22.com/image/178983/%E4%BD%BF%E7%94%A8%20netcat%20%E5%92%8C%E5%91%BD%E5%90%8D%E7%AE%A1%E9%81%93%E7%9A%84%E6%A1%A5%E6%8E%A5%2F%E9%9A%A7%E9%81%93.png)
我有两个设备(A 和 B),它们应该通过服务器 (S) 间接相互通信:
/---\ /---\ /---\
| A | <===> | S | <===> | B |
\---/ \---/ \---/
A和B可以独立地连接、断开和重新连接到S。
我的方法是使用命名管道作为缓冲区,并使用两个 netcat 实例分别为 A 和 B 打开端口,将接收到的内容存储到一个管道中,并将另一管道的内容发回。
我使用以下命令来让它运行:
mkfifo a2b
mkfifo b2a
nc -n -u -lkvp 5050 < b2a | tee a2b &
nc -n -u -lkvp 5051 < a2b | tee b2a &
选项说明:
-n
:避免名称服务器不可用的问题-u
:使用UDP-l
: 开始听-k
:断开后保持打开状态-v
: 冗长| tee fifo
:将接收到的字符输出到stdout并写入fifo
当我与 A 连接到S:5050
并与 B连接S:5051
(例如,nc -uv S 5050
用于 A)并发送一些字符时,它们会显示在 S 的输出上,但不会被 B 接收(反之亦然)。
我究竟做错了什么?
我想要实现的目标的正确术语是什么 - 是桥接、隧道、转发、中继?