VNC源码研究(一)

 

 

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 是在基于UNIX 和Linux操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和Windows 和MAC 中的任何远程控制软件媲美。 在 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.com/   REALVNC

http://www.tightvnc.com/   TIGHTVNC

http://ultravnc.com/        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中无更新。是黑的,得在服务端中进入解锁才可得到图像。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/422864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

枚举的一些常用操作

本章将介绍以下几点: 1、如何把其它类型转换为枚举类型? 2、如何把枚举中的值添加到下拉菜单中? 一、如何把其它类型转换为枚举类型? 我们回顾一下有关字符串与数字之间的转换,如: string strValue&quo…

【Git、GitHub、GitLab】四 Git文件重命名的简单方法以及使用git log查看版本演变历史

上一篇文章学会了使用GIT四次提交建立一个有模有样的仓库。点击链接查看:【Git、GitHub、GitLab】三 Git基本命令之创建仓库并向仓库中添加文件. 本片文章记录git的文件重命名的简单方法,以及使用git log系列命令查看git仓库的版本演变历史的用法的。 文…

10个开源免费的电子商务平台(转自伯乐在线)

如今,人们几乎可以在网络上购买到绝大部分东西,从电子产品、衣服,到机票预订和订餐。购物已转移到互联网,你所做的,只是需要付钱。当然,消费者会 非常注重网站的用户体验。所以,一个整洁安全的平…

「电影」黑洞表面

很老的片子,《黑洞表面》,某次在电视上碰见了,可惜看了五分钟不到,就不得不做别的事情去了,于是乎接着在优酷上翻出来看。估计此片太老了,而且貌似还有点经典,所以优酷还设置了所谓「付费观看」…

【Git、GitHub、GitLab】五 git中裸仓库.git下的内容

上一篇文章学习了git的文件重命名与git -log 的系列命令的使用方法。点击链接查看上一篇文章:【Git、GitHub、GitLab】四 Git文件重命名的简单方法以及使用git log查看版本演变历史 本篇文章学习git中,在没有远端服务器的情况下,裸仓库.git中…

金和oa:自定义表单函数计算一段时期内的工作日

今天介绍一下在自定义表单时如何去计算两个日期之间的工作日。这是很常用的一个js函数&#xff0c;比如在加班中&#xff0c;比如在请假中。。。1&#xff0e; 计算两个日期之间的工作日&#xff0c;写附加元素页面<script language"vbscript"> ...Copyrigh…

【Git、GitHub、GitLab】六 GIT中commit、tree和blob三个对象之间的关系

上一篇文章学习了git裸仓库.git中的内容&#xff0c;点击查看上一篇文章&#xff1a;【Git、GitHub、GitLab】五 git中裸仓库.git下的内容 本篇文章记录学习git中commit、tree和blob三个对象之间的关系。 首先需要会使用下面的命令&#xff1a; cat 命令&#xff0c; 功能&am…

POJ 1006

典型的中国余数定理的应用。设m1,m2,..,mk是k个两两互素的正整数&#xff0c;mm1*m2*...*mk&#xff0c;Mim/mi(i1,2,..,k)。则同余方程组x≡b1(mod m1)x≡b2(mod m2&#xff09;......x≡bk(mod mk)有唯一解。x≡M1M1b1&#xff0b;…&#xff0b;MkMkbk &#xff08;modm&…

【Git、GitHub、GitLab】七 git中分支的删除以及出现分离头指针的情况

上一篇文章学习了GIT中commit、tree和blob三个对象之间的关系&#xff0c;点击链接查看&#xff1a;【Git、GitHub、GitLab】六 GIT中commit、tree和blob三个对象之间的关系 文章目录1 git中如何删除分支2 分离头指针的情况需要注意什么1 git中如何删除分支 如何查看分支&#…

Windows 中自定义Error Codes

Windows 中自定义Error Codes的格式: Bits:31-30292827-1615-0ContentsSeverityMicrosoft/customerReservedFacility codeExceptioncodeMeaning0 Success1 Informational2 Warning3 Error0 Microsoft-defined code1 customer-defined codeMust be 0The first 256 values …

【Git、GitHub、GitLab】八 如何修改commit的message

上一篇文章记录了git中分支的删除以及出现分离头指针的情况&#xff0c;点击查看:【Git、GitHub、GitLab】七 git中分支的删除以及出现分离头指针的情况 文章目录1 如何修改最新的commit的message2 如何修改老旧的commit的message3 如何将连续的多个commit整理成一个4 如何将间…

What means the error-message 'java.lang.OutOfMemoryError: GC overhead limit exceeded' in Java?

转国内的&#xff1a; 一、异常如下&#xff1a;Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded 二、解释&#xff1a;JDK6新增错误类型。当GC为释放很小空间占用大量时间时抛出。一般是因为堆太小。导致异常的原因&#xff1…

【Git、GitHub、GitLab】九 工作中非常重要的一些git用法

上一篇文章学习了 如何修改commit的message&#xff0c;点击链接查看&#xff1a;【Git、GitHub、GitLab】八 如何修改commit的message 注意&#xff1b;下面的‘–’ 都是两个‘-’组成 本文介绍一些在使用git中非常常用的一些命令&#xff1a; 怎么比较暂存区与HEAD所指向的…

【Git、GitHub、GitLab】十 将git仓库备份到本地

上一篇文章学习记录了工作中常用的一些git命令&#xff0c;点击链接查看&#xff1a;【Git、GitHub、GitLab】九 工作中非常重要的一些git用法 文章目录1 git的传输协议2 如何将git仓库备份到本地2.1 使用哑协议备份2.2 使用智能协议备份1 git的传输协议 哑协议与智能协议的区别…

Ibatis XML 配置文件注释引起错误及解决方案

最近在使用Ibatis组件进行一个项目开发&#xff0c;在运行时发现提示如下错误信息&#xff1a; type 异常报告 消息 描述服务器遇到一个内部错误 (), 无法完成此请求。 异常 javax.servlet.ServletException: java.lang.ExceptionInInitializerError根本原因 java.lang.Excep…

java-XML

XML不再多说&#xff0c;XML 约束也不用说了&#xff0c;这里讲讲java如何对XML操作。 java中使用XML&#xff0c;目前常用的就是Jaxp(sun)和dom4j了&#xff0c;这里先讲讲java自带的Jaxp包 JAXP 开发包是J2SE的一部分&#xff0c;它由javax.xml、org.w3c.dom 、org.xml.sax 包…

7款开源ERP系统比较

现在有许多企业将ERP项目&#xff0c;在企 业中没有实施好&#xff0c;都归咎于软件产品不好。其实&#xff0c;这只是你们的借口。若想要将ERP软件真正与企业融合一体&#xff0c;首先得考虑企业的自身情况&#xff0c;再去选择适合的 ERP软件。 如果你的企业是高速发展的中小…

【C语言进阶深度学习记录】一 数据类型的本质与变量的本质

今天学习C语言中的数据类型的本质与变量的本质 文章目录1 什么是数据类型2 变量的本质3 数据类型与变量的关系4 自定义数据类型与创建变量5 总结1 什么是数据类型 数据类型可以理解为固定内存大小的别名数据类型是创建变量的模子 如同下面的图示&#xff0c;各个数据类型是代…

我想回宋代去@@

<故乡原风景> 静夜&#xff0c;闭上眼。梦里&#xff0c;幻里……孤刃万重山&#xff0c;天高地阔。一声塞外铃鼓&#xff0c;摇坠长河落日圆&#xff0c;夕照残阳似血。乡关日暮是何处&#xff1f;仗剑独行天涯客&#xff0c;临风勒马凭高处。不识旧时飞雁&#xff0c;任…

使用第三方Markdown编辑器编辑为知笔记

前言 为知笔记默认的编辑器并没有预览功能&#xff0c;而提供的MD编辑器插件也并不是很好用&#xff0c;但为知笔记提供了可以使用第三方编辑器的功能&#xff0c;Typora编辑器是目前最优秀的Markdown编辑器之一&#xff0c;可以很好作为第三方编辑器。 Typora介绍 Typora是…