版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 網(wǎng)絡(luò)遠(yuǎn)程通信與控制程序設(shè)計(jì)</p><p><b> 作者姓名: </b></p><p> 專業(yè)名稱:計(jì)算機(jī)科學(xué)與技術(shù)</p><p> 指導(dǎo)老師: 副教授</p><p><b> 摘 要</b></p><p> 在如今這個(gè)信息高速發(fā)
2、達(dá)的時(shí)代,人們之間的物理距離雖無太大變化,然而邏輯距離卻在一天天縮小。同時(shí),鑒于交通的繁忙,無紙辦公和遠(yuǎn)程辦公的趨勢(shì)已然愈演愈烈!遠(yuǎn)程控制應(yīng)運(yùn)而生。</p><p> 遠(yuǎn)程控制起初是為了讓PC用戶在離開辦公室的時(shí)候能夠訪問其臺(tái)式PC硬盤中的信息,甚至可以通過其臺(tái)式機(jī)PC訪問企業(yè)網(wǎng)絡(luò)資源。今天,許多企業(yè)和增值分銷商正在把遠(yuǎn)程控制能力作為有效的技術(shù)支持工具。很多網(wǎng)絡(luò)管理員都采用這類軟件對(duì)局域網(wǎng)進(jìn)行管理或者在家中更新
3、自己網(wǎng)站的內(nèi)容。這類軟件對(duì)于出差在外的商務(wù)人員用處非常大,這樣他們可以隨時(shí)提取自己家里計(jì)算機(jī)中的數(shù)據(jù)和資料。</p><p> 隨著計(jì)算機(jī)信息現(xiàn)代工業(yè)的發(fā)展,計(jì)算機(jī)遠(yuǎn)程控制管理系統(tǒng)越來越受到各方面的重視。本文主要分析了遠(yuǎn)程控制系統(tǒng)的一些基本功能和組成情況,包括系統(tǒng)的需求分析、系統(tǒng)結(jié)構(gòu)、功能模塊劃分分析等,重點(diǎn)對(duì)應(yīng)用程序的實(shí)際開發(fā)實(shí)現(xiàn)作了介紹。達(dá)到了實(shí)時(shí)性和安全性,且應(yīng)用程序功能完備。同時(shí)簡(jiǎn)單介紹了Visual
4、C++ 6.0編程環(huán)境和WinSocket的功能特點(diǎn)。</p><p> 本課題設(shè)計(jì)是為適應(yīng)遠(yuǎn)程控制及協(xié)助的要求,使遠(yuǎn)程控制提高到計(jì)算機(jī)的實(shí)時(shí)水平而設(shè)計(jì)的。遠(yuǎn)程控制包括多項(xiàng)內(nèi)容,本課題設(shè)計(jì)只是承建了其中的一部分即:實(shí)時(shí)控制。本課題設(shè)計(jì)為一個(gè)通信應(yīng)用程序,用到了多項(xiàng)技術(shù),諸如:異步模式socket、面向?qū)ο缶幊?、軟件工程思想、API HOOK等。</p><p> 本系統(tǒng)采用Visual
5、 C++ 6.0作為開發(fā)工具, 整個(gè)系統(tǒng)操作簡(jiǎn)潔、界面友好、功能靈活、實(shí)用,實(shí)現(xiàn)了包括客戶端屏幕監(jiān)控、文件操作及傳輸、系統(tǒng)服務(wù)和注冊(cè)表監(jiān)控等基本功能,基本完成了遠(yuǎn)程控制中所需要到的主要功能。</p><p> 關(guān)鍵詞:套接字 面向?qū)ο?軟件工程 遠(yuǎn)程監(jiān)控</p><p><b> Abstract</b></p><p> Along w
6、ith the development of the calculator information modern industry, the remote control system is more and more value by business enterprise and school. This text mainly analyzed some basic functions of the remote control
7、system and constitute the circumstance, including the requirements analysis, the structure of the system, the function mold piece divide the line analyze etc, the point make the introduction towards applying the actual d
8、evelopment of the procedure realization. Come to the </p><p> This topic design is in order to adapt the remote control request, make the remote assistance carry on the level by design that the management r
9、aises the calculator of. Remote control includes several contents, this topic design just accepted to set up among them of one part namely: The real-time control. This topic used a number of techniques, for example: The
10、socket of asynchronous mode, Object-Oriented, Software Engineering, API HOOK etc. </p><p> This system uses Visual C + + 6.0 as a development tool, the operation of the entire system is simple, interface is
11、 user-friendly, function is flexible and practical, achieved the basic functions including screen monitoring, control and transfer files, process monitoring, system services and registry monitoring, complete the main fun
12、ctions of what the Remote Assistance system need to go.</p><p> Keyword: Socket,Object-Oriented,Software-Engineering,Hook,remote control</p><p><b> 目錄</b></p><p><b
13、> 摘 要I</b></p><p> AbstractII</p><p><b> 目錄III</b></p><p><b> 前言1</b></p><p> 1 遠(yuǎn)程通信與控制技術(shù)概述2</p><p> 1.1 課題背景2
14、</p><p> 1.2 目的以及意義3</p><p> 1.3 Microsoft Visual C++及編程模式簡(jiǎn)介4</p><p> 1.3.1 Visual C++的簡(jiǎn)介4</p><p> 1.3.2 MFC應(yīng)用程序框架5</p><p> 1.3.3 MFC的消息映射7</p
15、><p> 1.4 系統(tǒng)架構(gòu)的模式10</p><p> 1.4.1 C/S結(jié)構(gòu)模式10</p><p> 1.4.2 TCP C/S模式的通信原理10</p><p> 1.4.3 C/S結(jié)構(gòu)的優(yōu)點(diǎn)11</p><p> 1.5 API HOOK技術(shù)簡(jiǎn)介11</p><p>
16、 1.6 CAsyncSocket類的簡(jiǎn)單介紹13</p><p> 2 遠(yuǎn)程通信與控制系統(tǒng)分析15</p><p> 2.1 系統(tǒng)基本情況描述15</p><p> 2.2 系統(tǒng)可行性分析16</p><p> 2.2.1 經(jīng)濟(jì)可行性17</p><p> 2.2.2 技術(shù)可行性17</p
17、><p> 2.2.3 操作可行性17</p><p> 2.3 功能需求分析18</p><p> 2.4 系統(tǒng)流程圖19</p><p> 3 遠(yuǎn)程通信與控制程序設(shè)計(jì)21</p><p> 3.1 系統(tǒng)設(shè)計(jì)使用工具21</p><p> 3.2 系統(tǒng)模塊的設(shè)計(jì)21<
18、/p><p> 3.2.1 模塊設(shè)計(jì)21</p><p> 3.2.2 屏幕監(jiān)控模塊設(shè)計(jì)21</p><p> 3.2.3 文件操作模塊設(shè)計(jì)23</p><p> 3.2.4 注冊(cè)表操作模塊設(shè)計(jì)23</p><p> 3.2.5 發(fā)送信息模塊設(shè)計(jì)24</p><p> 3.2.
19、6 API HOOK模塊設(shè)計(jì)24</p><p> 3.3 客戶端與服務(wù)器連接設(shè)計(jì)24</p><p> 3.4 系統(tǒng)主要模塊實(shí)現(xiàn)25</p><p> 3.4.1 屏幕監(jiān)控模塊25</p><p> 3.4.2 文件操作模塊27</p><p> 3.4.3 注冊(cè)表操作模塊27</p>
20、;<p> 3.4.4 API HOOK模塊29</p><p> 4 系統(tǒng)實(shí)現(xiàn)與測(cè)試30</p><p> 4.1 軟件測(cè)試基礎(chǔ)30</p><p> 4.1.1 軟件測(cè)試的目標(biāo)30</p><p> 4.1.2 軟件測(cè)試常用方法30</p><p> 4.2 本系統(tǒng)采用的測(cè)試方法
21、31</p><p> 4.2.1 連接測(cè)試31</p><p> 4.2.2 文件操作測(cè)試33</p><p> 4.2.3 注冊(cè)表操作測(cè)試36</p><p> 4.2.4 發(fā)送信息測(cè)試39</p><p> 4.2.5 屏幕控制測(cè)試40</p><p> 4.2.6
22、 測(cè)試結(jié)論42</p><p><b> 總 結(jié)43</b></p><p><b> 致 謝44</b></p><p><b> 參考文獻(xiàn)45</b></p><p><b> 前言</b></p><p>
23、隨著計(jì)算機(jī)網(wǎng)絡(luò)的飛速發(fā)展以及網(wǎng)絡(luò)技術(shù)的日益普及和大眾化,人們可以很方便地從Internet上獲取和自己工作生活密切相關(guān)的信息,世界也真正變成一個(gè)地球村,我們可以和世界上其他任何一個(gè)人通過計(jì)算機(jī)網(wǎng)絡(luò)進(jìn)行溝通,信息資源達(dá)到了高度的共享。從這一點(diǎn)得到啟發(fā),希望能設(shè)計(jì)一個(gè)遠(yuǎn)程控制系統(tǒng),通過它可以在家里控制辦公室里的計(jì)算機(jī)。如果你是軟件開發(fā)商,你的員工可以通過它在辦公室里遠(yuǎn)程為客戶配置系統(tǒng)、對(duì)產(chǎn)品進(jìn)行維護(hù),如果客戶向你報(bào)告軟件產(chǎn)品出現(xiàn)問題你可以遠(yuǎn)
24、程對(duì)產(chǎn)品進(jìn)行調(diào)試,最終解決問題。這樣員工就不會(huì)因長(zhǎng)期的勞苦奔波而抱怨,用戶也不會(huì)因?yàn)槟悴荒芗皶r(shí)解決問題而和你討價(jià)還價(jià),當(dāng)然,也為公司節(jié)約了人力、財(cái)力和物力。</p><p> 遠(yuǎn)程控制軟件一般分兩個(gè)部分:一部分是客戶端程序Client,另一部分是服務(wù)器端程序Server,在使用前需要將客戶端程序安裝到主控端電腦上,將服務(wù)器端程序安裝到被控端電腦上。它的控制的過程一般是先在主控端電腦上執(zhí)行客戶端程序,像一個(gè)普通的
25、客戶一樣向被控端電腦中的服務(wù)器端程序發(fā)出信號(hào),建立一個(gè)特殊的遠(yuǎn)程服務(wù),然后通過這個(gè)遠(yuǎn)程服務(wù),使用各種遠(yuǎn)程控制功能發(fā)送遠(yuǎn)程控制命令,控制被控端電腦中的各種應(yīng)用程序運(yùn)行,這種遠(yuǎn)程控制方式稱為基于遠(yuǎn)程服務(wù)的遠(yuǎn)程控制。通過遠(yuǎn)程控制軟件,可以進(jìn)行很多方面的遠(yuǎn)程控制,包括獲取目標(biāo)電腦屏幕圖像、窗口及進(jìn)程列表等等。</p><p> 遠(yuǎn)程控制具有一下優(yōu)點(diǎn):便于用戶能夠在任何地方通過網(wǎng)絡(luò)及時(shí),快速的訪問,控制自己的主機(jī)。特別是
26、對(duì)于網(wǎng)絡(luò)管理員,技術(shù)服務(wù)人員來說,遠(yuǎn)程控制提供了一個(gè)便捷,高效的手段。</p><p> 當(dāng)然,遠(yuǎn)程控制軟件是一把雙刃劍,有優(yōu)點(diǎn)就會(huì)有缺點(diǎn),它存在比較嚴(yán)重的安全隱患。一方面給用戶和網(wǎng)絡(luò)管理員工作帶了很大的方便,另一方面也給一些居心不良者留下后門。形成很多木馬程序。這就需要對(duì)軟件在設(shè)計(jì)方面做一些安全考慮。</p><p> 1 遠(yuǎn)程通信與控制技術(shù)概述</p><p&g
27、t;<b> 1.1 課題背景</b></p><p> 通常企業(yè)內(nèi)部或者IT公司的客戶技術(shù)支持部門都有技術(shù)支持業(yè)務(wù),其任務(wù)是通過電話解答疑難問題,努力減少技術(shù)人員到現(xiàn)場(chǎng)服務(wù)或者讓用戶把設(shè)備送到支持中心進(jìn)行維護(hù)。這種技術(shù)支持方式盡管被普遍采用,但效率不高而且大大增加了技術(shù)支持成本。</p><p> 通常,技術(shù)支持必須依賴技術(shù)人員和用戶之間的口頭交流來進(jìn)行,這種
28、交流既耗時(shí)又容易出錯(cuò)。許多商業(yè)用戶對(duì)計(jì)算機(jī)知之甚少,然而當(dāng)遇到問題時(shí),他們必須向技術(shù)人員提供故障情報(bào)及相關(guān)操作。在嘗試解決問題時(shí),技術(shù)人員可能指導(dǎo)用戶執(zhí)行一系列復(fù)雜的過程,而這些過程對(duì)用戶來說或許完全不熟悉;如果用戶不能正確的按要求操作,反而使問題惡化。此外,如果通過電話不能解決問題,那么在技術(shù)人員親自到用戶現(xiàn)場(chǎng)解決問題之前,計(jì)算機(jī)將無法繼續(xù)使用,導(dǎo)致工作延誤。</p><p> 電腦中的遠(yuǎn)程控制技術(shù),始于DO
29、S時(shí)代,只不過當(dāng)時(shí)由于技術(shù)上沒有什么大的變化,網(wǎng)絡(luò)不發(fā)達(dá),市場(chǎng)沒有更高的要求,所以遠(yuǎn)程控制技術(shù)沒有引起更多人的注意。但是,隨著網(wǎng)絡(luò)的高度發(fā)展,電腦的管理及技術(shù)支持的需要,遠(yuǎn)程操作及控制技術(shù)越來越引起人們的關(guān)注。遠(yuǎn)程控制一般支持下面的這些網(wǎng)絡(luò)方式:LAN、WAN、撥號(hào)方式及互聯(lián)網(wǎng)方式。此外,有的遠(yuǎn)程控制軟件還支持通過串口、并口、紅外端口來對(duì)遠(yuǎn)程機(jī)進(jìn)行控制(不過這里說的遠(yuǎn)程電腦,只能是有限距離范圍內(nèi)的電腦了)。傳統(tǒng)的遠(yuǎn)程控制軟件一般使用NE
30、TBEUI、NETBIOS、IPX/SPX、TCP等協(xié)議來實(shí)現(xiàn)遠(yuǎn)程控制,不過,隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,很多遠(yuǎn)程控制軟件提供通過Web頁面以Java技術(shù)來控制遠(yuǎn)程電腦,這樣可以實(shí)現(xiàn)不同操作系統(tǒng)下的遠(yuǎn)程控制。 </p><p> TCP協(xié)議遠(yuǎn)程控制主要有windows系統(tǒng)自帶的遠(yuǎn)程桌面、pcAnyWhere(賽門鐵克公司)等,網(wǎng)上98%的遠(yuǎn)程控制軟件都使用TCP協(xié)議來實(shí)現(xiàn)遠(yuǎn)程控制(包括上述幾款),使用TCP協(xié)議的遠(yuǎn)程控
31、制軟件的優(yōu)勢(shì)是穩(wěn)定、連接成功率高;缺陷是雙方必須有一方具有公網(wǎng)IP(或在同一個(gè)內(nèi)網(wǎng)中),否則就需要在路由器上做端口映射。這意味著你只能用這些軟件控制擁有公網(wǎng)IP的電腦,或者只能控制同一個(gè)內(nèi)網(wǎng)中的電腦(比如控制該公司里其它的電腦)。你不可能使用TCP協(xié)議的軟件從某一家公司的電腦,控制另外一家公司的內(nèi)部電腦,或者從網(wǎng)吧、賓館里控制你辦公室的電腦,因?yàn)樗麄兲幱诓煌膬?nèi)網(wǎng)中。80%以上的電腦都處于內(nèi)網(wǎng)中(使用路由共享上網(wǎng)的方式即為內(nèi)網(wǎng)),TCP
32、軟件不能穿透內(nèi)網(wǎng)的缺陷,使得該類軟件使用率大打折扣。但是目前很多遠(yuǎn)程控制軟件支持從被控端主動(dòng)連接到控制端,可以一定程度上彌補(bǔ)該缺陷。</p><p> UDP協(xié)議遠(yuǎn)程控制與 TCP 協(xié)議遠(yuǎn)程控制不同,UDP傳送數(shù)據(jù)前并不與對(duì)方建立連接,發(fā)送數(shù)據(jù)前后也不進(jìn)行數(shù)據(jù)確認(rèn),從理論上說速度會(huì)比TCP快(實(shí)際上會(huì)受網(wǎng)絡(luò)質(zhì)量影響)。最關(guān)鍵的是:使用UDP協(xié)議可以利用UDP的打洞原理(UDP Hole Punching技術(shù))穿
33、透內(nèi)網(wǎng)。從而解決了TCP協(xié)議遠(yuǎn)程控制軟件需要做端口映射的難題。這樣,即使雙方都在不同的局域網(wǎng)內(nèi),也可以實(shí)現(xiàn)遠(yuǎn)程連接和控制。QQ、MSN、網(wǎng)絡(luò)人遠(yuǎn)程控制軟件、XT800的遠(yuǎn)程控制功能都是基于UDP協(xié)議的。你會(huì)發(fā)現(xiàn)使用穿透內(nèi)網(wǎng)的遠(yuǎn)程控制軟件無需做端口映射即可實(shí)現(xiàn)連接,這類軟件都需要一臺(tái)服務(wù)器協(xié)助程序進(jìn)行通訊以便實(shí)現(xiàn)內(nèi)網(wǎng)的穿透。由于IP資源日益稀缺,越來越多的用戶會(huì)在內(nèi)網(wǎng)中上網(wǎng),因此能穿透內(nèi)網(wǎng)的遠(yuǎn)程控制軟件,將是今后遠(yuǎn)程控制發(fā)展的主流方向。&
34、lt;/p><p> 1.2 目的以及意義</p><p> 本文正是在上文提到的背景下提出的,目的就是為了解決計(jì)算機(jī)的遠(yuǎn)程操作,降低企業(yè)對(duì)軟件的后期維護(hù)成本,提高計(jì)算機(jī)遠(yuǎn)程通信能力的減少誤操作率來提升遠(yuǎn)程工作者的工作效率,設(shè)計(jì)出一款計(jì)算機(jī)網(wǎng)絡(luò)遠(yuǎn)程控制系統(tǒng)。遠(yuǎn)程控制系統(tǒng)能使技術(shù)人員直接操作遠(yuǎn)程計(jì)算機(jī),就像操作本地機(jī)器一樣,無須用戶介入,技術(shù)人員技能得到該機(jī)器的問題的第一手材料,從而加快了問
35、題的解決。實(shí)際上,使用遠(yuǎn)程控制工具的技術(shù)人員能夠做到解答疑難問題,安裝和配置軟件,把軟件下載到用戶計(jì)算機(jī)上,配置應(yīng)用程序和系統(tǒng)軟件設(shè)置并可通過實(shí)際操作培訓(xùn)用戶。總之,本畢業(yè)設(shè)計(jì)題目的設(shè)計(jì)與實(shí)現(xiàn)具有很大的現(xiàn)實(shí)意義。</p><p> 1.3 C++及編程模式簡(jiǎn)介</p><p> 1.3.1 Visual C++簡(jiǎn)介</p><p> Microsoft Vis
36、ual C++是Microsoft公司推出的開發(fā)Win32環(huán)境程序,面向?qū)ο蟮目梢暬删幊滔到y(tǒng)。它不但具有程序框架自動(dòng)生成、靈活方便的類管理、代碼編寫和界面設(shè)計(jì)集成交互操作、可開發(fā)多種程序等優(yōu)點(diǎn),而且通過簡(jiǎn)單的設(shè)置就可使其生成的程序框架支持?jǐn)?shù)據(jù)庫接口、OLE2,WinSock網(wǎng)絡(luò)、3D控制界面。</p><p> 它以擁有“語法高亮”, IntelliSense(自動(dòng)編譯功能)以及高級(jí)除錯(cuò)功能而著稱。比如,它
37、允許用戶進(jìn)行遠(yuǎn)程調(diào)試,單步執(zhí)行等。還有允許用戶在調(diào)試期間重新編譯被修改的代碼,而不必重新啟動(dòng)正在調(diào)試的程序。其編譯及建置系統(tǒng)以預(yù)編譯頭文件、最小重建功能及累加連結(jié)著稱。這些特征明顯縮短程式編輯、編譯及連結(jié)的時(shí)間花費(fèi),在大型軟件計(jì)劃上尤其顯著。</p><p> Visual C++的資源編輯器能以所見即所得的形式直接編輯程序的用戶界面,為所有資源分配ID標(biāo)識(shí)號(hào)。ClassWizard能把對(duì)話框模板與生成的類定義
38、或與已有的類代碼連接起來,為菜單項(xiàng)、控制等資源生成空的處理函數(shù)模板,創(chuàng)建消息映射條目,并將資源ID與處理函數(shù)連接起來。通過使用AppWizard,程序員的編程工作便簡(jiǎn)化為用資源編輯器直觀的設(shè)計(jì)界面,完善對(duì)話框類代碼,在空的處理函數(shù)模板處填寫響應(yīng)用戶操作的代碼,這是一種比較完善的可視化編程方法。</p><p> 但產(chǎn)品名“Visual C++”也容易誤導(dǎo)人,讓人認(rèn)為自己使用的是一個(gè)與Microsoft Visu
39、al Basic類似的完全可視化的系統(tǒng)。然而,使用Visual C++,開發(fā)人員必須真正地閱讀和編寫C++代碼。Visual C++向?qū)Э梢怨?jié)省時(shí)間和提高精度,但是,程序員也必須理解向?qū)Мa(chǎn)生的代碼,并且,最重要的是,還必須理解MFC庫的結(jié)構(gòu)和Windows操作系統(tǒng)的內(nèi)部工作方式。</p><p> 1.3.2 MFC應(yīng)用程序框架</p><p> MFC實(shí)際上是微軟提供的,用于在C++
40、環(huán)境下編寫應(yīng)用程序的一個(gè)框架和引擎,VC++是Windows下開發(fā)人員使用的專業(yè)C++ SDK(SDK,Standard SoftWare Develop Kit,專業(yè)開發(fā)平臺(tái)),MFC就是掛在它之上的一個(gè)輔助軟件開發(fā)包,MFC作為與VC++血肉相連的部分(注意C++和VC++的區(qū)別:C++是一種程序設(shè)計(jì)語言,是一種大家都承認(rèn)的軟件編制的通用規(guī)范,而VC++只是一個(gè)編譯器,或者說是一種編譯器+源程序編譯器的IDE,WS,PlatForm
41、,這跟Pascal和Delphi的關(guān)系一個(gè)道理,Pascal是Delphi的語言基礎(chǔ),Delphi使用Pascal規(guī)范來進(jìn)行Win下應(yīng)用程序的開發(fā)和編譯,卻不同于Basic語言和VB的關(guān)系,Basic語言在VB開發(fā)出來被應(yīng)用的年代已經(jīng)成了Basic語言的新規(guī)范,VB新加的Basic語言要素,如面向?qū)ο蟪绦蛟O(shè)計(jì)的要素,是一種性質(zhì)上的飛躍,使VB既是一個(gè)IDE,又成長(zhǎng)成一個(gè)新的程序設(shè)計(jì)語言),MFC同BC++集成的VCL一樣是一個(gè)非外掛式的
42、軟件包,類庫,只不過MFC類是微軟為VC++專配的。 </p><p> MFC是Win API與C++的結(jié)合,API,即微軟提供的Windows下應(yīng)用程序的編程語言接口,是一種軟件編程的規(guī)范,但不是一種程序開發(fā)語言本身,可以允許用戶使用各種各樣的第三方(如我是一方,微軟是一方,Borland就是第三方)的編程語言來進(jìn)行對(duì)Windows下應(yīng)用程序的開發(fā),使這些被開發(fā)出來的應(yīng)用程序能在Windows下運(yùn)行,比如V
43、B,VC++,JAVA,Delhpi編程語言函數(shù)本質(zhì)上全部源于API,因此用它們開發(fā)出來的應(yīng)用程序都能工作在Windows的消息機(jī)制和繪圖里,遵守Windows作為一個(gè)操作系統(tǒng)的內(nèi)部實(shí)現(xiàn),這其實(shí)也是一種必要,微軟如果不提供API,這個(gè)世上對(duì)Windows編程的工作就不會(huì)存在,微軟的產(chǎn)品就會(huì)迅速從時(shí)尚變成垃圾,上面說到MFC是微軟對(duì)API函數(shù)的專用C++封裝,這種結(jié)合一方面讓用戶使用微軟的專業(yè)C++ SDK來進(jìn)行Windows下應(yīng)用程序的
44、開發(fā)變得容易,因?yàn)镸FC是對(duì)API的封裝,微軟做了大量的工作,隱藏了好多程序開發(fā)人員在Windows下用C++ & MFC編制軟件時(shí)的大量?jī)?nèi)節(jié),如應(yīng)用程序?qū)崿F(xiàn)消息的處理,設(shè)備環(huán)境繪圖,這種結(jié)合是以方便為目的的,必定要付出</p><p> MFC不只是一個(gè)功能單純的界面開發(fā)系統(tǒng),它提供的類絕大部分用來進(jìn)行界面開發(fā),關(guān)聯(lián)一個(gè)窗口的動(dòng)作,但它提供的類中有好多類不與一個(gè)窗口關(guān)聯(lián),即類的作用不是一個(gè)界面類,不實(shí)
45、現(xiàn)對(duì)一個(gè)窗口對(duì)象的控制(如創(chuàng)建,銷毀),而是一些在Windows(用MFC編寫的程序絕大部分都在Windows中運(yùn)行)中實(shí)現(xiàn)內(nèi)部處理的類,如數(shù)據(jù)庫的管理類等,學(xué)習(xí)中最應(yīng)花費(fèi)時(shí)間的是消息和設(shè)備環(huán)境,對(duì)C++和MFC的學(xué)習(xí)中最難的部分是指針,C++面向?qū)ο蟪绦蛟O(shè)計(jì)的其它部分,如數(shù)據(jù)類型,流程控制都不難,建議學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)C++版。 </p><p> MFC是微軟封裝了的API。windows作為一個(gè)提供功能強(qiáng)大的應(yīng)
46、用程序接口編程的操作系統(tǒng),的確方便了許多程序員,傳統(tǒng)的win32開發(fā)(直接使用windows的接口函數(shù)API)對(duì)于程序員來說非常的困難,因?yàn)?,API函數(shù)實(shí)在太多了,而且名稱很亂,從零構(gòu)架一個(gè)窗口動(dòng)輒就是上百行的代碼。MFC是面向?qū)ο蟪绦蛟O(shè)計(jì)與Application framework的完美結(jié)合,他將傳統(tǒng)的API進(jìn)行了分類封裝,并且為使用者創(chuàng)建程序的一般框架。</p><p> 應(yīng)用程序框架的一種定義是提供一般應(yīng)
47、用程序需要的全部面向?qū)ο筌浖M件的集成集合。</p><p> C++流行的一個(gè)原因是它可以用類庫擴(kuò)充。類庫是可在應(yīng)用程序中使用的有關(guān)C++類的集合。應(yīng)用程序框架是類庫的超集。一般的類庫只是一種孤立的類的集合,用來嵌入在任何程序中,但是,應(yīng)用程序框架卻定義了程序的結(jié)構(gòu)。自從MFC庫發(fā)布以來,MFC已經(jīng)成為主要的Windows類庫。使用MFC類庫構(gòu)建應(yīng)用程序具有以下優(yōu)點(diǎn)。 </p><p>
48、; MFC庫是C++的Microsoft Windows API。</p><p> 應(yīng)用程序框架生成的應(yīng)用程序使用了標(biāo)準(zhǔn)的結(jié)構(gòu),具有標(biāo)準(zhǔn)化的用戶接口,這對(duì)具有標(biāo)準(zhǔn)用戶界面的Win32程序來說,可以極大的減輕程序員的負(fù)擔(dān),使程序員不必過多地考慮界面,可把主要精力放在程序設(shè)計(jì)上,以提高程序設(shè)計(jì)的效率。</p><p> 使用應(yīng)用程序框架的應(yīng)用程序不僅小,而且運(yùn)行速度快,具有很大的靈活性
49、。MFC封裝了Win32 SDK中的幾乎所有函數(shù),能實(shí)現(xiàn)Win32系統(tǒng)的任何功能。</p><p> MFC框架降低了編碼的復(fù)雜性。</p><p> MFC庫應(yīng)用程序框架有豐富的特性,如:Windows API的C++接口、通用的(非Windows所特有的)類、“共用根對(duì)象”類層次結(jié)構(gòu)、流線式多文檔界面(MDI)應(yīng)用程序支持等。</p><p> 強(qiáng)大的功能
50、。除封裝了大部分的Win32 SDK函數(shù)外,MFC還提供了應(yīng)用程序本身的數(shù)據(jù)和操作及ActiveX、OLE、Internet、WinSock、DAO(Data Access Objects)、ODBC(Open DataBase Connectivity)等操作類。</p><p> MFC框架的核心是文檔/視圖結(jié)構(gòu)(Document-View Architecture),這是一個(gè)很好用、但又往往較難以入門的功
51、能。簡(jiǎn)單的說,文檔/視圖結(jié)構(gòu)就是將數(shù)據(jù)和對(duì)數(shù)據(jù)的觀察或數(shù)據(jù)的表現(xiàn)(顯示)相分離。文檔僅處理數(shù)據(jù)的實(shí)際讀、寫操作,視圖則是顯示和處理數(shù)據(jù)的窗口,視圖可以操作文檔中的數(shù)據(jù)。</p><p> 1.3.3 MFC的消息映射</p><p> 在使用Visual C++進(jìn)行Win32程序設(shè)計(jì)時(shí),消息映射是一個(gè)非常重要的概念。Windows應(yīng)用程序是消息驅(qū)動(dòng)的,應(yīng)用程序不能直接得到用戶所做的操作
52、,如鼠標(biāo)按鍵、鍵盤輸入和窗口移動(dòng)等。這些操作由操作系統(tǒng)管理,操作系統(tǒng)檢測(cè)到操作事件后,便向相關(guān)的應(yīng)用程序發(fā)送消息,應(yīng)用程序響應(yīng)這些消息來完成用戶的操作。</p><p><b> 1、消息</b></p><p> Windows中的消息是操作系統(tǒng)與應(yīng)用程序之間、應(yīng)用程序與應(yīng)用程序之間、應(yīng)用程序各對(duì)象之間相互控制與傳遞信息的方式。消息的基本格式如下:</p&
53、gt;<p> Message wParam lParam</p><p> Message是消息名稱;wParam是與消息相關(guān)的Word型參數(shù);lParam是與消息相關(guān)的Long型參數(shù)。消息主要有以下3類。</p><p> Windows系統(tǒng)消息:Windows系統(tǒng)向窗口發(fā)送的消息,由窗口(Window)或視圖(View)進(jìn)行響應(yīng)處理。這類消息包括除WM_COMMA
54、ND消息之外的名稱以WM_開始的其他消息。</p><p> 控制通知消息:控制或子窗口傳給父窗口的WM_COMMAND通知的消息。</p><p> 命令消息:在響應(yīng)用戶接口操作時(shí),將產(chǎn)生WM_COMMAND命令消息。其參數(shù)指定了用戶接口的標(biāo)識(shí)號(hào),如菜單項(xiàng)和按鈕等ID號(hào)。</p><p><b> 2、消息映射過程</b></p&
55、gt;<p> 在使用AppWizard創(chuàng)建應(yīng)用程序時(shí),MFC應(yīng)用程序框架設(shè)置了相應(yīng)的消息處理函數(shù)來響應(yīng)消息,以完成相應(yīng)的操作。消息處理函數(shù)是某些類(通常是窗口類)的成員函數(shù)和程序員在其中編寫響應(yīng)消息時(shí)應(yīng)進(jìn)行操作的代碼。</p><p> 框架將消息和它們的處理函數(shù)連接起來就是消息映射。消息映射使應(yīng)用程序在接收到消息時(shí)調(diào)用對(duì)應(yīng)的消息處理函數(shù)來響應(yīng)和處理消息。</p><p&g
56、t; ClassWizard在創(chuàng)建新類時(shí)將為其創(chuàng)建一個(gè)消息映射,并為每個(gè)類能響應(yīng)的消息和命令增加對(duì)應(yīng)的處理函數(shù)。在源代碼中,消息映射開始于BEGIN_MESSAGE_MAP宏,結(jié)束于END_MESSAGE_MAP宏,中間由一系列預(yù)定義的被稱為“條目宏”的宏組成。其基本格式如下:</p><p> BEGIN_MESSAGE_MAP (classname, parentclassname)</p>
57、<p> //{{AFX_MSG_MAP (classname)</p><p><b> 條目宏1</b></p><p><b> 條目宏2</b></p><p><b> 條目宏3</b></p><p><b> …………</b&
58、gt;</p><p> //}}AFX_MSG_MAP</p><p> END_MESSAGE_MAP ()</p><p> 其中classname為擁有消息映射的當(dāng)前類名,parentclassname為當(dāng)前類的父類名。條目宏定義了類所處理的消息與其對(duì)應(yīng)的函數(shù)。常用的條目宏類型如表1.1所示。</p><p> Windows
59、消息的處理函數(shù)在CWnd類中進(jìn)行了預(yù)定義,類庫以消息名為基礎(chǔ)定義這些處理函數(shù)的名稱,且MFC要求所有消息處理函數(shù)聲明為afx_msg類型。例如,消息WM_PAINT的處理函數(shù)在CWnd類中的聲明如下:</p><p> afx_msg void OnPaint();</p><p> 表1.1 消息映射條目宏</p><p> 通過ClassWizard在派
60、生類中用同樣的原型定義處理函數(shù)并為該函數(shù)生成消息映射條目,然后由程序員編寫處理函數(shù)代碼,并在派生類中覆蓋了其父類的消息處理函數(shù)。在有些情況下,必須在派生類的消息處理函數(shù)中調(diào)用其父類的消息處理函數(shù),使Windows和基類能對(duì)消息進(jìn)行處理。ClassWizard將在生成的處理函數(shù)中建議是否應(yīng)調(diào)用父類的消息處理函數(shù)及調(diào)用的次序。除此之外,用戶定義和注冊(cè)的消息、命令和控制通知都沒有默認(rèn)的處理函數(shù),需要在定義時(shí)聲明,一般根據(jù)其ID名稱來為函數(shù)命名
61、。</p><p> 1.4 系統(tǒng)架構(gòu)的模式</p><p> C/S結(jié)構(gòu),即Client/Server(客戶機(jī)/服務(wù)器)結(jié)構(gòu),軟件系統(tǒng)體系結(jié)構(gòu),通過將任務(wù)合理分配到Client端和Server端,降低了系統(tǒng)的通訊開銷,可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì)。</p><p> 1.4.1 C/S結(jié)構(gòu)模式</p><p> Client/Se
62、rver結(jié)構(gòu),它的發(fā)展經(jīng)歷了兩個(gè)階段:從兩層結(jié)構(gòu)到三層結(jié)構(gòu)。</p><p> 兩層結(jié)構(gòu),它由兩部分構(gòu)成,前端是客戶機(jī),通常是PC,主要完成用戶界面顯示,接受數(shù)據(jù)輸入,校驗(yàn)數(shù)據(jù)有效性,向后臺(tái)數(shù)據(jù)庫發(fā)請(qǐng)求,接受返回結(jié)果,處理應(yīng)用邏輯;后端是服務(wù)器,運(yùn)行DBMS,提供數(shù)據(jù)庫的查詢和管理。應(yīng)用邏輯主要在前端,如在后端則是存儲(chǔ)過程的形式。</p><p> 三層結(jié)構(gòu)則利用中間件將應(yīng)用分為表示層
63、、業(yè)務(wù)邏輯層和數(shù)據(jù)存儲(chǔ)層三個(gè)不同的處理層次。三個(gè)層次的劃分是從邏輯上來分的,具體的物理分法可以有多種組合。基于三層結(jié)構(gòu)的應(yīng)用系統(tǒng)不但具備了大型機(jī)系統(tǒng)穩(wěn)定、安全和處理能力高等特性,同時(shí)擁有開放系統(tǒng)成本低、可擴(kuò)展性強(qiáng)、開發(fā)周期短等優(yōu)點(diǎn)。而中間件作為構(gòu)造三層結(jié)構(gòu)應(yīng)用系統(tǒng)的基礎(chǔ)平臺(tái),提供了以下主要功能:負(fù)責(zé)客戶機(jī)與服務(wù)器間、服務(wù)器間與服務(wù)器間的聯(lián)接和通訊;實(shí)現(xiàn)應(yīng)用與數(shù)據(jù)庫的高效連接;提供一個(gè)三層結(jié)構(gòu)應(yīng)用的開發(fā)、運(yùn)行、部署和管理的平臺(tái)。</
64、p><p> 1.4.2 TCP C/S通信原理</p><p> TCP Client/Server的通信原理如圖1.1所示,服務(wù)器端首先監(jiān)聽一個(gè)固定端口,客戶端再連接到服務(wù)端,此時(shí)服務(wù)端執(zhí)行Accept操作,以接受客戶端的連接。此時(shí)連接創(chuàng)建成功,則進(jìn)行數(shù)據(jù)傳輸,待數(shù)據(jù)傳輸完畢,服務(wù)端和客戶端就斷開連接。</p><p> 圖1.1 Client/Server的
65、通信流程</p><p> 1.4.3 C/S結(jié)構(gòu)的優(yōu)點(diǎn)</p><p> Client/Server技術(shù)在目前程序開發(fā)中得到了廣泛的應(yīng)用,這種技術(shù)的優(yōu)點(diǎn)在于它將處理工作按照一定的比例分配到客戶端和服務(wù)器上去執(zhí)行,這樣減少了網(wǎng)絡(luò)傳輸?shù)墓ぷ髁?,從而合理地利用了資源,提高了應(yīng)用程序開發(fā)的效率。由于客戶端實(shí)現(xiàn)與服務(wù)器的直接相連,沒有中間環(huán)節(jié),因此響應(yīng)速度快。</p><p
66、> 1.5 API HOOK技術(shù)簡(jiǎn)介</p><p> Hook是Windows中提供的一種用以替換DOS下“中斷”的系統(tǒng)機(jī)制,中文譯為“掛鉤”或“鉤子”。在對(duì)特定的系統(tǒng)事件進(jìn)行hook后,一旦發(fā)生已hook事件,對(duì)該事件進(jìn)行hook的程序就會(huì)受到系統(tǒng)的通知,這時(shí)程序就能在第一時(shí)間對(duì)該事件做出響應(yīng)。鉤子實(shí)際上是一個(gè)處理消息的程序段,通過系統(tǒng)調(diào)用,把它掛入系統(tǒng)。每當(dāng)特定的消息發(fā)出,在沒有到達(dá)目的窗口前,鉤
67、子程序就先捕獲該消息,亦即鉤子函數(shù)先得到控制權(quán)。這時(shí)鉤子函數(shù)即可以加工處理(改變)該消息,也可以不作處理而繼續(xù)傳遞該消息,還可以強(qiáng)制結(jié)束消息的傳遞。</p><p> API HOOK技術(shù)是一種用于改變API執(zhí)行結(jié)果的技術(shù),Microsoft 自身也在Windows操作系統(tǒng)里面使用了這個(gè)技術(shù),如Windows兼容模式等。 API HOOK 技術(shù)并不是計(jì)算機(jī)病毒專有技術(shù),但是計(jì)算機(jī)病毒經(jīng)常使用這個(gè)技術(shù)來達(dá)到隱藏自
68、己的目的。</p><p> 在windows系統(tǒng)下編程,應(yīng)該會(huì)接觸到api函數(shù)的使用,常用的API函數(shù)大概有2000個(gè)左右。今天隨著控件,stl等高效編程技術(shù)的出現(xiàn),api的使用概率在普通的用戶程序上就變得越來越小了。當(dāng)諸如控件這些現(xiàn)成的手段不能實(shí)現(xiàn)的功能時(shí),我們還需要借助API。最初有些人對(duì)某些api函數(shù)的功能不太滿意,就產(chǎn)生了如何修改這些api,使之更好的服務(wù)于程序的想法,這樣API hook就自然而然
69、的出現(xiàn)了。我們可以通過api hook,改變一個(gè)系統(tǒng)API的原有功能。基本的方法就是通過hook“接觸”到需要修改的api函數(shù)入口點(diǎn),改變它的地址指向新的自定義的函數(shù)。api hook并不屬于MSDN上介紹的13類Hook中的任何一種。</p><p> Windows系統(tǒng)下的編程,消息Message的傳遞是貫穿其始終的。Hook與消息有著非常密切的聯(lián)系,它的中文含義是“鉤子”,這樣理解起來不難得出“Hook是
70、消息處理中的一個(gè)環(huán)節(jié),用于監(jiān)控消息在系統(tǒng)中的傳遞,并在這些消息到達(dá)最終的消息處理過程前,處理某些特定的消息”。這也是Hook分為不同種類的原因。</p><p> 在Windows系統(tǒng)下編程,經(jīng)常接觸到API函數(shù)的使用,常用的API函數(shù)大概有2000個(gè)左右。今天隨著控件,STL等高效編程技術(shù)的出現(xiàn),API的使用概率在普通的用戶程序上就變得越來越小了。當(dāng)諸如控件這些現(xiàn)成的手段不能實(shí)現(xiàn)的功能時(shí),因此還需要借助API
71、。最初有些人對(duì)某些API函數(shù)的功能不太滿意,就產(chǎn)生了如何修改這些API,使之更好的服務(wù)于程序的想法,這樣API Hook就自然而然的出現(xiàn)了。通過API Hook,改變一個(gè)系統(tǒng)API的原有功能。基本的方法就是通過Hook“接觸”到需要修改的API函數(shù)入口點(diǎn),改變它的地址指向新的自定義的函數(shù)。API Hook并不屬于MSDN上介紹的13類Hook中的任何一種。所以說,API Hook并不是什么特別不同的Hook,它也需要通過基本的Hook提
72、高自己的權(quán)限,跨越不同進(jìn)程間訪問的限制,達(dá)到修改API函數(shù)地址的目的。</p><p> 1.6 CAsyncSocket類的簡(jiǎn)單介紹</p><p> CAsyncSocket類是MFC對(duì)WINSOCK API的較底層封裝,通過類名就知道這是一個(gè)異步非阻塞SOCKET類。CAsyncSocket::Create()有一個(gè)參數(shù)指明了使用者想要處理哪些Socket事件,使用者關(guān)心的事件被
73、指定以后,這個(gè)Socket默認(rèn)就被用作了異步方式。CAsyncSocket的Create()函數(shù),除了創(chuàng)建了一個(gè)SOCKET以外,還創(chuàng)建了個(gè)CSocketWnd窗口對(duì)象,并使用WSAAsyncSelect()將這個(gè)SOCKET與該窗口對(duì)象關(guān)聯(lián),以讓該窗口對(duì)象處理來自Socket的事件(消息),然而CSocketWnd收到Socket事件之后,只是簡(jiǎn)單地回調(diào)CAsyncSocket::OnReceive()等虛函數(shù)。所以CAsyncSoc
74、ket的派生類,只需要在這些虛函數(shù)里添加發(fā)送和接收的代碼。</p><p> 客戶端在使用CAsyncSocket::Connect()時(shí),往往返回一個(gè)WSAEWOULDBLOCK的錯(cuò)誤(其它的某些函數(shù)調(diào)用也如此,如:Send(),Receive()等),實(shí)際上這不應(yīng)該算作一個(gè)錯(cuò)誤,它是Socket在提醒用戶,由于使用了非阻塞Socket方式,所以(連接)操作需要時(shí)間,不能瞬間建立。因此可以在程序中等待,等它連
75、接成功為止,于是許多程序員就在調(diào)用Connect()之后,Sleep(0),然后不停地用WSAGetLastError()或者CAsyncSocket::GetLastError()查看Socket返回的錯(cuò)誤,直到返回成功為止。這是一種錯(cuò)誤的做法,不能達(dá)到預(yù)期目的。事實(shí)上,可以在Connect()調(diào)用之后等待CAsyncSocket::OnConnect()事件被觸發(fā),CAsyncSocket::OnConnect()是要表明Socke
76、t要么連接成功了,要么連接徹底失敗了。</p><p> 在客戶端調(diào)用Connect()連接服務(wù)端,服務(wù)端Accept()的做法就是在監(jiān)聽的Socket收到OnAccept()時(shí),用一個(gè)新的CAsyncSocket對(duì)象去建立連接,例如: </p><p> void CMySocket::OnAccept(int ErrCode)</p><p><b&g
77、t; { </b></p><p> CMySocket* pSocket = new CMySocket; </p><p> Accept( *pSocket ); </p><p><b> } </b></p><p> 于是,上面的pSocket和客戶端建立了連接,以后的通信就是這個(gè)pSo
78、cket對(duì)象去和客戶端進(jìn)行,而監(jiān)聽的Socket仍然繼續(xù)在監(jiān)聽,一旦又有一個(gè)客戶端要連接服務(wù)端,則上面的OnAccept()又會(huì)被調(diào)用一次。當(dāng)然pSocket是和客戶端通信的服務(wù)端,它不會(huì)觸發(fā)OnAccept()事件,因?yàn)樗皇潜O(jiān)聽Socket。</p><p> CAsyncSocket類為我們使用Socket提供了極大方便。建立Socket的WSAStartup過程和bind過程被簡(jiǎn)化成為Create過程,
79、IP地址類型轉(zhuǎn)換、主機(jī)名和IP地址轉(zhuǎn)換的過程中許多復(fù)雜的變量類型都被簡(jiǎn)化成字符串和整數(shù)操作,特別是CAsyncSocket類的異步特點(diǎn),完全可以替代繁瑣的線程操作。MFC提供了大量的類庫,靈活使用這些類庫,便會(huì)大大提高編程的效率。</p><p> 2 遠(yuǎn)程通信與控制系統(tǒng)分析</p><p> 2.1 系統(tǒng)基本情況描述</p><p> 電腦中的遠(yuǎn)程控制技術(shù),
80、始于DOS時(shí)代,只不過當(dāng)時(shí)由于技術(shù)上沒有什么大的變化,網(wǎng)絡(luò)不發(fā)達(dá),市場(chǎng)沒有更高的要求,所以遠(yuǎn)程控制技術(shù)沒有引起更多人的注意。但是,隨著網(wǎng)絡(luò)的高度發(fā)展,電腦的管理及技術(shù)支持的需要,遠(yuǎn)程操作及控制技術(shù)越來越引起人們的關(guān)注。傳統(tǒng)的遠(yuǎn)程控制軟件一般使用NETBEUI、NETBIOS、IPX/SPX、 TCP/IP等協(xié)議來實(shí)現(xiàn)遠(yuǎn)程控制,不過,隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,目前很多遠(yuǎn)程控制軟件提供通過Web頁面以Java技術(shù)來控制遠(yuǎn)程電腦,這樣可以實(shí)現(xiàn)不同操
81、作系統(tǒng)下的遠(yuǎn)程控制</p><p> 隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,人們要處理的任務(wù)也越來越多,工作地點(diǎn)也有可能是多個(gè),在計(jì)算機(jī)使用的過程中就會(huì)遇到這樣那樣的問題,從而使得工作變得更加繁重。如果將計(jì)算機(jī)系統(tǒng)進(jìn)行還原或重裝,一些重要資料有可能將會(huì)丟失。尋求一種方便、高效的方法對(duì)出現(xiàn)故障的系統(tǒng)進(jìn)行修復(fù)已經(jīng)成為人們的迫切需要。本課題設(shè)計(jì)的使用,能幫助技術(shù)人員方便、高效的修復(fù)遠(yuǎn)程系統(tǒng)軟件,提高人們的工作效率,降低系統(tǒng)維護(hù)的
82、成本。</p><p> 遠(yuǎn)程控制和木馬有很大的相似之處,譬如說現(xiàn)在的灰鴿子遠(yuǎn)程控制軟件〔企業(yè)版〕,它具有兩種遠(yuǎn)程控制形式:服務(wù)端自動(dòng)上線連接型和客戶端主動(dòng)連接控制型,同時(shí)擁有兩者的所有功能。它可以被當(dāng)作木馬來作為入侵遠(yuǎn)程電腦的工具,并且監(jiān)控遠(yuǎn)程攝像頭的功能更使對(duì)方失去個(gè)人私隱。但如果客戶端為主動(dòng)方式連接服務(wù)端時(shí),服務(wù)端可以接受多個(gè)客戶連接,所以視頻、語音的發(fā)送可以實(shí)現(xiàn)遠(yuǎn)程教學(xué),遠(yuǎn)程協(xié)助等功能。因此遠(yuǎn)程控制和木
83、馬兩者幾乎找不到界線,但從最初的用途來說,它們應(yīng)該有以下區(qū)別的:</p><p> 遠(yuǎn)程連接的方式不同:木馬屬于服務(wù)端自動(dòng)上線連接型,即一運(yùn)行就上線連接指定IP,并且如果控制端沒運(yùn)行,它會(huì)不斷重新連接;而遠(yuǎn)程控制屬于客戶端主動(dòng)連接控制型,方便之處是可以從不同IP的電腦去連接已經(jīng)安裝服務(wù)端的主機(jī)。</p><p> 隱藏機(jī)制不同:木馬一般注冊(cè)為系統(tǒng)服務(wù),偽裝為類似系統(tǒng)進(jìn)程的程序,用戶不能
84、輕易關(guān)閉它;而遠(yuǎn)程控制服務(wù)端可以按其應(yīng)用考慮是否隱藏和是否能夠被關(guān)閉。</p><p> 用途不同:木馬主要是達(dá)到竊取別人主機(jī)各種信息的目的;而遠(yuǎn)程控制可以作為網(wǎng)管管理機(jī)房的工具,也可以是老師遠(yuǎn)程教學(xué)的助手,更是遠(yuǎn)程辦公的理想軟件。</p><p> 遠(yuǎn)程控制因?yàn)檫M(jìn)一步克服了由于地域性差異所造成的不便性,所以在網(wǎng)絡(luò)管理、遠(yuǎn)程技術(shù)支持、遠(yuǎn)程交流、遠(yuǎn)程辦公等領(lǐng)域有著非常廣泛的應(yīng)用。因此,設(shè)
85、計(jì)一個(gè)遠(yuǎn)程控制軟件,不光包含很強(qiáng)的網(wǎng)絡(luò)處理技術(shù),還具有廣泛的實(shí)用價(jià)值。遠(yuǎn)程控制的主要應(yīng)用如下:</p><p> 遠(yuǎn)程辦公:這種遠(yuǎn)程的辦公方式不僅大大緩解了城市交通狀況,減少了環(huán)境污染,還免去了人們上下班路上奔波的辛勞,更可以提高企業(yè)員工的工作效率和工作興趣。</p><p> 遠(yuǎn)程技術(shù)支持:通常,遠(yuǎn)距離的技術(shù)支持必須依賴技術(shù)人員和用戶之間的電話交流來進(jìn)行,這種交流既耗時(shí)又容易出錯(cuò)。許
86、多用戶對(duì)電腦知道得很少,然而當(dāng)遇到問題時(shí),他們必須向無法看到電腦屏幕的技術(shù)人員描述問題的癥狀。有了遠(yuǎn)程控制技術(shù),技術(shù)人員就可以遠(yuǎn)程控制用戶的電腦,就像直接操作本地電腦一樣,只需要用戶的簡(jiǎn)單幫助就可以得到該機(jī)器存在的問題的第一手材料,很快就可以找到問題的所在,并加以解決。</p><p> 遠(yuǎn)程教學(xué):教師和學(xué)生之間可以利用這種遠(yuǎn)程控制技術(shù)實(shí)現(xiàn)教學(xué)問題的交流,學(xué)生可以不用見到老師,就得到老師手把手的輔導(dǎo)和講授。學(xué)生
87、還可以直接在電腦中進(jìn)行習(xí)題的演算和求解,在此過程中,教師能夠輕松看到學(xué)生的解題思路和步驟,并加以實(shí)時(shí)的指導(dǎo)。</p><p> 遠(yuǎn)程維護(hù)和管理:網(wǎng)絡(luò)管理員或者普通用戶可以通過遠(yuǎn)程控制技術(shù)為遠(yuǎn)端的電腦安裝和配置軟件、下載并安裝軟件修補(bǔ)程序、配置應(yīng)用程序和進(jìn)行系統(tǒng)軟件設(shè)置。</p><p> 2.2 系統(tǒng)可行性分析</p><p> 可行性研究的任務(wù)不是具體解決問
88、題,而是研究問題的范圍,探索這個(gè)問題是否值得去解,是否有可行的方法??尚行苑治鰧?shí)質(zhì)上是要進(jìn)行一次大大壓縮簡(jiǎn)化了的系統(tǒng)分析和設(shè)計(jì)的過程,也就是在較高層次上以較抽象的方式進(jìn)行的系統(tǒng)分析和設(shè)計(jì)的過程。要研究每一種解法的可行性,一般說來,應(yīng)從經(jīng)濟(jì)可行性、技術(shù)可行性、操作可行性等方面研究可行性。</p><p> 2.2.1 經(jīng)濟(jì)可行性</p><p> 本課題設(shè)計(jì)成本低廉,要的只是兩個(gè)ISP分
89、發(fā)的IP地址,而且這也多用于局域網(wǎng)或企業(yè)網(wǎng)等內(nèi)網(wǎng),就更談不上成本上的問題。但是如果需要對(duì)程序的質(zhì)量提高可以購買加密算法,對(duì)傳輸數(shù)據(jù)進(jìn)行加密。</p><p> 2.2.2 技術(shù)可行性</p><p> 本課題設(shè)計(jì)所用到的一系列的技術(shù)已是累積了幾十年的技術(shù),這些技術(shù)在這么多年的發(fā)展中并沒有被淘汰,反而是越來越來熱門。當(dāng)初遠(yuǎn)程協(xié)助這門技術(shù)在DOS時(shí)代就已經(jīng)存在,只是受網(wǎng)絡(luò)的制約,但是此時(shí)這
90、門技術(shù)還是受網(wǎng)絡(luò)技術(shù)制約著。網(wǎng)絡(luò)流量的問題是造成所有通信程序的不穩(wěn)定性的罪魁禍?zhǔn)?。但是本課題設(shè)計(jì)在局域網(wǎng)中是完全能夠?qū)崿F(xiàn)的,而且也是專門為企業(yè)網(wǎng)內(nèi)部所設(shè)計(jì),因?yàn)閿?shù)據(jù)信息沒被加密,如果想走Internet,則需建立VPN。</p><p> 2.2.3 操作可行性</p><p> 根據(jù)系統(tǒng)的操作是否簡(jiǎn)單易懂,是否為用戶所接受,從操作的角度研究系統(tǒng)的可行性。本課題設(shè)計(jì)操作簡(jiǎn)單,客戶端安裝
91、后無需其它操作,服務(wù)端待客戶端自動(dòng)連接后,則可以對(duì)其屏幕、文件、注冊(cè)表等進(jìn)行操作,完全像操作本地機(jī)器一樣簡(jiǎn)單。</p><p> 綜合以上三方面的可行性分析,本課題設(shè)計(jì)的操作是可行的。</p><p> 2.3 功能需求分析</p><p> 功能需求是對(duì)軟件系統(tǒng)的一項(xiàng)基本需求,這方面的需求指定系統(tǒng)必須提供的服務(wù)。根據(jù)對(duì)一般的遠(yuǎn)程協(xié)助的調(diào)查了解,該系統(tǒng)應(yīng)該至少
92、包含以下幾個(gè)功能:</p><p> 1、服務(wù)端對(duì)客戶端的屏幕監(jiān)控</p><p> 遠(yuǎn)程協(xié)助系統(tǒng)就是要解決那些難以用語言描述的軟件問題,協(xié)</p><p> 助端(服務(wù)端)如果能實(shí)時(shí)的看見被協(xié)助端(客戶端)的系統(tǒng)桌面,那將大大提高解決問題的效率。當(dāng)然,為了更方便的操作,協(xié)助端還必須能控制被協(xié)助端的鼠標(biāo)和鍵盤。系統(tǒng)服務(wù)端桌面監(jiān)控的用例圖如圖2.1所示:<
93、/p><p> 圖2.1 屏幕控制用例圖</p><p> 2、服務(wù)端對(duì)客戶端文件操作</p><p> 服務(wù)端如果僅僅能監(jiān)控客戶端桌面,那幫助也許沒那么大,比</p><p> 如客戶端要修復(fù)一些文件,而在客戶端本地硬盤中又沒有相應(yīng)的修復(fù)工具,此時(shí)服務(wù)端也是無能為力的。當(dāng)然,可以通過QQ、MSN等通訊工具傳輸,這樣做畢竟也是很麻煩的,因
94、此服務(wù)端能實(shí)現(xiàn)對(duì)客戶端的文件遠(yuǎn)程操作則是不可或缺的。文件操作包括:上傳文件、下載文件、創(chuàng)建文件夾、執(zhí)行遠(yuǎn)程程序等等。該功能模塊的用例圖如圖2.2所示:</p><p> 圖2.2 文件操作用例圖</p><p> 服務(wù)端對(duì)客戶端的高級(jí)操作</p><p> 服務(wù)端向客戶端發(fā)送一條命令,客戶端針對(duì)該命令分別枚舉出</p><p> 客戶
95、端的注冊(cè)表、系統(tǒng)服務(wù)、進(jìn)程等,再以文本方式發(fā)送給服務(wù)端,服務(wù)端獲取到信息后,則可以對(duì)注冊(cè)表、系統(tǒng)服務(wù)、進(jìn)程做刪除、添加、結(jié)束等操作。</p><p><b> 2.4 系統(tǒng)流程圖</b></p><p> 首先運(yùn)行服務(wù)器端,然后安裝客戶端后,客戶端安裝好之后就會(huì)不斷的嘗試連接服務(wù)器,連接成功后就會(huì)想服務(wù)器端發(fā)送消息表明已經(jīng)登錄了,接著服務(wù)器端就會(huì)發(fā)送命令給客戶端,
96、客戶端根據(jù)服務(wù)端發(fā)送的命令執(zhí)行屏幕、文件注冊(cè)表、服務(wù)、進(jìn)程等操作。執(zhí)行完之后,客戶端就會(huì)發(fā)送一個(gè)消息給服務(wù)器端,該消息是執(zhí)行的結(jié)果,服務(wù)器端收到消息后,就會(huì)將消息顯示出來。系統(tǒng)流程圖如圖2.3所示:</p><p> 圖2.3 系統(tǒng)流程圖</p><p> 3 遠(yuǎn)程通信與控制程序設(shè)計(jì)</p><p> 經(jīng)過需求分析階段,在軟件需求分析階段已經(jīng)弄清楚了各種需求,
97、較好地解決了所開發(fā)的系統(tǒng)“做什么”的問題,并已在軟件需求說明書和數(shù)據(jù)要求說明書中詳盡和充分地闡明了這些需求以后,下一步就要著手對(duì)軟件系統(tǒng)的結(jié)構(gòu)、數(shù)據(jù)結(jié)構(gòu)、用戶界面等進(jìn)行設(shè)計(jì)。</p><p> 3.1 系統(tǒng)設(shè)計(jì)使用工具</p><p> 本系統(tǒng)采用Visual C++ 6.0作為開發(fā)工具,Visual C++ 6.0源代碼編輯器功能強(qiáng)大,使用非常方便。它提供了語句自動(dòng)完成功能,編輯輸入
98、源程序時(shí)能自動(dòng)顯示當(dāng)前對(duì)象的成員變量和成員函數(shù),并表明函數(shù)的參數(shù)類型。</p><p> 調(diào)試使用VMware Workstation虛擬機(jī)搭建實(shí)驗(yàn)環(huán)境,分別開啟客戶端主機(jī)和服務(wù)端主機(jī)。</p><p> 3.2 系統(tǒng)模塊的設(shè)計(jì)</p><p> 3.2.1 模塊設(shè)計(jì)</p><p> 本系統(tǒng)面向的對(duì)象有兩種,一種是服務(wù)端,一種是客戶
99、端。服務(wù)端只要是向客戶端發(fā)送操作命令,客戶端解析命令后執(zhí)行相應(yīng)操作,然后將結(jié)果返回給服務(wù)端,服務(wù)端再將結(jié)果顯示出來。</p><p> 3.2.2 屏幕監(jiān)控模塊設(shè)計(jì)</p><p> 屏幕監(jiān)控,也就是將客戶端的屏幕截圖,然后發(fā)送給服務(wù)端。由于截圖圖片格式為BMP,一幀圖像數(shù)據(jù)量很大,因此在此模塊中引用第三方開源類庫CxImage,和壓縮庫zlib,將截圖在內(nèi)存中壓縮成JPEG格式,然后
100、再調(diào)用zlib的壓縮函數(shù)進(jìn)一步對(duì)JPEG壓縮,最后再發(fā)送給服務(wù)端。鼠標(biāo)和鍵盤的操作則是通過模擬來實(shí)現(xiàn),在服務(wù)端捕獲鼠標(biāo)鍵盤操作后,服務(wù)端的命令連接就會(huì)將捕獲的結(jié)果發(fā)送到客戶端,客戶端再通過調(diào)用mouse_event和keybd_event這兩個(gè)API函數(shù)進(jìn)行模擬鼠標(biāo)鍵盤操作。該模塊大致流程圖如圖3.1所示:</p><p> 圖3.1 屏幕監(jiān)控大致流程圖</p><p> 3.2.3
101、文件操作模塊設(shè)計(jì)</p><p> 文件操作,包括文件上傳、文件下載、刪除文件、執(zhí)行遠(yuǎn)程程序。當(dāng)然本系統(tǒng)還需要通過判斷客戶對(duì)文件圖標(biāo)的不同操作來判斷操作人對(duì)文件所作的不同操作,然后根據(jù)判斷結(jié)果執(zhí)行命令。該模塊大致流程圖如圖3.2所示:</p><p> 圖3.2 文件操作大致流程圖</p><p> 3.2.4 注冊(cè)表操作模塊設(shè)計(jì)</p><
102、;p> 注冊(cè)表是為Windows NT和Windows95中所有32位硬件/驅(qū)動(dòng)和32位應(yīng)用程序設(shè)計(jì)的數(shù)據(jù)文件。16位驅(qū)動(dòng)在Winnt下無法工作,所以所有設(shè)備都通過注冊(cè)表來控制,一般這些 是通過BIOS來控制的。在Win95下,16位驅(qū)動(dòng)會(huì)繼續(xù)以實(shí)模式方式設(shè)備工作,它們使用system.ini來控制。16位應(yīng)用程序會(huì)工作在NT或者Win95 下,它們的程序仍然會(huì)參考win.ini和system.ini文件獲得信息和控制。在沒有注
103、冊(cè)表的情況下,操作系統(tǒng)不會(huì)獲得必須的信息來運(yùn)行和控制附屬的設(shè)備和應(yīng)用程序及正確響應(yīng)用戶的輸入。</p><p> 注冊(cè)表操作屬于命令操作,命令操作傳輸?shù)臄?shù)據(jù)量小,響應(yīng)快。為了客戶端程序能正常對(duì)進(jìn)程、服務(wù)等操作,還必須對(duì)客戶端進(jìn)程進(jìn)行提升權(quán)限操作。</p><p> 3.2.5 發(fā)送信息模塊設(shè)計(jì)</p><p> 對(duì)于信息的發(fā)送,本系統(tǒng)設(shè)計(jì)得相對(duì)簡(jiǎn)單,僅發(fā)送一些
104、文字信息??蛻舳送ㄟ^編輯框編輯好將要發(fā)送的信息內(nèi)容,確認(rèn)發(fā)送后,產(chǎn)生windows消息,然后系統(tǒng)通過建立的Socket套接字傳輸文字信息及編輯時(shí)的相應(yīng)的字體格式等。服務(wù)端接收后按照客戶端編輯的信息條件將文字信息打印在屏幕上方。屏幕未刷新時(shí),文字信息將一直留在屏幕上方,屏幕刷新后,文字信息消失。</p><p> 3.2.6 API HOOK模塊設(shè)計(jì)</p><p> 本系統(tǒng)采用API
105、HOOK技術(shù)對(duì)客戶端進(jìn)程進(jìn)行守護(hù),達(dá)到防止客戶端進(jìn)程被惡意結(jié)束的目的。該功能采用了微軟的開源類庫detours,對(duì)OpenProcess和TerminateProcess這兩個(gè)系統(tǒng)API進(jìn)行HOOK,從而實(shí)現(xiàn)對(duì)客戶端進(jìn)程進(jìn)行守護(hù)的目的。</p><p> 3.3 客戶端與服務(wù)器連接設(shè)計(jì)</p><p> CAsyncSocket重載了SOCKET連接和斷開的消息事件,用戶可以在這些事件
106、中判斷SOCKET的連接情況,但是斷開消息事件在一種情況下無法觸發(fā),也就是網(wǎng)線被拔掉或其中一方斷電時(shí),為了解決這種情況,可以在服務(wù)端和客戶端中都添加一個(gè)連接時(shí)鐘,周期性的給對(duì)方發(fā)送一個(gè)心跳包,如果發(fā)送失敗則表示對(duì)方已經(jīng)斷開連接,此時(shí)則進(jìn)入斷開重連狀態(tài)。</p><p> 對(duì)于異步非阻塞的SOCKET來說,連接成功與否是在其OnConnect事件里判斷的,該事件函數(shù)原型為:void OnConnect(int n
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文---網(wǎng)絡(luò)遠(yuǎn)程通信與控制程序設(shè)計(jì)
- cs模式遠(yuǎn)程控制程序設(shè)計(jì)畢業(yè)論文
- cs模式遠(yuǎn)程控制程序設(shè)計(jì)畢業(yè)論文
- 網(wǎng)絡(luò)遠(yuǎn)程通信和控制程序畢業(yè)設(shè)計(jì)
- 畢業(yè)論文--電鑄過程plc控制程序設(shè)計(jì)
- 畢業(yè)論文--電鑄過程plc控制程序設(shè)計(jì)
- 畢業(yè)設(shè)計(jì)---計(jì)算機(jī)遠(yuǎn)程控制程序設(shè)計(jì)
- 基本控制程序設(shè)計(jì)
- 畢業(yè)論文范文——基于plc作息時(shí)間控制程序設(shè)計(jì)
- 畢業(yè)論文---電鍍自動(dòng)生產(chǎn)線plc控制程序設(shè)計(jì)
- 塑料注塑成型生產(chǎn)線控制程序設(shè)計(jì)【畢業(yè)論文+cad】
- 電鍍自動(dòng)生產(chǎn)線plc控制程序設(shè)計(jì)畢業(yè)論文
- 自動(dòng)門控制程序設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 電鍍自動(dòng)生產(chǎn)線plc控制程序設(shè)計(jì)(畢業(yè)論文doc)
- 基于plc的電磁泵控制程序設(shè)計(jì)畢業(yè)設(shè)計(jì)
- 設(shè)計(jì)與開發(fā)控制程序
- 太赫茲時(shí)域系統(tǒng)優(yōu)化與控制程序設(shè)計(jì).pdf
- 畢業(yè)設(shè)計(jì)---基于plc五層電梯的控制程序設(shè)計(jì)
- 基于vb的先進(jìn)控制程序的研究與開發(fā)畢業(yè)論文
- 發(fā)電控制系統(tǒng)及控制程序設(shè)計(jì).pdf
評(píng)論
0/150
提交評(píng)論