版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
終、墨房啷轡之彥
碩士學(xué)位論文姓名:董墮導(dǎo)師:唐紅專業(yè):通信與信息系統(tǒng)
Y1219401論文Y1219401論文分類號tn915.09密級重慶郵電大學(xué)碩士學(xué)位論文論文題目計算機監(jiān)控系統(tǒng)研究與實現(xiàn)(題名和副題名)英文題目TheResearchandlmplementofComputerMoniteringSystem碩士研究生童鵬指導(dǎo)教師度絲煎握學(xué)科專業(yè)通籃當(dāng)籃息孟統(tǒng)論文提交日期芝竺乙。5g!!論文答辯目期士蘭之!!!希曼評閱八葛利嘉教授重慶通籃掌院圍國割絲握重慶堅墊盤蘭答辯委員會主席謝顯中教授重慶郵電大學(xué)2007年4月20日摘要隨著計算機網(wǎng)絡(luò)技術(shù)的發(fā)展及企事業(yè)單位網(wǎng)絡(luò)建設(shè)的不斷完善,如何加強企業(yè)對計算機的管理,更好地利用網(wǎng)絡(luò)資源為單位服務(wù)成為企事業(yè)單位口益突出的問題。而計算機監(jiān)控系統(tǒng)就是為了高效地管理好企業(yè)內(nèi)的所有計算機而建立的一種管理系統(tǒng)。計算機監(jiān)控系統(tǒng)是在遠(yuǎn)方機器允許的情況下,對其進行監(jiān)控的一類軟件,通過掌控被控端計算機實時的運行信息,隨時了解被監(jiān)控計算機的狀況,為計算機管理提供一種可靠、實用、方便高效的管理模式。建立高效的企業(yè)計算機監(jiān)控系統(tǒng)是企業(yè)綜合自動化建設(shè)的關(guān)鍵,因此計算機監(jiān)控系統(tǒng)具有重要的應(yīng)用價值。計算機監(jiān)控系統(tǒng)是一個復(fù)雜的系統(tǒng),涉及網(wǎng)絡(luò)安全、數(shù)據(jù)庫、網(wǎng)絡(luò)通信等多方面的知識。本文研究和實現(xiàn)的計算機監(jiān)控系統(tǒng)采用客戶/服務(wù)器模式,系統(tǒng)分為客戶端監(jiān)控軟件和服務(wù)器端軟件兩大部分??蛻舳吮O(jiān)控軟件分為三個模塊,分別完成客戶機初始化、進程隱藏、使用日志監(jiān)控等功能。服務(wù)器端軟件分為四個功能模塊,主要是收集客戶端各類信并存入數(shù)據(jù)庫中,并顯示數(shù)據(jù)庫和客戶端的各類信息以便管理員對企業(yè)內(nèi)的計算機進行監(jiān)測和管理。客戶端監(jiān)控軟件初始化模塊主要使用木馬技術(shù)實現(xiàn)客戶端的進程隱藏、開機自啟動、文件關(guān)聯(lián)啟動等功能,網(wǎng)絡(luò)通信模塊的實現(xiàn)以TCP/IP協(xié)議為基礎(chǔ),通過WinSock建立TCP連接來發(fā)送與接收信息,監(jiān)控模塊主要用Wind。ws鉤子技術(shù)來實現(xiàn)用戶日志使用記錄功能。服務(wù)器端軟件采用多線程技術(shù)來實現(xiàn)與客戶端的連接和數(shù)據(jù)傳輸,服務(wù)器端軟件界面將客戶端主機的信息以列表的形式呈現(xiàn)給用戶。系統(tǒng)綜合運用了結(jié)構(gòu)化分析與設(shè)計、網(wǎng)絡(luò)通信、多線程設(shè)計等多種技術(shù),實現(xiàn)了基于TCP/IP協(xié)議的計算機監(jiān)控系統(tǒng)。經(jīng)測試表明,該系統(tǒng)運行穩(wěn)定可靠,實現(xiàn)了預(yù)期的設(shè)計目標(biāo)。關(guān)鍵詞:計算機監(jiān)控客戶/N務(wù)器模式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獨創(chuàng)性聲明本人聲明所呈交的學(xué)位論文是本人在導(dǎo)師指導(dǎo)下進行的研究工作及取得的研究成果。據(jù)我所知,除了文中特別加以標(biāo)注和致謝的地方外,論文中不包含其他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得重龐整電太堂或其他教育機構(gòu)的學(xué)位或證書而使用過的材料。與我-同工作的同志對木研究所做的任何貢獻均已在論文中作了明確的說明并表示謝意。學(xué)位論文作者簽名:苔.鵬簽字日期:力管7年5月/6日學(xué)位論文版權(quán)使用授權(quán)書本學(xué)位論文作者完全了解重廢鯉皇太堂有關(guān)保留、使用學(xué)位論文的規(guī)定,有權(quán)保留并向國家有關(guān)部門或機構(gòu)送交論文的復(fù)印件和磁盤,允許論文被查閱和借閱。本人授權(quán)重慶郵電盔堂可以將學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存、匯編學(xué)位論文。(保密的學(xué)位論文在解密后適用本授權(quán)書)學(xué)位論文作者簽名:書,鵬導(dǎo)師簽名:一7影車L簽字Et期:糾年歲月%日簽字1:3期:〃。7年r月「Et第一章緒論1.1選題背景網(wǎng)絡(luò)技術(shù)的不斷發(fā)展和進步對整個社會產(chǎn)生了深遠(yuǎn)的影響。網(wǎng)絡(luò)已經(jīng)進入科研、教育、商業(yè)、生產(chǎn)、生活等各個領(lǐng)域和部門,在整個社會的發(fā)展中起著極其重要的作用。毫無疑問,公司、學(xué)校以及各種職能部門提供互聯(lián)網(wǎng)互通互聯(lián)的功能可以帶來很多的益處,但是一些員工濫用電腦,上班時間沉迷網(wǎng)絡(luò)游戲,瀏覽與工作無關(guān)的網(wǎng)站、聊天、收發(fā)私人信件、上網(wǎng)看電影、下載音樂等行為,這無疑對工作和學(xué)習(xí)效率產(chǎn)生負(fù)面的影響。據(jù)國外數(shù)據(jù)統(tǒng)計1i1.開通互聯(lián)網(wǎng)辦公的企業(yè)中,企業(yè)員工平均每天有超過二分之一的上班時間用來上網(wǎng)聊天,瀏覽色情網(wǎng)站或處理個人事務(wù),如瀏覽國家明令禁止的網(wǎng)站、工作時間上網(wǎng)打游戲聊天、下載和實際工作無關(guān)的電影、歌曲,甚至利用各行業(yè)的網(wǎng)絡(luò),對國內(nèi)外的某些網(wǎng)站發(fā)起惡意攻擊等。這些行為不僅消耗了網(wǎng)絡(luò)帶寬的資源,使網(wǎng)絡(luò)資源得不到充分的利用,而且影響了正常的辦公業(yè)務(wù)同時也使企業(yè)的安全問題受到威脅。如今,許多企業(yè)、部門已建成了電子政務(wù)互連,在電子政務(wù)內(nèi)聯(lián)網(wǎng)上,同時存在許多不同部門的網(wǎng)絡(luò)系統(tǒng),而這些部門對保密的要求是不相同的。由于電子政務(wù)內(nèi)聯(lián)網(wǎng)上同時接入了其它部門的網(wǎng)絡(luò)系統(tǒng),因此容易出現(xiàn)其它部門不懷好意的人員(或外部非法人員利用其它部門的計算機)通過電子政務(wù)內(nèi)聯(lián)網(wǎng)進入保密專用網(wǎng)絡(luò)系統(tǒng),并進一步竊取和破壞其中的重要信息(如領(lǐng)導(dǎo)的網(wǎng)絡(luò)帳號和口令、涉密文件等)。同時,在保密專用網(wǎng)絡(luò)系統(tǒng)內(nèi),由于存在不同等級的用戶、不同密級的信息,如不采取相應(yīng)的安全措施很容易發(fā)生內(nèi)部竊密或破壞,并且對密級信息的分級瀏覽控制也存在一定的安全隱患12]1弓|。由于電子政務(wù)內(nèi)聯(lián)網(wǎng)涉及的部門太多、地域范圍太廣,同時在保密綜合網(wǎng)內(nèi)也是地域廣泛,網(wǎng)絡(luò)終端多,因此這種風(fēng)險是必須采取措施進行防范的。電腦太多,IT管理員分身乏術(shù),每天在資產(chǎn)管理、系統(tǒng)維護上花費大量的時蚓和精力。因此各企業(yè)部迫切需要一種嚴(yán)格監(jiān)控和記錄員工計算機的使用情況,并對不良行為做出及時控制、保障信息安全、提高生產(chǎn)力的計算機監(jiān)控系統(tǒng)。目前,建立高效的企業(yè)計算機監(jiān)控系統(tǒng)是企業(yè)綜合自動化建設(shè)的關(guān)鍵。由于計算機監(jiān)控系統(tǒng)具有重要的應(yīng)用價值,本文力圖通過對計算機網(wǎng)絡(luò)編程技術(shù)和木馬編程技術(shù)深入研究后,設(shè)計并實現(xiàn)出一種滿足中小企業(yè)網(wǎng)管理員的需求,對網(wǎng)絡(luò)內(nèi)所有計算機實行有效監(jiān)控的管理系統(tǒng)。.2研究現(xiàn)狀與發(fā)展方向計算機監(jiān)控潛在的巨大發(fā)展前景,推動了計算機監(jiān)控系統(tǒng)的迅猛發(fā)展。目前國內(nèi)外已經(jīng)有很多公司提供計算機監(jiān)控系統(tǒng)軟件。計算機監(jiān)控行業(yè)領(lǐng)先的公司也研發(fā)出了一系列監(jiān)控產(chǎn)品如:南京網(wǎng)亞計算機有限公司推出的WorkWin管理專家一局域網(wǎng)絡(luò)監(jiān)控軟件員工監(jiān)控軟件14J是一款功能強大的局域網(wǎng)客戶機局域網(wǎng)絡(luò)監(jiān)控、監(jiān)視、控制與管理系統(tǒng)軟件。上海騰順科技開發(fā)有限公司研制的局域網(wǎng)監(jiān)控軟件[5]具有遠(yuǎn)程控制功能,北京清揚創(chuàng)新網(wǎng)絡(luò)科技有限公司研發(fā)的內(nèi)網(wǎng)管理系統(tǒng)16J可以根據(jù)管理策略實現(xiàn)對全網(wǎng)USB存儲實現(xiàn)綜合集中的管理。在配置了“禁止使用”策略的計算機則不可以使用USB存儲設(shè)備。在安裝了管理軟件的機器上,USB存儲設(shè)備一接入即可以被阻斷;與此同時,會顯示有USB存儲接入的日志記錄等。計算機監(jiān)控系統(tǒng)的發(fā)展如火如荼,但功能強大的監(jiān)控系統(tǒng)許多功能并非中小企業(yè)所需要的,它們沒有對中小企業(yè)的需求進行開發(fā)。計算機監(jiān)控軟件使用的是木馬技術(shù),旨在對內(nèi)監(jiān)控,并不執(zhí)行它的破壞功能。該類系統(tǒng)軟件正朝著如下的幾個方向發(fā)展171:?跨平臺性:主要是針對Windows系統(tǒng)而言,如何讓監(jiān)控程序能夠在不同的Windows平臺上運行是一個需要解決的難點。因為NT和Windows2000都具有權(quán)限的概念,這和Windows95/98是不同的。另像的監(jiān)控程序多少都使用了某些Windows系統(tǒng)下的特定的API,因此如何設(shè)計出與Windows平臺版本無關(guān)的監(jiān)控系統(tǒng)是所有開發(fā)商們面臨的一個難點。模塊化設(shè)計:模塊化設(shè)計是一種新的潮流,現(xiàn)在的遠(yuǎn)程監(jiān)控軟件同樣采用了模塊化設(shè)計的概念。更新更強的進程隱藏技術(shù):傳統(tǒng)的修改INI文件和注冊表的手法,已經(jīng)不能適應(yīng)更加隱秘的需要,目[i{]很多木馬的隱藏方式已經(jīng)開始轉(zhuǎn)變,像病毒一樣感染W(wǎng)indows下的文件,監(jiān)控軟件也需要解決隱蔽性的問題,因此木馬的傳播方式仍然可以借鑒。即時通知:現(xiàn)在的監(jiān)控軟件已經(jīng)有了即時通知的功能,如IRC、ICQ通知等。.3論文目標(biāo)和主要工作計算機監(jiān)控系統(tǒng)涉及到數(shù)據(jù)庫、計算機通信、計算機安全等多個領(lǐng)域,整個系統(tǒng)對穩(wěn)定性和響應(yīng)速度有非常高的要求。本文主要工作就是采用結(jié)構(gòu)化分析與設(shè)計方法完成計算機監(jiān)控系統(tǒng)(M。nSys)的整個軟件系統(tǒng)的架構(gòu)設(shè)計與開發(fā)。.3.1研究目標(biāo)?研究USB存儲設(shè)備權(quán)限控制技術(shù)。防止用戶通過USB接口的存儲設(shè)備輸出數(shù)據(jù)(用戶可以從USB設(shè)備復(fù)制資料到計算機)。?研究進程隱藏技術(shù),防止用戶發(fā)現(xiàn)軟件或非法關(guān)閉、卸載軟件。?研究遠(yuǎn)程監(jiān)控技術(shù)。使服務(wù)器端能遠(yuǎn)程監(jiān)控客戶端屏幕,并且遠(yuǎn)程操作用戶的電腦。?研究獲取計算機硬件配置信息的方法。1.3.2完成的主要工作及創(chuàng)新點采用安全可靠的sQLServer2000作為后臺數(shù)據(jù)庫,記錄各種數(shù)據(jù),確保了數(shù)據(jù)記錄的完整性、穩(wěn)定性和查詢的方便快捷性。服務(wù)器端可以完全監(jiān)視客戶端的屏幕,了解用戶使用情況,并可以對客戶端進行操作。不僅能禁用USB設(shè)備,還能禁止USB設(shè)備的寫入功能。研究針對每臺被監(jiān)控計算機配置進行記錄,有效解決硬件丟失問題。.4論文結(jié)構(gòu)本文共分六章,各章的內(nèi)容安排如下:第一章介紹了計算機監(jiān)控系統(tǒng)的研究背景,并交待研究的現(xiàn)狀以及研究目標(biāo),主要工作及創(chuàng)新點,最后說明論文的組織結(jié)構(gòu)。第二章介紹了計算機監(jiān)控系統(tǒng)(M。nSys)實現(xiàn)所涉及的相關(guān)知識和關(guān)鍵技術(shù)。第三章介紹了計算機監(jiān)控系統(tǒng)(M。nSys)的系統(tǒng)需求分析、總體架構(gòu)設(shè)計、系統(tǒng)特點及實現(xiàn)思路和系統(tǒng)的開發(fā)環(huán)境。第四章詳細(xì)講述了計算機監(jiān)控系統(tǒng)(M。nSys)服務(wù)器端和客戶端各模塊的設(shè)計和實現(xiàn)。第五章介紹系統(tǒng)整體功能的測試步驟與測試結(jié)果分析。第六章總結(jié)了本文所做工作,并探討了進一步的研究方向。第二章系統(tǒng)實現(xiàn)所涉及的相關(guān)技術(shù)1WinSock技術(shù)1.IWinsock簡介隨著互.聯(lián)網(wǎng)的飛速發(fā)展,網(wǎng)絡(luò)通信模塊已經(jīng)成為了操作系統(tǒng)中不可或缺的核心組成模塊。為了開發(fā)windows平臺下高效的網(wǎng)絡(luò)通信程序,Microsoft公司以Berke1eySocket規(guī)范18】為規(guī)范定義了一套MicrosoftWindows下的網(wǎng)絡(luò)編程接口,它不僅包含了人們很熟悉的BerkeleySocke員格的庫函數(shù),也包含了一組針對Windows的擴展庫函數(shù),以使程序員能充分利用Windows消息驅(qū)動機制進行編程【91。WindowsSocket規(guī)范本意在于提供給應(yīng)用程序開發(fā)者一套簡單的API,并讓各網(wǎng)絡(luò)軟件供應(yīng)商共同遵守。此外,在一個特定版本W(wǎng)ind。ws的基礎(chǔ)上,WindowsSocket規(guī)范也定義了一個二進制接口(ABI),并通過此二進制接口來保證其兼容性。因此這份規(guī)范定義了應(yīng)用程序開發(fā)者能夠使用,而且網(wǎng)絡(luò)軟件供應(yīng)商也能夠?qū)崿F(xiàn)的一套函數(shù)調(diào)用和相關(guān)語義。WindowsSocket規(guī)范定義并記錄了如何使用API與Internet協(xié)議連接,尤其要指出的是,所有的windowsSocket實現(xiàn)都支持流式套接字和數(shù)據(jù)報套接字.應(yīng)用程序調(diào)用Windows套接字的API實現(xiàn)相互之間的通信1101。Windows套接字又利用下層的網(wǎng)絡(luò)通信協(xié)議功能和操作系統(tǒng)調(diào)用實現(xiàn)實際的通信工作,他們之間的關(guān)系如卜圖所示。I應(yīng)用程序1卜一一1應(yīng)用程序2311網(wǎng)絡(luò)編程界面,例如windowsSockets ]]1網(wǎng)絡(luò)通訊協(xié)議服務(wù)界面,例如Tc馴Di11操作系統(tǒng),例如wndowsi1f物理通訊介質(zhì)圖2.iWinS。ck來進行數(shù)據(jù)傳遞模型WindowsSockets也支持多線程的Windows進程。WindowsSockets規(guī)范中的針對windows的擴展部分為應(yīng)用程序開發(fā)者提供了開發(fā)具有的Windows應(yīng)用軟件的功能。它有利于使程序員寫出更加穩(wěn)定并且更加高效的程序1111.1.1WinSock工作原理要進行互聯(lián)網(wǎng)進行通信,至少需要一對套接字:其中一個運行于客戶機端,稱之為C1ientSocket,另一個運行于服務(wù)器端,稱之為ServcrSoc覆據(jù)拄接啟動的方式以及木地套接字要連接的目標(biāo),套接字之間的鏈接過程可以分為三個步驟【10】:.服務(wù)器監(jiān)聽,是服務(wù)器端套接字并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實時監(jiān)控網(wǎng)絡(luò)狀態(tài)。.客戶端請求,是指由客戶端的套接字提出連接,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務(wù)器的套接字,指出服務(wù)器端套接字的地址和端口號,然后就向服務(wù)器端套接字提出連接請求。.連接確認(rèn),是指當(dāng)服務(wù)器端套接字監(jiān)聽到或者說接收到客戶端套接字的連接請求,它就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,?旦客戶端確認(rèn)了此描述,連接就建立好而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。由于套接字是面向客戶機/服務(wù)器模型設(shè)計的,其處理方式又面向連接和無連接兩種方式。這兩種方式都要求服務(wù)器先于客戶端啟動。?無連接方式:使用數(shù)據(jù)報套接字大多數(shù)的數(shù)據(jù)報應(yīng)用程序使用的是一個比較固定的事件序列來完成客戶應(yīng)用程序和服務(wù)器應(yīng)用程序之間的通信,如圖2.2所示:圖2.2數(shù)據(jù)報套接字的使用方法?面向連接方式;使用流式套接字流式套接字使用的是基于連接的協(xié)議,所以它的使用方法與數(shù)據(jù)報套接字有所不同,因為用戶在傳輸、接收數(shù)據(jù)之前必須首先建立連接,然后才能從數(shù)據(jù)流中讀出數(shù)據(jù),而不是從一個數(shù)據(jù)報或一個記錄中讀出數(shù)據(jù)。首先,服務(wù)器要創(chuàng)建一個用于偵聽的套接字,為該套接字分配地址之后,調(diào)用1isten(1函數(shù)使它處于偵聽狀態(tài);客戶機在創(chuàng)建套接字完畢后,為套接字分配地址,然后調(diào)用connect()函數(shù),請求與服務(wù)器套接字連接;服務(wù)器套接字在收到客戶機的連接請求后,調(diào)用accept()函數(shù),該函數(shù)創(chuàng)建一個用于連接的套接字。應(yīng)用該套接字和客戶機上的連接套接字,用戶就可以在服務(wù)器和客戶機之間進行數(shù)據(jù)傳輸了。在結(jié)束傳輸之后,客戶機調(diào)用c1。ses。cket()函數(shù)關(guān)閉套接字,服務(wù)器也調(diào)用該函數(shù)關(guān)閉用于偵聽和連接的套接字.流式套接字的使用方法如圖2.3所示.圖2.3流式套接字的使用方法2.2多線程編程技術(shù)Windows是?種多任務(wù)的操作系統(tǒng)【121【”】,在Windows的一個進程內(nèi)含一穆多個線程【14].32位Windows環(huán)境下的Win32API提供了多線程應(yīng)用程序開發(fā)所需要的接口函數(shù),而利用VC中提供的標(biāo)準(zhǔn)c咋也可以開發(fā)多線程應(yīng)用程序,相應(yīng)的MFC類庫封裝了多線程編程的類11”,用戶在開發(fā)時可根據(jù)應(yīng)用程序的需要和特點選擇相應(yīng)的工具。多線程編程在Win32方式下和MFC類庫支持下的原理是一致的,進程的主線程在任何需要的時候都可以創(chuàng)建新的線程.當(dāng)線程執(zhí)行完后,自動終止線程:當(dāng)進程結(jié)束后,所有的線程都終止。所仃活動的線程共享進程的資源,因此,在編程時需要考慮在多個線程訪問同一資源時產(chǎn)生沖突的問題。當(dāng)一個線程正在訪問某進程對象,而另一個線程要改變該對象,就可能會,‘'生錯誤的結(jié)果,編程時要解決這個沖突「T。.Win32Api是Windows操作系統(tǒng)內(nèi)核與應(yīng)用程序之間的界面,它將內(nèi)核提供的功能進行函數(shù)包裝,應(yīng)用程序通過調(diào)用相關(guān)函數(shù)而獲得相應(yīng)的系統(tǒng)功能。為了向應(yīng)用程序提供多線程功能,win32API函數(shù)集中提供了一些處理多線程程序的函數(shù)集。直接用Win32API進行程序設(shè)計具有很多優(yōu)點:基于Win32的應(yīng)用程序執(zhí)行代碼小,運行效率高,但是它要求程序員編寫的代碼較多,且需要管理所有系統(tǒng)提供給程序的資源。用Win32Api直接編寫程序要求程序員對Windows系統(tǒng)內(nèi)核有一定的了解,會占用程序員很多時間對系統(tǒng)資源進行管理,因而程序員的工作效率降低。MFC是微軟的VC開發(fā)集成環(huán)境中提供給程序員的基礎(chǔ)函數(shù)庫,它用類庫的方式將Win32API進行封裝,以類的方式提供給開發(fā)者[171。由于其快速、簡捷、功能強大等特點深受廣大開發(fā)者喜愛。在Vc++附帶的MFC類庫中,提供了對多線程編程的支持,基本原理與基于Win32API的設(shè)計一致,但由于MFC對同步對象做了封裝,因此實現(xiàn)起來更加方便,避免了對象旬柄管理上的煩瑣工作。在MFC中,線程分為兩種:工作線程和用戶界面線程。工作線程與前面所述的線程一致,工作線程編程較為簡單,一個基本函數(shù)代表了一個線程,創(chuàng)建并啟動線程后,線程進入運行狀態(tài);如果線程用到共享資源,則需要進行資源同步處理。工作線程沒有消息機制,通常用來執(zhí)行后臺計算和維護任務(wù)。用戶界面線程是一種能夠接收用戶的輸入、處理事件和消息的線程。它是基于MFC的應(yīng)用程序的一個應(yīng)用對象,由CWinApp派生類,該對象代表了應(yīng)用進程的主線程。當(dāng)線程執(zhí)行完并退出線程時,由于進程中沒有其他線程存在,進程自動結(jié)束。類CWinApp從CWinThread派生出來,CWinThread是用戶接口線程的韓精用戶接口線程時,需要從CWinThread派生自己的線程類,使用C1assWizard可以完成這個工作。如果用戶的應(yīng)用程序需要多個任務(wù)同時進行相應(yīng)的處理(特別地對于客戶/服務(wù)器模型),則使用多線程是較理想的選擇。2.3數(shù)據(jù)庫訪問技術(shù)2.3.1ODBC的基本概念ODBC(0penDataBaseConnectivity,開放數(shù)據(jù)庫互連)是微軟公司開放服務(wù)結(jié)構(gòu)(windowsopenservicesarchitecture,W0SA)中有關(guān)數(shù)據(jù)庫的.組?部分,它建立了一組規(guī)范,并提供r一組對數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)apI[is].這些API利用SQL來完成大部分任務(wù)。ODBC本身也提供「對SQL語言的支持,用戶可以直接將SQL語句送給0DBC。使用ODBC讓應(yīng)用程序的編寫者避免了與數(shù)據(jù)源相聯(lián)的復(fù)雜性。這種技術(shù)目前已經(jīng)得到了大多數(shù)DBMS廠商們的廣泛支持。MicrosoftDeveloperStudio為大多數(shù)藉篦曾鬟提供了32位ODBC驅(qū)動器。這些標(biāo)準(zhǔn)數(shù)據(jù)格式包括SQLServer、Access>Paradox、dBase、FoxPro,Excel、Oracle以及Micros窠年區(qū)聿童前般他數(shù)據(jù)格式,用戶需要相應(yīng)的ODBC驅(qū)動器及DBMS。0DBC管理器位于Windows控制面板的32位。DBC內(nèi),其主要任務(wù)是管理安裝的ODBC驅(qū)動程序和管理數(shù)據(jù)源。驅(qū)動管理器包含在0DBC32.DLL中,對用戶是透明的。其任務(wù)是管理0DBC驅(qū)動程序,是ODBC中最重要的部件。0DBC驅(qū)動程序是一些DLL,提供了ODBC和數(shù)據(jù)庫之間的接口。數(shù)據(jù)源包含了數(shù)據(jù)庫位置和數(shù)據(jù)庫類型等信息,實際上是種數(shù)據(jù)連接的抽象。應(yīng)用程序要訪問一個數(shù)據(jù)庫,首先必須用0DBC管理器注冊一個數(shù)據(jù)源,管理器根據(jù)數(shù)據(jù)源提供的數(shù)據(jù)庫位置、數(shù)據(jù)庫類型及ODBC驅(qū)動程序等信息,建立起ODBC與具體數(shù)據(jù)庫的聯(lián)系。這樣,只要應(yīng)用程序?qū)?shù)據(jù)源名提供給。DBC,0DBC就能建立起與相應(yīng)數(shù)據(jù)庫的連接。在ODBC中,ODBCAPI不能直接訪問數(shù)據(jù)庫,必須通過驅(qū)動程序管理器與數(shù)據(jù)庫交換信息。驅(qū)動程序管理器負(fù)責(zé)將應(yīng)用程序?qū)?DBCAPI的調(diào)用傳遞給正確的驅(qū)動程序,而驅(qū)動程序在執(zhí)行完相應(yīng)的操作后,將結(jié)果通過驅(qū)動程序管理器返回給應(yīng)用程序。在訪問0DBC數(shù)據(jù)源時需要ODBC驅(qū)動程序的支持。2.3.2Visua1C++開發(fā)數(shù)據(jù)庫的優(yōu)勢visua1c++提供了多種多樣的數(shù)據(jù)庫訪問技術(shù)一。DBCAP1、MFCODBC,DAO、OLEDB、ADO等。這些技術(shù)各有各的特點,他們提供了簡單、靈活、訪問速度快、可擴展性強的開放技術(shù),而這些正是visua1C++開發(fā)和其他開發(fā)工具相比的優(yōu)勢所在。歸納起來可以概括為以下幾個方面[19]:.簡單性首先,VisualC++提供的MFC類具有強大的功能,一些開:發(fā)向?qū)喕瘧?yīng)用程序的開發(fā):另外MFCODBC和ADO數(shù)據(jù)庫接口已經(jīng)將一些底層的操作都封裝在類中,用戶可以方便地使用這些接門,而無需編寫操作數(shù)據(jù)庫底層代碼。.可擴展性VisualC++提供的。LE技術(shù)和ActiveX技術(shù)可以讓開發(fā)者利用VisualC++中提供的各種組件、控件以及第三方開發(fā)者提供的組件來創(chuàng)建自己的程序,從而實現(xiàn)應(yīng)用程序的組件化,而組件化的應(yīng)用程序則會具有更好的擴展性。.訪問速度快VisuaIc++為了解決利用ODBC開發(fā)的數(shù)據(jù)庫應(yīng)用程序訪問數(shù)據(jù)庫速度慢的問題,提供了新的訪問技術(shù),即OLEDB和它的高層接口ADO,它們是基于COM接口的技術(shù),因此使用這種技術(shù)可以直接對數(shù)據(jù)庫的驅(qū)動進行訪問,從而提高訪問速度。4.數(shù)據(jù)源友好傳統(tǒng)的ODBC技術(shù)只能訪問關(guān)系型數(shù)據(jù)庫,而在VisuaIC++中,通過OLEDB訪問技術(shù)不僅可以訪問關(guān)系型數(shù)據(jù)庫,還可以訪問非關(guān)系型數(shù)據(jù)庫。2.3.3MFC數(shù)據(jù)庫訪問技術(shù).MFC的ODBC數(shù)據(jù)庫訪問技術(shù)【181MFC的ODBC類對于較復(fù)雜的ODBCAPI進行了封裝,提供了簡化的調(diào)用接口,從而大大方便了數(shù)據(jù)庫應(yīng)用程序的開發(fā)。程序員不必要了解0DBcAPI和SQL的R體細(xì)節(jié),利用ODBc類即可完成對數(shù)據(jù)庫的大部分操作。MFC的ODBC類主要包括【19】:CDatabase類對象提供了對數(shù)據(jù)源的連接,通過它可以對數(shù)據(jù)源進行操作。CRecordView類對象能以控制的形勢顯示數(shù)據(jù)庫記錄。這個視圖是直接連接到一個CRecordSet對象的表視圖。CRecordSet類對象提供了從數(shù)據(jù)源中提取出的記錄集。CRecordSet對象通常用于兩種形式:動態(tài)集(dynasets)和快照集(snapshots)。動態(tài)能與其他用戶所做的更改保持同步??煺占菙?shù)據(jù)的一個靜態(tài)視圖。每一種形式在記錄被打開時都能提供一組記錄,區(qū)別在于,當(dāng)用戶在一個動態(tài)集里滾動到一條記錄時,由其他用戶或是應(yīng)用程序中的其他記錄集對該記錄所做的更改就會相應(yīng)地顯示出來。cFieldExchange類,支持記錄字段數(shù)據(jù)交換(DFX),即記錄集字段對數(shù)據(jù)成員與相應(yīng)的數(shù)據(jù)庫的表的字段之間的數(shù)據(jù)交換。該類的功能與CDataExchange類的對話框數(shù)據(jù)交換功能類似。CDBException類,代表ODBC類產(chǎn)生的異常。概括地講,CDatabase針對某個數(shù)據(jù)庫,它負(fù)責(zé)連接數(shù)據(jù)源;CRecordSet針對數(shù)據(jù)源中的記錄集,它負(fù)責(zé)對記錄的操作;CRecordView負(fù)責(zé)界面,而CFieldExchange負(fù)責(zé)CRecordSet與數(shù)據(jù)源的荻端謊的DA0數(shù)據(jù)庫訪問技術(shù)DA0在很大程度上是ODBC類的超集【181[191,它包含了ODBC類的大部分功能。與ODBC一樣,DA0提供了一組API提供編程使用,從而大大簡化了程序的開發(fā)。利用MFC的DA0類,用戶可以編寫?yīng)毩⒂贒BMS的應(yīng)用程序。DAO類與0DBC類相比具有很多相似之處。首先,二者都支持對各種ODBC數(shù)據(jù)源的訪問。雖然二者使用的數(shù)據(jù)引擎不同,但都可以滿足用戶編寫?yīng)毩⒂贒BMS的應(yīng)用程序的要求;其次,DA0提供了與ODBC功能相似的MFC類,他們的大部分成員函數(shù)都是相同的。DAO類使用了微軟Jet數(shù)據(jù)庫引擎,與ODBC類十分相似。實際上,可以很輕松地把數(shù)據(jù)庫應(yīng)用程序從0DBC移植到DA0,只需要將程序中使用的類的名字對應(yīng)到DA0中。在0DBC和DAO之間還有許多不同的地方。其中一個較大的不同是系統(tǒng)實現(xiàn)函數(shù)的方法不同,0口8(:使用一組口11實現(xiàn),而口人0使用01£對象來實現(xiàn)。此外,這兩種方式還有一下不同之處:(1)記錄集的默認(rèn)類型不同。ODBC記錄集的默認(rèn)類型是快照,而DA0默認(rèn)類型則是動態(tài)集。(2)參數(shù)化的方式不同。(3)處理異常的方式不同。DA0記錄集是使用DFX數(shù)據(jù)交換機制(DAOrecordfie1dexchange)而不是RFX,在DAO記節(jié)e1dExchange中,使用的是DFX函數(shù)而不是RFX函數(shù)。(4)DAOMi^ODBC驅(qū)動程序直接訪問ODBC數(shù)據(jù)源,而不必在0DBC管理器中注冊DSN。一般地講,DA0類提供了比ODBC類更廣泛的支持。一方面,只要有0DBC驅(qū)動程序,使用MicrosoftJet的DA0就可以訪問0DBC數(shù)據(jù)源。另一方面,由于DAO是給予MicrosoftJet引擎的,因而在訪問Access數(shù)據(jù)庫時具有很好的性能,但在訪問其他類型的庫時,效率不是很高。2.4.1DLL簡介動態(tài)鏈接庫(DynamicLinkableLibrary,DLL)是Windo最重?螂—1201.其中Kerne132.d11,User32.d11,GD132.dll和一 .一 ,,System,dry等以.dll、,dry、,fon>.sys和許多以.exe為擴展假破神疫簞攆庫ndows操作系統(tǒng)的核心。這些動態(tài)鏈接庫包含有服務(wù)函數(shù)、全局?jǐn)?shù)據(jù)和資源,在運行時能夠被系統(tǒng)自動加載到進程的地址空間中,成為調(diào)用進程的一部分。如果和其他DLL沒有沖突,此模塊將被映射到進程地址空間的同一地址上。DLL模塊包含有各種導(dǎo)出函數(shù),用于向外界提供服務(wù)。DLL也可以擁有屬于自己的數(shù)據(jù)段,但卻無法又有屬于自己的堆棧,只能使用與調(diào)用它們的應(yīng)用程序相同的堆棧模式。在Win32環(huán)境中,每個進程都復(fù)制了自己的讀/寫全局變量。如果想要與其他進程共享內(nèi)存,必須使用內(nèi)存映射文件或者聲明一個共享數(shù)據(jù)段。DLL模塊需要的堆棧內(nèi)存都是從運行進程的堆棧中分配出來的。Windows在加載DLL模塊時將進出函數(shù)調(diào)用與DLL文件的導(dǎo)出函數(shù)相匹配。Windows操作系統(tǒng)對DLL的操作僅僅是把DLL映射到需要它的進程空間的虛擬地址空間里去。DLL函數(shù)中的代6馬所創(chuàng)建的任何對象(包括變量名)都?xì)w調(diào)用它的進程或線程所有。一個DLL的在內(nèi)存中只有一個實例,可以為當(dāng)前操作系統(tǒng)的多個應(yīng)用程序所共享。DLL很好的實現(xiàn)了對代碼的封裝,在創(chuàng)建可執(zhí)行模塊時并不需要公開其源代碼。DLL的制作與具體的編程語言及編譯器無關(guān),因此可以充分發(fā)揮多種編程語言的優(yōu)勢,使程序設(shè)計人員能夠以最適合的語言完成對某個模塊的設(shè)計。在設(shè)計比較大的應(yīng)用程序時,一般將其劃分為多個模塊,這些模塊分別完成相對獨'工的功能,它們彼此協(xié)作來完成整個軟件系統(tǒng)的工作??赡苡幸恍┠K的功能較為通用,在構(gòu)造其他軟件系統(tǒng)時仍會被使用。在構(gòu)造軟件系統(tǒng)時,如果將所有模塊的源代碼都靜態(tài)編譯到整個應(yīng)用程序EXE文件中,會產(chǎn)生一些問題.一個缺點是增加了應(yīng)用程序的大小,會占用更多的磁盤空間,程序運行時也會消耗較大的內(nèi)存空間,造成系統(tǒng)資源的浪費;另一個缺點是,在編寫大的EXE程序時,在每次修改重建時都必須調(diào)整編譯所有的源代碼,增加了編譯過程的復(fù)雜性,也不利于階段性的單元測試。另外,由于DLL的外部接口比較清楚,通過對DLL模塊的劃分,可以將一個龐大的任務(wù)細(xì)分為小同的模塊而下放到不同工作小組去分頭開發(fā)這在很大程度上簡化對項目的管理。4.1DLL的調(diào)用方式DLL的調(diào)用方式有靜態(tài)調(diào)用和動態(tài)調(diào)用兩種1211。其中,靜態(tài)調(diào)用方式由編譯系統(tǒng)完成對DLL加載、卸載的編碼(如還有其他程序也在使用此DLL,則Windows對DLL的應(yīng)用技術(shù)減1,直到所有相關(guān)程序都借宿對此DLL的使用時才釋放它)。靜態(tài)調(diào)用方式簡單實用,但不夠靈活,只能滿足一般需求。動態(tài)調(diào)用方式則是由程序設(shè)計人員通過使用API函數(shù)來完成對DLL的加載與卸載,使用雖然較復(fù)雜,但卻更加有效地使用內(nèi)存,在編寫大型應(yīng)用程序時往往采用這種方式。在使用靜態(tài)調(diào)用方式時,需要將生產(chǎn)動態(tài)鏈接庫時產(chǎn)生的.LIB文件添加到應(yīng)用程序工程中,對要使用的DLL中函數(shù),只需要聲明一下即可。在程序員以靜態(tài)調(diào)用方式編譯生成應(yīng)用程序時,應(yīng)用程序中的調(diào)用函數(shù)將與LIB文件中的導(dǎo)出符號相匹配,這些符號或標(biāo)識號進入到新牛.成的可執(zhí)行文件中。LIB文件中包含了對應(yīng)的DLL文件名(不是絕對路徑),鏈接程序?qū)⑵浯鎯υ诳蓤?zhí)行文件內(nèi)。一旦應(yīng)用程序需要加載DLL文件,操作系統(tǒng)將根據(jù)此信息發(fā)現(xiàn)并加載DLL,并通過符號名或標(biāo)識號實現(xiàn)對DLL函數(shù)的動態(tài)鏈接。所有被應(yīng)用程序調(diào)用的DLL文件都會在應(yīng)用程序EXE文件加載時被加載到內(nèi)存中??蓤?zhí)行程序鏈接到一個DLL輸出函數(shù)信息的輸入文件庫(.LIB)?操作系統(tǒng)在加載使用可執(zhí)行程序的同時加載相應(yīng)的動態(tài)鏈接庫,由可執(zhí)行程序直接通過函數(shù)名來調(diào)用DLL的各個輸出函數(shù),其調(diào)用方法與調(diào)用位于程序內(nèi)部的其他函數(shù)是?樣的。在進行動態(tài)調(diào)用時,應(yīng)用程序使用L。adLibrary()或MFC提供的AfxLoadLibrary()函數(shù)顯示加載動態(tài)鏈接庫,以DLL文件名作為函數(shù)的參數(shù),再用GetProcAddress()函數(shù)獲取想要引入的函數(shù)。自此,就可以像使用應(yīng)用程序內(nèi)部函數(shù)一樣來調(diào)用此引入函數(shù)了。在應(yīng)用程序推出之前,需要用FreeLibrary(1或MFC提供的AfxFreeLibrary(1函數(shù)顯碗州蝌海輔店完全時通過代碼顯示進行,因此程序員可以決定DLL文件是否加載或不加載,以及在運行時決定加載哪個DLL文件。在使用DLL的程序之前必須成功加載DLL獲得?個DLL模塊句柄,并調(diào)用GetProcAddress()函數(shù)將符號名或標(biāo)識號轉(zhuǎn)換為DLL內(nèi)部地址。動態(tài)調(diào)用方式對于集成化的開發(fā)語言(比如Visua1C++)比較適合。2.5本章小結(jié)本章討論了計算機監(jiān)控系統(tǒng)(M。nSys)設(shè)計開發(fā)過程中涉及的一些相關(guān)技術(shù)。在第一節(jié),介紹了在Windows網(wǎng)絡(luò)編程中進行開發(fā)的WinS。ck技術(shù)。第二節(jié)討論了多線程編程技術(shù)。這兩個技術(shù)是MonSys系統(tǒng)通信連接模塊中所用的技術(shù)。第三節(jié)介紹了數(shù)據(jù)庫訪問技術(shù),并對ODBC和DA0兩種編程方式進行了詳盡的分析與比較。在M。nSys數(shù)據(jù)顯示模塊中會用到該技術(shù)。第四節(jié)介紹了MonSys系統(tǒng)在獲取系統(tǒng)硬件配置時用到的動態(tài)鏈接庫(DLL)技術(shù)。第三章系統(tǒng)需求分析與實現(xiàn)思路1系統(tǒng)需求分析企業(yè)網(wǎng)絡(luò)建設(shè)的快速發(fā)展促使了計算機監(jiān)控系統(tǒng)的飛速發(fā)展。如今,監(jiān)控系統(tǒng)軟件己經(jīng)深入各行各業(yè),非?;钴S。生產(chǎn)監(jiān)控軟件的SpectorSofi公司總經(jīng)理佛羅曾經(jīng)說過:如果有54%的公司監(jiān)控他們的雇員,那么兒十億美元的生意就已經(jīng)擺在了眼前1221。國內(nèi)外大公司都將精力投入到利潤豐厚的商用產(chǎn)品上,一些知名的國產(chǎn)品牌只愿意為部分需求大、利澗高的行業(yè)用戶服務(wù),如電信行業(yè)等,而為數(shù)眾多的中小企業(yè)卻往往被忽視了。當(dāng)前,網(wǎng)絡(luò)技術(shù)市場上主導(dǎo)廠商的主流產(chǎn)品是為大型企業(yè)服務(wù)的,其強大的功能并非中小企業(yè)需要的,其高昂的價格更是中小企業(yè)無法承受的。就目前的情況來看,我國各中小企業(yè)單位基本都建有自己的內(nèi)部網(wǎng)絡(luò),這樣可以充分利用公司現(xiàn)有的硬件資源,如打印機、掃描儀、節(jié)約了公司的開支:還提高了公司內(nèi)部員工的工作效率。企業(yè)的辦公自動化水平和企業(yè)內(nèi)部應(yīng)用電子商務(wù)能力,逐步進入業(yè)務(wù)級的網(wǎng)絡(luò)應(yīng)用階段。但是某些員工卻利用公司的網(wǎng)絡(luò)資源做與工作本身無關(guān)的事情。因此如何加強對公司計算機的管理,更好的提高企業(yè)的辦公自動化水平,成為了企業(yè)單位日益突出的問題。本課題是針對這些問題而面向中小型企業(yè)開發(fā)計算機監(jiān)控管理系統(tǒng)。本監(jiān)控系統(tǒng)采用結(jié)構(gòu)化分析(structuredanalysis)方法簡稱SA方法對系癡彳學(xué)H析建模。SA方法結(jié)構(gòu)化方法是目前最成熟、應(yīng)用最廣泛的信息系統(tǒng)開發(fā)方法之一,他的優(yōu)點是有一套嚴(yán)格的開發(fā)程序,國內(nèi)外已有許多成功開發(fā)的例子1241。結(jié)構(gòu)化分析方法將分析的結(jié)果用圖形表示,如業(yè)務(wù)流程圖,數(shù)據(jù)流程圖等,這些圖形都有一套標(biāo)準(zhǔn)圖符組成,從而將分析結(jié)果簡明易懂的展示在用戶面前。按照結(jié)構(gòu)化分析得出整個系統(tǒng)的數(shù)據(jù)流圖如卜:圖3.1系統(tǒng)數(shù)據(jù)流圖頂層圖圖3.2系統(tǒng)數(shù)據(jù)流圖。層圖系統(tǒng)的功能需求分析如下.:(1)數(shù)掘采集與顯示功能。監(jiān)控系統(tǒng)能夠根據(jù)要求從數(shù)據(jù)庫中取得所需的信息并進行相應(yīng)的處理,同時把監(jiān)測的數(shù)據(jù)實時的顯示給用戶,用戶可以通過提供的目錄,準(zhǔn)確,快速的找到相關(guān)設(shè)備的狀態(tài)信息。(2)用戶界面功能。界面是人與程序交互的起點,一個好的系統(tǒng)首先要擁有一個好的友善的用戶界面。系統(tǒng)的用戶界面應(yīng)該盡可能簡潔和人性化,能夠讓使用者方便、輕松、舒適的使用,系統(tǒng)提供的功能要完整明確易懂的出現(xiàn)在用戶界面上。(3)安全功能。任何時候,系統(tǒng)的安全都是一個非常重要的方面,系統(tǒng)要能保護系統(tǒng)中的信息安全,防止惡意破壞。不許無權(quán)限的人觀察到重要資料和進行有關(guān)操作。對于系統(tǒng)中的使用者也要進行權(quán)限分級,重要的操作只能有特定的人員進行。(4)管理功能。監(jiān)控系統(tǒng)不僅要使得管理人員能夠從個人計算機上觀測到系統(tǒng)的運行狀態(tài),還要能夠讓管理人員在必要時進行必要的管理操作。(5)配置管理功能。配置管理用于監(jiān)控對象、監(jiān)控系統(tǒng)自身的增加、修改和刪除管理。它應(yīng)操作筒單、方便直觀而且具有兼容性,可以在線進行配置,不中斷系統(tǒng)的運行。配置資料的錄入要求簡潔明了,易于理解和操作。3.2系統(tǒng)總體架構(gòu)設(shè)計在一個好的架構(gòu)下編程,不僅對于開發(fā)人員是一件賞心悅目的事情,更重要的是軟件能夠表現(xiàn)出一個健康的姿態(tài)【25】:而架構(gòu)設(shè)計的不合理,不僅讓開發(fā)人員受苦受難,軟件本身的生命周期更是受到嚴(yán)重威脅1261。整個系統(tǒng)總統(tǒng)架構(gòu)采用廣泛使用的C/S模式,如圖3.3所示:在圖中可以看出,監(jiān)控系統(tǒng)分為服務(wù)器端和客戶端,各被監(jiān)控計算機安裝監(jiān)控軟件的客戶端,主要功能是向監(jiān)控計算機提供被監(jiān)控計算機的信息,并接受服務(wù)器端的控制命令。服務(wù)器端監(jiān)控各客戶端的運行狀態(tài),對客戶端發(fā)送控制信息,并將感興趣的客戶端的信息記錄在數(shù)據(jù)庫中,以便將來查詢。為了減輕客戶端的負(fù)荷以及處于安全方面的考慮,系統(tǒng)采用了集中式的數(shù)據(jù)庫管理方法[271,進行數(shù)據(jù)的管理和匯總,使數(shù)據(jù)維護的完整性和穩(wěn)定性更加容易,同時有利于數(shù)據(jù)的快速檢索和顯示。服務(wù)器端II數(shù)據(jù)庫服軟堡r _1塹墅通信網(wǎng)絡(luò)圖&3系統(tǒng)總體架構(gòu)3系統(tǒng)的特點及實現(xiàn)思路通過對原有計算機監(jiān)控系統(tǒng)的分析我們可以看出他們的一些不足:USB監(jiān)控方面:目前的產(chǎn)品只能禁用USB存儲設(shè)備功能,不能實現(xiàn)USB存儲的寫保護功能。計算機硬件管理方面:大多數(shù)產(chǎn)品并沒有計算機的硬件配置信息,不能保證企業(yè)財產(chǎn)的安全性。計算機控制方面:大多數(shù)產(chǎn)品只實現(xiàn)了簡單的遠(yuǎn)程關(guān)機,遠(yuǎn)程重啟與員工遠(yuǎn)程通話等功能,并沒有實現(xiàn)對客戶機的完全控制。除了具有其他監(jiān)控軟件的常用監(jiān)控項目外,本監(jiān)控系統(tǒng)最重要的特點如下:除了允許、禁用uSB存儲設(shè)備的功能外,本系統(tǒng)還獨創(chuàng)了USB存儲設(shè)備的寫保護功能.?服務(wù)器端計算機能完全獲得客戶端計算機的控制權(quán),能對客戶端計算機進行遠(yuǎn)程操作。?服務(wù)器端計算機有每臺客戶端計算機的配置信息,當(dāng)員工離職或調(diào)離某個部門時,能將客戶端計算機的配置信息和原始信息比較,查看計算機硬件是否有變化,從而確保公司固定資產(chǎn)的安全。由于整個系統(tǒng)非常復(fù)雜,在整個系統(tǒng)的實現(xiàn)中,我們采用了以下的一些比較獨到的思路:?運用多線程編程技術(shù)實現(xiàn)多用戶并拔性;運用多線程技術(shù),能使系統(tǒng)同時支持很多個客戶端進行實驗,能解決多客戶并發(fā)工作問題。?采用木馬技術(shù)128]隱藏客戶端軟件,使客戶端用戶在不知情的情況下被監(jiān)控。即使被用戶發(fā)現(xiàn),一般用戶也無法結(jié)束該客戶端軟件或是強制退出該客戶端。?運用C/S模型加數(shù)據(jù)庫服務(wù)器構(gòu)建系統(tǒng)【291:采用C/S系統(tǒng)構(gòu)架,可以使服務(wù)器與客戶端分離,這樣能提供更好的靈活度。?采用C語言與匯編語言混合編程來獲取系統(tǒng)的基本硬件配置信息。3.4系統(tǒng)開發(fā)環(huán)境根據(jù)對系統(tǒng)的分析和設(shè)計,確定整個系統(tǒng)的開發(fā)環(huán)境為:操作系統(tǒng):WindowsXPSP2.開發(fā)工具為:Visua1c++6.0(以后簡稱vc).開發(fā)模式:基于C/S的開發(fā)模式。數(shù)據(jù)庫:SQLServer2000選擇VC作為系統(tǒng)的開發(fā)工具是因為VC是微軟推出的一個面向?qū)ο?、功能豐富、方便實用的可視化開發(fā)工具【3叭,同時,VC還具備以下優(yōu)越性能:首先,VC具備了C和C++語言高效簡潔的特點,因而用VC開發(fā)的應(yīng)用程序具有很好的運行速度優(yōu)勢:其次,VC擁有出色的MFC(MicrosoftFunctionCIass)函數(shù)庫、類向?qū)?ClassWizard)以及應(yīng)用程序向?qū)?AppWizard),這些大大減化了程序員的工作;最后,丫(:還繼承了(:、C++語言有良好的I/。功能。所以,對于運行速度、開發(fā)效率和硬件控制要求很高的計算機監(jiān)控軟件來說,VC是理想的選擇。選擇微軟公司的SQL2000Server數(shù)據(jù)庫管理系統(tǒng)(-1來進行數(shù)據(jù)的存儲是因為SQLServer數(shù)據(jù)庫管理系統(tǒng)是一套全面、完整的數(shù)據(jù)庫設(shè)計與分析產(chǎn)品。SQLServe作為Microsoft產(chǎn)品家族的重要成員,是Windows黎舞中最受歡迎的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它具有可靠性、可伸縮性、可管理性、可用性等優(yōu)點,應(yīng)用十分廣泛。.4本章小節(jié)本章介紹了計算機監(jiān)控系統(tǒng)的需求分析和系統(tǒng)的結(jié)構(gòu)。在第一節(jié),給出了系統(tǒng)的數(shù)據(jù)流圖,并對系統(tǒng)進行了功能需求分析,說明系統(tǒng)需要完成的主要功能;第二節(jié)講述了整個系統(tǒng)的架構(gòu)設(shè)計,系統(tǒng)采用了C/S模式,闡述了系統(tǒng)分為客戶端和服務(wù)器端兩部分及每部分的主要功能。第三小節(jié)講述了系統(tǒng)的特點及實現(xiàn)思路,指出目前市場上其他系統(tǒng)在某些功能上的不足,以及本系統(tǒng)對這些功能的改進和系統(tǒng)的實現(xiàn)思路。第四小節(jié)講了該系統(tǒng)的開發(fā)環(huán)境和選擇這些開發(fā)工具的原因。第四章系統(tǒng)設(shè)計與實現(xiàn)系統(tǒng)設(shè)計是系統(tǒng)開發(fā)過程中的一個重要階段。在這個階段中,我們根據(jù)需求分析的結(jié)果,進行系統(tǒng)設(shè)計。本章將主要分析計算機監(jiān)控系統(tǒng)的軟件設(shè)計與實現(xiàn),它主要由服務(wù)器與客戶端兩個部分組成,其總體設(shè)計如圖4.1所示。下面將對這兩個子系統(tǒng)的設(shè)計進行詳細(xì)闡述。圖4.1軟件系統(tǒng)總體設(shè)計圖.1服務(wù)器端軟件設(shè)計與實現(xiàn)根據(jù)第三章的需求分析,我們把服務(wù)器端軟件總共分為四個大模塊,分別是:網(wǎng)絡(luò)通信模塊、數(shù)據(jù)記錄與顯示模塊、基本監(jiān)控模塊以及高級監(jiān)控功能模塊,如圖4.2所示:圖4.2]JH務(wù)器端總體設(shè)計圖4.1.1網(wǎng)絡(luò)通信模塊網(wǎng)絡(luò)通信模塊位于軟件系統(tǒng)的最底層,負(fù)責(zé)解決客戶機與服務(wù)器的通信問題,一旦服務(wù)器端需要與客戶端交互數(shù)據(jù),則需使用通信模塊提供的通信接口,各自按照通信協(xié)議制定的規(guī)程發(fā)送數(shù)據(jù)。網(wǎng)絡(luò)通信模塊使用WinSock套接字編程,其流程圖如圖4.3所示:網(wǎng)絡(luò)通信模塊實現(xiàn)過程中自定義消息為:?消息名:WMSOCKETREAD功能:表示表示需要讀取信息。說明:它的消息映射定義和消息相應(yīng)函數(shù)如下:ON—MESSAGE(WM—S0CKET—READ,OnSocketRead)afx—msgLRESULTOnSockctRead(WPARAMwParam,LPARAMIParam);模塊自定義函數(shù)為:?函數(shù)名:voidcscrvcrDIgs:onsocketconnect()功能:建立和客戶端的連接。說明:在連接函數(shù)中我們采用WSAAsyncSe1ect()函數(shù),它用來通知套接字有請求事件發(fā)生。在這里的請求事件是欲接收讀準(zhǔn)備好的通知,函數(shù)的調(diào)用如下:iErrorCode=WSAAsyncSe1ect(m—hSockct,m—hWnd,wM—SA部針「READ,F一j否?、結(jié)圖4.3"柬器通信模塊流程圖其中,mhSocket是需要消息通知的套接字。mhWnd是在網(wǎng)絡(luò)事件發(fā)生時需要接受消息的窗口,在這里我們是用CWind函數(shù)的一個成員變量。wMsOcKETREAD是我自己定義的一個消息,表示需要讀取信息。?函數(shù)名:afxmsgLRESULTOnSocketRead(WPARAMwParam.LPARAMIParam);功能:套接字接收信息?由數(shù)名:voidCCIientDIgt:onSocketSend(>功能:發(fā)送信息。在使用套接字編程中容易容易發(fā)生錯誤,我在編程時也注意到了對于發(fā)生異常時的處理。當(dāng)發(fā)生異常時,將彈出對話框提示用戶在哪一步發(fā)生了錯誤,方便用戶進行排錯處理,如果發(fā)送數(shù)據(jù)時出錯,代碼如下:if(nCharSend==SOCKET_FRR。R)- MessageBox("發(fā)送數(shù)據(jù)時出錯!“,”計算機監(jiān)控”,MB-0K);4.1.2數(shù)據(jù)記錄與顯示模塊數(shù)據(jù)記錄與顯示模塊的上要功能是負(fù)責(zé)基本監(jiān)控模塊的數(shù)據(jù)顯示。為了顯示清晰明確,我把與數(shù)據(jù)庫有關(guān)的顯示結(jié)果使用列表控件顯示,其他的數(shù)據(jù)就采用了通常的文本框進行顯示。該模塊流程圖如圖4.4所示:在數(shù)據(jù)記錄與顯示模塊中,使用的主要函數(shù)如下::函數(shù)名tBOOLcserverApp?:1nitInstance()功能:與數(shù)據(jù)庫進行連接說明:使用ADO類對數(shù)據(jù)庫進行操作,連接數(shù)據(jù)庫的代碼如下:if(FAILED(::Co1nitia1}ze(NULL)))AfxMessageBox("ADOlnit?try(AD0Conn.create1nstance(一?一uuidRB&eS/nfbj&mN=MonitorSystem:Provider=MSDASQL”.”adCQnnectunspecifi圖4.4數(shù)據(jù)記錄與顯示模塊流程圖catch(一corn—erqor&e)CStringerr:err.Format("%s",(char+)(e.DXfx!&ejsage^ox?d}rr);catch(...)(ageBox(MUnknownErroAageBox(MUnknownErro國數(shù)名:intcservefApp:;Exit!功能:在數(shù)據(jù)庫訪問完畢后,需要關(guān)閉數(shù)據(jù)庫的連接。說明:與數(shù)據(jù)庫斷開連接代碼如卜.:teOpen==ADOConnif(adSta一>注配外AD56;nnteOpen==ADOConnSeIn>§A56§e?SeIn>§A56§e? voidCServerDIg:tShowData()t一,C1o功能:顯示信息。因為服務(wù)器端的數(shù)據(jù)存放在sQLServer2000數(shù)據(jù)庫中,因此我們需要在控制面板中設(shè)置好數(shù)據(jù)源,這樣才能保證程序中所有對數(shù)據(jù)庫的操作有效。1.3基本監(jiān)控功能模塊基本監(jiān)控功能模塊提供最基本的監(jiān)控選項?;颈O(jiān)控功能模塊的主要有7個功能:杳看客戶端文件目錄,強迫客戶端重啟或關(guān)機,鎖住客戶端的屏幕,允許、限制使用USB設(shè)備,查看客戶端使用記錄,修改客戶端的配置文件以及獲得客戶端的系統(tǒng)配置(硬件信息)。當(dāng)系統(tǒng)管理員選擇了下拉列表框的基本監(jiān)控命令后,系統(tǒng)調(diào)用網(wǎng)絡(luò)通信模塊將命令發(fā)送到客戶端,然后接受客戶端的反饋信息;最后將客戶端的反饋信息在列表控件中加以顯示。模塊的工作流程如圖4.5所示。基本監(jiān)控功能模塊的自定義函數(shù):?函數(shù)名:voidCScrverDlg::OnSe1cct0功能:選擇要發(fā)送的監(jiān)控命令。圖4.5通信模塊流程圖4.1.4高級監(jiān)控功能模塊高級監(jiān)控功能模塊主要就允許管理員像操作自己電腦一樣直接操縱被監(jiān)控端的電腦。服務(wù)器端首先需要新創(chuàng)建一個窗口來顯示客戶端的扉幕,然后在該窗口上繪制出通過網(wǎng)絡(luò)通信模塊獲得的客戶端屏幕,當(dāng)管理者在這個窗口中進行操作時,我們將這些操作消息發(fā)送到客戶端,客戶端接收到這些消息后進行相應(yīng)動作,然后又將客戶端的屏幕發(fā)送到服務(wù)器端,繼續(xù)等待服務(wù)器管理員的下一個操作命令,直到用戶關(guān)閉該窗口。高級監(jiān)控功能模塊的流程圖4.6所示:高級監(jiān)控模塊中屏幕控制窗口消息循環(huán)是整個模塊的核心。它從消息隊列中檢索消息;并將消息發(fā)送到相應(yīng)的窗口過程。在這里我們感興趣的消息主要是鼠標(biāo)移動(wMMOUSEMOVE)、鼠標(biāo)單擊(WM—LBUTTONDOWN,WM—LBUTTONUP、WM—RBUTTONDOWN,wMRBUTTONUP)、雙擊事件(WMLBUTTONDBLCLK)等。于是我們在窗口過程函數(shù)中對感興趣的消息進行相應(yīng)的處理,其他的消息我們交給默認(rèn)的窗口過程處理。1設(shè)計屏幕監(jiān)控窗口類1及窗口消息處理函數(shù)1I創(chuàng)建屏幕控制窗口并初始化套接字J進入息循環(huán)掣卸I'J在監(jiān)控端繪制獲取的被監(jiān)控端桌而發(fā)送鼠標(biāo)操作信息窗口消息處理幕控制窗口圖4.6高級監(jiān)控模塊流程圖在這個模塊中使用的主要函數(shù)如下:,麗故名1boolCServeriiOnScreenO功能:初始化高級監(jiān)控功能模塊。?函數(shù)名:ATOMServerRegisterClass(HINSTANCEh1nstance)功能:注冊監(jiān)控窗[J類。?函數(shù)名:BOOLServer)nitInstance(HINSTANCEh1nstance>功能:創(chuàng)建屏幕控制窗口,并初始化套接字。?函數(shù)名:LRESULTCALLBACKWndProc(HWNDhWnd.U1NTmessage,WPARAMwParam,LPARAMIP功能?啕建窗口的消息處理函數(shù)。?喳數(shù)名:voidMouseEvent(intMsg.HWNDhWnd)功能:處理鼠標(biāo)事件?函數(shù)名:voidGetDesktopBit(HWNDhWnd)功能:獲得被監(jiān)控端屏幕。4.2客戶端設(shè)計與實現(xiàn)客戶端提供與用戶操作接口,本模塊主要提供以下三個主要功能:“服務(wù)室進行可值,?提供用戶的使用日志、系統(tǒng)配置信息;?BMiltfi.不讓用戶588t.客戶端主要包含三個主要的模塊,分別是:初始化模塊、監(jiān)控模塊、網(wǎng)絡(luò)通信模塊。系統(tǒng)的總體設(shè)計如圖4.7所示。下面,我們分別對這三個模塊進行詳細(xì)介紹。圖4.7客戶端功能模塊圖4.2.1初始化模塊初始化模塊主要就是使客戶端軟件跟隨系統(tǒng)啟動、隱藏自己的進程并進行?些基本的配置。它的流程圖如下所示:退出第二個實例隱藏進程1讀取配置信息I開啟監(jiān)控線程、1i打開網(wǎng)絡(luò)連接i上網(wǎng)絡(luò)通信模塊圖4.8初始化模塊流程圖在初始化模塊中,我們將客戶端軟件名稱命名為【explore,它和系統(tǒng)進程名稱類似,用來迷惑用戶,一旦用戶發(fā)現(xiàn)了該進程,但由于進程名稱和系統(tǒng)進程及其類似,讓用戶以為是系統(tǒng)進程。同時在客戶端軟件中使用了編寫木馬病毒中的進程隱藏技術(shù),使客戶端軟件能夠“悄悄地”對用戶進行監(jiān)視。進程隱藏的方法有很多種。在Win9x平臺下很容易實現(xiàn)進程隱藏,只要把應(yīng)用程序注冊為一個服務(wù)就行了,這樣程序就會從任務(wù)列表中消失了,因為系統(tǒng)不認(rèn)為他是一個進程。當(dāng)按下Ctrl+AIt+Delete的時候,也就看不到這個程序。但是,對于windowsNT/2000等系統(tǒng)通過服務(wù)管理器一樣會發(fā)現(xiàn)你在系統(tǒng)中注冊過的服務(wù)。實現(xiàn)在WindowsNT/2000進程隱藏的方法之一就是API的攔截技術(shù),通過建立一個后臺的系統(tǒng)鉤子,攔截PSAPI的EnumProcessModu1es等相關(guān)的函數(shù)來實現(xiàn)對進程和服務(wù)的遍歷調(diào)用的控制,當(dāng)檢測到進程ID(PID)為木馬程序的服務(wù)器端進程的時候立接跳過,這樣就實現(xiàn)了進程的隱藏。金山詞霸等軟件,就是使用了類似的方法,攔截了TextOutA,TextOutW函數(shù),來截獲屏幕輸出實現(xiàn)即時翻譯的。方法二就是把應(yīng)用程序做為一個線程,把自身注入其他應(yīng)用程序的地址空間作為其他應(yīng)用程序的一個線程。但這兩種方法已經(jīng)能夠被現(xiàn)在的殺毒軟件發(fā)現(xiàn)其蹤跡。木文實現(xiàn)的進程隱藏在目前來說還不能被瑞星等主流殺毒軟件發(fā)現(xiàn)。其隱藏原理是在活動進程雙向鏈中刪除想要得隱藏的進程1331。Windows系統(tǒng)中有一個叫Kernel'SProcessorControlBlo疝施備利及早MM?它慧龕位于0xffdff120地址,它的數(shù)據(jù)結(jié)構(gòu)是指向一個地址雙字,這個地址叫做ETHREAD塊,0xffdffl24指向當(dāng)前線程的ETHREAD塊,再下一個就是下個線程的ETHREAD塊。ETHREAD塊的數(shù)據(jù)結(jié)構(gòu)相對復(fù)雜,它的offset0x44處為EPROCESS塊的地址。EPR0C錠小著個有趣的數(shù)據(jù)結(jié)構(gòu)叫活動進程鏈,它只有兩個雙字,一個FI1NK,一個BLINK,FLINK指向下一個EPR0CESS塊的FLINK地址,BLINK則指向上一個EPROCESS塊的BLINK地址,讓自己的進程脫鏈就可以實現(xiàn)進程隱藏。初始化模塊使用函數(shù)如下:函數(shù)名:BOOLAutoBoot0功能:修改系統(tǒng)注冊表和初始配置文件,將軟件設(shè)置為自動運行,函數(shù)名:voidHideprocO功能:隱藏進程,使它不出現(xiàn)在任務(wù)管理器中。俄數(shù)名:BOOLCIexplOrcDlg::OnClicntopen()功能:打開客戶端網(wǎng)絡(luò)連接。喙數(shù)名1BOOLc1exp1oreDlfFt:OnlnjtDialog()功能:開始監(jiān)控。我們在里面添加讀取軟件配置的操作,如果是第一次運行,則使用默認(rèn)設(shè)置。管理員可以用“熱鍵”呼出軟件配置界面對監(jiān)控項目進行配置。?南數(shù)名:BOOLClexploreApp:?InitInstanceO功能:建立互斥變量,判斷內(nèi)存中是否已經(jīng)有該程序運行。4.2.2監(jiān)控模塊監(jiān)控模塊主要分為五個小模塊,分別為目錄監(jiān)控模塊、USB監(jiān)控模塊、系統(tǒng)配置監(jiān)控模塊、使用日志監(jiān)控模塊以及屏幕監(jiān)控模塊,如圖4.9所示:圖4。9客戶端監(jiān)控模塊各子模塊設(shè)計如下:1)目錄監(jiān)控模塊流程圖如圖4.10所示。目錄監(jiān)控模塊使用函數(shù)及功能為:?函數(shù)名:voidCIexploreDIg::Dir0功能:列出文件目錄清單。21USB監(jiān)控模塊USB監(jiān)控模塊的主要功能有:禁止、允許使用USB設(shè)備和USB設(shè)備寫保護。專業(yè)軟件的實現(xiàn)方法是編寫USB設(shè)備的底層驅(qū)動過濾程序,這種方法實現(xiàn)起來非常復(fù)雜,而且需要專門的微軟驅(qū)動程序開發(fā)包1281。圖4.10客戶端目錄監(jiān)控模塊流程圖在我們的客戶端軟件中,采用一種簡單的修改系統(tǒng)注冊表的方法同樣可以實現(xiàn)這些功能。USB寫保護的原理為:在注冊表的KEYLOCALMACHINE/SYSTEM/CurrcntControlSet/Contro1下新建鍵名為StorageDevicePo1i薪康一榨為弟"iteProtect的DWORD值,然后把該健值修改為1就可以實現(xiàn)USB存儲設(shè)備的寫保護功能。USB監(jiān)控模塊的流程如圖4.11所示。圖4.IIUSB監(jiān)控模塊流程圖3)系統(tǒng)配置監(jiān)控模塊系統(tǒng)配置監(jiān)控模塊主要是獲取系統(tǒng)的硬件配置信息,如cPU主頻、數(shù)量、型號、內(nèi)存容量、硬盤容量等。因為VC提供的函數(shù)不能獲CPU頻率,所以我們使用了匯編指令來獲得CPU頻率。通常的方法是測試CPU在單位時間內(nèi)運算的指令條數(shù)來獲得CPU的頻率,但用這種方法有太大的局限性,而且受到很多因素的影響。特別是在Windovs環(huán)境下,沒有辦法知道除自己的程序以外的別的程序占用了多少的時間片,所以采用該方法的準(zhǔn)確度比較低。在586及以上檔次處理器中,已經(jīng)有了一條專用的指令來測試主頻,那就是RDTSC指令psi,意思是讀取時間標(biāo)記計數(shù)器,它是處理器內(nèi)部的一個64位的MSR(modelspecificregiSter).它每個時鐘增加一個記數(shù)。在處理器復(fù)位的時候,初始值為0,RDTSC指令把TSC的值低32位裝入EAX中,高32位裝入EDX中。如果CPU的主頻是200MHz,那么在一秒鐘內(nèi),T5(:的值增加200,000,000次。因此在計算的時候,把兩次的TSC差侑除以兩次的時陽J差值就是CPU的主頻。獲得CPU頻率程序的流程為:初始化時首先將程序的優(yōu)先級設(shè)置為最高并設(shè)置一個定時器,定時時間為1秒,然后在定時器消息中利用1?口15(:取得T5(3計數(shù),再和上次保留的值相減,然后除以時間差即可。我們總共調(diào)用這個模塊五次,用五次的平均值作為最終值記錄下來。內(nèi)存容量、硬盤容量都可以通過調(diào)用系統(tǒng)的API獲得,再進行簡單的計算就可以得到需要的信息。我把這個模塊封裝在DLL文件中,這樣做的目的是:由于這個模塊不是很常用,所以一般情況下不將它加載入內(nèi)存,降低了系統(tǒng)資源浪費。我把獲得系統(tǒng)信息的函數(shù)封裝在一個SysInf。導(dǎo)出類中,并將它做成了一個d11文件。在這個類中,我們定義了五個pub1ic函數(shù)實現(xiàn)獲得CPU類型、CPU速度、CPU數(shù)量、內(nèi)存容量、硬盤容量等信息,函數(shù)名稱如下:getCpuIdentification(),getCpuSpeedO,疆"8干彳J")、4F他用日志記錄模塊使用口志監(jiān)控模塊主要功能是對客戶端的電腦所作的操作進行記錄。在這里我使用了Windows的工作日志“鉤子”1341。該模塊的流程圖如圖4.12所不:,圖4.12使用日志記錄模塊辛要代碼實現(xiàn)如下:.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、屏幕監(jiān)控模塊屏幕監(jiān)控模塊的主要功能就是:將客戶端屏幕轉(zhuǎn)換為位圖形式發(fā)送到服務(wù)器端、接收服務(wù)器端的控制信息,并轉(zhuǎn)換為本機的系統(tǒng)消息,在屏幕上顯示出來。模塊的流程圖如圖4.13所示:圖4.13客戶端屏幕監(jiān)控模塊流程圖屏幕監(jiān)控模塊主要函數(shù)如下:函數(shù)名:voidcontro1scr0功能:執(zhí)行屏幕監(jiān)控功能。函數(shù)名:POINTSetMousePointO功能:設(shè)置鼠標(biāo)位置。函數(shù)名:HBITMAPGetSrcBit(DWORDSitWidth,DWORDBitHeight)功能:獲得桌面圖形。4.2.3網(wǎng)絡(luò)通信模塊網(wǎng)絡(luò)通信模塊負(fù)責(zé)客戶端與服務(wù)器端的數(shù)據(jù)交互,它的主要功能為:接受服務(wù)器端連接、斷開服務(wù)器連接、向服務(wù)器發(fā)送數(shù)據(jù)、接收服務(wù)器發(fā)送來的數(shù)據(jù)。該模塊流程圖如圖4.14所示【調(diào)用s。cket函數(shù)建1立socket套接u、調(diào)用bind函數(shù)為套接u綁定客戶端IP地址 及端口- 調(diào)I11iS,e,信5斤,等待服務(wù)器端連接事件(非阻塞)接收服務(wù)器端數(shù)據(jù)發(fā)送反饋數(shù)據(jù)本次監(jiān)1結(jié)束?1關(guān)閉套接字J1是—f結(jié)束1、?/圖4.14客戶端通信模塊流程圖4.3數(shù)據(jù)庫設(shè)計本系統(tǒng)對數(shù)據(jù)庫應(yīng)用的要求屬于中等規(guī)模的,為了便于以后功能擴展,我們采用了SQL2000作為數(shù)據(jù)庫管理系統(tǒng)。在數(shù)據(jù)庫中,我們設(shè)計了三個表,一個用來記錄用戶的硬件配置信息(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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 語境與語用推理-洞察分析
- 線上線下融合模式下的美妝個護行業(yè)用戶體驗研究-洞察分析
- 維修響應(yīng)速度與客戶滿意度關(guān)系研究-洞察分析
- 游輪旅游產(chǎn)業(yè)鏈協(xié)同效應(yīng)-洞察分析
- 線上線下教學(xué)融合策略-洞察分析
- 兼職的合同范本(2篇)
- 《小米手機分析》課件
- 2024年滬教版三年級數(shù)學(xué)下冊階段測試試卷
- 2025年粵教版七年級地理下冊階段測試試卷
- 2025年華師大新版九年級地理下冊階段測試試卷
- 2024新人教版英語七年級上單詞默寫表(小學(xué)部分)
- 電力拖動教學(xué)講義
- 2024社保費測試(五)專項試卷
- 招商會會議流程綱要
- 安全生產(chǎn)工作年終總結(jié)
- 2024-2025學(xué)年人教版七年級英語上冊各單元重點句子
- 信息技術(shù)行業(yè)數(shù)據(jù)安全HSE方案
- 中華護理學(xué)會團體標(biāo)準(zhǔn)-氣管切開非機械通氣患者氣道護理
- 四川省成都市武侯區(qū)2023-2024學(xué)年七年級上學(xué)期1月期末語文試卷
- 兒科護理安全警示教育
- 2023-2024學(xué)年九年級上學(xué)期期末試卷及答案
評論
0/150
提交評論