it-swarm.com.de

Wie wird die Netcat-Verbindung nach dem Senden der Daten automatisch geschlossen?

Ich führe den folgenden Befehl aus einem Skript aus:

echo '{"hostUp": true}' | Sudo /usr/local/bin/netcat localhost 8001

Der Netcat-Client bleibt jedoch unbegrenzt geöffnet. Wie kann ich die Verbindung schließen, nachdem diese Daten gesendet wurden?

25
Justin Meltzer

Die beiden anderen Antworten -c Und -q Sind im richtigen Kontext korrekt, aber es kann hilfreich sein, zusammenzufassen, warum es mehrere Antworten gibt, und eine allgemeinere Lösung zu finden.

Diese verschiedenen Optionen machen dasselbe, sind jedoch unterschiedliche Implementierungen von netcat:

  • -c GNU Implementierung von Netcat
  • -q OpenBSD-Implementierung von netcat.
  • -w (Andere?) OpenBSD-Implementierung von netcat.

Einige Versionen erfordern ein int, um die Anzahl der Sekunden anzugeben, die gewartet werden soll, bevor die Optionen -q Und -w Beendet werden. Dieser int muss je nach Version > 0 Oder >= 0 Sein.

Wenn Sie etwas auf mehreren Computern implementieren und nicht sicher sind, ob sie dieselbe Implementierung von Netcat verwenden, können Sie Ihren Netcat-Aufruf mit dem Programm timeout umschließen, um Netcat nach einigen Sekunden zu beenden.

timeout 5 echo '{"hostUp": true}' | netcat localhost 8001

Dieser Ansatz ist etwas umständlich, da er die Ausführung von Netcat nach oben begrenzt, unabhängig davon, ob Daten erfolgreich gesendet werden oder nicht. Wenn Sie jedoch eine kleine Datenmenge senden und einige Sekunden Zeit haben, sollte dies funktionieren mit jeder Netcat-Implementierung.

19
7yl4r

Sie können den Parameter -q Verwenden, aber dadurch wird auch der Server netcat geschlossen.

$ echo '{"hostUp": true}' | Sudo /usr/local/bin/netcat -q 5 localhost 8001    
5
cuonglm

In meinem Fall hatte die Kopie von netcat, die ich auf meinem über Homebrew (v 0.7.1) installierten Mac verwendete, keine Option -q, aber ich konnte die Option -c verwenden, um STDIN zu schließen EOF und setzen Sie den gesamten Befehl in eine Schleife:

while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | netcat -l -c -p 8888 ; done
3
jmaxyz

Ein Windows es ist -w 5 (Sekunden Wartezeit vor dem Schließen mit einer Minute von 1 Sek.)

Beispiel: Senden von "Hallo" in udp an eine Broadcast-Adresse unter Windows und Schließen nach 1 Sekunde:

echo hello|nc -w 1 -u 10.0.30.255 -p 4000 5000
1
Roel

Auf dem Ubuntu 18.04 Server musste ich Folgendes verwenden: (in Manpages gefunden)

echo '{"hostUp": true}' | Sudo /usr/local/bin/netcat -N localhost 8001

Offensichtlich ist das -N ist ähnlich wie -q oder -c auf anderen Distributionen

1