echo command | netcat host port
Dies führt dazu, dass der Befehl an den Remote-Host gesendet und einige Daten zurückgelesen werden. Nach einigen Sekunden wird die Verbindung getrennt. Der Parameter -w hat nichts geändert. Ich benutze Netcat v1.10 unter SuSE 10.1.
Antworten:
Dies funktioniert mit dem
nc
Befehl unter OS X (vorausgesetzt, der Befehl, den Sie senden möchten, befindet sich in einer Datei):(Im Wesentlichen wird
cat
der Inhalt der Datei auf stdout abgelegt und dann auf stdin gewartet.)Wenn Sie den Befehl über die Shell selbst senden möchten, können Sie dies folgendermaßen tun:
quelle
{ echo command; cat;}
würde das gleiche tun und könnte als leichter zu verstehen angesehen werden.netcat
Befehl den Socket offen, bis das Ende der Eingabe angezeigt wird. All diese Beispiele zeigen dies, ohne wirklich viel darüber zu sagen, warum . Ich bin die Interaktion mit Server unter Verwendung von für längere Zeit nur mit: . SocketTest ist ein praktisches Tool, das jeden TCP- oder UDP-Port überwachen oder bedienen kann.SocketTest
netcat
cat - | nc localhost 8063
Mit
nc
auf Ubuntu:Von der Ubuntu-
nc
Manpage :Beachten Sie, dass die verfügbaren
nc
Optionen zwischen den Distributionen sehr unterschiedlich sind, sodass dies bei Ihnen möglicherweise nicht funktioniert (OpenSUSE).quelle
Ich habe es gefunden:
Mein Kollege wusste es. Ich sehe das überhaupt nicht in der Dokumentation.
quelle
Ich glaube nicht, dass Sie das mit Netcat oder Socat schaffen werden. Ich habe gerade intensiv an beiden rumgebastelt und socat sah am vielversprechendsten aus.
Ich habe es geschafft, socat so einzurichten, dass eine Verbindung zum entfernten TCP-Port hergestellt und ein lokales Unix-Domain-Socket abgehört wird (theoretisch, damit die Verbindung die ganze Zeit aufrecht erhalten werden kann), aber sobald sich der lokale Prozess vom Unix-Socket gelöst hat (ein anderes socat) Verlinkung des Unix-Sockets mit stdin / out) schloss die TCP-Socat-Sitzung.
Das Problem hierbei ist, dass jede Verbindung über netcat / socat eine neue TCP-Stream-Verbindung zum Server herstellt und diese TCP-Stream-Sitzung schließt, wenn das lokale Ende die Verbindung trennt.
Ich denke, Sie werden wahrscheinlich eine benutzerdefinierte Proxy-Software dafür schreiben müssen, die die TCP-Verbindung zum Remote-Ende öffnet und dann lokal auf einem Socket / einer Pipe / einem FIFO oder was auch immer lauscht und dann die Daten einfach über die vorhandene TCP-Pipe sendet und gibt die Ergebnisse zurück.
quelle
Könnte es sein, dass die Verbindung am anderen Ende der Buchse geschlossen ist?
Standardmäßig wird
nc
die Verbindung nach Abschluss geschlossen, wenn Sie ihm nicht ausdrücklich sagen, dass er weiter zuhören soll (mit der-k
Option):Sehen
man nc.1
.Ich streame erfolgreich Daten zwischen zwei Computern wie diesen:
Absender:
Empfänger:
quelle
Die Methode von Georges funktioniert gut von einer interaktiven Shell aus, hilft aber nicht beim Skripten, wenn Sie z. B. Ihr Skript als aufrufen
nohup ./script &
.Ich habe festgestellt, dass es hilfreich ist, stdin durch ein Dummy-FIFO zu ersetzen.
Da nichts jemals in das FIFO schreibt, bleibt es nach der Ausgabe der Datei
cat
auf unbestimmte Zeit hängen.quelle
socat
Dieshut-none
Option von sollte hier helfen:Wahrscheinlich müssen Sie auch die Standardzeitüberschreitung mit überschreiben
-t <timeout>
, da sonst der Socket nach 0,5 s geschlossen wird. Diese Option überschreibt das Standardverhalten:Also ein Befehl wie:
hält die Steckdose nach dem Senden des "blah" für 10s offen.
quelle
Ihr Befehl wird beendet, wenn entweder der Remote-Host die Verbindung schließt (oder nicht erreichbar ist) oder der Befehl, bevor die Pipe beendet wird (während Netcat weiterhin den Rest seiner Eingabewarteschlange sendet).
quelle