读取和写入相同的 netcat tcp 连接
Read and write to the same netcat tcp connection
假设我写入一个 netcat 连接:
tail -f ${file} | nc localhost 7050 | do_whatever | nc localhost 7050
这里发生的是我们有两个套接字连接,要做一些事情 request/response。但出于某些原因,这并不理想。
我想要做的是重用相同的连接,进行读取和写入。
有谁知道如何只重用一个 netcat 连接?
是的,我认为最简单的方法就是使用这个方法:
tail -f ${file} | nc localhost 7050 | do_whatever > ${file}
只需写回同一个文件(它是 'named pipe')。
只要您的消息小于大约 500 字节,它们就不会交错。
在 UNIX 中执行此操作的正确方法是使用反向管道。您可以这样做:
首先,创建一个管道:mknod bkpipe p
这将创建一个名为 bkpipe
的管道类型文件。
接下来,弄清楚你需要做什么。这里有两个有用的场景。在其中,将 hosts/addresses 和端口号替换为适合您的中继的端口。
将发送到本地端口的数据转发到另一台机器上的远程端口:
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,它们会一直挂在那里,直到其他东西读出它们。
对于初学者来说,使用 ncat 作为单行代码更容易理解 ;)
prompt$> ncat -lk 5087 -c ' while true; do read i && echo [You entered:] $i; done'
使用 telnet(或 nc)连接到本地主机端口 5087,您键入的所有内容都会回显给您;)
使用 -lk 选项进行侦听和 keeping/maintaining(多个)连接。
您可以像这样用它制作一个 bash 脚本,使用反斜杠但它会调用多个 bash,资源使用并不便宜:
#!/bin/bash
# title : ncat-listener-bidirectional.sh
# description : This script will listen for text entered by a client
# like for instance telnet
# and echo back the key strokes
#
ncat -lk 5087 -c ' \
#!/bin/bash \
while true; do \
read i && echo [You entered:] $i; \
done'
假设我写入一个 netcat 连接:
tail -f ${file} | nc localhost 7050 | do_whatever | nc localhost 7050
这里发生的是我们有两个套接字连接,要做一些事情 request/response。但出于某些原因,这并不理想。
我想要做的是重用相同的连接,进行读取和写入。
有谁知道如何只重用一个 netcat 连接?
是的,我认为最简单的方法就是使用这个方法:
tail -f ${file} | nc localhost 7050 | do_whatever > ${file}
只需写回同一个文件(它是 'named pipe')。
只要您的消息小于大约 500 字节,它们就不会交错。
在 UNIX 中执行此操作的正确方法是使用反向管道。您可以这样做:
首先,创建一个管道:mknod bkpipe p
这将创建一个名为 bkpipe
的管道类型文件。
接下来,弄清楚你需要做什么。这里有两个有用的场景。在其中,将 hosts/addresses 和端口号替换为适合您的中继的端口。
将发送到本地端口的数据转发到另一台机器上的远程端口:
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,它们会一直挂在那里,直到其他东西读出它们。
对于初学者来说,使用 ncat 作为单行代码更容易理解 ;)
prompt$> ncat -lk 5087 -c ' while true; do read i && echo [You entered:] $i; done'
使用 telnet(或 nc)连接到本地主机端口 5087,您键入的所有内容都会回显给您;) 使用 -lk 选项进行侦听和 keeping/maintaining(多个)连接。
您可以像这样用它制作一个 bash 脚本,使用反斜杠但它会调用多个 bash,资源使用并不便宜:
#!/bin/bash
# title : ncat-listener-bidirectional.sh
# description : This script will listen for text entered by a client
# like for instance telnet
# and echo back the key strokes
#
ncat -lk 5087 -c ' \
#!/bin/bash \
while true; do \
read i && echo [You entered:] $i; \
done'