Ich möchte nur einen kurzen Wert in einem UDP-Paket senden, aber den Befehl ausführen
echo -n "hello" | nc -4u localhost 8000
Ich kann sehen, dass der Server das Hallo- Zeug bekommt, aber ich muss Ctrl+ drücken c, um den Befehl netcat zu beenden.
Wie kann ich es beenden, nachdem ich Hallo gesendet habe ?
Entschuldigung, für das Rauschen habe ich die Manpage erneut gelesen und die -q
Option gefunden.
echo -n "hello" | nc -4u -q1 localhost 8000
funktioniert (es wird nach 1 Sekunde beendet).
Aus irgendeinem Grund funktioniert es nicht mit -q0
.
-q seconds: after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.
Antworten:
Wenn Sie bash verwenden, können Sie auch schreiben
und vermeiden Sie alle Eigenheiten und Inkompatibilitäten von netcat.
Dies funktioniert auch beim Senden an andere Hosts, z.
Dies sind keine "echten" Geräte im Dateisystem, sondern "spezielle" Aliase . Weitere Informationen finden Sie im Bash-Handbuch .
quelle
127.0.0.1
auf stattdessenlocalhost
auf Ubuntu 14.04. (Ja, ich habelocalhost
in/etc/hosts
.)/dev/udp/
ist keine echte Datei. Es ist nur ein Dateiname, der speziell von bash interpretiert wird.Ich habe die
-q1
Option auf meinem Netcat nicht gefunden. Stattdessen habe ich die-w1
Option verwendet. Unten ist das Bash-Skript, das ich ausgeführt habe, um ein udp-Paket an einen beliebigen Host und Port zu senden:quelle
Auf einem aktuellen Netcat (v0.7.1) haben Sie einen -c-Schalter:
Daher,
sollte den Trick machen.
quelle
Netcat sendet ein Paket pro Newline. Also geht es dir gut. Wenn Sie etwas Komplexeres tun, benötigen Sie möglicherweise etwas anderes.
Ich habe mit Wireshark rumgespielt, als ich das merkte. Ich weiß nicht, ob es hilft.
quelle
echo -n "hello\nworld" >/dev/udp/localhost/514
Sie einfach und Sie erhalten 2 ZeilenIch hatte das gleiche Problem, aber ich verwende die
-w 0
Option, um nur ein Paket zu senden und zu beenden. Sie sollten diesen Befehl verwenden:quelle
-w0
. Fehler: ungültige Wartezeit 0