版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
终、墨房啷辔之彦
硕士学位论文姓名:董堕导师:唐红专业:通信与信息系统
Y1219401论文Y1219401论文分类号tn915.09密级重庆邮电大学硕士学位论文论文题目计算机监控系统研究与实现(题名和副题名)英文题目TheResearchandlmplementofComputerMoniteringSystem硕士研究生童鹏指导教师度丝煎握学科专业通篮当篮息孟统论文提交日期芝竺乙。5g!!论文答辩目期士兰之!!!希曼评阅八葛利嘉教授重庆通篮掌院围国割丝握重庆坚垫盘兰答辩委员会主席谢显中教授重庆邮电大学2007年4月20日摘要随着计算机网络技术的发展及企事业单位网络建设的不断完善,如何加强企业对计算机的管理,更好地利用网络资源为单位服务成为企事业单位口益突出的问题。而计算机监控系统就是为了高效地管理好企业内的所有计算机而建立的一种管理系统。计算机监控系统是在远方机器允许的情况下,对其进行监控的一类软件,通过掌控被控端计算机实时的运行信息,随时了解被监控计算机的状况,为计算机管理提供一种可靠、实用、方便高效的管理模式。建立高效的企业计算机监控系统是企业综合自动化建设的关键,因此计算机监控系统具有重要的应用价值。计算机监控系统是一个复杂的系统,涉及网络安全、数据库、网络通信等多方面的知识。本文研究和实现的计算机监控系统采用客户/服务器模式,系统分为客户端监控软件和服务器端软件两大部分。客户端监控软件分为三个模块,分别完成客户机初始化、进程隐藏、使用日志监控等功能。服务器端软件分为四个功能模块,主要是收集客户端各类信并存入数据库中,并显示数据库和客户端的各类信息以便管理员对企业内的计算机进行监测和管理。客户端监控软件初始化模块主要使用木马技术实现客户端的进程隐藏、开机自启动、文件关联启动等功能,网络通信模块的实现以TCP/IP协议为基础,通过WinSock建立TCP连接来发送与接收信息,监控模块主要用Wind。ws钩子技术来实现用户日志使用记录功能。服务器端软件采用多线程技术来实现与客户端的连接和数据传输,服务器端软件界面将客户端主机的信息以列表的形式呈现给用户。系统综合运用了结构化分析与设计、网络通信、多线程设计等多种技术,实现了基于TCP/IP协议的计算机监控系统。经测试表明,该系统运行稳定可靠,实现了预期的设计目标。关键词:计算机监控客户/N务器模式WinSockAbstractWiththedevelopmentofcomputernetworktechnologyandcontinua11yperfectionofenterprise*Snetworkconstruction.howtoenhanceenterprisecomputermanagementandmakebetteruseofnetworkresourcesforenterpriseshasbecomeaincreasinglyprominentissue.Thecomputermonitoringsystemisonekindofmanagesystemwhichisforhigh1yeffectivemanagementofenterprise'Scomputer.Computermonitoringsystemisakindofsoftwarethatismonitoringremotecomputersifthey,repermit.Thesystemprovidesareliablepractica1effeetivemanagementpatternforcomputermanagingsystem.Estab1ishesthehighlyeffectivebusinesscomputersupervisorysystemisthekeyofautomatedenterprisesynthesizesconstruction.Thistopicalsohasaveryimportantusage.Computermonitoringsystemisasophisticatedsystemwhichrelatedtothedomainofnetworksecurity*database,networkcommunication.Thisthesisresearchand1mp1ementaC/Spatternbasedsystem.Thesystemdividedtotwoparts:thecIientmonitoringsoftwareandtheservercontrol1ingsoftware.C1ientmonitoringsoftwareisdividedintothreeparts.Thepartsfunctionsare:initializethesystem*hidingtheprocess*supervisingthelogfi1e,etc.Theinformationandsavingittothedatabase.showtheinformationfromthedatabaseandclient.Thiscanbeconvenienttothcadministratortosupervisingandmanagingofthecomputer.Theinitia1izingmoduleofClientsoftwareusingTrojantechno1ogytoimp1ementtheprocesshiding»autorunwhensystemboot,associatefi1efunction.etc.ThenetworkcommunicationmodulcisbasedonTCP/IPprotocolandusingWinsocktoestablishTCPconnectiontosendandreceiveinformation.ThemonitoringmoduleisbasedonWindowshooktechnology•Serversoftwareisimp1ementedtowithmu1ti—threadstechnique.DatashowingmoduIcofthcServcrsoftwareisdesignedtOshowtheinformationofc1ientcomputerstoadministratorswith1ist.Thesystemadoptsmanycomprehensive1ytechno1ogies.suchasnetcommunication,structuredanalysis/designandmu1ti—threadsdesign.ItimplementsacomputermonitoringsystembasedonTCP/IETheresu1tofapp1icationshowsthatthissystemissteadyreliableandrealizeanticipativeObjeCt.Keywords:ComputerMonitorC1ient/ServerPatternWinsock独创性声明本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得重庞整电太堂或其他教育机构的学位或证书而使用过的材料。与我-同工作的同志对木研究所做的任何贡献均已在论文中作了明确的说明并表示谢意。学位论文作者签名:苔.鹏签字日期:力管7年5月/6日学位论文版权使用授权书本学位论文作者完全了解重废鲤皇太堂有关保留、使用学位论文的规定,有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和借阅。本人授权重庆邮电盔堂可以将学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。(保密的学位论文在解密后适用本授权书)学位论文作者签名:书,鹏导师签名:一7影车L签字Et期:纠年岁月%日签字1:3期:〃。7年r月「Et第一章绪论1.1选题背景网络技术的不断发展和进步对整个社会产生了深远的影响。网络已经进入科研、教育、商业、生产、生活等各个领域和部门,在整个社会的发展中起着极其重要的作用。毫无疑问,公司、学校以及各种职能部门提供互联网互通互联的功能可以带来很多的益处,但是一些员工滥用电脑,上班时间沉迷网络游戏,浏览与工作无关的网站、聊天、收发私人信件、上网看电影、下载音乐等行为,这无疑对工作和学习效率产生负面的影响。据国外数据统计1i1.开通互联网办公的企业中,企业员工平均每天有超过二分之一的上班时间用来上网聊天,浏览色情网站或处理个人事务,如浏览国家明令禁止的网站、工作时间上网打游戏聊天、下载和实际工作无关的电影、歌曲,甚至利用各行业的网络,对国内外的某些网站发起恶意攻击等。这些行为不仅消耗了网络带宽的资源,使网络资源得不到充分的利用,而且影响了正常的办公业务同时也使企业的安全问题受到威胁。如今,许多企业、部门已建成了电子政务互连,在电子政务内联网上,同时存在许多不同部门的网络系统,而这些部门对保密的要求是不相同的。由于电子政务内联网上同时接入了其它部门的网络系统,因此容易出现其它部门不怀好意的人员(或外部非法人员利用其它部门的计算机)通过电子政务内联网进入保密专用网络系统,并进一步窃取和破坏其中的重要信息(如领导的网络帐号和口令、涉密文件等)。同时,在保密专用网络系统内,由于存在不同等级的用户、不同密级的信息,如不采取相应的安全措施很容易发生内部窃密或破坏,并且对密级信息的分级浏览控制也存在一定的安全隐患12]1弓|。由于电子政务内联网涉及的部门太多、地域范围太广,同时在保密综合网内也是地域广泛,网络终端多,因此这种风险是必须采取措施进行防范的。电脑太多,IT管理员分身乏术,每天在资产管理、系统维护上花费大量的时蚓和精力。因此各企业部迫切需要一种严格监控和记录员工计算机的使用情况,并对不良行为做出及时控制、保障信息安全、提高生产力的计算机监控系统。目前,建立高效的企业计算机监控系统是企业综合自动化建设的关键。由于计算机监控系统具有重要的应用价值,本文力图通过对计算机网络编程技术和木马编程技术深入研究后,设计并实现出一种满足中小企业网管理员的需求,对网络内所有计算机实行有效监控的管理系统。.2研究现状与发展方向计算机监控潜在的巨大发展前景,推动了计算机监控系统的迅猛发展。目前国内外已经有很多公司提供计算机监控系统软件。计算机监控行业领先的公司也研发出了一系列监控产品如:南京网亚计算机有限公司推出的WorkWin管理专家一局域网络监控软件员工监控软件14J是一款功能强大的局域网客户机局域网络监控、监视、控制与管理系统软件。上海腾顺科技开发有限公司研制的局域网监控软件[5]具有远程控制功能,北京清扬创新网络科技有限公司研发的内网管理系统16J可以根据管理策略实现对全网USB存储实现综合集中的管理。在配置了“禁止使用”策略的计算机则不可以使用USB存储设备。在安装了管理软件的机器上,USB存储设备一接入即可以被阻断;与此同时,会显示有USB存储接入的日志记录等。计算机监控系统的发展如火如荼,但功能强大的监控系统许多功能并非中小企业所需要的,它们没有对中小企业的需求进行开发。计算机监控软件使用的是木马技术,旨在对内监控,并不执行它的破坏功能。该类系统软件正朝着如下的几个方向发展171:・跨平台性:主要是针对Windows系统而言,如何让监控程序能够在不同的Windows平台上运行是一个需要解决的难点。因为NT和Windows2000都具有权限的概念,这和Windows95/98是不同的。另像的监控程序多少都使用了某些Windows系统下的特定的API,因此如何设计出与Windows平台版本无关的监控系统是所有开发商们面临的一个难点。模块化设计:模块化设计是一种新的潮流,现在的远程监控软件同样采用了模块化设计的概念。更新更强的进程隐藏技术:传统的修改INI文件和注册表的手法,已经不能适应更加隐秘的需要,目[i{]很多木马的隐藏方式已经开始转变,像病毒一样感染Windows下的文件,监控软件也需要解决隐蔽性的问题,因此木马的传播方式仍然可以借鉴。即时通知:现在的监控软件已经有了即时通知的功能,如IRC、ICQ通知等。.3论文目标和主要工作计算机监控系统涉及到数据库、计算机通信、计算机安全等多个领域,整个系统对稳定性和响应速度有非常高的要求。本文主要工作就是采用结构化分析与设计方法完成计算机监控系统(M。nSys)的整个软件系统的架构设计与开发。.3.1研究目标•研究USB存储设备权限控制技术。防止用户通过USB接口的存储设备输出数据(用户可以从USB设备复制资料到计算机)。•研究进程隐藏技术,防止用户发现软件或非法关闭、卸载软件。•研究远程监控技术。使服务器端能远程监控客户端屏幕,并且远程操作用户的电脑。•研究获取计算机硬件配置信息的方法。1.3.2完成的主要工作及创新点采用安全可靠的sQLServer2000作为后台数据库,记录各种数据,确保了数据记录的完整性、稳定性和查询的方便快捷性。服务器端可以完全监视客户端的屏幕,了解用户使用情况,并可以对客户端进行操作。不仅能禁用USB设备,还能禁止USB设备的写入功能。研究针对每台被监控计算机配置进行记录,有效解决硬件丢失问题。.4论文结构本文共分六章,各章的内容安排如下:第一章介绍了计算机监控系统的研究背景,并交待研究的现状以及研究目标,主要工作及创新点,最后说明论文的组织结构。第二章介绍了计算机监控系统(M。nSys)实现所涉及的相关知识和关键技术。第三章介绍了计算机监控系统(M。nSys)的系统需求分析、总体架构设计、系统特点及实现思路和系统的开发环境。第四章详细讲述了计算机监控系统(M。nSys)服务器端和客户端各模块的设计和实现。第五章介绍系统整体功能的测试步骤与测试结果分析。第六章总结了本文所做工作,并探讨了进一步的研究方向。第二章系统实现所涉及的相关技术1WinSock技术1.IWinsock简介随着互.联网的飞速发展,网络通信模块已经成为了操作系统中不可或缺的核心组成模块。为了开发windows平台下高效的网络通信程序,Microsoft公司以Berke1eySocket规范18】为规范定义了一套MicrosoftWindows下的网络编程接口,它不仅包含了人们很熟悉的BerkeleySocke员格的库函数,也包含了一组针对Windows的扩展库函数,以使程序员能充分利用Windows消息驱动机制进行编程【91。WindowsSocket规范本意在于提供给应用程序开发者一套简单的API,并让各网络软件供应商共同遵守。此外,在一个特定版本Wind。ws的基础上,WindowsSocket规范也定义了一个二进制接口(ABI),并通过此二进制接口来保证其兼容性。因此这份规范定义了应用程序开发者能够使用,而且网络软件供应商也能够实现的一套函数调用和相关语义。WindowsSocket规范定义并记录了如何使用API与Internet协议连接,尤其要指出的是,所有的windowsSocket实现都支持流式套接字和数据报套接字.应用程序调用Windows套接字的API实现相互之间的通信1101。Windows套接字又利用下层的网络通信协议功能和操作系统调用实现实际的通信工作,他们之间的关系如卜图所示。I应用程序1卜一一1应用程序2311网络编程界面,例如windowsSockets ]]1网络通讯协议服务界面,例如Tc驯Di11操作系统,例如wndowsi1f物理通讯介质图2.iWinS。ck来进行数据传递模型WindowsSockets也支持多线程的Windows进程。WindowsSockets规范中的针对windows的扩展部分为应用程序开发者提供了开发具有的Windows应用软件的功能。它有利于使程序员写出更加稳定并且更加高效的程序1111.1.1WinSock工作原理要进行互联网进行通信,至少需要一对套接字:其中一个运行于客户机端,称之为C1ientSocket,另一个运行于服务器端,称之为ServcrSoc覆据拄接启动的方式以及木地套接字要连接的目标,套接字之间的链接过程可以分为三个步骤【10】:.服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。.客户端请求,是指由客户端的套接字提出连接,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。.连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,•旦客户端确认了此描述,连接就建立好而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。由于套接字是面向客户机/服务器模型设计的,其处理方式又面向连接和无连接两种方式。这两种方式都要求服务器先于客户端启动。♦无连接方式:使用数据报套接字大多数的数据报应用程序使用的是一个比较固定的事件序列来完成客户应用程序和服务器应用程序之间的通信,如图2.2所示:图2.2数据报套接字的使用方法•面向连接方式;使用流式套接字流式套接字使用的是基于连接的协议,所以它的使用方法与数据报套接字有所不同,因为用户在传输、接收数据之前必须首先建立连接,然后才能从数据流中读出数据,而不是从一个数据报或一个记录中读出数据。首先,服务器要创建一个用于侦听的套接字,为该套接字分配地址之后,调用1isten(1函数使它处于侦听状态;客户机在创建套接字完毕后,为套接字分配地址,然后调用connect()函数,请求与服务器套接字连接;服务器套接字在收到客户机的连接请求后,调用accept()函数,该函数创建一个用于连接的套接字。应用该套接字和客户机上的连接套接字,用户就可以在服务器和客户机之间进行数据传输了。在结束传输之后,客户机调用c1。ses。cket()函数关闭套接字,服务器也调用该函数关闭用于侦听和连接的套接字.流式套接字的使用方法如图2.3所示.图2.3流式套接字的使用方法2.2多线程编程技术Windows是•种多任务的操作系统【121【”】,在Windows的一个进程内含一穆多个线程【14].32位Windows环境下的Win32API提供了多线程应用程序开发所需要的接口函数,而利用VC中提供的标准c咋也可以开发多线程应用程序,相应的MFC类库封装了多线程编程的类11”,用户在开发时可根据应用程序的需要和特点选择相应的工具。多线程编程在Win32方式下和MFC类库支持下的原理是一致的,进程的主线程在任何需要的时候都可以创建新的线程.当线程执行完后,自动终止线程:当进程结束后,所有的线程都终止。所仃活动的线程共享进程的资源,因此,在编程时需要考虑在多个线程访问同一资源时产生冲突的问题。当一个线程正在访问某进程对象,而另一个线程要改变该对象,就可能会,‘'生错误的结果,编程时要解决这个冲突「T。.Win32Api是Windows操作系统内核与应用程序之间的界面,它将内核提供的功能进行函数包装,应用程序通过调用相关函数而获得相应的系统功能。为了向应用程序提供多线程功能,win32API函数集中提供了一些处理多线程程序的函数集。直接用Win32API进行程序设计具有很多优点:基于Win32的应用程序执行代码小,运行效率高,但是它要求程序员编写的代码较多,且需要管理所有系统提供给程序的资源。用Win32Api直接编写程序要求程序员对Windows系统内核有一定的了解,会占用程序员很多时间对系统资源进行管理,因而程序员的工作效率降低。MFC是微软的VC开发集成环境中提供给程序员的基础函数库,它用类库的方式将Win32API进行封装,以类的方式提供给开发者[171。由于其快速、简捷、功能强大等特点深受广大开发者喜爱。在Vc++附带的MFC类库中,提供了对多线程编程的支持,基本原理与基于Win32API的设计一致,但由于MFC对同步对象做了封装,因此实现起来更加方便,避免了对象旬柄管理上的烦琐工作。在MFC中,线程分为两种:工作线程和用户界面线程。工作线程与前面所述的线程一致,工作线程编程较为简单,一个基本函数代表了一个线程,创建并启动线程后,线程进入运行状态;如果线程用到共享资源,则需要进行资源同步处理。工作线程没有消息机制,通常用来执行后台计算和维护任务。用户界面线程是一种能够接收用户的输入、处理事件和消息的线程。它是基于MFC的应用程序的一个应用对象,由CWinApp派生类,该对象代表了应用进程的主线程。当线程执行完并退出线程时,由于进程中没有其他线程存在,进程自动结束。类CWinApp从CWinThread派生出来,CWinThread是用户接口线程的韩精用户接口线程时,需要从CWinThread派生自己的线程类,使用C1assWizard可以完成这个工作。如果用户的应用程序需要多个任务同时进行相应的处理(特别地对于客户/服务器模型),则使用多线程是较理想的选择。2.3数据库访问技术2.3.1ODBC的基本概念ODBC(0penDataBaseConnectivity,开放数据库互连)是微软公司开放服务结构(windowsopenservicesarchitecture,W0SA)中有关数据库的.组•部分,它建立了一组规范,并提供r一组对数据库访问的标准apI[is].这些API利用SQL来完成大部分任务。ODBC本身也提供「对SQL语言的支持,用户可以直接将SQL语句送给0DBC。使用ODBC让应用程序的编写者避免了与数据源相联的复杂性。这种技术目前已经得到了大多数DBMS厂商们的广泛支持。MicrosoftDeveloperStudio为大多数藉篦曾鬟提供了32位ODBC驱动器。这些标准数据格式包括SQLServer、Access>Paradox、dBase、FoxPro,Excel、Oracle以及Micros窠年区聿童前般他数据格式,用户需要相应的ODBC驱动器及DBMS。0DBC管理器位于Windows控制面板的32位。DBC内,其主要任务是管理安装的ODBC驱动程序和管理数据源。驱动管理器包含在0DBC32.DLL中,对用户是透明的。其任务是管理0DBC驱动程序,是ODBC中最重要的部件。0DBC驱动程序是一些DLL,提供了ODBC和数据库之间的接口。数据源包含了数据库位置和数据库类型等信息,实际上是种数据连接的抽象。应用程序要访问一个数据库,首先必须用0DBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给。DBC,0DBC就能建立起与相应数据库的连接。在ODBC中,ODBCAPI不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对0DBCAPI的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。在访问0DBC数据源时需要ODBC驱动程序的支持。2.3.2Visua1C++开发数据库的优势visua1c++提供了多种多样的数据库访问技术一。DBCAP1、MFCODBC,DAO、OLEDB、ADO等。这些技术各有各的特点,他们提供了简单、灵活、访问速度快、可扩展性强的开放技术,而这些正是visua1C++开发和其他开发工具相比的优势所在。归纳起来可以概括为以下几个方面[19]:.简单性首先,VisualC++提供的MFC类具有强大的功能,一些开:发向导会简化应用程序的开发:另外MFCODBC和ADO数据库接口已经将一些底层的操作都封装在类中,用户可以方便地使用这些接门,而无需编写操作数据库底层代码。.可扩展性VisualC++提供的。LE技术和ActiveX技术可以让开发者利用VisualC++中提供的各种组件、控件以及第三方开发者提供的组件来创建自己的程序,从而实现应用程序的组件化,而组件化的应用程序则会具有更好的扩展性。.访问速度快VisuaIc++为了解决利用ODBC开发的数据库应用程序访问数据库速度慢的问题,提供了新的访问技术,即OLEDB和它的高层接口ADO,它们是基于COM接口的技术,因此使用这种技术可以直接对数据库的驱动进行访问,从而提高访问速度。4.数据源友好传统的ODBC技术只能访问关系型数据库,而在VisuaIC++中,通过OLEDB访问技术不仅可以访问关系型数据库,还可以访问非关系型数据库。2.3.3MFC数据库访问技术.MFC的ODBC数据库访问技术【181MFC的ODBC类对于较复杂的ODBCAPI进行了封装,提供了简化的调用接口,从而大大方便了数据库应用程序的开发。程序员不必要了解0DBcAPI和SQL的R体细节,利用ODBc类即可完成对数据库的大部分操作。MFC的ODBC类主要包括【19】:CDatabase类对象提供了对数据源的连接,通过它可以对数据源进行操作。CRecordView类对象能以控制的形势显示数据库记录。这个视图是直接连接到一个CRecordSet对象的表视图。CRecordSet类对象提供了从数据源中提取出的记录集。CRecordSet对象通常用于两种形式:动态集(dynasets)和快照集(snapshots)。动态能与其他用户所做的更改保持同步。快照集是数据的一个静态视图。每一种形式在记录被打开时都能提供一组记录,区别在于,当用户在一个动态集里滚动到一条记录时,由其他用户或是应用程序中的其他记录集对该记录所做的更改就会相应地显示出来。cFieldExchange类,支持记录字段数据交换(DFX),即记录集字段对数据成员与相应的数据库的表的字段之间的数据交换。该类的功能与CDataExchange类的对话框数据交换功能类似。CDBException类,代表ODBC类产生的异常。概括地讲,CDatabase针对某个数据库,它负责连接数据源;CRecordSet针对数据源中的记录集,它负责对记录的操作;CRecordView负责界面,而CFieldExchange负责CRecordSet与数据源的荻端谎的DA0数据库访问技术DA0在很大程度上是ODBC类的超集【181[191,它包含了ODBC类的大部分功能。与ODBC一样,DA0提供了一组API提供编程使用,从而大大简化了程序的开发。利用MFC的DA0类,用户可以编写独立于DBMS的应用程序。DAO类与0DBC类相比具有很多相似之处。首先,二者都支持对各种ODBC数据源的访问。虽然二者使用的数据引擎不同,但都可以满足用户编写独立于DBMS的应用程序的要求;其次,DA0提供了与ODBC功能相似的MFC类,他们的大部分成员函数都是相同的。DAO类使用了微软Jet数据库引擎,与ODBC类十分相似。实际上,可以很轻松地把数据库应用程序从0DBC移植到DA0,只需要将程序中使用的类的名字对应到DA0中。在0DBC和DAO之间还有许多不同的地方。其中一个较大的不同是系统实现函数的方法不同,0口8(:使用一组口11实现,而口人0使用01£对象来实现。此外,这两种方式还有一下不同之处:(1)记录集的默认类型不同。ODBC记录集的默认类型是快照,而DA0默认类型则是动态集。(2)参数化的方式不同。(3)处理异常的方式不同。DA0记录集是使用DFX数据交换机制(DAOrecordfie1dexchange)而不是RFX,在DAO记节e1dExchange中,使用的是DFX函数而不是RFX函数。(4)DAOMi^ODBC驱动程序直接访问ODBC数据源,而不必在0DBC管理器中注册DSN。一般地讲,DA0类提供了比ODBC类更广泛的支持。一方面,只要有0DBC驱动程序,使用MicrosoftJet的DA0就可以访问0DBC数据源。另一方面,由于DAO是给予MicrosoftJet引擎的,因而在访问Access数据库时具有很好的性能,但在访问其他类型的库时,效率不是很高。2.4.1DLL简介动态链接库(DynamicLinkableLibrary,DLL)是Windo最重•螂—1201.其中Kerne132.d11,User32.d11,GD132.dll和一 .一 ,,System,dry等以.dll、,dry、,fon>.sys和许多以.exe为扩展假破神疫箪撵库ndows操作系统的核心。这些动态链接库包含有服务函数、全局数据和资源,在运行时能够被系统自动加载到进程的地址空间中,成为调用进程的一部分。如果和其他DLL没有冲突,此模块将被映射到进程地址空间的同一地址上。DLL模块包含有各种导出函数,用于向外界提供服务。DLL也可以拥有属于自己的数据段,但却无法又有属于自己的堆栈,只能使用与调用它们的应用程序相同的堆栈模式。在Win32环境中,每个进程都复制了自己的读/写全局变量。如果想要与其他进程共享内存,必须使用内存映射文件或者声明一个共享数据段。DLL模块需要的堆栈内存都是从运行进程的堆栈中分配出来的。Windows在加载DLL模块时将进出函数调用与DLL文件的导出函数相匹配。Windows操作系统对DLL的操作仅仅是把DLL映射到需要它的进程空间的虚拟地址空间里去。DLL函数中的代6马所创建的任何对象(包括变量名)都归调用它的进程或线程所有。一个DLL的在内存中只有一个实例,可以为当前操作系统的多个应用程序所共享。DLL很好的实现了对代码的封装,在创建可执行模块时并不需要公开其源代码。DLL的制作与具体的编程语言及编译器无关,因此可以充分发挥多种编程语言的优势,使程序设计人员能够以最适合的语言完成对某个模块的设计。在设计比较大的应用程序时,一般将其划分为多个模块,这些模块分别完成相对独'工的功能,它们彼此协作来完成整个软件系统的工作。可能有一些模块的功能较为通用,在构造其他软件系统时仍会被使用。在构造软件系统时,如果将所有模块的源代码都静态编译到整个应用程序EXE文件中,会产生一些问题.一个缺点是增加了应用程序的大小,会占用更多的磁盘空间,程序运行时也会消耗较大的内存空间,造成系统资源的浪费;另一个缺点是,在编写大的EXE程序时,在每次修改重建时都必须调整编译所有的源代码,增加了编译过程的复杂性,也不利于阶段性的单元测试。另外,由于DLL的外部接口比较清楚,通过对DLL模块的划分,可以将一个庞大的任务细分为小同的模块而下放到不同工作小组去分头开发这在很大程度上简化对项目的管理。4.1DLL的调用方式DLL的调用方式有静态调用和动态调用两种1211。其中,静态调用方式由编译系统完成对DLL加载、卸载的编码(如还有其他程序也在使用此DLL,则Windows对DLL的应用技术减1,直到所有相关程序都借宿对此DLL的使用时才释放它)。静态调用方式简单实用,但不够灵活,只能满足一般需求。动态调用方式则是由程序设计人员通过使用API函数来完成对DLL的加载与卸载,使用虽然较复杂,但却更加有效地使用内存,在编写大型应用程序时往往采用这种方式。在使用静态调用方式时,需要将生产动态链接库时产生的.LIB文件添加到应用程序工程中,对要使用的DLL中函数,只需要声明一下即可。在程序员以静态调用方式编译生成应用程序时,应用程序中的调用函数将与LIB文件中的导出符号相匹配,这些符号或标识号进入到新牛.成的可执行文件中。LIB文件中包含了对应的DLL文件名(不是绝对路径),链接程序将其存储在可执行文件内。一旦应用程序需要加载DLL文件,操作系统将根据此信息发现并加载DLL,并通过符号名或标识号实现对DLL函数的动态链接。所有被应用程序调用的DLL文件都会在应用程序EXE文件加载时被加载到内存中。可执行程序链接到一个DLL输出函数信息的输入文件库(.LIB)»操作系统在加载使用可执行程序的同时加载相应的动态链接库,由可执行程序直接通过函数名来调用DLL的各个输出函数,其调用方法与调用位于程序内部的其他函数是•样的。在进行动态调用时,应用程序使用L。adLibrary()或MFC提供的AfxLoadLibrary()函数显示加载动态链接库,以DLL文件名作为函数的参数,再用GetProcAddress()函数获取想要引入的函数。自此,就可以像使用应用程序内部函数一样来调用此引入函数了。在应用程序推出之前,需要用FreeLibrary(1或MFC提供的AfxFreeLibrary(1函数显碗州蝌海辅店完全时通过代码显示进行,因此程序员可以决定DLL文件是否加载或不加载,以及在运行时决定加载哪个DLL文件。在使用DLL的程序之前必须成功加载DLL获得〜个DLL模块句柄,并调用GetProcAddress()函数将符号名或标识号转换为DLL内部地址。动态调用方式对于集成化的开发语言(比如Visua1C++)比较适合。2.5本章小结本章讨论了计算机监控系统(M。nSys)设计开发过程中涉及的一些相关技术。在第一节,介绍了在Windows网络编程中进行开发的WinS。ck技术。第二节讨论了多线程编程技术。这两个技术是MonSys系统通信连接模块中所用的技术。第三节介绍了数据库访问技术,并对ODBC和DA0两种编程方式进行了详尽的分析与比较。在M。nSys数据显示模块中会用到该技术。第四节介绍了MonSys系统在获取系统硬件配置时用到的动态链接库(DLL)技术。第三章系统需求分析与实现思路1系统需求分析企业网络建设的快速发展促使了计算机监控系统的飞速发展。如今,监控系统软件己经深入各行各业,非常活跃。生产监控软件的SpectorSofi公司总经理佛罗曾经说过:如果有54%的公司监控他们的雇员,那么儿十亿美元的生意就已经摆在了眼前1221。国内外大公司都将精力投入到利润丰厚的商用产品上,一些知名的国产品牌只愿意为部分需求大、利涧高的行业用户服务,如电信行业等,而为数众多的中小企业却往往被忽视了。当前,网络技术市场上主导厂商的主流产品是为大型企业服务的,其强大的功能并非中小企业需要的,其高昂的价格更是中小企业无法承受的。就目前的情况来看,我国各中小企业单位基本都建有自己的内部网络,这样可以充分利用公司现有的硬件资源,如打印机、扫描仪、节约了公司的开支:还提高了公司内部员工的工作效率。企业的办公自动化水平和企业内部应用电子商务能力,逐步进入业务级的网络应用阶段。但是某些员工却利用公司的网络资源做与工作本身无关的事情。因此如何加强对公司计算机的管理,更好的提高企业的办公自动化水平,成为了企业单位日益突出的问题。本课题是针对这些问题而面向中小型企业开发计算机监控管理系统。本监控系统采用结构化分析(structuredanalysis)方法简称SA方法对系痴彳学H析建模。SA方法结构化方法是目前最成熟、应用最广泛的信息系统开发方法之一,他的优点是有一套严格的开发程序,国内外已有许多成功开发的例子1241。结构化分析方法将分析的结果用图形表示,如业务流程图,数据流程图等,这些图形都有一套标准图符组成,从而将分析结果简明易懂的展示在用户面前。按照结构化分析得出整个系统的数据流图如卜:图3.1系统数据流图顶层图图3.2系统数据流图。层图系统的功能需求分析如下.:(1)数掘采集与显示功能。监控系统能够根据要求从数据库中取得所需的信息并进行相应的处理,同时把监测的数据实时的显示给用户,用户可以通过提供的目录,准确,快速的找到相关设备的状态信息。(2)用户界面功能。界面是人与程序交互的起点,一个好的系统首先要拥有一个好的友善的用户界面。系统的用户界面应该尽可能简洁和人性化,能够让使用者方便、轻松、舒适的使用,系统提供的功能要完整明确易懂的出现在用户界面上。(3)安全功能。任何时候,系统的安全都是一个非常重要的方面,系统要能保护系统中的信息安全,防止恶意破坏。不许无权限的人观察到重要资料和进行有关操作。对于系统中的使用者也要进行权限分级,重要的操作只能有特定的人员进行。(4)管理功能。监控系统不仅要使得管理人员能够从个人计算机上观测到系统的运行状态,还要能够让管理人员在必要时进行必要的管理操作。(5)配置管理功能。配置管理用于监控对象、监控系统自身的增加、修改和删除管理。它应操作筒单、方便直观而且具有兼容性,可以在线进行配置,不中断系统的运行。配置资料的录入要求简洁明了,易于理解和操作。3.2系统总体架构设计在一个好的架构下编程,不仅对于开发人员是一件赏心悦目的事情,更重要的是软件能够表现出一个健康的姿态【25】:而架构设计的不合理,不仅让开发人员受苦受难,软件本身的生命周期更是受到严重威胁1261。整个系统总统架构采用广泛使用的C/S模式,如图3.3所示:在图中可以看出,监控系统分为服务器端和客户端,各被监控计算机安装监控软件的客户端,主要功能是向监控计算机提供被监控计算机的信息,并接受服务器端的控制命令。服务器端监控各客户端的运行状态,对客户端发送控制信息,并将感兴趣的客户端的信息记录在数据库中,以便将来查询。为了减轻客户端的负荷以及处于安全方面的考虑,系统采用了集中式的数据库管理方法[271,进行数据的管理和汇总,使数据维护的完整性和稳定性更加容易,同时有利于数据的快速检索和显示。服务器端II数据库服软堡r _1堑墅通信网络图&3系统总体架构3系统的特点及实现思路通过对原有计算机监控系统的分析我们可以看出他们的一些不足:USB监控方面:目前的产品只能禁用USB存储设备功能,不能实现USB存储的写保护功能。计算机硬件管理方面:大多数产品并没有计算机的硬件配置信息,不能保证企业财产的安全性。计算机控制方面:大多数产品只实现了简单的远程关机,远程重启与员工远程通话等功能,并没有实现对客户机的完全控制。除了具有其他监控软件的常用监控项目外,本监控系统最重要的特点如下:除了允许、禁用uSB存储设备的功能外,本系统还独创了USB存储设备的写保护功能.•服务器端计算机能完全获得客户端计算机的控制权,能对客户端计算机进行远程操作。•服务器端计算机有每台客户端计算机的配置信息,当员工离职或调离某个部门时,能将客户端计算机的配置信息和原始信息比较,查看计算机硬件是否有变化,从而确保公司固定资产的安全。由于整个系统非常复杂,在整个系统的实现中,我们采用了以下的一些比较独到的思路:•运用多线程编程技术实现多用户并拔性;运用多线程技术,能使系统同时支持很多个客户端进行实验,能解决多客户并发工作问题。•采用木马技术128]隐藏客户端软件,使客户端用户在不知情的情况下被监控。即使被用户发现,一般用户也无法结束该客户端软件或是强制退出该客户端。•运用C/S模型加数据库服务器构建系统【291:采用C/S系统构架,可以使服务器与客户端分离,这样能提供更好的灵活度。•采用C语言与汇编语言混合编程来获取系统的基本硬件配置信息。3.4系统开发环境根据对系统的分析和设计,确定整个系统的开发环境为:操作系统:WindowsXPSP2.开发工具为:Visua1c++6.0(以后简称vc).开发模式:基于C/S的开发模式。数据库:SQLServer2000选择VC作为系统的开发工具是因为VC是微软推出的一个面向对象、功能丰富、方便实用的可视化开发工具【3叭,同时,VC还具备以下优越性能:首先,VC具备了C和C++语言高效简洁的特点,因而用VC开发的应用程序具有很好的运行速度优势:其次,VC拥有出色的MFC(MicrosoftFunctionCIass)函数库、类向导(ClassWizard)以及应用程序向导(AppWizard),这些大大减化了程序员的工作;最后,丫(:还继承了(:、C++语言有良好的I/。功能。所以,对于运行速度、开发效率和硬件控制要求很高的计算机监控软件来说,VC是理想的选择。选择微软公司的SQL2000Server数据库管理系统(-1来进行数据的存储是因为SQLServer数据库管理系统是一套全面、完整的数据库设计与分析产品。SQLServe作为Microsoft产品家族的重要成员,是Windows黎舞中最受欢迎的关系型数据库管理系统,它具有可靠性、可伸缩性、可管理性、可用性等优点,应用十分广泛。.4本章小节本章介绍了计算机监控系统的需求分析和系统的结构。在第一节,给出了系统的数据流图,并对系统进行了功能需求分析,说明系统需要完成的主要功能;第二节讲述了整个系统的架构设计,系统采用了C/S模式,阐述了系统分为客户端和服务器端两部分及每部分的主要功能。第三小节讲述了系统的特点及实现思路,指出目前市场上其他系统在某些功能上的不足,以及本系统对这些功能的改进和系统的实现思路。第四小节讲了该系统的开发环境和选择这些开发工具的原因。第四章系统设计与实现系统设计是系统开发过程中的一个重要阶段。在这个阶段中,我们根据需求分析的结果,进行系统设计。本章将主要分析计算机监控系统的软件设计与实现,它主要由服务器与客户端两个部分组成,其总体设计如图4.1所示。下面将对这两个子系统的设计进行详细阐述。图4.1软件系统总体设计图.1服务器端软件设计与实现根据第三章的需求分析,我们把服务器端软件总共分为四个大模块,分别是:网络通信模块、数据记录与显示模块、基本监控模块以及高级监控功能模块,如图4.2所示:图4.2]JH务器端总体设计图4.1.1网络通信模块网络通信模块位于软件系统的最底层,负责解决客户机与服务器的通信问题,一旦服务器端需要与客户端交互数据,则需使用通信模块提供的通信接口,各自按照通信协议制定的规程发送数据。网络通信模块使用WinSock套接字编程,其流程图如图4.3所示:网络通信模块实现过程中自定义消息为:•消息名:WMSOCKETREAD功能:表示表示需要读取信息。说明:它的消息映射定义和消息相应函数如下:ON—MESSAGE(WM—S0CKET—READ,OnSocketRead)afx—msgLRESULTOnSockctRead(WPARAMwParam,LPARAMIParam);模块自定义函数为:•函数名:voidcscrvcrDIgs:onsocketconnect()功能:建立和客户端的连接。说明:在连接函数中我们采用WSAAsyncSe1ect()函数,它用来通知套接字有请求事件发生。在这里的请求事件是欲接收读准备好的通知,函数的调用如下:iErrorCode=WSAAsyncSe1ect(m—hSockct,m—hWnd,wM—SA部针「READ,F一j否〜、结图4.3"柬器通信模块流程图其中,mhSocket是需要消息通知的套接字。mhWnd是在网络事件发生时需要接受消息的窗口,在这里我们是用CWind函数的一个成员变量。wMsOcKETREAD是我自己定义的一个消息,表示需要读取信息。•函数名:afxmsgLRESULTOnSocketRead(WPARAMwParam.LPARAMIParam);功能:套接字接收信息•由数名:voidCCIientDIgt:onSocketSend(>功能:发送信息。在使用套接字编程中容易容易发生错误,我在编程时也注意到了对于发生异常时的处理。当发生异常时,将弹出对话框提示用户在哪一步发生了错误,方便用户进行排错处理,如果发送数据时出错,代码如下:if(nCharSend==SOCKET_FRR。R)- MessageBox("发送数据时出错!“,”计算机监控”,MB-0K);4.1.2数据记录与显示模块数据记录与显示模块的上要功能是负责基本监控模块的数据显示。为了显示清晰明确,我把与数据库有关的显示结果使用列表控件显示,其他的数据就采用了通常的文本框进行显示。该模块流程图如图4.4所示:在数据记录与显示模块中,使用的主要函数如下::函数名tBOOLcserverApp«:1nitInstance()功能:与数据库进行连接说明:使用ADO类对数据库进行操作,连接数据库的代码如下:if(FAILED(::Co1nitia1}ze(NULL)))AfxMessageBox("ADOlnit»try(AD0Conn.create1nstance(一•一uuidRB&eS/nfbj&mN=MonitorSystem:Provider=MSDASQL”.”adCQnnectunspecifi图4.4数据记录与显示模块流程图catch(一corn—erqor&e)CStringerr:err.Format("%s",(char+)(e.DXfx!&ejsage^ox?d}rr);catch(...)(ageBox(MUnknownErroAageBox(MUnknownErro国数名:intcservefApp:;Exit!功能:在数据库访问完毕后,需要关闭数据库的连接。说明:与数据库断开连接代码如卜.:teOpen==ADOConnif(adSta一>注配外AD56;nnteOpen==ADOConnSeIn>§A56§e•SeIn>§A56§e• voidCServerDIg:tShowData()t一,C1o功能:显示信息。因为服务器端的数据存放在sQLServer2000数据库中,因此我们需要在控制面板中设置好数据源,这样才能保证程序中所有对数据库的操作有效。1.3基本监控功能模块基本监控功能模块提供最基本的监控选项。基木监控功能模块的主要有7个功能:杳看客户端文件目录,强迫客户端重启或关机,锁住客户端的屏幕,允许、限制使用USB设备,查看客户端使用记录,修改客户端的配置文件以及获得客户端的系统配置(硬件信息)。当系统管理员选择了下拉列表框的基本监控命令后,系统调用网络通信模块将命令发送到客户端,然后接受客户端的反馈信息;最后将客户端的反馈信息在列表控件中加以显示。模块的工作流程如图4.5所示。基本监控功能模块的自定义函数:•函数名:voidCScrverDlg::OnSe1cct0功能:选择要发送的监控命令。图4.5通信模块流程图4.1.4高级监控功能模块高级监控功能模块主要就允许管理员像操作自己电脑一样直接操纵被监控端的电脑。服务器端首先需要新创建一个窗口来显示客户端的扉幕,然后在该窗口上绘制出通过网络通信模块获得的客户端屏幕,当管理者在这个窗口中进行操作时,我们将这些操作消息发送到客户端,客户端接收到这些消息后进行相应动作,然后又将客户端的屏幕发送到服务器端,继续等待服务器管理员的下一个操作命令,直到用户关闭该窗口。高级监控功能模块的流程图4.6所示:高级监控模块中屏幕控制窗口消息循环是整个模块的核心。它从消息队列中检索消息;并将消息发送到相应的窗口过程。在这里我们感兴趣的消息主要是鼠标移动(wMMOUSEMOVE)、鼠标单击(WM—LBUTTONDOWN,WM—LBUTTONUP、WM—RBUTTONDOWN,wMRBUTTONUP)、双击事件(WMLBUTTONDBLCLK)等。于是我们在窗口过程函数中对感兴趣的消息进行相应的处理,其他的消息我们交给默认的窗口过程处理。1设计屏幕监控窗口类1及窗口消息处理函数1I创建屏幕控制窗口并初始化套接字J进入息循环掣卸I'J在监控端绘制获取的被监控端桌而发送鼠标操作信息窗口消息处理幕控制窗口图4.6高级监控模块流程图在这个模块中使用的主要函数如下:,丽故名1boolCServeriiOnScreenO功能:初始化高级监控功能模块。•函数名:ATOMServerRegisterClass(HINSTANCEh1nstance)功能:注册监控窗[J类。•函数名:BOOLServer)nitInstance(HINSTANCEh1nstance>功能:创建屏幕控制窗口,并初始化套接字。•函数名:LRESULTCALLBACKWndProc(HWNDhWnd.U1NTmessage,WPARAMwParam,LPARAMIP功能?啕建窗口的消息处理函数。•喳数名:voidMouseEvent(intMsg.HWNDhWnd)功能:处理鼠标事件・函数名:voidGetDesktopBit(HWNDhWnd)功能:获得被监控端屏幕。4.2客户端设计与实现客户端提供与用户操作接口,本模块主要提供以下三个主要功能:“服务室进行可值,•提供用户的使用日志、系统配置信息;•BMiltfi.不让用户588t.客户端主要包含三个主要的模块,分别是:初始化模块、监控模块、网络通信模块。系统的总体设计如图4.7所示。下面,我们分别对这三个模块进行详细介绍。图4.7客户端功能模块图4.2.1初始化模块初始化模块主要就是使客户端软件跟随系统启动、隐藏自己的进程并进行•些基本的配置。它的流程图如下所示:退出第二个实例隐藏进程1读取配置信息I开启监控线程、1i打开网络连接i上网络通信模块图4.8初始化模块流程图在初始化模块中,我们将客户端软件名称命名为【explore,它和系统进程名称类似,用来迷惑用户,一旦用户发现了该进程,但由于进程名称和系统进程及其类似,让用户以为是系统进程。同时在客户端软件中使用了编写木马病毒中的进程隐藏技术,使客户端软件能够“悄悄地”对用户进行监视。进程隐藏的方法有很多种。在Win9x平台下很容易实现进程隐藏,只要把应用程序注册为一个服务就行了,这样程序就会从任务列表中消失了,因为系统不认为他是一个进程。当按下Ctrl+AIt+Delete的时候,也就看不到这个程序。但是,对于windowsNT/2000等系统通过服务管理器一样会发现你在系统中注册过的服务。实现在WindowsNT/2000进程隐藏的方法之一就是API的拦截技术,通过建立一个后台的系统钩子,拦截PSAPI的EnumProcessModu1es等相关的函数来实现对进程和服务的遍历调用的控制,当检测到进程ID(PID)为木马程序的服务器端进程的时候立接跳过,这样就实现了进程的隐藏。金山词霸等软件,就是使用了类似的方法,拦截了TextOutA,TextOutW函数,来截获屏幕输出实现即时翻译的。方法二就是把应用程序做为一个线程,把自身注入其他应用程序的地址空间作为其他应用程序的一个线程。但这两种方法已经能够被现在的杀毒软件发现其踪迹。木文实现的进程隐藏在目前来说还不能被瑞星等主流杀毒软件发现。其隐藏原理是在活动进程双向链中删除想要得隐藏的进程1331。Windows系统中有一个叫Kernel'SProcessorControlBlo疝施备利及早MM?它慧龛位于0xffdff120地址,它的数据结构是指向一个地址双字,这个地址叫做ETHREAD块,0xffdffl24指向当前线程的ETHREAD块,再下一个就是下个线程的ETHREAD块。ETHREAD块的数据结构相对复杂,它的offset0x44处为EPROCESS块的地址。EPR0C锭小着个有趣的数据结构叫活动进程链,它只有两个双字,一个FI1NK,一个BLINK,FLINK指向下一个EPR0CESS块的FLINK地址,BLINK则指向上一个EPROCESS块的BLINK地址,让自己的进程脱链就可以实现进程隐藏。初始化模块使用函数如下:函数名:BOOLAutoBoot0功能:修改系统注册表和初始配置文件,将软件设置为自动运行,函数名:voidHideprocO功能:隐藏进程,使它不出现在任务管理器中。俄数名:BOOLCIexplOrcDlg::OnClicntopen()功能:打开客户端网络连接。喙数名1BOOLc1exp1oreDlfFt:OnlnjtDialog()功能:开始监控。我们在里面添加读取软件配置的操作,如果是第一次运行,则使用默认设置。管理员可以用“热键”呼出软件配置界面对监控项目进行配置。•南数名:BOOLClexploreApp:।InitInstanceO功能:建立互斥变量,判断内存中是否已经有该程序运行。4.2.2监控模块监控模块主要分为五个小模块,分别为目录监控模块、USB监控模块、系统配置监控模块、使用日志监控模块以及屏幕监控模块,如图4.9所示:图4。9客户端监控模块各子模块设计如下:1)目录监控模块流程图如图4.10所示。目录监控模块使用函数及功能为:•函数名:voidCIexploreDIg::Dir0功能:列出文件目录清单。21USB监控模块USB监控模块的主要功能有:禁止、允许使用USB设备和USB设备写保护。专业软件的实现方法是编写USB设备的底层驱动过滤程序,这种方法实现起来非常复杂,而且需要专门的微软驱动程序开发包1281。图4.10客户端目录监控模块流程图在我们的客户端软件中,采用一种简单的修改系统注册表的方法同样可以实现这些功能。USB写保护的原理为:在注册表的KEYLOCALMACHINE/SYSTEM/CurrcntControlSet/Contro1下新建键名为StorageDevicePo1i薪康一榨为弟"iteProtect的DWORD值,然后把该健值修改为1就可以实现USB存储设备的写保护功能。USB监控模块的流程如图4.11所示。图4.IIUSB监控模块流程图3)系统配置监控模块系统配置监控模块主要是获取系统的硬件配置信息,如cPU主频、数量、型号、内存容量、硬盘容量等。因为VC提供的函数不能获CPU频率,所以我们使用了汇编指令来获得CPU频率。通常的方法是测试CPU在单位时间内运算的指令条数来获得CPU的频率,但用这种方法有太大的局限性,而且受到很多因素的影响。特别是在Windovs环境下,没有办法知道除自己的程序以外的别的程序占用了多少的时间片,所以采用该方法的准确度比较低。在586及以上档次处理器中,已经有了一条专用的指令来测试主频,那就是RDTSC指令psi,意思是读取时间标记计数器,它是处理器内部的一个64位的MSR(modelspecificregiSter).它每个时钟增加一个记数。在处理器复位的时候,初始值为0,RDTSC指令把TSC的值低32位装入EAX中,高32位装入EDX中。如果CPU的主频是200MHz,那么在一秒钟内,T5(:的值增加200,000,000次。因此在计算的时候,把两次的TSC差侑除以两次的时阳J差值就是CPU的主频。获得CPU频率程序的流程为:初始化时首先将程序的优先级设置为最高并设置一个定时器,定时时间为1秒,然后在定时器消息中利用1?口15(:取得T5(3计数,再和上次保留的值相减,然后除以时间差即可。我们总共调用这个模块五次,用五次的平均值作为最终值记录下来。内存容量、硬盘容量都可以通过调用系统的API获得,再进行简单的计算就可以得到需要的信息。我把这个模块封装在DLL文件中,这样做的目的是:由于这个模块不是很常用,所以一般情况下不将它加载入内存,降低了系统资源浪费。我把获得系统信息的函数封装在一个SysInf。导出类中,并将它做成了一个d11文件。在这个类中,我们定义了五个pub1ic函数实现获得CPU类型、CPU速度、CPU数量、内存容量、硬盘容量等信息,函数名称如下:getCpuIdentification(),getCpuSpeedO,疆"8干彳J")、4F他用日志记录模块使用口志监控模块主要功能是对客户端的电脑所作的操作进行记录。在这里我使用了Windows的工作日志“钩子”1341。该模块的流程图如图4.12所不:,图4.12使用日志记录模块辛要代码实现如下:.HOOKPROCJourna1LogProc(intiCode.WPARAMwParam,LPARAM1Param)(if(iCode<01return(HOOKPROC)Ca1INextHookEx(g_hLogHook,iCode,wParam,IParam);if(iCode==HC—ACTON)EVENTMSGopEvt=(EVENTMSG。)1HWbfD*!甲;ocus;charszTit1e[256];FILE+stream=fopen("Mon.109”,“a+tM):if(p£vt—>message==WM—LBUTTOND° Jt—>message==WM—RBUTTO{NDOWN)hFocus=GetActiveWindow0;T .iI<g-hLastFocus!=hFocus)g_hLastFoeus=hFocus:GetWindowText(hFocus,s256);pt=CTime::GetCurrentJime0.;CStringtimel,time2:time1=pt.Format("%A,%B%d,%Y");time2=pt.Format("%H:%M:%S”):fprintf(stream,”%c%s%c%c%s“,10,time1//写兜更件e2,32,32,szTit1e);fprintf(stream,"%c%}c",32,32);)fc1ose(strea(HOoKPROc)ca1INextHookEx(g—hLogHook,iCode,wParam,IParam);5、屏幕监控模块屏幕监控模块的主要功能就是:将客户端屏幕转换为位图形式发送到服务器端、接收服务器端的控制信息,并转换为本机的系统消息,在屏幕上显示出来。模块的流程图如图4.13所示:图4.13客户端屏幕监控模块流程图屏幕监控模块主要函数如下:函数名:voidcontro1scr0功能:执行屏幕监控功能。函数名:POINTSetMousePointO功能:设置鼠标位置。函数名:HBITMAPGetSrcBit(DWORDSitWidth,DWORDBitHeight)功能:获得桌面图形。4.2.3网络通信模块网络通信模块负责客户端与服务器端的数据交互,它的主要功能为:接受服务器端连接、断开服务器连接、向服务器发送数据、接收服务器发送来的数据。该模块流程图如图4.14所示【调用s。cket函数建1立socket套接u、调用bind函数为套接u绑定客户端IP地址 及端口- 调I11iS,e,信5斤,等待服务器端连接事件(非阻塞)接收服务器端数据发送反馈数据本次监1结束?1关闭套接字J1是—f结束1、?/图4.14客户端通信模块流程图4.3数据库设计本系统对数据库应用的要求属于中等规模的,为了便于以后功能扩展,我们采用了SQL2000作为数据库管理系统。在数据库中,我们设计了三个表,一个用来记录用户的硬件配置信息(user—Info),还有一个用来记录用户每天的使用日志信息(user—log),爵个用来记录计算机名和1P地址(user-ip)。建立三个表SQL语句如下:CREATETABLE[dbo]*[user_Info]([user_ID][varchar](100)COLLATEChinese—PRC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度大型活动空调租赁及临时用电合同3篇
- 2025版玉米收成分成合同3篇
- 2024年跨区域交通工程建设合同
- 特效剪辑拍摄课程设计
- 自由散步主题课程设计
- 2024年知识产权许可使用合同标的及许可范围具体描述
- 液压课程设计死挡铁停留
- 2025版贷款合同违约责任协议3篇
- 网吧简易局域网课程设计
- 约瑟夫环课程设计总结
- 2024新人教版英语七年级上单词默写表(小学部分)
- 电力拖动教学讲义
- 2024社保费测试(五)专项试卷
- 招商会会议流程纲要
- 安全生产工作年终总结
- 2024-2025学年人教版七年级英语上册各单元重点句子
- 信息技术行业数据安全HSE方案
- 中华护理学会团体标准-气管切开非机械通气患者气道护理
- 四川省成都市武侯区2023-2024学年七年级上学期1月期末语文试卷
- 儿科护理安全警示教育
- 2023-2024学年九年级上学期期末试卷及答案
评论
0/150
提交评论