资源描述
山东科技大学学士学位论文 摘要1摘要摘要局域网监控系统是通过获取被控端的系统信息,实现可靠、实用、方便、高效的计算机安全管理系统。它主要应用远程监控技术对局域网内的计算机运行状态进行监控。通过获取被控端计算机实时的运行信息,局域网管理者可以在控制端查看任意一台局域网内被控端计算机的使用情况,随时监视局域网内计算机流量的运转状况,实现对局域网监控管理。本文首先介绍了网络软件运行监控系统的背景和研究范围,以及研究的目的及意义。概述了局域网监控系统开发中所应用到的关键技术:socket的网络编程技术,并在此基础上提出了局域网软件运行监控系统的总体框架和设计。本系统将对服务器端屏幕进行截取,并将屏幕信息传送给客户端,本系统采用面向对象的设计方法设计,最后对局域网监控系统的监控端和被控端的各个模块的具体实现进行了详细阐述。被控端的主要模块有:系统信息获取模块。系统状态信息获取有三个功能分区:屏幕信息的获取、端口的打开、发送屏幕信息三个小模块。控制端主要的模块有:系统连接模块、被控端桌面信息获取模块、桌面信息保存模块、局域网内部流量监测模块。关键字关键字:局域网;VC+;桌面捕捉;流量监测山东科技大学学士学位论文 摘要1AbstractAbstractLAN monitoring system is accused by getting the system information and obtain reliable, practical and convenient, efficient computer security management system. It is mainly used for remote monitoring technique wlan computer running state monitor. By getting accused of running the real-time information, computer control side managers can in LAN LAN check any one accused of end the use of computers in LAN, computer monitor at any time, to realize the flow of operation condition of the LAN monitoring management. This paper firstly introduces the network software running monitoring system of background and research scope, and the purpose of the research and significance, summarizes the LAN monitoring system used to develop the key technology: the network programming technology socket, and proposed in this foundation the LAN software running monitoring system design and the overall framework. This system will server on the screen, and will only screen interception of sending control terminals, this system USES object-oriented design method of local area network design, final monitoring and control system of monitoring terminal and accused the concrete realization the modules are expatiated. The main module has accused state information acquisition module system. The system state information acquisition has three modules: the screen information acquisition, port open, send screen information module. The main module control side: the system connecting module, are accused of end desktop information acquisition module, desktop information preservation module, LAN internal flow monitoring module. Key word: LAN; VC + +; Desktop capture; Flow monitoring 山东科技大学学士学位论文 目录1目录目录1 1 绪论绪论.1 11.1 课题研究背景.11.2 研究范围及技术要求.31.3 套接字相关概念.41.4 局域网软件监控系统设计的目的和意义.51.5 论文组织结构.62 2 系统设计系统设计.1 12.1 需求分析.12.2 可行性分析.12.3 设计目标.22.4 系统功能结构.22.5 用户界面.22.6 程序流程图.42.7 系统运行环境.53 3 系统详细设计系统详细设计.1 13.1 被控端模块设计.13.2 系统连接模块设计.33.3 桌面捕捉模块设计.73.4 桌面图片保存模块设计.123.5 局域网流量监控模块设计.154 4 总结和展望总结和展望.1 1致谢致谢.3434参考文献参考文献.3535山东科技大学学士学位论文 绪论11 1 绪论绪论1.11.1 课题研究背景课题研究背景Internet 在我国刚刚起步时,上网人群主要是从事 IT 技术的专业人员,年龄段多是中年人,随着我国科技的发展,随着互联网的迅速普及和完善,网络涉及到我们日常生活的方方面面。越来越多的家庭和企业通过互联网来进行交流和沟通,给我们的生活带来了很多的方便。但是也存在这很多不良的信息危害青少年的健康,影响员工的日常工作。影响了孩子的身心健康,降低了员工的工作效率。局域网软件运行监控系统可以通过桌面捕捉和流量监控的方式来监督局域网中计算机的动态。局域网软件运行监控系统是通过获取被控端的桌面信息,实现可靠、实用、方便、高效的计算机安全管理系统。它主要应用远程监控技术对局域网内的计算机运行状态进行监控。通过获取被控端计算机实时的运行信息,局域网管理者可以在控制端查看任意一台计算机内被控端计算机的流量使用情况,监控局域网内部计算机的桌面并对桌面进行保存,实现对局域网内所操作的计算机的管理。从目前的发展来看,很多公司为网络资源的合理利用伤脑筋,虽然公司有明文规定,上班时间不得做与工作无关的事情;很多家长为孩子上网担心,怕他们访问不良网站,接触不良信息。有效的控制网络的应用,对于家长和公司领导来说是一个很迫切的需求。这些都为局域网软件运行监控系统提供了很好的市场和发展前景。1 1、局域网软件运行监控系统的定义、局域网软件运行监控系统的定义网络监控是指本地计算机系统通过网络(特别是 Intemet)对远端的控制系统进行监测和控制。网络监控又叫远程监控,从字面意思理解,远程指不是近距离的,监控指的是监测和控制。远程监控的又一解释是在网络上由一台计算机(主控端、客户端)远距离去控制另一台计算机(被控端服务器端)的技术,这里的远程不是字面意思的远距离,一般指通过网络控制远端电脑。网络监控是建立在现代的计算机网络技术、通信技术、控制技术以及图形图像技术上的一个新的应用。它采用多元的信息传输、监控、管理和一体化的集成,实现了信息、资源和任务的共享,达到了监控的实时、快速和高效,并能够和其他的计算机网络进行互连,向人们提供了一个更高效、更全面、更安全、更便捷的服务模式,改交了传统的监控模式。仿真监控系统的技术指标有以下几个特性:(1)实时性,它的含义是指能够实时地反映现场设备的运行状况。山东科技大学学士学位论文 绪论2(2)一致性,仿真监控系统的一致性体现在:外观:主要指仿真的物体在外观上与原件相似,包括颜色、尺寸、样式等;显示:数据的刷新与显示与现场一致;感觉:操作的感觉与现场基本一致。(3)可靠性和稳定性,监控系统在运行过程中应该可靠、稳定的运行。网络监控系统属于仿真监控系统的一种,所以它除了应该具有仿真监控系统的以上技术指标以外,由于网络监控系统还涉及到数据的大量传输,所以还应具有区别于其他监控系统的特点,主要有以下两点:数据传输的实时性;数据传输的可靠性。网络监控功能的实现一般采用客户机,服务器模式(ClientServer),由客户端和服务器端两部分组成。服务器程序安放在被控制的计算机端,客户机程序安装在控制端。在客户端和服务器端都安装成功之后,服务器端计算机提供服务,客户端在网络上可以连接到服务器的远程计算机。建立起连接,然后就可以通过网络的互联协议TCP进行远程控制。服务器端和客户端是相对而言的。一个应用程序既可以是Server端,也可以是Client端。一般情况下,被监控的计算机系统工作于服务器模式,监控者为客户端。客户端主要向服务器端发出获取该端信息的请求并将从服务器端发送回来的信息在本地实时显示出来,或者向服务器端发送控制指令。2 2、局域网软件运行监控系统的发展现状和市场前景、局域网软件运行监控系统的发展现状和市场前景计算机领域进行了一场又一场的技术革命,它给人们提供了高质量、高效率、低成本的通信方式,使我们的生活进入信息化时代。在计算机发展的过程中,人们对计算机的监控系统由最初的模拟监控发展到了现在的实时化和信息化。目前,网络监控系统已经在各个方面得到了广泛的应用。网络监控因为可以远距离监控远程设备受到广大民众的青睐,对局域网软件运行监控系统的研究也将会带来巨大的经济效益。国内高校、软件公司、软件爱好者都开发了很多网络监控系统。局域网软件运行监控系统的开发也为企业提供了很好的监控设施,提高了员工的工作效率,规范了员工的工作行为,为企业提高了不少的经济效益。伴随着社会上各个部门对网络监控的研究,网络监控软件进一步走向完善。在国内外市场上,主要推出的是数字控制的模拟视频控制和数字视频控制两类产品。前者发展已经非常成熟、性能稳定,并在实际拨山东科技大学学士学位论文 绪论3弄工作中得到了广泛的应用,特别是在大、中型视频监控功能的应用尤为广泛;后者是新近崛起的以计算机技术以及图像视频压缩为核心的新型视频控制系统,该系统解决了模拟系统部分弊端迅速崛起,但仍需进一步完善和发展。目前,视频控制系统正处在数控模拟系统与数字系统混合应用并将逐渐向数字系统过渡的阶段。早在 2003 年,美国管理协会(American Management Association)调查发现 75%的被调查公司已经在对员工的网上行为进行监控。另据美国电子政策协会在今年的一项调查显示,有 26%的企业借助网络监控系统监视员工,而且,已有 2%的员工因为不正当使用即时通信系统被解雇。 韩国日报一篇报道称,韩国有 60的大企业、30的公营企业会检查职员的电子邮件。 泰国某知名网站在去年的调查显示,有 40%的企业员工在公司上网时受到公司监视。员工监控软件正在变得越来越有吸引力,它们的价格越来越适中,使用也越来越简单。企业意识到了这些监控软件的价值,它们有助于提高安全性,改进工作效率,减少员工的不轨行为和竞争性信息的泄漏,降低法律责任风险。许多分析人士表示,目前考虑使用监控软件最符合企业的利益。Jupiter Media Metrix 的研究主管 Michael Gartenberg 表示,如果企业选择使用监控软件的话,他们必须告诉员工企业在监控什么,以及为什么要进行监控。 Gartenberg 说, “员工必须明白,雇主有权利保护公司的业务通讯工具不被滥用,其中包括证明会使公司承担法律责任和给公司带来麻烦的情况”。 “雇主也需要明白,需要设定和实现期望值,需要在员工的信任和不信任之间取得恰当的平衡”。家庭办公、远程技术的流行、远程教学的发展、企业内部的管理等各领域的应用是局域网软件运行监控系统的发展趋势和市场前景。随着企业的发展,公司规模原来越大。不在同一个办公楼、不在同一个城市都成为很正常的现象,如何控制规范员工的工作行为。现在很多企业在办公室内部设置了摄像头,但是摄像头的监控功能很难具体到电脑桌面,看清楚员工具体在做什么,这样就无法从根本上具体化的管理每台计算机的具体行为。局域网软件运行监控系统对可以监控到局域网内每台电脑的桌面,可以监控到局域网内部每台电脑的流量。局域网软件监控系统解决了摄像头无法解决的细节问题,同时也给其本身的发展带来很大的推动作用。1.21.2 研究范围及技术要求研究范围及技术要求1 1、研究范围、研究范围1.设计系统的功能模块划分。山东科技大学学士学位论文 绪论42.参考局域网软件运行监控系统的实例,并根据具体要求,实现本次系统设计的需求分析。3.根据需求分析和模块划分完成代码功能实现。4.总结文档的编写。2 2、技术要求、技术要求1.对系统功能模块进行合理的划分,模块清晰明了。2.成功的连接客户端和服务器端,实现双方信息的传送。3.捕获服务器端的屏幕信息,并通过通信发送到客户端。4.对捕获信息进行保存,方便以后查阅。5.局域网内部计算机的流量实时监控。1.31.3 套接字套接字相关概念相关概念1 1、套接字的基本概念、套接字的基本概念套接字是通信的基石,是支持TCPlP协议的网络通信的基本操作单元。将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。各种进程使用这个相同的域互相之闻用Internet协议簇来进行通信。套接字可以根据通信性质分类,这种性质对于用户是可见的。应用程序一般仅在同一类的套接字间进行通信。不过只要底层的通信协议允许,不同类型的套接字闻也照样可以通信。套接字有两种不同的类型:流套接字和数据报套接字。2 2、套接宇的工作原理、套接宇的工作原理要通过网络进行通信,你至少需要一对套接字。其中一个运行于客户机端,另一个运行于服务器端,根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,山东科技大学学士学位论文 绪论5它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。1.41.4 局域网软件监控系统设计的目的和意义局域网软件监控系统设计的目的和意义企业局域网监控软件、员工网络监控软件在今天也许变得越来越重要。企业为工作用途建立的局域网平台不能沦为游戏、娱乐 、泄密的工具。局域网软件监控系统能够监控每台员工的电脑流量,捕捉员工计算机桌面清楚明了知道员工在做什么。在精神上起到一定的震慑和禁止作用。能从很大程度上控制员工打游戏,规范员工工作期间的工作行为,只做与工作有关的事。计算机和互联网现已被许多企业应用,为企业带来了巨大的经济效益。但同时也存在着不容忽视的一个问题是:企业的员工都用计算机来工作了吗,还是占用上班时间来乱下载软件,玩游戏,或是聊天、上网?既浪费时间影响工作效率,又影响计算机网络安全、有可能泄露企业商业秘密。在互联网为企业带来便利和效率的同时,企业也正在受到意想不到的损失。如果没有员工监控软件,您知道您的员工上班时间正在上网做些什么吗? 所以局域网软件运行监控系统为很多公司解决了这一个难题。很多家长担心孩子沉迷网络游戏,访问不良网站,影响孩子的身心健康。 局域网软件运行监控系统的产生可以让家长随时看到孩子在做什么,为各位家长提供了一剂良好的放心药。因此局域网软件运行监控系统是目前发展前景良好,实用性很强的一个软件系统。同时,有利于我把实际学许到理论知识运用到实践中去,使我对理论知识有一个更好的理解和进步。通过设计,不但提高了我们的动手能力,更能让我们把在实践中的不足反馈到学习中去,从而为了更好的工作和生活而努力学习完善自我。局域网软件运行系统的设计有一部分原因出自公司的需要。因为工作的需要公司很大一部分员工都是通过计算机网络进行办公,虽然公司对员工如何使用计算机有明确的规章制度,但是还是很难从根本上去杜绝上网聊天、打游戏、看电影的人存在。公司曾经屏蔽了一些娱乐网站,但是不可能全部屏蔽掉,还会存在一些上班时间上网娱乐的现象。如果给每个人只开通一些他们自己要用的网站也不现实。局域网软件运行监控系统可以监控到局域网内部每台计算机的桌面,可以清楚明了的看到他在做什么事情 。同时,这个局域网软件运行监控系统可以监测到整个局域网内部每台计算机的流量,可以根据流量监测的结果去捕捉某台计算机的桌面。山东科技大学学士学位论文 绪论6局域网软件运行监控系统设计的意义在于让我们在学校学习到的理论知识终于得到了实际的应用,得到现实的升华;更让我们在设计的过程中了解到仅仅有理论知识是远远不够的。人与人的相处,工作的技巧实际的应用。每一项都是让我感觉到了自己的缺点和不足,促使我要更加努力的去学习去奋斗!1.51.5 论文组织结构论文组织结构本文共分为四章:第一章:介绍了局域网软件运行监控系统的研究背景,技术范围和要求,以及系统开发的意义与研究现状,概述了本文的研究内容;第二章:介绍了系统开发的需求分析,系统开发的主要流程,套接字的基本概念和工作原理;第三章:本章主要介绍局域网软件运行监控系统实现的详细设计。其中包括:被控端即服务器端得概述,技术分析,以及实现流程;系统连接模块的主要功能即控制端和被控端的连接,也是本系统的关键一步;桌面屏幕捕捉模块介绍系统桌面屏幕捕捉的主要概述,技术分析,以及主要的实现流程;屏幕位图保存模块主要介绍桌面屏幕的保存技术;需要调用系统的文件对话框,把图片以位图的形式保存在计算机中,是在桌面屏幕捕捉模块的基础上实现的;流量监控功能主要介绍局域网内部流量监测模块功能的实现,主要涉及到局域网内部计算机通过 TCP/IP、UDP、ICMP 等协议传送数据报的监测;第四章: 本章介绍了局域网软件运行监控系统的具体实现情况,设计过程中存在的问题和不足,收获与得失以及对未来的展望。山东科技大学学士学位论文 系统设计12 2 系统设计系统设计2.12.1 需求分析需求分析局域网软件运行监控系统顾名思义就是实现对局域网的监控。本设计主要实现的功能是对被控端计算机的计算机屏幕进行捕捉,对局域网内部流量进行实时监控。Socket通信是一类典型的网络通信技术,是一种非常实用的编程方法,所以采用 socket 编程。为了有目的的去监控捕捉计算机屏幕,特此对 TCP/IP、ICMP、UDP 等协议的数据包进行捕捉,添加局域网内部流量监测模块,添加此模块的好处是可以根据流量监测结果对某台流量异常的计算机进行屏幕捕捉。2.22.2 可行性分析可行性分析根据中华人民共和国公安部互联网安全保护技术措施规定第 8 条之规定:“互联网接入单位应能够记录并留存用户使用的互联网网络地址和内部网络地址对应关系;记录、跟踪网络运行状态,监测、记录网络安全事件等安全审计功能。 ”第十三条:“互联网服务提供者和联网使用单位依照本规定落实的记录留存技术措施,应当具有至少保存六十天记录备份的功能。 ”公司在工作场所安装、部署、使用监控软件是有法可依的。技术方面的可行性分析。在当前的限制条件下,该系统的功能目标基本上可以实现,而最大的约束是时间,因为我对这个课题不是很擅长,而且由于本人已经参与了工作,允许我开发的时间很短。该系统没有怎么用到特别高深的技术,利用的是我在学校学习的一些编程基础加上自我学习能力和努力。本人平时多请教老师和同学,天天在实验室努力研究,经常与老师沟通交流。综合分析虽然这个程序对我来说难度很大,但是功能也得到了基本的实现。当然程序在运行的过程中也存在一定的缺点和不足,如果有时间我会尽量去修改和完善。局域网软件运行监控系统开发的社会因素可行性。员工行为管理问题:员工若在网上冲浪、聊天、玩游戏、甚至在看多媒体电影,浪费企业的资源,降低企业的运营效率。 中小学生上网问题:随着科技的发展,计算机互联网进入了千家万户,孩子上网问题也成了家长关心的问题之一。任何企业的领导,每一个孩子的家长可能都遇到过这样的问题。领导们希望通过现代的信息化管理技术来大力推动企业的发展,却由于信息化而带来的一系列问题:计算机网络信息化管理并未能给予企业多大的效益,却带来了管理上的漏洞,企业浪费了资源,所以企业的领导们希望能对此有所作为。家长们希望通过计算机让孩子接触更多的事物,学会更多的知识,得到更好的发展,网上却存在着这样那山东科技大学学士学位论文 系统设计2样的不良信息,时刻都有可能影响到孩子的身心健康。因此,这个系统的开发具有很大的市场需求,具有开发的可行性。从使用方面来讲,该系统软件具有界面清晰、操作简单等优点,任何具有计算机简单操作能力的人员均能熟练操作。经过以上的可行性分析,我们对此系统的市场、技术,时间和资源,人力方面的可行性有了详细的描述,证明系统具有可开发的价值,以及其开发过程的可行性。2.32.3 设计目标设计目标本系统属于小型局域网的系统,可以依据 ip 对某台计算机进行屏幕捕捉监控并保存捕捉图片,可以对局域网内部计算机流量进行实时的监控。本系统预计实现以下目标:1. 系统采用人机交互的方式,界面美观友好。2. 控制端可以随时运行,只要被控端的程序在运行,就可以捕捉到被控端屏幕。3. 可以对被控端的屏幕进行保存,留待以后查证。4. 运行网络流量监控功能,能够监控到整个局域网的流量。2.42.4 系统功能结构系统功能结构局域网软件运行监控系统功能如图所示:图 2-1 局域网软件运行监控系统局域网软件运行监控系统控制端被控端系统连接图片保存流量监控通信端口设置IP 设置用户名、密码主窗体通信端口设置山东科技大学学士学位论文 系统设计32.52.5 用户界面用户界面局域软件运行网监控系统分为控制端和被控端两部分,其中被控端运行时只需设置通信端口,启动服务即可。控制端主要有两个窗体组成,分别为主窗体、局域网流量监测窗体。其中,主窗体用于端口、ip、用户名、密码设置,连接成功后用于接收显示屏幕信息,并存捕捉的屏幕信息。局域网流量监测窗体用户获取局域网内部每台计算机的流量实时监控。图 2-2 被控端主窗体图 2-3 控制端主窗体山东科技大学学士学位论文 系统设计4图 2-4 流量监测对话框2.62.6 程程序流程图序流程图山东科技大学学士学位论文 系统设计5系统连接连接成功连接成功主窗体主窗体屏幕捕捉屏幕捕捉图片保存图片保存流量监控流量监控否是图 2-5 系统流程图2.72.7 系统运行环境系统运行环境局域网软件运行监控系统对运行环境有一定的要求,具体如下:1、系统开发平台:Microsoft VC 6.0。2、系统开发语言:C+。3、运行平台:Windows XP山东科技大学学士学位论文 系统详细设计13 系统详细设计3.13.1 被控端模块被控端模块设计设计1 1、被控端模块概述、被控端模块概述局域网软件运行监控系统分为控制端和被控端两大模块,其中,被控端的主要作用是时时抓取本机的屏幕信息,将其分成多个数据报,发送到控制端。为了保证屏幕信息能够完整的发送到控制端,被控端在发送一个数据报后,需要等待控制端发来的确认信息,然后继续发送下一个数据报。2 2、被控端技术分析、被控端技术分析被控端如果要实现屏幕信息的发送,必须要解决两个关键问题:一是获取自己桌面屏幕信息,将其转换为位图格式;二是将位图信息发送到控制端。3 3、被控端实现过程、被控端实现过程(1)首先新建一个 IDD_SREENSERVER_DIALOG 对话框,右击建立类向导命名为CsreenServerDlg。在对话框中依次加入静态文本框、编辑框、按钮等三个控件并给予初始化的定义。同时添加数据包,位图相关信息,其他成员函数以及成员变量的定义代码如下:struct CapSreenHeader/图像头信息long filelength;/定义位图文件长度int width;/定义宽度int height; /定义高度int blocklen;/数据块长度long factlen;/实际数据长度HBITMAP hBitmap;/初始化位图信息CListenSock* plisten;/定义监听指针CClientSock* pclient;/定义 socket 类型的接口(2)在 CsreenServerDlg 类的 OnInitDialog()成员函数中把需要的成员变量进行初始化。具体代码见附录 3-1 (3)为开始服务按钮 IDC_BUTTON_START 添加消息响应函数 OnButtonStart(),开始为控制端提供服务。具体代码如下:void CSreenServerDlg:OnButtonStart() /开始服务CString name;山东科技大学学士学位论文 系统详细设计2UpdateData(TRUE);GetDlgItemText(IDC_BUTTON_START,name);if(name=开始服务)plisten=new CListenSock; plisten-Create(m_tport);/创建等待客户端监听的 Socket,在本机的 3009 监听, plisten-setdlg(this);/点开始-程序-附件-命令提示符,打开一个终端窗口,输入命令 netstat -an 就可看到有没有打开端口 3009,也能看到所有的网络连接状态SetDlgItemText(IDC_BUTTON_START,停止服务);/把按钮文字置为停止服务elseSetDlgItemText(IDC_BUTTON_START,开始服务);/把按钮文字置为开始服务if(plisten!=NULL) plisten-Close();/关闭监听 delete plisten; if(pclient!=NULL) pclient-Close();/关闭与客户端通信端口 delete pclient;(4)获取本机桌面屏幕信息,并将屏幕信息转换为位图格式HWND hWnd = :GetDesktopWindow();/获得屏幕的 HWND.HDC hScreenDC = :GetDC(hWnd); /获得屏幕的 HDC.HDC MemDC = :CreateCompatibleDC(hScreenDC);/定义一个内存的画布 MemDCRECT rect; :GetWindowRect(hWnd,&rect); /获取屏幕的客户区域SIZE screensize;screensize.cx=rect.right-rect.left;/获取屏幕的宽度screensize.cy=rect.bottom-rect.top; /获取屏幕的高度hBitmap= :CreateCompatibleBitmap(hScreenDC,screensize.cx,screensize.cy);山东科技大学学士学位论文 系统详细设计3/创建兼容位图HGDIOBJ hOldBMP = :SelectObject(MemDC,hBitmap);/选中位图对象:BitBlt(MemDC,0,0,screensize.cx,screensize.cy,hScreenDC,rect.left,rect.top,SRCCOPY);/将屏幕信息输出到位图:SelectObject(MemDC,hOldBMP);/把位图写入内存:DeleteObject(MemDC);/释放位图对象:ReleaseDC(hWnd,hScreenDC);(5)添加消息响应函数 SendSreenToClient()/把获取的被控端信息发送到控制端。void CSreenServerDlg:SendSreenToClient() if(pclient!=NULL&islogin=1)/判断端口是否打开 判断服务器是否登录成功 CapSreen();/捕捉本机桌面 SentSreen(hBitmap,pclient);/把捕捉到的位图信息发送到客户端3.23.2 系统连接模块设计系统连接模块设计1 1、系统连接模块设计概述、系统连接模块设计概述为了防止非法用户使用系统,在局域网软件允许监控系统的控制端增加了用户登录这么一个小模块。在系统启动时,只有输入正确的用户名和密码才能进行被控端桌面的捕捉。首先输入你想要监控的被控制端 ip,如果不输入则默认是 127.0.0.1。本系统为了运行方便于是把用户名和密码设置成了默认的,也可以是手动输入的。如果用户名和密码输入错误或者是为空就会就会弹出一个提示框,提示用户名或密码错误请重新输入;如果输入正确才会弹出一个提示框,提示登录成功。具体的图显示如下:图 3-1 被控端连接失败山东科技大学学士学位论文 系统详细设计4图 3-2 控制端登录成功2 2、系统连接模块技术分析、系统连接模块技术分析系统连接主要的技术要点分为两部分,一部分是输入 ip 与被控端计算机获得连接;一部分是输入正确的用户名和密码。本系统是 sokcet 通信,通过 socket 端口进行通信。在该模块一开始就定义了一个 socket 端口类型的指针 pclient=NULL,实例化一个CclientSock 的一个类对象,创建一个 socket 接口,与被控端的 Connect()函数取得连接。设置一个用户结构体来定义用户、密码以及端口。 系统通过一个函数发送客户端的请求到服务器端,通过服务器端请求,服务器端才会给客户端提供需要的服务。在这个系统连接的模块中客户端通过myRecvData(CClientSock *pc)函数和客户端去连接;服务器通过myRecvData(CClientSock *pc)和 myAccept(CListenSock *pl)两个函数来为客服端来进行连接。3 3、系统连接模块实现过程、系统连接模块实现过程(1)首先新建一个 CclientSock 类,并初始化成员变量和成员函数 CSreenClientDlg 类中定义用户名、密码以及端口的相关信息。定义如下:class CclientSockpublic: int id; int bufoffset;/定义缓冲区 char *pkbuf;/缓冲区指针 int pklen;/块长度 int recvlen; /收到信息的大小 CSreenClientDlg *dlg;/声明类 CSreenClientDlg 指针public:void SendCommandData(int type,char* buf,int len);void GetPackage(char *buf);void setdlg(CSreenClientDlg *d,int cid,int plen);山东科技大学学士学位论文 系统详细设计5class CsreenClientDlgstruct USERINFO/用户信息char name30;/定义用户名char password20;/定义密码 int uport;/定义通讯端口;void myRecvData(CClientSock *pc);CClientSock *pclient;USERINFO usrinfo;/用户信息NETPACKAGE usrpack;(2)在主窗口添加按钮 IDC_BUTTON_CONNECT,右击属性改名为连接,并为按钮添加消息响应函数 OnButtonConnect()。具体实现代码如下:void CSreenClientDlg:OnButtonConnect() /与被监控电脑相连接/ TODO: Add your control notification handler code hereCString name;GetDlgItemText(IDC_BUTTON_CONNECT,name);UpdateData(TRUE);if(name=连接) pclient=new CClientSock; pclient-Create();/创建普通的 SOCKET pklen=sizeof(NETPACKAGE);/获取数据包的长度 pclient-setdlg(this,1,pklen);int rt=pclient-Connect(m_ip,m_port);/连接服务端if(rt=1) strcpy(usrinfo.name,m_usrname.GetBuffer(0);strcpy(usrinfo.password,m_usrpwd.GetBuffer(0);usrinfo.uport=3100;pclient-SendCommandData(1,(char*)&usrinfo,sizeof(USERINFO);else AfxMessageBox(被控端连接失败!); SetDlgItemText(IDC_BUTTON_CONNECT,连接);山东科技大学学士学位论文 系统详细设计6elsepclient-SendCommandData(2,(char*)&usrinfo,sizeof(USERINFO);pclient-Close();delete pclient;pclient=NULL; if(m_pDib!=NULL)delete m_pDib; m_pDib=NULL;SetDlgItemText(IDC_BUTTON_CONNECT,连接);(3)系统通过一个函数发送客户端的请求到服务器端,通过服务器端请求,服务器端才会给客户端提供需要的服务。在这个系统连接的模块中客户端通过myRecvData(CClientSock *pc)函数和客户端去连接;服务器通过myRecvData(CClientSock *pc)和 myAccept(CListenSock *pl)两个函数来为客服端来进行连接。客户端具体实现部分如下:switch(usrpack.type) 判断要传送的数字case 1:/用户登录 memcpy(&usrinfo,usrpack.buf,sizeof(usrinfo); tstr=usrinfo.password; if(tstr=passwork ok&m_usrname=aaa)/对用户信息进行验证 AfxMessageBox(登录成功!);/消息框密码正确 SetDlgItemText(IDC_BUTTON_CONNECT,退出连接); else AfxMessageBox(用户名或密码错误,请重新登录!);/密码错误 break;case 2:/用户退出 memcpy(&usrinfo,usrpack.buf,sizeof(usrinfo); tstr.Format(OK Logoff,usrinfo.name,usrinfo.password,usrinfo.uport); AfxMessageBox(tstr); break;山东科技大学学士学位论文 系统详细设计7 case 3:/传送位图头文件信息 memcpy(&cheader,usrpack.buf,sizeof(cheader); if(m_pDib=NULL) Int m_dwDibSize=cheader.filelength+ izeof( BITMAPINFOHEADER )+1000; m_pDib = new unsigned charm_dwDibSize; m_pDibBits=&m_pDibsizeof(BITMAPINFOHEADER ); lbitsOffset=0; break; case 4: if(m_pDibBits!=NULL&usrpack.len=50000) memcpy(&m_pDibBitslbitsOffset,usrpack.buf,usrpack.len); lbitsOffset=lbitsOffset+usrpack.len; break; case 5:/判断解压后位图地址是否为空 if(m_pDibBits!=NULL) memcpy(&m_pDibBitslbitsOffset,usrpack.buf,usrpack.len); lbitsOffset=lbitsOffset+usrpack.len; if(lbitsOffset!=cheader.filelength)/接收错误tstr.Format(Error:%d!=%d,lbitsOffset,cheader.filelength); AfxMessageBox(tstr);return;3.33.3 桌面捕捉模块的设计桌面捕捉模块的设计1 1、系统桌面捕捉模块设计概述、系统桌面捕捉模块设计概述局域网软件运行监控系统系统桌面捕捉模块是该系统的一个重要的功能。系统桌面捕捉可以直观明了的看到被控端的桌面。该功能需要被控端和控制端共同完成。把被控端的桌面捕捉到控制端的主要对话框中,并且有滚动条可以拖动看到全部的被控端桌面,控制被控端图片显示的起始坐标。运行界面如下图所示:山东科技大学学士学位论文 系统详细设计8图 3-3 控制端主对话框2 2、系统桌面捕捉模块技术分析、系统桌面捕捉模块技术分析该模块是整个系统制作的难点和重点。首先用 initDrawParam()初始化对话框,用initDrawSreen()初始化接收到的位图图像,用 drawSreen()将捕捉到的图像画到主对话框上。这样一个过程图像就显示完毕。3 3、系统桌面捕捉模块实现过程、系统桌面捕捉模块实现过程(1)创建一个普通类,把它命名为 CSreenClientDlg,在该类的 SreenClientDlg.h 文件中添加如下成员变量及成员函数如下。 void CapSreen();/捕捉本机桌面void WriteBmpToFile(HBITMAP hBitmap, CString strFileName);/把位图信息写入文件HBITMAP hBitmap;/定义位图CString m_filename;/定义保存位图的文件名字void drawSreen();/把捕捉到的控制端桌面信息重绘到控制端主对话框中void initDrawParam();/首先初始化控制端主对话框的显示void initDrawSreen();/初始化被控端桌面显示的位置信息void myRecvData(CClientSock *pc);/判断用户登录山东科技大学学士学位论文 系统详细设计9 CClientSock *pclient;/定义一个 Socket 类型的指针; USERINFO usrinfo; /用户信息;NETPACKAGE usrpack;/定义一个数据包int pklen;/数据包长度BITMAPINFOHEADER *m_pBIH;/位图头unsigned char *m_pDibBits;/指向解压后图像数据起点unsigned char *m_pDib;/图像数据缓冲long lbitsOffset;/接收图像数据偏移CapSreenHeader cheader;/图像头信息int scrx;/远程屏幕水平起点int scry;/远程屏幕垂直起点int scrxlm;/水平移动最大值int scrylm;/垂直移动最大值int capflag;/是否捕获成功int m_width;/远程屏幕的宽度int m_height;/远程屏幕的高度int cwidth;/绘制区域的宽度 int cheight;/绘制区域的高度int bcontrol;/控制有效(2)在创建对话框时,WINDOWS 发送 WM_INITDIALOG 消息到该被创建的对话框,这就立即激发该对话框的 OnInitDialog()函数,即,在显示该对话框前使用该函数初始化该对话框的数据及内容,以及可以只用该函数在显示对话框前布置空间的显示大小及位置。WINDOWS 钓鱼那个通过使用标准的对话框程序共同所有的 Microsoft 基础类库对话框的 OnInitDialog()函数,它不调用通过你的消息映射代码功能。在该类的OnInitDialog()函数中,添加了一些具体的成员变量的初始化。具体代码如下BOOL CSreenClientDlg:OnInitDialog()pclient=NULL;/初始化 Soket 端口指向为空m_ip=127.0.0.1;/初始化 ip 为本机m_port=3009;/与被控端端口的连接初始化为 3009m_usrpwd=123;/初始化密码为 123山东科技大学学士学位论文 系统详细设计10m_usrname=aaa;/初始化用户名为 aaa UpdateData(FALSE);/更新m_pBIH=NULL;/初始位图指向空 m_pDibBits=NULL;/指向解压后图像数据起点 m_pDib=NULL;/ 图像数据缓冲 pklen=sizeof(NETPACKAGE);/获取数据包长度lbitsOffset=0;/ /接收图像数据偏移 capflag=0;/判断屏幕是否捕捉成功bcontrol=0;/控制有效 initDrawParam();/初始化面板return TRUE; / return TRUE unless you set the focus to a control(3)控制端桌面捕捉实现的步骤是首先用 initDrawParam()初始化控制端主对话框的显示,接着用 initDrawSreen()函数初始化被控端桌面显示的位置信息,最后用 void drawSreen()函数把捕捉到的控制端桌面信息重绘到控制端主对话框中,被控端的桌面就显示在了控制端的主对话框中。具体代码如下所示:void CSreenClientDlg:initDrawParam()/初始化控制端主对话框的显示CRect rect; GetClientRect(&rect); int w=rect.Width();/被捕捉屏幕的显示位置int h=rect.Height();CRect rect1,rect2; GetDlgItem(IDC_SCROLLBAR1)-GetClientRect(&rect1); GetDlgItem(IDC_SCROLLBAR2)-GetClientRect(&rect2); cwidth=w-rect1.Width()-15;cheight=h-rect2.Height()-90;scrx=0;/远程屏幕的水平起点scry=0;/远程屏幕的垂直起点scrylm=1000;/远程屏幕的最大水平移动位置 scrxlm=1000; /远程屏幕的最大垂直移动位置m_vbar.SetScrollRange(0,scrylm,TRUE);山东科技大学学士学位论文 系统详细设计11 /SetScrollRange 函数设置所指 定滚动条范围的最小值和最大值m_vbar.SetScrollPos(0,TRUE); /该函数设置所指定滚动条中的滚动按钮的位置m_hbar.SetScrollRange(0,scrxlm,TRUE);m_hbar.SetScrollPos(0,TRUE);UpdateData(FALSE);/AfxMessageBox(initDrawParam()!);void CSreenClientDlg:initDrawSreen()/函数初始化被控端桌面显示的位置信息 m_width=m_pBIH-biWidth;/获取位图信息的宽度m_height=m_pBIH-biHeight; /获取位图信息的高度 /AfxMessageBox(initDrawSreen()!);scrylm=m_height-cheight;if(scrylm0)scrylm=0; scrxlm=m_width-cwidth;if(scrxlmm_hDC, 0, 75,cwidth, cheight,scrx, scry,cwidth, cheight,m_pDibBits,(BITMAPINFO *)m_pBIH,BI_RGB, SRCCOPY ); ReleaseDC(pdc);/释放屏幕 DC4、捕捉到得位图信息肯定比主窗口要大,这个时候就需要用到滚动条。在本模块中添加了两个滚动条函数,分别是垂直方向的 OnHScroll()和水平方向的 OnVScroll()两个函数来实现这个功能。具体代码件附 3-2.3.43.4 桌面图片图片保存模块的设计桌面图片图片保存模块的设计1 1、桌面图片保存模块设计概述、桌面图片保存模块设计概述局域网软件运行监控系统桌面图片保存模块主要实现的功能是把从控制端捕捉到的桌面保存下来。有些公司需要把捕捉到的图片保存下来留待以后查看,所以这个模块的存在我认为也是非常必要的。此模块通过捕捉本机屏幕,然后调用系统的文件对话框CfileDialog 把捕捉到的计算机桌面以 bmp 图片的格式保存到桌面上。运行界面如图所示:山东科技大学学士学位论文 系统详细设计13图 3-4 系统文件存储对话框2 2、桌面图片保存模块技术分析、桌面图片保存模块技术分析局域网软件运行监控系统这个软件中,桌面图片保存模块并不是一个难点。它的技术要点主要分为两部分:一是捕捉本机桌面,保存到内存中;二是调用系统的文件对话框 CfileDialog,并以 bmp 图片的格式存储。BMP 是一种 WINDOWS 绘图板默认图片格式,使用起来比较方便应该都支持,考虑到应用的普遍性,不需要安装补丁或者插件。3 3、桌面图片保存模块设计过程、桌面图片保存模块设计过程(1)首先在桌面上添加一个按钮,右击属性把按钮 ID 改为 IDC_BUTTON_SAVEBMP,标题改为“保存图片” 。如图:图 3-5 控制端对话框(2)为按钮保存图片添加消息响应函数。右击按钮“保存图片”找到“建立类向导”,在 Member Variablesz 选项卡依次中选择 IDC_BUTTON_SAVEBMP、BN_CLICKED、Add 山东科技大学学士学位论文 系统详细设计14Function,把函数图片保存的函数名命名为 OnButtonSavebmp()。具体实现代码如下:void CSreenClientDlg:OnButtonSavebmp() /保存位图/ TODO: Add your control notification handler code herechar szFilter=All files (*.*)|*.*|bmp files(*.bmp)|*.bmp|;CfileDialogfd(false,bmp,aaa,OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT,szFilter,NULL);/定义一个文件存为对话框,以 aaa 的名字来存储if(IDOK=fd.DoM
展开阅读全文