Lassen Sie Netcat auf mehrere UDP-Pakete warten

8

Wenn ich einen einfachen UDP-Listener wie folgt ausführe:

nc -l -u -p 1234

Dann bekomme ich anscheinend nur das erste eingehende UDP-Paket. Zum Beispiel, wenn ich laufe:

$ echo abc | nc -u localhost 1234
  ["abc" appears in output of server as expected]

$ echo abc | nc -u localhost 1234
read(net): Connection refused
Alex Flint
quelle

Antworten:

7

mit einem Timeout von Null (0)

"Server":

nc -kluvw 0 localhost 9000

"Klient":

echo -e "all"     | nc -vuw 0 localhost 9000
echo -e "the"     | nc -vuw 0 localhost 9000
echo -e "udp"     | nc -vuw 0 localhost 9000
echo -e "packets" | nc -vuw 0 localhost 9000

Ergebnis:

Connection from 127.0.0.1 port 9000 [udp/*] accepted
all
Connection from 127.0.0.1 port 9000 [udp/*] accepted
the
Connection from 127.0.0.1 port 9000 [udp/*] accepted
udp
Connection from 127.0.0.1 port 9000 [udp/*] accepted
packets

getestet mit:

uname -a
Linux ubuntu 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux
ekim
quelle
Die Zeile "Server" schlägt für mich fehl. Es wird beanstandet, dass -w größer als 0 sein muss und dass -k im UDP-Modus nur mit --exec und --exec-sh unterstützt wird. Keine große Sache, ich kann -w auf 1 setzen, bin mir aber über den Fehler -k nicht sicher. Hat das noch jemand gesehen?
Dan
0

Ich habe einen Link gefunden, der Ihnen helfen kann: netcat: Seltsames Verhalten mit UDP - empfängt nur das erste gesendete Paket .

Zu diesem Zeitpunkt war ich mir nicht sicher, was ich tun sollte, aber Nathan wies darauf hin, dass es möglich wäre, mehrere UDP-Pakete zu senden, wenn ich Zeitüberschreitungen auf dem Client und dem Server nutzen würde.

Ich habe den Netcat-Server neu gestartet, diesmal jedoch mit einer Zeitüberschreitung von 1 Sekunde:

$ nc -kluvw 1 localhost 9000

Und dann begann UDP-Pakete von einem Netcat-Client auch mit einer Zeitüberschreitung von 1 Sekunde zu senden:

 $ echo -e "all" | nc -vvuw 1 localhost 9000
 Connection to localhost 9000 port [udp/cslistener] succeeded!
 $ echo -e "the" | nc -vvuw 1 localhost 9000
 Connection to localhost 9000 port [udp/cslistener] succeeded!
 $ echo -e "udp" | nc -vvuw 1 localhost 9000
 Connection to localhost 9000 port [udp/cslistener] succeeded!
 $ echo -e "packets" | nc -vvuw 1 localhost 9000
 Connection to localhost 9000 port [udp/cslistener] succeeded!

Und der Netcat-Server empfängt jetzt alle:

$ nc -kluvw 1 localhost 9000
XXXXall
XXXXthe
XXXXudp
XXXXpackets

Dies war ein interessantes Problem, hoffe, dies beantwortet Ihre Frage.

Fackelhund
quelle