将标准输入和标准输出重定向到netcat

问题描述 投票:3回答:3

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

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

但是,该过程应该在板子打开时开始,并且是在唯一的情况下。因此,以下netcat命令不是一个选项:

nc -l -p 4000 -e myapp

我可以做

nc -l -p 4000 | myapp

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

有什么方法可以将both stdin和stdout重定向到netcat

谢谢。

linux netcat socat
3个回答
7
投票

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


6
投票

是否可以将stdin和stdout都重定向到netcat

socat,它是更高级的socat。您可以使用它来重定向netcatstdin。例如:

stdout

在以上socat TCP4-LISTEN:5556,reuseaddr,fork EXEC:"cat - /etc/redhat-release" 中读取catstdin并将它们输出到/etc/redhat-release

然后尝试使用它:

stdout

3
投票

您可以使用$ 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) (从nmap软件包:ncat)来进行此操作,也可以遵循以下步骤:

apt install nmap

在您的应用程序中,每个ncat -lnvp 443 -e myapp之后不要忘记fflush(stdout);

© www.soinside.com 2019 - 2024. All rights reserved.