我有一个带有简单交互式命令行界面的嵌入式 linux 应用程序。
我想从 telnet(或一般网络)访问命令行。
但是,该过程应该在电路板打开时开始,并且是在一个独特的实例中。因此,以下netcat
命令不是一个选项:
nc -l -p 4000 -e myapp
我可以
nc -l -p 4000 | myapp
将远程命令发送到 myapp,但是这样我看不到myapp
输出。
有没有办法将stdin 和 stdout都netcat
重定向到?
谢谢。
有没有办法将标准输入和标准输出都重定向到 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
不要忘记fflush(stdout);
在printf("%s",str);
你的应用中