将进程标准输入和标准输出重定向到 netcat

Redirect process stdin and stdout to netcat

我有一个带有简单交互式命令行界面的嵌入式 linux 应用程序。

我想从 telnet(或一般的网络)访问命令行。

但是,该过程应该在电路板打开时启动,并且是在一个独特的实例中。因此,以下 netcat 命令不是一个选项:

nc -l -p 4000 -e myapp

我能做到

nc -l -p 4000 | myapp

向 myapp 发送远程命令,但是这样我看不到 myapp 输出。

有什么方法可以将 标准输入和标准输出重定向到 netcat 吗?

谢谢。

Is there a way to redirect both stdin and stdout to netcat

还有socat,这是更高级的netcat。您可以使用它重定向 stdinstdout。例如:

socat TCP4-LISTEN:5556,reuseaddr,fork EXEC:"cat - /etc/redhat-release"

在上面cat读取stdin/etc/redhat-release并将它们输出到stdout

然后尝试使用它:

$ echo "hello" | nc 127.0.0.1 5556
hello
Fedora release 22 (Twenty Two)

$ echo "hello 2" | nc 127.0.0.1 5556
hello 2
Fedora release 22 (Twenty Two)

我发现通过使用 bash v. >= 4.0 我可以使用 coproc:

#!/bin/bash

coproc myapp
nc -kl -p 4000 <&"${COPROC[0]}" >&"${COPROC[1]}"

编辑

我最终在我的 cli 库中加入了一个 telnet 服务器。您可以在 GitHub 上找到结果:https://github.com/daniele77/cli

您可以使用 ncat(来自 nmap 包:apt install nmap)并遵循:

ncat -lnvp 443 -e myapp

不要忘记在应用中的每个 printf("%s",str); 之后 fflush(stdout);