netcat come server multithread


12

Uso netcat per eseguire un server semplice come questo:

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

In questo modo, chiunque è in grado di connettersi al mio host sulla porta 2468 e parlare con "my_exe".
Sfortunatamente, se qualcun altro vuole connettersi durante una sessione aperta, otterrebbe un errore "Connessione rifiutata", perché netcat non è più in ascolto fino al prossimo ciclo "while".

Esiste un modo per far sì che netcat si comporti come un server multi-thread, ovvero in ascolto delle connessioni in entrata? In caso contrario, ci sono alcune soluzioni alternative per questo?


Puoi usare socat
sivann il

Risposte:


18

stai usando lo strumento sbagliato per l'attività: usa qualcosa come ucspi-tcp , in particolare tcpserver :

tcpserver waits for incoming connections and, for each connection, 
runs a program of your choice.

1
Dov'è stata tutta la mia vita ?!
Sridhar Sarnobat,

Grazie @akira, puoi fornire l'esempio?
Sabrina,

3

Anche se non hai menzionato il sistema operativo che stai utilizzando, suppongo che sia Linux o Unix in base alla sintassi del tuo esempio di comando shell.

Se il tuo sistema esegue xinetd (o il suo predecessore inetd ), puoi utilizzare quel software per ascoltare una connessione sulla porta di tua scelta ed eseguire un eseguibile per rispondere. Con xinetd / inetd, hai la possibilità di consentire più connessioni simultanee, ognuna servita da un'istanza separata del tuo eseguibile.


-2

probabilmente potresti semplicemente avviare il processo (quindi non aspetta un ritorno prima di passare al ciclo successivo) con un '&' come:

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

7
Questo
genererà un

4
E solo la prima invocazione funzionerà; tutti quelli successivi falliranno perché c'è già un socket del server sulla porta 2468.
Daniel Griscom
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.