web-dev-qa-db-fra.com

Proxy avec netcat pour toujours

Je suis proxyse d'un VNC TCP avec NetCat. La machine proxy fonctionne Linux.

C'est le Comand que j'utilise:

mkfifo backpipe
nc -l 5902  0<backpipe | nc 10.1.1.116 5902 1>backpipe

10.1.1.116 est la machine "distante" avec le service VNC d'origine exécutant sur le port 5902. Une fois que ce service de commande VNC est disponible sur localhost pour d'autres machines.

Mais après chaque session VNC, le Netcat "Proxy Server" s'arrête, c'est ainsi que NetCat fonctionne.

Comment puis-je rendre NetCat conserver le "service proxy" en cours d'exécution après la résiliation d'une session VNC?


En tant que contournement, je pose la ligne de commande Netcat dans une boucle infinie:

mkfifo backpipe
while true; do   nc -l 5902  0<backpipe | nc 10.1.1.116 5902 1>backpipe; done

Mais je préférerais une solution de Netcat "Oficial" qui n'interrompt pas du tout le service.


J'ai lu sur le paramètre "-", mais je ne suis pas sûr que cela correspond à l'affaire et que je n'étais pas encore en mesure de l'appliquer correctement.


Remarque additionnelle:

Bien sûr, je peux le faire avec un tunneling SSH de différentes manières, mais je voulais une solution sans que la surcharge de cryptage ne le rendait aussi réactif que possible pour le client VNC. Une solution de proxy différente serait ok sinon.

Le client doit être VNC, aucun autre protocole n'est possible.

16
Alojz Janez

L'option -k Devrait faire l'affaire.

Du manuel de nc(1):

 -k      Forces nc to stay listening for another connection after its
         current connection is completed.  It is an error to use this
         option without the -l option.

J'ai remarqué que le package netcat-traditional Sur Debian/Ubuntu ne continue pas d'écouter comme il se doit. Dans ce cas, utilisez plutôt le package netcat-openbsd Et réessayez!

Alternativement, utilisez socat, qui est plus ciblé pour votre usecase d'un serveur proxy. Un exemple de transitaire de TCP aléatoire à partir du manuel de socat qui nécessite des modifications bien sûr.

   socat -d -d -lmlocal2 \
   TCP4-LISTEN:80,bind=myaddr1,reuseaddr,fork,su=nobody,range=10.0.0.0/8 \
   TCP4:www.domain.org:80,bind=myaddr2

          TCP  port  forwarder,  each  side  bound to another local IP
          address (bind). This example  handles  an  almost  arbitrary
          number  of parallel or consecutive connections by fork'ing a
          new process after each accept() . It provides a little secu‐
          rity by su'ing to user nobody after forking; it only permits
          connections from the private  10  network  (range);  due  to
          reuseaddr,   it   allows   immediate  restart  after  master
          process's termination, even if some child  sockets  are  not
          completely  shut down.  With -lmlocal2, socat logs to stderr
          until successfully reaching the accept loop. Further logging
          is directed to syslog with facility local2.
24
gertvdijk