分享

VNC源码研究(一)VNC简介

 quasiceo 2016-11-18

目录(?)[+]

 

 

VNC采用RFB通信协议。RFB ("remote 帧缓存 ") 是一个远程图形用户的简单协议,因为它工作在帧缓存级别上,所以它可以应用于所有的窗口系统,例如:X 11,Windows 和 Mac 系统。

独特的计算环境。 

     RFB 协议可进行可靠的传输,如字节流或基于消息的。和大多数协议一样,它也是通过TCP/IP 协议簇连接

协议由三步完成连接:

首先是握手报文,目的是对协议版本和加密方式进行协商。

第二步是初始化报文,主要用于客户和服务器的初始化消息。

最后就是正常握手始于服务器向客户发送协议版本的消息,告知客户服务器所能支持RFB 协议的最高版本号。此时客户端会发送相似的消息告诉服务器将要使用的协议版本。客户端不应该请求高于服务器的协议版本。如此一来就给客户和服务器端提供了一种向后兼容机制。 
目前发布的协议版本主要有3.3  3.7  3.8  (3.5版本被报告存在问题),对于新的编码和伪码方式版本号不需要进行修改,因为服务器端可能忽略它不能识别的版本。 

     一旦协议版本被确定,服务器和客户端必须一致同意连接的安全类型。服务器发送所支持的安全类型,当客户端支持服务器的某一种安全类型,客户端选择这种安全认证类型并发送给服务器。否则客户端发送失败,并标识出失败原因。
 

安全认证有多种,有一种为VNC安全认证,当用VNC认证的时候,协议数据采用明文发送,服务器发送一个16字节的随机数验证给客户端,客户端用DES对验证进行加密,用用户密码作为密钥回复给服务器16字节,这时服务器会返回安全结果给客户端。如果成功就进入初始化报文阶段。不成功就关闭连接

     当安全认证成功后,客户端会发送客户端是否共享服务器初始化报文,当客户端设置报文为可共享时,服务器查看当前配置是否允许共享连接,如果同意,则不关闭之前连接的客户端,否则断开之前连接的客户端。 

    这时服务器会发送客户端初始化信息。这些信息包括:服务器上帧缓存的高宽,像素格式还有与桌面相关的名称,其中服务器象素定义服务器本来的象素格式,这种象素格式会被一直使用,除非客户端使用设置象素格式消息来请求另一种象素格式。

至此初始化报文阶段完成,进入协议交互阶段。 

    协议交互分为客户到服务器消息和服务器到客户消息 

 

二、

VNC (Virtual Network Computing)是虚拟网络计算机的缩写。VNC 是一款优秀的远程控制工具软件,由著名的AT&T 的欧洲研究实验室开发的。VNC 是在基于UNIXLinux操作系统的免费的开源软件远程控制能力强大,高效实用,其性能可以和WindowsMAC 中的任何远程控制软件媲美。 在 Linux 中,VNC 包括以下四个命令:vncserver,vncviewer,vncpasswd,和 vncconnect。大多数情况下我只需要其中的两个命令:vncserver 和 vncviewer。

VNC(Virtual Network Computing)基本上是属于一种显示系统,也就是说它能将完整的窗口界面通过网络,传输到另一台计算机的屏幕上. Windows服务器中包含的"Terminal Server"、Symantec公司开发的收费软件PCAnywhere、近期流行的Teamviewer、国内的协通XT800快递通KDT)都是属于这种原理的设计,同时这些软件又在VNC的原理基础上做了各自相应改进,提高了易用性、连通率和可穿透内网(Teamviewer、协通XT800、KDT).

  VNC是由 AT&T实验室所开发的,其采用GPL(General Public License)授权条款,任何人都可免费取得该软件。VNC软件要由两个部分组成:VNC server 及VNC viewer。用户需先将 VNC server安装在被远程操控的计算算机上后,才能在主控端执行VNC viewer 进行远程操控。 类似的技术为 RDP(Remote Desktop Process),称为“远程桌面连接”,此外,还有一套由mantec 公司推出的 pcAnywhere 软件也具有类似功能。 VNC、RDP、pcAnywhere等均为远程登录 Telnet 的图形化界面软件,由 Telnet 软件发展而。

VNC工作流程

  (1) 在服务器端启动 VNC Serve。

  (2) VNC客户端通过浏览器或 VNC Viewer 连接至VNC Server。

  (3) VNC Server传送一对话窗口至客户端,要求输入连接密码, 以及存取的VNC Server显示装置。

  (4) 在客户端输入联机密码后,VNC Server验证客户端是否具有存取权限。

  (5) 若是客户端通过 VNC Server 的验证,客户端即要求VNC Server显示桌面环境。

  (6) VNC Server通过X Protocol 要求X Server将画面显示控制权交由VNC Server负责。

  (7) VNC Server将来由 X Server 的桌面环境利用VNC通信协议送至客户端, 并且允许客户端控制VNC Server的桌面环境及输入装置。

特点
  同样可能远程连入UNIX、Linux进行图形化操作的还有流行的Xmanager,VNC与之相比——两者工作原理不一样,前者(VNC)是远程连入操作系统,所有操作在UNIX、Linux主机服务端进行,即使操作过程中“本地电脑与操作主机网络断开”,也不影响操作的顺利进行;而后者(Xmanager)是通过端口将主机服务器的UI界面引导到本地电脑进行展现,如操作过程出现“本地电脑与操作主机网络断开”,操作将中断失败!如果操作都进行的工作任务非常重要,不能中断,如Oracle RAC实施,结果是灾难性的!更重要的是,VNC是免费的、开源的,Xmanager你可能用的是破解注册版的。

组成部分

VNC基本上是由两部分组成:一部分是客户端的应用程序(vncviewer);另外一部分是服务器端的应用程序(vncserver)。VNC的基本运行原理和一些Windows下的远程控制软件很相象。VNC的服务器端应用程序在UNIX和Linux操作系统中适应性很强,图形用户界面十分友好,看上去和Windows下的软件界面也很类似。在任何安装了客户端的应用程序(vncviewer)的Linux平台的计算机都能十分方便的和安装了服务器端的应用程序(vncserver)的计算机相互连接。另外,服务器端 (vncserver)还内建了Java Web接口,这样用户通过服务器端对其他计算机的操作就能通过Netscape显示出来了,这样的操作过程和显示方式比较直观方便。

命令描述

 

       vncserver

  此服务程序必须在在主(或遥控)计算机上运行。你只能作为使用者(不需要根用户身份)使用此项服务。

  vncviewer

  本地应用程序,用于远程接入运行vncserver计算机并显示其环境。你需要知道远程计算机的IP地址和vncserver设定的密码。

  vncpasswd

  vncserver的密码设置工具。vncserver服务程序没有设置密码将不能运行(好习惯)。如果你没有设置,运行vncserver时它会提示你输入一个密码。所以,一般我不会单独运行这个命令来设置密码。

  vncconnect

  告诉vncserver连接到远程一个运行vncviewer的计算机的IP和端口号。这样我就可以避免给其他人一个接入的密码。

  Xvnc

  一个vnc“主控”程序,一般来说不需要直接运行。(vncserver和vncviewer实际上是Xvnc的脚本)

  查找所有可用的选项,运行:

  Xvnc --help

  出于安全的考虑,一般不建议直接以超级用户账号运行vncserver程序。如果你需要超级用户的环境,请以一般用户登录后再使用su命令登录到超级用户账号。

  VNC运行的工作流程如下:

  (1) VNC客户端通过浏览器或VNC Viewer连接至VNC Server。

  (2) VNC Server传送一对话窗口至客户端,要求输入连接密码,以及存取的VNC Server显示装置。

  (3) 在客户端输入联机密码后,VNC Server验证客户端是否具有存取权限。

  (4) 若是客户端通过VNC Server的验证,客户端即要求VNC Server显示桌面环境。

  (5) VNC Server通过X Protocol 要求X Server将画面显示控制权交由VNC Server负责。

  (6) VNC Server将来由 X Server的桌面环境利用VNC通信协议送至客户端,并且允许客户端控制VNC Server的桌面环境及输入装置。

 

7、测试vnc

  7.1、使用Java连接vncserver

  在浏览器中输入http://192.168.0.10:5801登录桌面。

  7.2、使用vnc viewer连接vncserver

  打开vnc viewer,在server中输入192.168.0.10:1进行连接。

  注意:192.168.0.10替换成自己的服务器IP。

 

三、

VNC由Olivetti & Oracle研究室所開發,此研究室在1999年併入美國電話電報公司(AT&T)。AT&T於2002年中止了此研究室的運作,並把VNC以GPL釋出。

由於VNC以GPL授權,衍生出了幾個VNC軟體:

RealVNC:由VNC團隊部份成員開發,分為全功能商業版及免費版。 
TightVNC:強調節省頻寬使用。 
UltraVNC:加入了TightVNC的部份程式及加強效能的圖型映射驅動程式,並結合Active Directory及NTLM的帳號密碼認證,但僅有Windows版本。 
Vine Viewer:MacOSX的VNC用戶端。 
這些軟體各有所長,例如UltraVNC支援檔案傳輸以及全螢幕模式。而這些軟體間大多遵循基本的VNC協定,因此大多可互通使用。

http://www./   REALVNC

http://www./   TIGHTVNC

http:///        ULTRAVNC

 四、这里记录TightProjector的安装过程:

说明:如上面所讲到的,我们这里下载的VNC具有特性:“VNC与之相比——两者工作原理不一样,前者(VNC)是远程连入操作系统,所有操作在UNIX、Linux主机服务端进行,即使操作过程中“本地电脑与操作主机网络断开”,也不影响操作的顺利进行;”。

1、下载

 

 

得到

它只有387K。

 

 

2、安装在服务器与客户机上都安装上此软件。

安装目录里的文件有:

安装后得到两个程序:

TightProjector是服务端,TightReceiver是客户端

 

3、

正常现象如下图:

(1)当我们把鼠标移到客户端的窗口时,鼠标是消失的。

(2)客户端的窗口是大小不变的。

(3)

发现一个现象:

服务端(即主机)显示了锁定界面,可是客户端还是显示桌面。

 

 

五、tightProject实现方法研究

 

 

六、这里记录tightVnc 的安装过程:

1、下载安装

(1)服务端TightVNC Service下载

 

我们下载32位的,安装文件为:

安装过程提示:

这里有个是否注册为系统服务、是否允许发送Ctrl-Atl-Del的开关。这个开关的影响我们后面会讲到。

 

接下来会要求输入远程访问的密码及管理员密码(当有多个用户时可以用管理员密码登录)

 

接下来会弹出“运行身份”的对话框,选择以哪个账户运行这个程序。

 

安装完成后TightVNC程序的运行文件有:

 

 

 

运行界面如下:

从下面看是既支持客户端Viewer连接,也支持WEB端连接。我们是以客户端连接Viewer来讲的。

 

在访问控制TAB中可以设置访问的IP地址。

(2)客户端安装

下载后得到文件:

 

 

2、运行后的界面

OPtION选项的内容为:

“Let remote server deal with mouse cursor”那么Viewer不显示鼠标,只是一个小点,但都可操作。

 

 

 

 

3、运行后的效果如下:

4、在有屏保时,Viewer显示很卡。且屏保无法去掉,服务端去掉屏保后View中无更新。是黑的,得在服务端中进入解锁才可得到图像。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多