Quiero enviar solo un valor corto en un paquete UDP, pero ejecutando el comando
echo -n "hello" | nc -4u localhost 8000
Puedo ver que el servidor está recibiendo el mensaje de saludo, pero tengo que presionar Ctrl+ cpara salir del comando netcat.
¿Cómo puedo hacer que se cierre después de enviar un saludo ?
Lo siento, por el ruido, volví a leer la página del manual y encontré la -q
opción.
echo -n "hello" | nc -4u -q1 localhost 8000
funciona (se cierra después de 1 segundo).
Por alguna razón, no funciona con -q0
.
-q seconds: after EOF on stdin, wait the specified number of seconds and then quit. If seconds is negative, wait forever.
Respuestas:
Si está usando bash, también podría escribir
y evitar todas las idiosincrasias e incompatibilidades de netcat.
Esto también funciona enviando a otros hosts, por ejemplo:
Estos no son dispositivos "reales" en el sistema de archivos, pero bash alias "especiales" . Hay información adicional en el Manual de Bash .
fuente
127.0.0.1
en su lugarlocalhost
en Ubuntu 14.04. (Sí, lo tengolocalhost
en/etc/hosts
.)/dev/udp/
no es un archivo real. Es solo un nombre de archivo interpretado especialmente por bash.No encontré la
-q1
opción en mi netcat. En su lugar, usé la-w1
opción. A continuación se muestra el script bash que hice para enviar un paquete udp a cualquier host y puerto:fuente
En un netcat actual (v0.7.1) tiene un interruptor -c:
Por lo tanto,
debería hacer el truco.
fuente
Netcat envía un paquete por línea nueva. Entonces estás bien. Si hace algo más complejo, es posible que necesite algo más.
Estaba jugando con Wireshark cuando me di cuenta de esto. No sé si ayuda.
fuente
echo -n "hello\nworld" >/dev/udp/localhost/514
y obtendrá 2 líneasTuve el mismo problema, pero utilizo la
-w 0
opción para enviar solo un paquete y salir. Deberías usar este comando:fuente
-w0
. Error: tiempo de espera no válido 0