netcat como un servidor multiproceso

12

Yo uso netcat para ejecutar un servidor simple como este:

while true; do nc -l -p 2468 -e ./my_exe; done

De esta manera, cualquiera puede conectarse a mi host en el puerto 2468 y hablar con "my_exe".
Desafortunadamente, si alguien más quiere conectarse durante una sesión abierta, obtendría un error de "Conexión rechazada", porque netcat ya no está escuchando hasta el próximo ciclo "while".

¿Hay alguna manera de hacer que netcat se comporte como un servidor multiproceso, es decir, siempre escuchando las conexiones entrantes? Si no, ¿hay algunas soluciones para esto?

etuardu
fuente
Puedes usar socat
sivann el

Respuestas:

18

está utilizando la herramienta incorrecta para la tarea: use algo como ucspi-tcp , especialmente tcpserver :

tcpserver waits for incoming connections and, for each connection, 
runs a program of your choice.
akira
fuente
2
¡¿Donde ha estado esto toda mi vida?!
Sridhar Sarnobat
Gracias @akira, ¿puedes dar el ejemplo?
Sabrina
3

Aunque no mencionó el sistema operativo que está utilizando, supondré que es Linux o Unix basado en la sintaxis de su ejemplo de comando de shell.

Si su sistema ejecuta xinetd (o su predecesor inetd ), puede usar ese software para escuchar una conexión en el puerto de su elección y ejecutar un ejecutable para responder. Con xinetd / inetd, tiene la opción de permitir múltiples conexiones concurrentes, cada una servida por una instancia separada de su ejecutable.

Mox
fuente
-2

es probable que simplemente realice el proceso en segundo plano (luego no espera un retorno antes de pasar al siguiente ciclo) con un '&' como:

while true; do nc -l -p 2468 -e ./my_exe &; done
nairb
fuente
77
Eso
generará un
55
Y, solo la primera invocación funcionará; todos los siguientes fallarán porque ya hay un socket de servidor en el puerto 2468.
Daniel Griscom