将标准输入和标准输出重定向到端口

将标准输入和标准输出重定向到端口

我想要一个程序P,它可以读取stdin并写入stdout,但将其连接到nc或任何其他端口,以便它从某个端口读取并输出到另一个端口。

# The reading is easy, here P reads from port 50505
nc -l 50505 | P

我如何让它写回端口 60606?

答案1

我的意思是有人可能会打开 2 个到您机器的 TCP 连接,一个连接到端口 50505,另一个连接到端口 60606,在第一个连接上发送要馈送到 P 的数据,并期望从第二个 TCP 连接读取 P 的输出,那么那就是:

< /dev/null nc -q -1 -l 50505 | P | nc -l 60606 > /dev/null

或者与socat

socat -u tcp-listen:50505,reuseaddr - | P | socat -u - tcp-listen:60606,reuseaddr

P其输出发送回同一连接:

socat tcp-listen:50505,reuseaddr exec:P

答案2

您不需要nc为了使用端口。bash可以自己做:

Bash 在重定向中使用多个文件名时会专门处理这些文件名,如下表所述:

/dev/fd/fd
    If fd is a valid integer, file descriptor fd is duplicated.
/dev/stdin
    File descriptor 0 is duplicated.
/dev/stdout
    File descriptor 1 is duplicated.
/dev/stderr
    File descriptor 2 is duplicated.
/dev/tcp/host/port
   If host is a valid hostname or Internet address, and port is an integer 
   port number or service name, bash attempts to open a TCP connection to
   the corresponding socket.
/dev/udp/host/port
    If host is a valid hostname or Internet address, and port is an integer 
    port number or service name, bash attempts to open a UDP connection to
    the corresponding socket.

相关内容