test - ¿Cómo enviar solo un paquete UDP con netcat?
telnet udp (4)
En un netcat actual (v0.7.1) tiene un modificador -c:
-c, --close close connection on EOF from stdin
Por lo tanto,
echo "hi" | nc -cu localhost 8000
debería hacer el truco.
Deseo 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 saludo pero tengo que presionar Ctrl + c para salir del comando netcat.
¿Cómo puedo dejar de fumar después de enviar un saludo ?
Lo siento, por el ruido, volví a leer la página del manual y encontré la opción -q
.
echo -n "hello" | nc -4u -q1 localhost 8000
funciona (se cierra después de 1 segundo).
Por alguna razón, no funciona con -q0
.
Netcat envía un paquete por nueva línea. Entonces estás bien. Si haces algo más complejo, entonces podrías necesitar algo más.
Estaba engañando con Wireshark cuando me di cuenta de esto. No sé si ayuda.
No encontré la opción -q1
en mi netcat. En su lugar usé la opción -w1
. A continuación se muestra el script bash que hice para enviar un paquete udp a cualquier host y puerto:
#!/bin/bash
def_host=localhost
def_port=43211
HOST=${2:-$def_host}
PORT=${3:-$def_port}
echo -n "$1" | nc -4u -w1 $HOST $PORT
Si usas bash, también podrías escribir
echo -n "hello" >/dev/udp/localhost/8000
y evitar todas las idiosincrasias e incompatibilidades de netcat.
Esto también funciona enviando a otros hosts, por ejemplo:
echo -n "hello" >/dev/udp/remotehost/8000
Estos no son dispositivos "reales" en el sistema de archivos, sino bash aliases "especiales".