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?


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.

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.


-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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.