servidor echo con netcat o socat


18

Quiero que un servidor de eco UDP obtenga paquetes y responda exactamente lo que ha recibido. ¿Cómo puedo simplemente hacer esto usando netcato socat? Debería mantenerse vivo para siempre y manejar los paquetes que provienen de varios hosts.


77
Por favor, no haga que esto sea accesible por Internet. Como está basado en UDP, puede usarse para enviar una secuencia de paquetes a destinos arbitrarios utilizando paquetes falsificados en origen.
Evan Anderson

Respuestas:


17

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



6

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

2

Puede escribir un programa en C que se bifurca nc -u -l -p 4321 y luego usa dup (2) para conectarse:

  • nc stdin con stdout de los padres
  • nc stdout con el stdin de los padres

Luego, en un bucle sin fin, el padre lee de stdin y escribe en stdout lo que lee el padre.


Puedo usar 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.
Mohammad Hedayati

Tienes que envolver todo en un bucle sin fin: si bien es cierto; hacer cosas socat; hecho
adamo

También puede obtener algo de inspiración con este tutorial
adamo

0

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í.

http://bansky.net/echotool/


0

netcat solución preinstalada en Ubunutu

El netcatpreinstalado en Ubuntu 16.04 proviene netcat-openbsdy no tiene -copció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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.