




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于模式的局域网监控系统━客户端的设计与实现摘要:着重介绍了局域网监控软件客户端(被控端)程序的设计方案,分析实现局域网监控的技术基础和软、硬件环境要求,详细论述了C/S网络系统的Socket通信过程和编程思想。并通过开发实例阐述了WiSockets在C/S结构的网络中远程通信的应用,使客户端实现了屏幕抓取、黑屏、锁定鼠标、关闭计算机、隐藏任务栏、隐藏桌面等功能。另外,要求客户机只有在收到服务器发送的特定指令时才能进行以上操作,否则弹出接收信息文字的文本框,同时还详细分析了屏幕抓取及其保存与发送的设计思想及实现方法。关键词:Sockets屏幕抓取nsockAMonitoringSystemofLANBasedonC/S—ThedesignandrealizationofClientABSTRACT: ThispapermainlyintroducesadesignoftheclientinLANmonitoringsoftware.Itanalysesthebasictechnologyandthesoftware/hardwareenvironmentrequirementsoftheLANmonitor,italsoelaboratesthesocket communication and the programming idea of the Cnetworksystem.Withanactualcase,itshowstheapplicationofremotecommunication,causestheclienttorealizethescreencapture,blackscreen,computershuttingdownandrestarting,taskbaranddesktophidingandsoon.Inaddition,theclientwillfollowtheseoperationsonlyifitreceivesthespecificinstructionsfromtheserver.Otherwise,itwillspringtextboxtoreceivetheinformation.Inthispaper,italsoanalysesthedesignideaandrealizationofscreencaptureindetail.KEYWORDS: Sockets Thescreencaptures WinsockAPI目 录1 技术基础 11.1 远程控制 11.2 API 11.3 编程工具 22 设计思想(客户端) 32.1 客户端(被控端)监听 32.2 客户端(被控端)连接 33 客户端(被控端)设计过程 33.1 系统流程图 33.2 界面设计 43.3 功能设计 64 实验结果 94.1 发送信息 94.2 屏幕抓取 95 遇到的问题及解决方法 96 软件的优点和缺点 10参考文献 11引 言(1) 背景当今社会,让学生如何正确使用网络正困扰着越来越多的老师,将学校网络接入互联网的意义已无需争辩,但有时不免产生许多令人头疼的问题:许多学生在上机课时泡在网上,或通过MSN、QQ和朋友聊天,或查看与学习不相关的网站,学习无效率可言;在公司里员工将公司当作网吧,工作也没效率,甚至于泄露公司的机密资料。为了避免这些状况发生,也为了更有效地监控局域网的工作状况,满足计算机局域网用户的各种需求,同时因为lphi具有强大的网络功能,所以我们选择了基于lphi的局域网监控软件的课题。(2) 远程控制的发展史及前景起初,使用远程控制软件,是为了让用户在离开办公室时能访问其台式硬盘中的信息,甚至可以通过其台式访问企业网络资源。今天,许多企业和增值分销商正在把远程控制能力作为有效的技术支持工具。很多网络管理员都采用这类软件对局域网进行管理,或者在家中更新自己网站的内容。这类软件对于出差在外的商务人员用处非常大,因为他们可以随时提取自己家里计算机中的数据和资料。远程控制软件在计算机远程教学和培训中也发挥了不少的作用,使身处异地的学生能够与老师进行实时交流,犹如坐在同一教室一般。近年来,黑客技术不断成熟起来,对网络安全造成了极大的威胁。黑客的主要攻击手段之一,就是使用远程控制技术,渗透到对方的主机系统里,从而实现远程操作目标主机。其破坏力之大,是绝不容忽视的。随着网络技术的进一步发展,网络速度越来越快,家庭办公将成为未来的时尚,远程技术支持将逐渐占据技术支持的主流。远程教学和培训也将快速发展,企业规模将迅速扩大。所有这些发展都为远程控制软件提供了一个广阔的天地。(3) 已有的成果和先进技术如灰鸽子远程控制软件,对被控机器进行的操作包括:文件管理、获取系统信息、shell,提供代理服务,注册表编辑,启动telnet服务,捕获屏幕,视频监控,音频监控,发送音频,卸载灰鸽子……可以说,用户在本地能看到的信息,使用灰鸽子远程监控都能看到。还有其他软件比如:Netfinity5.51,引起广大用户反响的国内软件等,都是功能强大的远程控制软件。(4) 软件内容和采用的方法我们现在所研究的系统只是最基本的局域网的远程控制,其主要功能包括:自动搜索主机,监控受控端计算机的屏幕,发送信息,在本地操作受控计算机,关闭、重启受控计算机、锁定鼠标、黑屏等等。本软件的特点在于使用nSock函数和网络远程控制技术实现对局域网中多台计算机的管理、维护和监控。(5) 软件的组成及运行环境本系统由服务器(监控端)程序和客户端(被控端)程序组成,只要客户机和服务器都连上网络(都支持P协议)就可以工作。rol.exe装在服务器(监控端)上,监控端执行程序。rcontrol.exe装在客户端(被控端)上,被控端后台监控程序,运行时该界面自动隐藏。本软件在ndow,lphi6.0下运行通过。1 技术基础1.1 远程控制我们所说的远程控制指局域网内的远程控制而言,远程控制是管理人员在主机通过网络,连接远程计算机,通过本地计算机对远程计算机进行管理和维护的行为,当操作者使用主控端电脑控制被控端电脑时,就如同坐在被控端电脑的屏幕前一样,远程控制技术的工作方式采用C/S(客户机/服务器)模式,控制计算机与被控计算机连接成功后,通过网络的互联协议(进行远端控制。控制机好比一个超级用户,可以直接控制远端计算机。远程控制将被应用于家庭办公、远程教学、企业内部管理等领域。其控制的过程一般是先在主控端电脑上执行服务器程序,像一个普通的客户一样向被控端电脑中的客户端程序发出信号,建立一个特殊的远程服务,然后通过这个远程服务,使用各种远程控制功能发送远程控制命令,控制被控端电脑中的各种应用程序运行,我们称这种远程控制方式为基于远程服务的远程控制。1.2 nsockAPIn32应用程序接口()n32,是用来编制控制Wi操作系统的编程接口,由一组包含在动态链接库中的函数和子程序组成,通过它们可以编程访问操作系统的功能。在该软件设计中涉及很多Wi底层操作,软件的主要功能皆由n32函数来实现。网络编程技术是本软件设计中用到的主要技术之一。在Wi操作系统环境下应用程序通过编程接口访问TCP/IP协议集的应用程序编程规范称之为WinSockAPI。nsock提供了一系列的系统调用,使用这些系统调用可以实现TCP、UDP、ICMP和IP等多种网络协议之间的通信;它采用客户机/服务器的通信机制,使网络客户机方和服务器方通过各自的Socket接口形成—个完整的套接字,如图1-1所示。在客户机与服务器之间建立通信信道,实现网络间的连接管理,并可进行数据交换。套接字是网络通信的基石,是支持TCP/IP协议的网络通信的基本操作单元;可以将套接字看作不同主机间的进程进行双向通信的端点;一个套接字是通信的一端,在这一端上可以找到与其对应的一个名字;一个正在被使用的套接口都有它的类型和与其相关的进程;套接字存在于通信领域中。DelphiSocket进行了一系列的封装,而本软件的通信就是用Tclientsocket控件和Tserversocket控件这1两个控件来完成的。服务器 客户机SSocket()BBind()LListen()Accept(Accept()Socket()Connect()Recv()Send()阻塞,等待客户数 建立连接请示Connect()Recv()Send()处理服务请求Send()Recv()应答Send()Recv()Close(Close()Close()图1-1socket接口示意图在系统中利用socket进行网络通信有两种主要方式:第一种是流方式(Streamsocket),也称面向连接方式(用于实现TCP协议),这种方式下,两个应用程序之间先要建立一种虚拟的连接,Streamsocket提供了一种可靠的面向连接的数据传输方法,数据无差错、无重复地发送,且按发送顺序进行接收;第二种是数据报方式(Datagramsocket),又称无连接方式(,在进行数据传送以前两端的程序不需要任何沟通,但没有提供可靠的、有次序的、无重复的保证,数据包以独立包形式被发送,不提供无错保证,数据可能丢失或重复,并且接受顺序混乱。本软件使用Streamsocket实现数据传输。1.3 编程工具lphi集中了Visualsualsic两者的优点:容易上手、功能强大,特别是在界面设计、网络编程等方面更有其独特的优势。所以选用Delphi作为开发工具。22 设计思想(客户端)本软件是由Delphi编写的,如图1-1所示,主要运用Delphi中的Tclientsocket控件和Tserversocket控件来实现客户端与服务器的连接,以及相互之间数据的发送和接收。2.1 客户端(被控端)监听客户端(被控端)在某个地址的某个端口(如2058)监视对服务的请求,也就是说被控进程一直处于休眠状态,直到一个控制端对这个服务的地址提出连接请求,被控端如监听到控制端Socket的连接请求时,被控程序被唤醒并且对控制端的请求做出适当的反应,即响应控制端Socket的请求而建立一个新的Socket句柄与控制端连接。2.2 客户端(被控端)连接当客户端Socket接收到服务器Socket的连接请求后,就把客户端Socket的描述信息发给服务器一旦服务器确认了此描述,连接就建立了。(本软件在被控端程序运行时socket控件的active属性为true,所以只要接收到连接请求就自动连接上了)建立连接后客户端通过辨别服务器发过来的消息,分别进行响应不同的操作,也就实现了远程控制的功能。ServerSocket的属性设置:tive,属性设为true;·t,是通信的端口,必须设置。在软件中设置为2058;ServerTypt,服务器端读写信息类型,设置为stocking表示异步读写信息,软件中采用这种方式。其它属性采用默认设置即可。3 客户端(被控端)设计过程3.1 系统流程图图3-1为客户端(被控端)程序的系统流程图,为了达到远程控制的目的,就必须将被控端软件隐蔽起来,所以被控端的程序只是后台监控程序,并且没有退出程序,也就是说程序一旦运行只有通过关闭进程的方法才能退出程序。控制端和被控端的socket连接起来后也就形成了一个通信通路,控制端发送一个命令,被控端通过socket的receivetext函数将命令从连接中接收出来放到字符串变量S中,再由S中不同的字符串来判断响应哪个事件,然后通过调用不同的API函数来实现控制功能。3开 始欢欢迎界面选选择判断屏幕抓取关机重启黑屏解除黑屏锁定鼠标解除锁定显示桌面隐藏桌面隐藏开始显示开始隐藏任务栏显示任务栏其他接收消息接收到的命令存放在变量S中初始化套接字在命令端口监听3.2 界面设计
图3-1 系统流程图客户端的界面主要包括三个:启动时的欢迎界面,程序主界面和黑屏界面。3.2.1 启动时弹出的欢迎界面启动程序后,在主导界面出现之前,弹出的一个欢迎界面,停留数秒后软件进入主导界面,这个画面的另外一个用处是在处理耗时进程时,为用户展示了一幅优美、舒心的图像,如图3-2。实现欢迎界面是在其他窗体之前最先弹出,在Undercontrol.dpr单元中begin后使友好界面窗体最先显示,其他窗体创建之后,为友好界面设置一个停留时间,方法4是调用Sleep(lliseconds)函数使程序的执行延时给定的时间值。函数功能是:暂停当前的进程milliseconds毫秒。如软件中为sleep(3000),延迟3000毫秒后隐藏欢迎窗体,并释放其占用的内存资源,但是如果延迟时间较长的话程序看起来好像暂时死机,因为程序不能够响应延时期间发生的其他消息。3.2.2 程序主界面
图3-2 欢迎界面把一个seversocket控件放到form上,则应用程序就变成了一个TCP/I置erversocket的port属性指定的端口号和服务器port的端口号一致(本软件为2058),在窗体创建时把serversockettive属性设为true,则客户端(被控端)在启动后就会自动进入监视状态。为了达到远程控制的目的,就必须将被控端软件隐蔽起来,作为一个后台监控程序,所以其界面要隐藏,并且在任务栏、任务管理器中也不能显示。1) 实现在任务管理器中隐藏:在frorreate事件(窗体创建)中调用ShowWindowAsync(Application.Handle,SW_HIDE)函数,它的功能类似于ndow函数,控制可见性,第一个参数为窗口句柄,但它立即返回(不用等待目标程序返回隐藏信息)。并且它有一个副作用:从任务列表中移除目标窗口,将第二个参数设为hide。所以调用该函数可以实现在任务管理器(Ctrltl)中隐藏程序。2) 在任务栏里隐藏程序:将隐藏的应用程序窗口设为Toolndow来移走程序的任务条图标而避免它再次出现。Tool永远不会有任务条图标。调用API5tndowLong和SetndowLong来使应用程序窗口成为一个Tool3) 实现界面最小化:只需在frorm窗体的oncreate事件中使窗体的atnized就可以了;通过上面三步的设置,客户端程序在运行时欢迎界面过后,程序主界面将不会显示在桌面、任务栏、任务管理器里,只会在后台运行。3.2.3 黑屏界面在客户端在执行响应黑屏事件时,会弹出黑屏界面,在执行解除黑屏时,关闭黑屏界面,它的功能是在主窗体里调用的。将其align属性设为alclient,其boderstyle风格设为bsnone,使界面在处于最大化时整个窗体都是黑屏,并且是满屏的。3.3 功能设计客户端通过调用socketceivetext函数将收到的命令数据存放在字符串变量S中,然后根据S中得字符串的不同来响应不同的操作。ceivetext在Socket连接中读取字符串。该函数返回连接中已读取的字符串,它只能工作在非阻塞的方式下,要在阻塞方式下读取信息用Receivestream函数。如S:ket.ceivext;将收到的字符串指令放在变量S中。3.3.1 关机当客户端(被控端)接收到S中的字符串为‘closendow’时,则响应关机操作,先提升用户权限,然后通过调用InitiateSystedown()函数来实现操作,再调用showmessage()函数来显示关机的对话框。要提升用户权限,先调用OpeocessToken()函数打开一个进程中相关联的访问标志:ocessToken(trentocess,hToken);第一个参数trentocess()函数的作用是得到本进程的句柄;对访问令牌改变特权;再调用LookupPrivilegelue(nil,'SeShutivilege',tkp.ivileges[0].Luid)通过第二个参数指定权限名字为关机权限,然后返回一个标识符;最后调用AdjustTokenPrivileges(hToken,lse,tkp,0,nil,rl)函数来修改指定访问标志的权限,设置权限能还是不能;tkp为新的权限信息。xitindosx(_S,0)函数可以关掉或是重启网络上和本地的任意一台指定的计算机,将第一个参数指定为_S实现关机功能。3.3.2 重启当客户端接收到S中的字符串为‘res’时,则响应重启操作,类似于关机6操作,先要调用上面三个函数提升权限,然后通过调用Exit0)3.3.3 隐藏任务栏在中,系统的任务栏本质上也是一个窗口,其窗口类名为“Shellay。当客户端接收到S中的字符串为‘notaskbar’时,则响应隐藏任务栏的操作,首先调用API函数findow(‘shell_traynil);获取了任务栏窗口的句柄,然后调用shwnd1,sde)通过第二个参数指定其类型为hide,来实现对窗口的隐藏。3.3.4 显示任务栏当客户端(被控端)接收到S中的字符串为‘yestaskbar’时,则响应显示任务栏操作,和上面的一样,先调用fi'shell_tray,nil);来获得任务栏窗口的句柄,然后调用shwnd1,s;指定其类型为show,则任务栏就显示出来了。3.3.5 隐藏开始按钮当客户端接收到S中的字符串为‘nobutton’时,则响应隐藏开始按钮操作,先调用fi'shell_tray,nil)来获得任务栏窗口的句柄;然后调用gethild)函数来获得任务栏上最上面的窗口句柄,gw_child为源窗口上最上面的窗口(即开始按钮);再调用getclassna()为指定的窗口取得类名,最后调用shwnd1,sde)指定其类型为hide,开始按钮也就隐藏了。3.3.6 显示开始按钮当客户端接收到S中的字符串为‘yesbutton’时,则响应显示开始按钮操作,先调用fi'shell_tray,nil);来获得任务栏窗口的句柄,然后调用gethild)函数来获得任务栏上最上面的窗口句柄(即开始按钮),再调用getclassnas指定其类型为show,开始按钮也就显示了。3.3.7 隐藏桌面桌面本身就是一个窗口,其窗口类名为‘Prn',当客户端接收到S中sktn',nil)来获取桌面窗口的句柄。然后调用ShowWisktop,将其类型设为hide,桌面就隐藏了。3.3.8 显示桌面7当客户端接收到S中的字符串为‘yesdesktop’时,则响应显示桌面操作,先调用‘Prnil)sktop,将其类型设为show,桌面窗口就显示出来了。3.3.9 黑屏当客户端(被控端)接收到S中的字符串为‘blacksrn’时,则响应黑屏操作。要实现整个屏幕都是黑屏在响应黑屏的事件中使Wiate的属性设为Wsxized就可以了。并且在处于黑屏状态时要使黑屏窗体是在桌面最前面显示的窗体,调用setforegrapplication.ndle)即可实现。3.3.10 解除黑屏当客户端(被控端)接收到S中的字符串为‘noblacksrn’时,则响应解除黑屏操作,直接将黑屏窗体关闭,调用其close方法即可。3.3.11 锁定鼠标当客户端(被控端)接收到S中的字符串为‘nomouse’时,则响应锁定鼠标操作,a:ect(0,0,5,5);rect()函数用来设置移动区域,将范围设置在桌面左上角的正方形框中;然后用Clisor();将鼠标锁定在上面设置好的区域内。3.3.12 解除锁定当客户端(被控端)接收到S中的字符串为‘yese’时,则响应解除锁定鼠标操作,直接调用Clisor(nil)将鼠标解除锁定。3.3.13 抓取屏幕当客户端(被控端)接收到S中的字符串为‘getscreen’时,则响应抓取屏幕的操作。包括抓取整个屏幕,并将图片存在被控端某一指定的位置,将图片转换为J格式并将图片传送回控制端。1) 抓取屏幕要抓取的是被控机的整个桌面,所以将其整个屏幕screen的大小赋值给一个bitp变量就可以,然后返回其句柄,调用getdc(0)函数,参数0指屏幕。2) 保存图片到文件中,jep.Savele(‘c:\you.Jpg’);将图片保存到c盘下的you文件里。3)将抓取的图像传回控制端,:jep.assign(ige1.cture.tp);将ige1抓取的BMP图像转成J便于在互联网上传输;再调用savetostreamjep.SavereaStrea;将JPG图像写入流中,传回到控制端。84 实验结果4.1 发送信息服务器端(控制端)点击发送信息时,会在客户端(被控端)弹出个文本框来显示发送的内容,如图4-1所示:服务器端发送的消息 客户端接收到的消息图4-1 发送与接收消息4.2 屏幕抓取当服务器端点击抓屏时,客户端会抓取自己的屏幕,并先保存在自己的窗体的ige中,然后保存到被控机的c盘根目录下,如图4-2:图4-2 客户端的界面中显示的被控机的桌面5 遇到的问题及解决方法当我们将控制端和被控端装到同一台机子时,点击关机按钮,可以关闭计算机,但是将控制端和被控端分别装到两台不同的计算机时,再点关机按钮就没有反应;点9击重启按钮时无论装在一台还是两台机子上都没反应;这是控制权限的问题,2000等已经加强内核安全性的操作系统,要控制远程机关机、重启,程序必须拥有一定权限才能成功调用这些函数。通过函数来实现权限提升后,就能控制远程主机的关机和重启了。在连续点击控制端的控制按钮时,不是一个一个响应其相对应的事件,而是弹出了发送信息的对话框,并且对话框中显示的内容是点击过的控件发送的字符串的连接,怎样就能使每个控件之间相互没有影响呢?我们使存放接收到的命令数据S在每次执行后都清空一次,这样当连续点击的时候都不会出现上面的错误了。在点击黑屏时,还会有其他运行界面在黑屏上显示,也就是说黑屏界面并不是在桌面最前显示的,我们通过调用了Setforegrndow
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 俱乐部年终活动方案
- 俱乐部赞助活动方案
- 倾听老人活动方案
- 假日课堂社区活动方案
- 假期手工活动方案
- 假期种植活动方案
- 做活动礼品活动方案
- 停止赶集活动方案
- 健康关怀活动方案
- 健康垂钓活动方案
- MOOC 数字电子技术-中南大学 中国大学慕课答案
- 英汉互译单词练习纸背单词
- MOOC 家庭与社区教育-南京师范大学 中国大学慕课答案
- MOOC 创业管理-江苏大学 中国大学慕课答案
- 考古发现与中国文化智慧树知到期末考试答案2024年
- 《医疗质量管理办法》解读
- 小学数学强基计划模拟测试3
- 幼儿园-大班-课件-《男孩女孩》
- 门诊护士分诊培训课件
- 中职学考《职业道德与法律》考试复习题库(含答案)
- 专兼职驾驶员培训
评论
0/150
提交评论