Quiero que un servidor de eco UDP obtenga paquetes y responda exactamente lo que ha recibido. ¿Cómo puedo simplemente hacer esto usando netcat
o socat
? Debería mantenerse vivo para siempre y manejar los paquetes que provienen de varios hosts.
Quiero que un servidor de eco UDP obtenga paquetes y responda exactamente lo que ha recibido. ¿Cómo puedo simplemente hacer esto usando netcat
o socat
? Debería mantenerse vivo para siempre y manejar los paquetes que provienen de varios hosts.
Respuestas:
Otra herramienta similar a netcat es la versión nmap ncat
, que tiene muchos objetos incorporados para simplificar cosas como esta. Esto funcionaría:
ncat -e /bin/cat -k -u -l 1235
-e significa que ejecuta / bin / cat (para repetir lo que escribe)
-k significa mantener vivo, que sigue escuchando después de cada conexión
-u significa udp
-l 1235 significa que escucha en el puerto 1235
Solía socat -v PIPE udp-recvfrom:5553,fork
ejecutar el servidor y socat - udp:localhost:5553
para clientes.
¡ Fue de gran ayuda!
socat TCP4-LISTEN:2000,fork EXEC:cat
También puede usar socat (en lugar de usar netcat) como servidor echo y netcat como cliente.
Servidor de eco Socat (escucha en el puerto TCP 1234):
socat -v tcp-l:1234,fork exec:'/bin/cat'
Cliente Netcat (se conecta a serverip en el puerto TCP 1234):
nc serverip 1234
Puede escribir un programa en C que se bifurca nc -u -l -p 4321
y luego usa dup (2) para conectarse:
Luego, en un bucle sin fin, el padre lee de stdin y escribe en stdout lo que lee el padre.
socat -v PIPE UDP-LISTEN:5555,fork
, pero la segunda conexión se rechaza. Por cierto, funciona bien con TCP-LISTEN. Estoy evitando codificar, de lo contrario podría escribirlo todo en C.
Si está ejecutando en Windows y utiliza un entorno similar a Unix como cygwin, netcat migth no proporcionará el parámetro -e. Esto funcionó bien para mí.
netcat
solución preinstalada en Ubunutu
El netcat
preinstalado en Ubuntu 16.04 proviene netcat-openbsd
y no tiene -c
opción, pero el manual ofrece una solución:
sudo mknod -m 777 fifo p
cat fifo | netcat -l -k localhost 8000 > fifo
Entonces ejemplo del cliente:
echo abc | netcat localhost 8000
TODO: ¿cómo modificar el valor de la cadena de entrada? Lo siguiente no devuelve ninguna respuesta:
cat fifo | tr 'a' 'b' | netcat -l -k localhost 8000 > fifo
Sin embargo, el ejemplo de shell remoto funciona:
cat fifo | /bin/sh -i 2>&1 | netcat -l -k localhost 8000 > fifo
Sin embargo, no sé cómo tratar las solicitudes concurrentes.