Linux
永遠使用 netcat 代理
我正在使用 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 的工作方式。
如何讓 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,沒有其他協議是可能的。
該
-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.