Linux 将进程stdin和stdout重定向到netcat

Linux 将进程stdin和stdout重定向到netcat,linux,netcat,socat,Linux,Netcat,Socat,我有一个带有简单交互式命令行界面的嵌入式linux应用程序 我想从telnet(或网络,一般来说)访问命令行 但是,该过程应在电路板打开时启动,并在一个独特的实例中启动。因此,以下netcat命令不是选项: nc -l -p 4000 -e myapp 我能行 nc -l -p 4000 | myapp 向myapp发送远程命令,但这样我看不到myapp输出 有没有办法将stdin和stdout重定向到netcat 谢谢 有没有办法将stdin和stdout重定向到netcat 有,这是一种

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

我想从telnet(或网络,一般来说)访问命令行

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

nc -l -p 4000 -e myapp
我能行

nc -l -p 4000 | myapp
向myapp发送远程命令,但这样我看不到
myapp
输出

有没有办法将stdin和stdout重定向到
netcat

谢谢

有没有办法将stdin和stdout重定向到netcat

有,这是一种更高级的
netcat
。您可以使用它重定向
stdin
stdout
。例如:

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]}"
#/bin/bash
coproc myapp
nc-kl-p4000&“${COPROC[1]}”
编辑

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

您可以使用(从nmap软件包:
apt install nmap
)以及以下内容:

ncat-lnvp443-e myapp


别忘了
fflush(stdout)在每个
printf(“%s”,str)之后
在您的应用程序中

使用您建议的命令,我的应用程序仅在客户端连接时启动(如nc-e)。我希望能够在没有任何连接的情况下启动进程。@Danielepallasterlli那么您的应用程序必须是TCP服务器。您无法重定向(至少很容易)正在运行的进程的打开文件描述符。。。当我启动应用程序时,我可以直接将stdin/out重定向到socat,而socat又充当服务器。连接可以稍后到达。不必重定向正在运行的进程的打开文件描述符:文件描述符可以从一开始就重定向(例如,socat)。然后连接可以稍后到达。比其他解决方案好得多。为我工作。好主意<代码>&“${COPROC[1]}”
部分看起来不必要,因为bash会为您这样做。只需
2>&1
即可将
stderr
重定向到
stdout
。verbose选项--verbose或-v是在上面的命令(-lnvp)中捕获stderr的选项。