7

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

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

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

nc -l -p 4000 -e myapp

我可以

nc -l -p 4000 | myapp

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

有没有办法将stdin 和 stdoutnetcat重定向到?

谢谢。

4

3 回答 3

9

有没有办法将标准输入和标准输出都重定向到 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)
于 2016-03-30T14:54:29.113 回答
8

我发现通过使用 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

于 2016-03-31T07:57:46.297 回答
4

您可以使用ncat(来自 nmap 包:)apt install nmap以及以下操作:

ncat -lnvp 443 -e myapp

不要忘记fflush(stdout);printf("%s",str);你的应用中

于 2018-05-03T21:24:36.380 回答