概述
常见的远程桌面服务,大多数是点对点的,需要控制端和被控制端双方互相能够连通,若不在同一个局域网内,仅仅通过内网 ip 地址和端口,是不能直接远程桌面的,所以需要一个服务器来中转双方的数据,这样只要大家能够连通服务器,那么任意两台 PC 都可以互相远程桌面。市面上出现的 TeamViewer 和向日葵,原理应该也是这样的。本文讲解如何使用 UltraVNC 搭建远程桌面服务器,并介绍如何用 Java 代码调用。
如下图所示:两个不同的局域网A、B,PC1、2、3无法直接 ping PC4、5、6,但是全部都能连通 Server(中继器服务),那么任意两台机器都可以用 UltraVNC 互相远程。
搭建 UltraVNC Repeater 中继器服务器
可以根据服务器环境选择在 windows 上或者 linux 上面搭建,UltraVNC 官网只有 windows 端的源代码和可执行程序,本文提供 centos 版本的源代码,下面介绍。
windows 端搭建
下载可执行文件 ultravncrepeater1400
直接运行即可
:
中继器 UltraVNC Viewer 监听端口:
名称 | 描述 |
---|---|
中继器服务器 ip | 运行 repeater 的服务器地址 |
中继器 UltraVNC Server 监听端口 | 5500 |
中继器 UltraVNC Viewer 监听端口 | 5901 |
WEB 端管理页面 | 浏览器中直接访问中继器 ip 地址,端口默认 80 |
centos 端搭建
csdn 上传的资源默认 5 个积分,后来会自动增长,我修改后发现没有用,您可以下载百度云的资源
下载 uvncrepeater 源代码
本站下载: uvncrep017-ws.tar.gz
百度云:https://pan.baidu.com/s/13OcU1QAL6eqKFnFWG8mPrw
提取码 1234
解压源代码文件
tar -xvf uvncrep017-ws.tar
编译并安装
cd uvncrep017-ws
make & make install
为中继器服务添加一个用户
useradd uvncrep
根据需要编辑配置文件 /etc/uvnc/uvncrepeater.ini ,默认如下
viewerport = 5901
maxsessions = 10
runasuser = uvncrep
logginglevel = 2
srvListAllow1 = 192.168.0.0 ;Allow network 192.168.x.x
srvListDeny0 = 127.0.0.1 ;Deny loopback
requirelistedserver=1
启动服务
/etc/init.d/uvncrepeater start
客户端安装 UltraVNC Server 和 UltraVNC Viewer
UltraVNC 下载地址,若地址失效,可去官网下载
启动 UltraVNC Server
打开 cmd 命令行,切换到软件根目录,执行
// 命令行参数如下
// id number: 被控制端编号(只能是数字,唯一,且至少三位,即最小是 100,最大是 2147483647,源码中此为 int 类型)
// ip: repeater 中继器服务器 IP
// port: 中继器 UltraVNC Server 监听端口
winvnc.exe -autoreconnect ID:[id number]-connect [repeater ip]:[server listen port] -run
// 示例如下
winvnc.exe -autoreconnect ID:10001 -connect 192.168.1.2:5500 -run
启动 UltraVNC Viewer
打开 cmd 命令行,切换到软件根目录,执行
// 命令行参数如下
// id number: 被控制端编号(只能是数字,唯一,且至少三位,即最小是 100,最大是 2147483647,源码中此为 int 类型)
// ip: repeater 中继器服务器 IP
// port: 中继器 UltraVNC Viewer 监听端口
vncviewer.exe -proxy [repeater ip]:[viewer listen port] ID:[id number]
// 示例如下
vncviewer.exe -proxy 192.168.1.2:5901 ID:10001
···
14 条评论
为什么不使用密码直接使用编号就能登录了
repeater其实也相当于一个服务端,只不过自动接受了客户端发过来的连接请求,当真正使用客户端通过repeater连接服务端的时候,其实就相当于通过repeater这个服务端回连客户端,这个过程就不需要登录密码,所以如果其他人知道了repeater的地址和ID号,那么也可以连接上客户端了.
在UltraVnc Server端设置密码应该可行
谢谢你的回复。
嗯,昨天看了一下源码。 他里面直接连接到服务器,VNCServer中VNCClient.cpp 里面直接就用了服务端自己的密码通过了。无法进行验证,不知道他后面版本会不会支持。
你可以直接二次开发的。加入自己的验证环节
VNC有个SecureVNCPlugin64.dsm 的加密插件。加载这个插件之后就用公钥和私钥加解密。 客户端也要配置插件就可以出现用于连接的通讯(若客户端不配置则会报错)。同时需要配置客户端和服务都加载这个插件并配置相应的密码
插件地址:https://www.uvnc.com/download/encryptionplugins.zip
这个解决了,后来研究发现服务端要加载SecureVNCPlugin64.dsm 这个插件。配置这个插件之后设置密码生成公钥和私钥,将公钥放置于VNCViewer(也需要在Secure页签中配置这个文件)根目录中,私钥放置服务端根目录中。这样使用客户端时就需要输入密码了(若不配置插件将直接被决绝连接)
嗯。 最近没怎么弄 能解决就好,也谢谢你告诉我
哥们,博客写的很好,我会经常关注你的博客了解一点咨询的。
肯定会更新 不定期的。 只是有时候工作事情多顾不过来
可以考虑更新一下你的博客。
不定期更新
对我来说,现在只能是能大致看出一点端倪,但是要改造难度有点大。"(ㆆᴗㆆ)