bash - 读取和写入相同的 netcat tcp 连接

标签 bash shell tcp pipe netcat

假设我写入一个 netcat 连接:

tail -f ${file} | nc localhost 7050 | do_whatever | nc localhost 7050

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

我想做的是重用相同的连接,进行读取和写入。

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

最佳答案

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

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

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

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

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

 nc -l -p 9999 0<bkpipe | nc remotehost 7000 | tee bkpipe

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

 nc leftHost 6000 0<bkpipe | nc rightHost 6000 | tee bkpipe

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

关于bash - 读取和写入相同的 netcat tcp 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49953206/

相关文章:

bash - 使用 xargs 显示 git 别名中的命令

python - 如何从简单的 CGI python 服务器运行 shell 脚本?

linux - git clone 和 cd 进去

bash - 在没有循环的情况下多次对文件进行分类

shell - 从 shell 脚本函数返回单个值

linux - find 命令重命名每个文件和目录。最大深度 1

linux - 使用 SOCAT 记录在端口上收到的消息

networking - MSS 和 tcp 窗口大小

linux - 如何通过屏幕中的远程机器启动 nc

tcp - TCP ACK 和下一个数据包之间的延迟