netcat en tant que serveur multithread


12

J'utilise netcat pour exécuter un serveur simple comme celui-ci:

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

De cette façon, n'importe qui peut se connecter à mon hôte sur le port 2468 et parler avec "my_exe".
Malheureusement, si quelqu'un d'autre veut se connecter pendant une session ouverte, il obtiendrait une erreur "Connexion refusée", car netcat n'est plus en écoute jusqu'à la prochaine boucle "while".

Existe-t-il un moyen de faire en sorte que netcat se comporte comme un serveur multi-thread, c'est-à-dire toujours à l'écoute des connexions entrantes? Sinon, existe-t-il des solutions à cela?


Vous pouvez utiliser socat
sivann

Réponses:


18

vous utilisez le mauvais outil pour la tâche: utilisez quelque chose comme ucspi-tcp , en particulier tcpserver :

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

2
Où est-ce que ça a été toute ma vie?!
Sridhar Sarnobat

Merci @akira, pouvez-vous donner l'exemple?
Sabrina

3

Bien que vous n'ayez pas mentionné le système d'exploitation que vous utilisez, je suppose que c'est Linux ou Unix basé sur la syntaxe de votre exemple de commande shell.

Si votre système exécute xinetd (ou son prédécesseur inetd ), vous pouvez utiliser ce logiciel pour écouter une connexion sur le port de votre choix et exécuter un exécutable pour répondre. Avec xinetd / inetd, vous avez la possibilité d'autoriser plusieurs connexions simultanées, chacune desservie par une instance distincte de votre exécutable.


-2

vous pouvez probablement simplement mettre le processus en arrière-plan (il n'attend pas de retour avant de passer à la boucle suivante) avec un '&' tel que:

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

7
Cela va engendrer des tas de sous-processus et planter le système ....
jackweirdy

5
Et, seule la première invocation fonctionnera; tous ceux qui réussiront échoueront car il y a déjà un socket serveur sur le port 2468.
Daniel Griscom
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.