永远使用netcat代理


16

我正在用netcat代理VNC TCP服务器端口。代理计算机运行linux。

这是我使用的命令:

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

10.1.1.116是“远程”计算机,原始VNC服务在端口5902上运行。执行此命令后,本地计算机上的VNC服务可用于其他计算机。

但是在每个VNC会话之后,netcat“代理服务器”都会停止,这就是netcat的工作方式。

VNC会话终止后,如何使netcat保持“代理服务”运行?


解决方法是将netcat命令行置于无限循环中:

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

但是我更喜欢一个“官方的” netcat解决方案,它根本不会中断服务。


我已经阅读了有关“-”参数的信息,但是不确定是否适合这种情况,并且我还无法正确应用它。


附加说明:

当然,我可以通过ssh隧道以不同的方式来做到这一点,但是我想要一个没有加密开销的解决方案,以使其对VNC客户端尽可能地敏感。否则,可以使用其他代理解决方案。

客户端必须是VNC,不可能有其他协议。

Answers:


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-traditionalDebian / 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 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.