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?


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.

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.


-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

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