2016-03-30 22 views
1

Ich habe eine eingebettete Linux-Anwendung mit einer einfachen interaktiven Befehlszeilenschnittstelle.Prozess stdin und stdout zu netcat umleiten

Ich möchte auf die Befehlszeile von Telnet (oder Netzwerk im Allgemeinen) zugreifen.

Der Prozess sollte jedoch gestartet werden, wenn die Platine eingeschaltet wird, und in einer eindeutigen Instanz. So ist der folgende Befehl netcat keine Option:

nc -l -p 4000 -e myapp 

ich tun kann

nc -l -p 4000 | myapp 

Remote-Befehle zu myapp zu schicken, aber auf diese Weise kann ich nicht myapp Ausgabe.

Gibt es eine Möglichkeit, sowohl stdin und stdout zu netcat umleiten?

Danke.

Antwort

3

Ich fand, dass bash v unter Verwendung von> = 4,0 I coproc verwenden kann.

#!/bin/bash 

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

Schöne Idee. '<& $ {COPROC [0]}"> & "$ {COPROC [1]}" 'sieht überflüssig aus, da bash das für Sie erledigt. Es sollte nur '2> & 1' sein, um' stderr' in 'stdout' umzuleiten. –

+0

@MaximEgorushkin Ich habe versucht, nur mit '2> & 1 ', aber ich fürchte, es funktioniert nicht ... –

5

Gibt es eine Möglichkeit, sowohl stdin und stdout zu netcat umleiten

Es gibt socat, das ist eine erweiterte netcat. Sie können damit sowohl stdin als auch stdout umleiten. Z.B .:

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

In der obigen cat liest stdin und /etc/redhat-release und gibt sie in stdout.

Und dann versuchen, dass die Verwendung von:

$ 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) 
+0

Mit dem Befehl, den Sie vorschlagen, ist meine Anwendung nur gestartet wenn ein Client verbindet (wie nc -e). Ich möchte meinen Prozess ohne Verbindung starten können. –

+0

@DanielePallastrelli Dann muss Ihre Anwendung ein TCP-Server sein. Sie können Dateideskriptoren eines laufenden Prozesses nicht (zumindest nicht einfach) umleiten. –

+0

Nun ... wenn ich meine Anwendung starte, kann ich sofort stdin/out zu Socat umleiten, die wiederum als Server fungiert. Die Verbindung kann später ankommen. –