Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Redirect process stdin and stdout to netcat

I have an embedded linux application with a simple interactive command line interface.

I'd like to access the command line from telnet (or network, in general).

However, the process should be started when the board turns on, and in a unique instance. So, the following netcat command is not an option:

nc -l -p 4000 -e myapp

I can do

nc -l -p 4000 | myapp

to send remote commands to myapp, but this way I can't see myapp output.

Is there any way to redirect both stdin and stdout to netcat?

Thanks.

like image 394
Daniele Pallastrelli Avatar asked Mar 30 '16 14:03

Daniele Pallastrelli


2 Answers

Is there a way to redirect both stdin and stdout to netcat

There is socat, which is a more advanced netcat. You can redirect both stdin and stdout with it. E.g.:

socat TCP4-LISTEN:5556,reuseaddr,fork EXEC:"cat - /etc/redhat-release"

In the above cat reads stdin and /etc/redhat-release and outputs them into stdout.

And then try using that:

$ 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)
like image 71
Maxim Egorushkin Avatar answered Oct 10 '22 23:10

Maxim Egorushkin


I found that by using bash v. >= 4.0 I can use coproc:

#!/bin/bash

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

EDIT

I eventually incorporated a telnet server in my cli library. You can find the result on GitHub: https://github.com/daniele77/cli

like image 39
Daniele Pallastrelli Avatar answered Oct 10 '22 23:10

Daniele Pallastrelli