netcat como um servidor multithread

12

Eu uso o netcat para executar um servidor simples como este:

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

Dessa forma, qualquer pessoa pode se conectar ao meu host na porta 2468 e conversar com "my_exe".
Infelizmente, se alguém quiser se conectar durante uma sessão aberta, ele receberá um erro "Conexão recusada", porque o netcat não está mais ouvindo até o próximo loop "while".

Existe uma maneira de fazer com que o netcat se comporte como um servidor multiencadeado, ou seja, sempre ouvindo as conexões de entrada? Caso contrário, existem algumas soluções alternativas para isso?

etuardu
fonte
Você pode usar socat
sivann

Respostas:

18

você está usando a ferramenta errada para a tarefa: use algo como ucspi-tcp , especialmente tcpserver :

tcpserver waits for incoming connections and, for each connection, 
runs a program of your choice.
akira
fonte
2
Onde isso foi toda a minha vida ?!
Sridhar Sarnobat
Obrigado @akira, você pode fornecer o exemplo?
Sabrina
3

Embora você não tenha mencionado o sistema operacional que está usando, presumo que seja Linux ou Unix com base na sintaxe do seu exemplo de comando shell.

Se o seu sistema estiver executando o xinetd (ou seu predecessor inetd ), você poderá usar esse software para escutar uma conexão na porta de sua escolha e executar um executável para responder. Com o xinetd / inetd, você tem a opção de permitir várias conexões simultâneas, cada uma servida por uma instância separada do seu executável.

Mox
fonte
-2

você provavelmente poderia apenas colocar em segundo plano o processo (então ele não espera um retorno antes de passar para o próximo loop) com um '&' como:

while true; do nc -l -p 2468 -e ./my_exe &; done
nairb
fonte
7
Isso vai cargas de desova de subprocessos e travar o sistema ....
jackweirdy
5
E apenas a primeira invocação funcionará; cada um sucesso falhará porque já existe uma tomada de servidor na porta 2468.
Daniel Griscom