1. 引言
目前,计算机可以说是各行各业都无法离开的工具,这使得计算机软件、硬件技术都呈现出高速发展的态势,与此同时,互联网络的发展也极为迅速,越来越多的企业甚至是个人用户开始使用云计算。资源的虚拟化、可定制化与按需使用的特性使得云计算可以在各行各业中发挥巨大的作用,用户可以在任何地点、时间按需使用和定制云平台上的各种资源与服务。在云计算的基础上,衍生了许多基于云计算的应用软件,随着云计算技术的发展,企业都开始着手部署自己的云平台。一般而言,其规模都比较庞大,在这种情况下,如何对接入云平台的终端机集群作维护和管理就显得尤为棘手。因此,如果能有一个对接入云平台的终端机集群作批量化远程访问与控制,这样的工作就会变得十分简单,而且不会出现任何错误。
对目前的云平台来讲,一方面接入云平台的终端机数量与日俱增,另一方面,不同的终端机可能位于不同的地理位置,维护人员不可能针对每一台接入云平台的终端机单独进行处理,这就是集群化控制系统需要解决的问题。目前的一些远程控制技术在信令与文件的传输上也可能存在问题,包括明文传输、“中间人”攻击,无法一对多进行控制分发等 [1] ,这也是集群化控制系统需要解决的问题。另外,从一些项目经验来看,客户也需要一些目前已有的集群化控制系统所不具备的一些功能,比如广播消息,可以实时地向终端机发送广播消息并在终端机上显示出来;特殊功能,禁用终端机上一些WINDOWS功能以达到统一管理的目的;远程桌面功能,能够远程实时观看终端机桌面并进行控制,可以完成一些故障的技术支持工作等。一般来讲,远程控制技术主要基于四种网络通信技术,包括局域网与广域网,互联网与拨号 [2] 等。也有一些特殊的远程控制技术会使用串口、并口、红外甚至蓝牙等技术实现,但也有少数新型远程控制技术的出现使用了不同的协议方法,例如使用JAVA或者C#通过网页去进行远程控制 [3] ,这种方式的好处在于一是采用B/S架构,无需再安装相应的控制软件,二是可以进行跨平台的远程控制。本套系统中,最为重要的网络体系分为主控网络体系与受控网络体系结构两个部分。就主控网络体系结构而言,从其网络的拓扑结构来看,主控网络体系结构一般有星型结构,阶梯型结构与离散型结构 [4] [5] 三种设计方式。
2. 终端集群化控制系统
2.1. 终端集群化控制系统的需求分析
在多次的云平台项目部署实施过程中,由于客户对于自己所需的业务各不相同,导致对于接入云平台终端的机器需要做个性化处理,比如某位用户需要使用打印机相关驱动,某位用户需要使用触摸板相关驱动,某位用户需要对浏览器做安全网站信任授权等等,在传统的做法中,通常是由运维组的工作人员人工的按照客户的要求逐台机器去做个性化处理,这种方法不仅容易出错,而且会浪费大量的人力资源,也会延误整个云平台项目部署工作的进展。在大规模云平台部署情况下,接入云平台的终端机数目可以达到几百甚至上千台,在这种情况下,使用传统做法去做个性化处理或者批量性的工作就变得异常困难。因此,对于云平台管理员而言,一套终端集群化控制系统能够大大简化其工作量,节省平台部署与调试的时间。
2.2. 终端集群化控制系统的功能
对于云平台的管理员而言,系统需要具备如下功能:
1) 终端机扫描功能
在云平台管理员登录云平台并启动系统主控程序后,首先需要根据所需扫描的网段正确填写网段号并选择相应的扫描方式进行扫描。扫描过程开始之前首先会对管理员填写的网段号进行合法性检查,在网段号合法后根据管理员选择的具体扫描协议进行相应的扫描工作。若管理员选择TCP协议进行扫描,则首先会创建扫描线程组成线程池,之后使用TCP三次握手机制向不同的网络地址发起异步TCP连接尝试,超时时间设定为三秒,若在超时时间内成功与终端机建立TCP链路则会将该终端机显示在主控机界面终端机列表栏中,否则线程进入睡眠;若管理员选择UDP协议进行扫描,则首先会向该网段发出封装好的UDP广播包,之后收到该广播包的终端机会反向向主控机进行TCP连接尝试,成功与主控机建立TCP链路的终端机会显示在主控机界面终端机列表栏中。若用户选择NETBIOS [6] [7] 协议进行扫描,则首先会向该网段发出一个封装好的NETBIOS数据包,之后NETBIOS数据包返回并给出当前子网中在线的终端机信息,之后根据得到的终端机信息唤醒相应数目的线程向相应终端机发起TCP连接尝试,建立TCP命令传输链路成功的终端机会显示在主控程序终端机列表栏中。
2) 命令传输与执行功能
在完成终端机扫描工作后,用户可以根据需要填写相应的命令与执行参数,并且可以选择需要接收命令并执行的终端机集群,之后命令经由命令传输链路传输至选定的终端机上,由终端机进行解析并完成相应的功能。不论命令执行成功还是失败,都应将相应的反馈报告传输至主控机并在主控机命令执行情况列表栏中显示出来,供用户参考。命令的执行可由用户在填写参数时指定是否使用管理员权限执行,这样可以避免某些命令执行的时候缺少足够的权限而导致的问题。
3) 文件传输与校验功能
在完成终端机扫描工作后,用户可以根据需要选择相应的文件,并且可以选择需要接收文件的终端机集群,之后所选文件经由文件传输链路传输至选定的终端机上,并完成文件的校验。在发送文件之前,用户也可以选定文件的传输格式,二进制格式或者文本格式,以使得传输的各种类型的文件不会因为格式问题而导致不一致的现象产生。文件传输成功或者失败,文件传输完毕之后校验的成功或者失败,都应将相应的反馈报告传输至主控机并在主控机程序文件传输信息反馈列表栏中显示出来,供用户参考。
4) 广播消息功能
在完成终端机扫描工作后,用户可以根据需要填写一份广播消息通知,并选择需要接收该广播消息的终端机集群,之后该广播消息会经由命令传输链路传输至选定的终端机上,并实时地在收到该消息的终端机上显示出来。广播消息需要能在磁盘上保存一定数量与时间,方便用户后续的审阅。另外,存储于磁盘上的广播消息能在超过一定的数量阈值后自动将最早的广播消息进行清理,防止浪费过多的磁盘空间。广播消息功能比较简单,用例图不再赘述。
5) 特殊功能
在完成终端机扫描工作后,用户可以根据需要选择一些特殊功能,包括禁用ALT + F4、ALT + TAB、CTRL + TAB、WIN等WINDOWS快捷键,以及禁用控制面板、禁用任务管理器等WINDOWS功能,并且可以选择需要执行这些特殊功能的终端机集群,之后主控机程序会自动封装选择好的功能组成数据包并经由命令传输链路传输至选定的终端机上,终端机完成相应的功能。特殊功能执行的成功或者失败情况也应将相应的反馈报告传输至主控机并在主控机命令传输信息反馈列表栏中显示出来,供用户参考。
6) 远程桌面
用户可以单独对需要发起远程桌面的终端机进行扫描工作,之后可以选定需要远程桌面的终端机,发起远程连接请求。之后主控机端能够传回选定的终端机的桌面图像,并且可以对视频帧率、视频质量、是否启用压缩机制等进行调节,以适应不同的设备情况与不同的网络状况。另外,用户在远程桌面的同时可以开启或者关闭远程协助功能,开启该功能后,主控机的用户能够直接通过主控机对终端机进行控制,包括鼠标动作与键盘动作等。
2.3. 终端集群化控制系统的架构
整个系统分为三层,分别是应用层、网络层、操作系统层。各层功能如下:
应用层:应用层主要负责整个终端集群化控制系统各个功能模块的发起与相响应,包括终端机的扫描、信令的发送、文件的传输、广播消息的发送、特殊功能的完成,远程桌面的接收,以及终端机对于各种操作的响应回执状态。其中,终端机的扫描主要是为用户提供扫描机制的选择,扫描网段的填写等功能。信令的发送主要是为用户提供具体信令的填写,信令的执行方式,需要执行信令的终端机的选择等功能。文件的传输主要是为用户提供文件选择浏览器,文件发送方式,是否需要校验,需要接收文件的终端机选择等功能。远程桌面主要是为用户提供与之相关的各项参数设置,包括帧率,是否启用压缩机制,图像质量以及屏幕分辨率等,还包括需要发送桌面的终端机的选择等功能。
网络层:主要采用TCP与UDP实现,另外考虑到终端机主要为WINDOWS系统,在扫描阶段可以使用NETBIOS广播,效率更高。扫描阶段使TCP、UDP、NETBIOS三种协议方式,主要是为了适应不同的网络环境,为用户提供多种扫描方案供选择。TCP方式主要是使用标准的三次握手连接尝试,使用一定的超时量作为扫描判断标志。UDP方式主要是使用UDP广播数据报来向局域网内发送广播,终端机接收广播并进行反馈从而完成扫描功能。NETBIOS方式主要是利用NBNS数据报 [8] 扫描局域网内开机、数据报可达的所有机器信息,之后再对这些已经筛选过的机器进行TCP三次握手连接尝试,从而提高扫描效率。所有数据的传输,包括信令,文件,图像数据流,均使TCP协议,三种数据的传输均具备各自独立的TCP链路,互不干扰。
操作系统层:整个基于云平台的终端集群化控制系统基于WINDOWS操作系统,在这一层,主要由终端机来完成一系列实际的操作功能,包括解析收到的信令并按照指定的权限来进行信令的执行工作,接受文件并保存在指定的磁盘位置,将显示设备内容输出到内存并保存为图像流数据等功能。在主控端一方还需要部署一个WINDOWS全局鼠标钩子与全局键盘钩子 [9] ,用于捕获主控端所有鼠标与键盘消息,从而达到远程控制的目的。
整个系统各个层次间衔接紧密,彼此互相关联,协同工作,缺一不可,共同完成所有的工作。系统整体架构如图1所示。
2.4. 终端集群化控制系统的实现
2.4.1. 文件传输模块实现
终端机首先在9799端口进行TCP监理的监听工作,主控机端在用户扫描到终端机后,向管理员选择的终端机集群9799端口发起TCP连接,之后双方可以进行文件传输工作。主要的流程如下:
1) 管理员单击主控程序界面的“浏览”按钮,进行文件的选择,之后在目标存放路径一栏中填写需要保存的路径信息。
2) 主控程序后台分析文件,使用GetFileSize方法获取文件精确大小,使用GetMD5方法获取文件MD5码并使用fopen函数打开文件。
3) 管理员单击主控程序界面的“发送”按钮,后台将管理员选择的所有终端机IP填写至一个vector容器中,之后对容器进行循环,依次调用CreateThread函数创建sendFileWorker线程。
4) sendFileWorker线程启动后开始执行发送文件前的准备工作,主要是使用SendCommand方法将文件大小与MD5码发送至终端机,终端机接收到文件信息后,JobManager线程会将任务指派给fileWorker线程,fileWorkek线程使用SendCommand方法反馈已做好文件接收准备的信息,信息码为|READY|,之后开始文件传输循环工作,循环流程为主控机按照定义好的发送缓冲区大小8192字节进行发送,每发送成功一次,当前的发送大小增加,增加的大小为send函数返回的实际发送大小,直至当前发送大小等于文件总大小为止;终端机接收的时候也维护一个当前接收大小值,接收的缓冲区大小同样设置为8192字节,但是并不是每次接收成功一次就写回到磁盘一次,这样效率不高,而是设置一个磁盘写回缓冲区,该缓冲区大小设置为81,920字节,也就是说,每10次接收循环才写回磁盘一次,最后当前的接收数据大小等于文件实际大小时,再写回磁盘一次,整个接收循环流程结束。
5) 终端机服务端程序调用FileCheck方法对接收到的文件进行MD5码校验,并将校验结果信息通过SendCommand方法反馈至主控机。
6) 主控机使用RecvCommand方法接收来自终端机的文件传输结果信息反馈,并将反馈信息显示在文件传输结果列表栏中。
文件传输模块详细流程如图2所示。
2.4.2. 广播消息模块实现
广播消息封装与传输流程如下:
1) 管理员单击主控程序界面的“通知”按钮,弹出广播消息填写对话框,之后根据需要填写相应的广播消息标题、发件人与正文等信息。
Figure 2. Detailed process of file transmission module
图2. 文件传输模块
2) 主控端后台程序对管理员填写的广播消息进行封装。
3) 广播消息封装完毕后,主控端后台会唤醒messageThread线程,该线程首先会调用ResetContent方法清空之前的命令执行反馈列表,并要求用户选择需要接收广播消息的终端机集群,接着调用SetPos与SetRange方法重置任务进度条。
4) messageThread线程将选定的所有终端机IP填入一个vector容器中,并在容器中开始循环,使用SendStruct模板方法将封装好的广播消息发送至终端机。
5) messageThread线程使用RecvCommand方法接收来自终端机的广播消息传输反馈信息,并显示在主控端程序界面的命令传输反馈结果栏中。
广播消息传输流程如图3所示。
Figure 3. Broadcast message transmission flow chart
图3. 广播消息传输流程图
3. 结束语
在目前计算机硬件、软件、互联网高速发展的时代,各行各业已经离不开计算机,离不开互联网,因而兴起了云计算,各大公司纷纷搭建自己的云平台,以求能够高效地工作。然而,由此带来的大规模下对接入云平台终端集群的管理问题变得日益严重,单靠传统人工的方式极难去完成管理工作。基于上述问题,终端集群化管理系统的研究显得特别重要。本套系统功能完善,包括命令执行,文件传输,广播消息,特殊功能,远程桌面等,基本涵盖了远程控制所需的常用功能。终端机程序对用户透明,大部分功能无需用户参与,独立性强。