将进程标准输入和标准输出重定向到 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
。您可以使用它重定向 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]}"
编辑
我最终在我的 cli 库中加入了一个 telnet 服务器。您可以在 GitHub 上找到结果:https://github.com/daniele77/cli
您可以使用 ncat(来自 nmap 包:apt install nmap
)并遵循:
ncat -lnvp 443 -e myapp
不要忘记在应用中的每个 printf("%s",str);
之后 fflush(stdout);
我有一个带有简单交互式命令行界面的嵌入式 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
。您可以使用它重定向 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]}"
编辑
我最终在我的 cli 库中加入了一个 telnet 服务器。您可以在 GitHub 上找到结果:https://github.com/daniele77/cli
您可以使用 ncat(来自 nmap 包:apt install nmap
)并遵循:
ncat -lnvp 443 -e myapp
不要忘记在应用中的每个 printf("%s",str);
之后 fflush(stdout);