2009-02-23 9 views
15

Ich habe einige Anwendungen und standardmäßige Unix-Tools, die ihre Ausgabe an Named-Pipes in Solaris senden, Named Pipes können jedoch nur aus dem lokalen Speicher (unter Solaris) gelesen werden. Ich kann also nicht über das Netzwerk auf sie zugreifen oder die Pipes auf einen NFS-Speicher für den Netzwerkzugriff auf ihre Ausgabe platzieren.Ein Standard-Unix-Befehlszeilentool zum Verbinden mit einem Socket

Was ich fragte, bekam, wenn es eine analoge Art und Weise die Ausgabe von Kommandozeilen-Tool direkt an den Steckdosen, die so etwas sagen wie zu übermitteln war:

mksocket mysocket:12345 
vmstat 1 > mysocket 2>&1 

Antwort

19

Netcat ist großartig dafür. Hier ist eine page with some common examples.

Verwendung für Ihren Fall wie folgt aussehen könnte:

  1. Server lauscht für eine Verbindung, sendet dann an sie:

    server$ my_script | nc -l 7777

  2. Remote-Client eine Verbindung zum server auf Port 7777, empfängt Daten und speichert sie in einer Protokolldatei:

    client$ nc server 7777 >> /var/log/archive

+0

danke, und danke für die Beispiele! –

+0

wenn "nc -l 7777" nicht funktioniert versuchen "nc -l -p 7777" –

6

netcat ein Rohr über das Netzwerk etablieren helfen.

3

Sie können einen von verwenden:

  1. ssh: sichere (verschlüsselte), die bereits installiert sind out-of-the-box auf Solaris - aber Sie haben ein Schlüsselpaar für nicht einrichten -interaktive Sitzungen
  2. netcat: einfach einzurichten - aber unsicher und offen für Angriffe
+0

danke für die ssh antwort, in diesem fall ist sicherheit kein problem, aber es ist gut, es hier in der frage zu haben –

14

netcat (auch als nc bekannt) ist genau das, was Sie‘ suchend. Es wird einigermaßen Standard, aber nicht auf allen Systemen verfügbar.

socat scheint eine verstärkte Version von netcat zu sein, mit viel mehr Funktionen, aber weniger allgemein verfügbar.

Unter Linux können Sie auch /dev/tcp/<host>/<port> verwenden. Weitere Informationen finden Sie unter Advanced Bash-Scripting Guide.

0

Mit netcat ist jeder auf dem richtigen Weg. Aber ich möchte hinzufügen, dass, wenn Sie in nc Rohrleitung sind und eine Antwort erwarten, müssen Sie die Option -q <seconds> verwenden. Aus dem Handbuch:

-q Sekunden

nach EOF auf stdin, warten die angegebene Anzahl von Sekunden und dann beenden.Wenn Sekunden negativ sind, warte für immer.

Zum Beispiel, wenn Sie mit Ihrem SSH-Agenten zu interagieren möchten, dass Sie etwas tun können:

echo -en '\x00\x00\x00\x01\x0b' | nc -q 1 -U $SSH_AUTH_SOCK | strings 

Ein vollständigeres Beispiel ist bei https://gist.github.com/RichardBronosky/514dbbcd20a9ed77661fc3db9d1f93e4

* ich das bestahl https://ptspts.blogspot.com/2010/06/how-to-use-ssh-agent-programmatically.html

Verwandte Themen