計(jì)算機(jī)監(jiān)控系統(tǒng)研究與實(shí)現(xiàn)_第1頁
計(jì)算機(jī)監(jiān)控系統(tǒng)研究與實(shí)現(xiàn)_第2頁
計(jì)算機(jī)監(jiān)控系統(tǒng)研究與實(shí)現(xiàn)_第3頁
計(jì)算機(jī)監(jiān)控系統(tǒng)研究與實(shí)現(xiàn)_第4頁
計(jì)算機(jī)監(jiān)控系統(tǒng)研究與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

終、墨房啷轡之彥

碩士學(xué)位論文姓名:董墮導(dǎo)師:唐紅專業(yè):通信與信息系統(tǒng)

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論