Проксі з netcat назавжди


16

Я наближаюсь до порту сервера VNC TCP з netcat. Проксі-апарат працює під управлінням Linux.

Це команда, яку я використовую:

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

10.1.1.116 - це «віддалений» апарат з оригінальною службою VNC, що працює на порту 5902. Після цієї команди послуга VNC доступна в localhost для інших машин.

Але після кожного сеансу VNC «проксі-сервер» netcat припиняється, саме так працює netcat.

Як я можу змусити netcat підтримувати роботу "проксі-сервісу" після закінчення сеансу VNC?


В якості вирішення я вкладаю командний рядок netcat у нескінченний цикл:

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

Але я вважаю за краще "офіційне" рішення netcat, яке зовсім не перериває послугу.


Я читав про параметр "-", але не впевнений, чи відповідає це випадку, і я ще не зміг його правильно застосувати.


Додаткові зауваження:

Звичайно, я можу зробити це за допомогою тунелювання на ssh різними способами, але я хотів рішення без шифрування накладних витрат, щоб зробити його максимально чуйним для клієнта VNC. Інакше рішення проксі-сервера було б нормально.

Клієнт повинен бути VNC, інші протоколи неможливі.

Відповіді:


24

-kВаріант повинен зробити трюк.

Зі сторінки пошуку 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.

Я помітив, що netcat-traditionalпакунок Debian / Ubuntu не слухає як слід. У такому випадку використовуйте netcat-openbsdпакет замість цього і повторіть спробу!

Крім того, використовуйте socat, яке більше орієнтоване на вашу користь проксі-сервера. Випадковий приклад експедитора TCP, розміщений на сторінці, socatякий, звичайно, потребує деяких модифікацій.

   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.

@AlojzJanez Так, очевидно, якщо чесно. Зробіть звичку читати керівництво. :)
gertvdijk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.