将进程stdin和stdout重定向到netcat

时间:2016-03-30 14:06:44

标签: linux netcat socat

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

我想从telnet(或通常是网络)访问命令行。

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

nc -l -p 4000 -e myapp

我能做到

nc -l -p 4000 | myapp

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

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

感谢。

3 个答案:

答案 0 :(得分:6)

我发现使用bash v。> = 4.0我可以使用coproc

#!/bin/bash

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

答案 1 :(得分:5)

  

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

socat,这是一个更高级的netcat。您可以将stdinstdout重定向到它。 E.g:

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)

答案 2 :(得分:2)

您可以使用ncat(来自nmap包:apt install nmap),然后按照:

ncat -lnvp 443 -e myapp

在您的应用中的每个fflush(stdout);

后,不要忘记printf("%s",str);