读取和写入同一个netcat tcp连接

Ale*_*lls 4 bash shell tcp pipe netcat

假设我写入 netcat 连接:

tail -f ${file} | nc localhost 7050 | do_whatever | nc localhost 7050
Run Code Online (Sandbox Code Playgroud)

这里发生的是我们有两个套接字连接,用于执行一些请求/响应。但由于一些原因,这并不理想。

我想要做的是重用相同的连接来读取和写入。

有谁知道如何重用一个 netcat 连接?

Dav*_*zer 6

在 UNIX 中执行此操作的正确方法是使用后管。您可以按如下方式操作:

首先,创建一个管道: mknod bkpipe p

bkpipe这将创建一个名为管道类型的文件。

接下来,弄清楚你需要做什么。这里有两个有用的场景。其中,将主机/地址和端口号替换为适合您的中继的端口。

要将发送到本地端口的数据转发到另一台计算机上的远程端口:

 nc -l -p 9999 0<bkpipe | nc remotehost 7000 | tee bkpipe
Run Code Online (Sandbox Code Playgroud)

要连接到另一台计算机,然后将该连接中的数据中继到另一台计算机:

 nc leftHost 6000 0<bkpipe | nc rightHost 6000 | tee bkpipe
Run Code Online (Sandbox Code Playgroud)

但是,如果您只需要在单个主机内处理基本 IPC,则可以完全放弃 netcat,而仅使用 mknod 创建的 FIFO 管道。如果你用一个进程将东西塞进 FIFO,它们就会挂在那里,直到其他进程将它们读出。