![網(wǎng)絡(luò)虛擬實(shí)驗(yàn)平臺(tái)的構(gòu)建與測(cè)試_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/22/8d75e3ff-13b8-4957-8318-e7f1382e2a44/8d75e3ff-13b8-4957-8318-e7f1382e2a441.gif)
![網(wǎng)絡(luò)虛擬實(shí)驗(yàn)平臺(tái)的構(gòu)建與測(cè)試_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/22/8d75e3ff-13b8-4957-8318-e7f1382e2a44/8d75e3ff-13b8-4957-8318-e7f1382e2a442.gif)
![網(wǎng)絡(luò)虛擬實(shí)驗(yàn)平臺(tái)的構(gòu)建與測(cè)試_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/22/8d75e3ff-13b8-4957-8318-e7f1382e2a44/8d75e3ff-13b8-4957-8318-e7f1382e2a443.gif)
![網(wǎng)絡(luò)虛擬實(shí)驗(yàn)平臺(tái)的構(gòu)建與測(cè)試_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/22/8d75e3ff-13b8-4957-8318-e7f1382e2a44/8d75e3ff-13b8-4957-8318-e7f1382e2a444.gif)
![網(wǎng)絡(luò)虛擬實(shí)驗(yàn)平臺(tái)的構(gòu)建與測(cè)試_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-2/22/8d75e3ff-13b8-4957-8318-e7f1382e2a44/8d75e3ff-13b8-4957-8318-e7f1382e2a445.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、網(wǎng)絡(luò)虛擬實(shí)驗(yàn)平臺(tái)的構(gòu)建與測(cè)試摘 要基于網(wǎng)絡(luò)的虛擬實(shí)驗(yàn)平臺(tái)是在能夠進(jìn)行網(wǎng)絡(luò)通信的基礎(chǔ)之上將計(jì)算機(jī)上虛擬的各種儀器、器件,按實(shí)驗(yàn)要求組裝成一個(gè)完整的實(shí)驗(yàn)環(huán)境,實(shí)現(xiàn)搭接實(shí)驗(yàn)電路,演示實(shí)驗(yàn)過(guò)程等功能。遠(yuǎn)程指導(dǎo)模塊是其中的一個(gè)功能模塊。它分成指導(dǎo)端和被指導(dǎo)端兩部分,指導(dǎo)端通過(guò)HOOK技術(shù),采集本地機(jī)鼠標(biāo)和鍵盤(pán)信息;然后將這些信息打包,通過(guò)P2P網(wǎng)絡(luò)通信機(jī)制將信息包傳給被指導(dǎo)端;在被指導(dǎo)端將信息包信息解出,通過(guò)mouse_event、keybd_event等函數(shù)去控制被指導(dǎo)端的鼠標(biāo)、鍵盤(pán)動(dòng)作,實(shí)現(xiàn)相關(guān)的一些遠(yuǎn)程指導(dǎo)動(dòng)作。本模塊在VC環(huán)境下開(kāi)發(fā),用到了Windows Socket編程技術(shù),P2P編程思想,H
2、OOK技術(shù),多線(xiàn)程技術(shù)等多方面的技術(shù)。由于整個(gè)系統(tǒng)模塊很多,本設(shè)計(jì)中編寫(xiě)了獨(dú)立的測(cè)試程序,經(jīng)過(guò)測(cè)試基本達(dá)到預(yù)期的設(shè)計(jì)目標(biāo)。關(guān)鍵詞:遠(yuǎn)程指導(dǎo);P2P;Windows Socket編程;HOOK;多線(xiàn)程 Design and Implementation of Remote Guidance Module Based on Network Virtual Experiment PlatformAbstractUnder the foundation of network communications,the network-based Virtual Experimental Platform c
3、ould integrate various computer virtual devices into a complete experimental environment according to the experiment requirements, and connect the experiment circuit and demonstrate the process of experiment. The remote guiding module was one of function modules, which was divided into guiding end a
4、nd the guided end. With HOOK, the guiding end captured the information of local mouse and keyboard, and packed the information to send to the guided part through peer-to-peer network communication mechanism. The guided end will unpack the information, and control the mouse and keyboard of the guided
5、 end by mouse_event, keybd_event functions to implement some remote control actions. Developed under VC environment, the remote guidance module used Windows Socket programming technology, P2P programming ideas, HOOK technology, multithreading technology, and etc. Because there are many modules for t
6、he whole system, an independent testing procedure was programmed to test the modules, which had been proven to achieve the desired objectivesKey words: Remote guidance;Peer-to-Peer;Windows Socket programming;HOOK;Multithreading 目 錄 論文總頁(yè)數(shù):23頁(yè)1引言11.1項(xiàng)目背景11.2項(xiàng)目介紹11.2.1 基于網(wǎng)絡(luò)的虛擬實(shí)驗(yàn)平臺(tái)11.2.2 遠(yuǎn)程指導(dǎo)模塊21.3 項(xiàng)目要求
7、21.3.1 功能要求21.3.2 Client/Server(客戶(hù)端/服務(wù)器)結(jié)構(gòu)工作過(guò)程22 網(wǎng)絡(luò)基礎(chǔ)知識(shí)簡(jiǎn)介32.1 OSI與TCP/IP參考模型的對(duì)應(yīng)關(guān)系32.1.1 OSI參考模型32.1.2 TCP/IP參考模型42.2 Windows Socket編程原理及操作步驟52.3 P2P網(wǎng)絡(luò)介紹83 相關(guān)函數(shù)分析與代碼實(shí)現(xiàn)83.1多線(xiàn)程83.1.1 進(jìn)程介紹83.1.2 線(xiàn)程介紹83.1.3 進(jìn)程與線(xiàn)程的關(guān)系93.1.4 多線(xiàn)程實(shí)現(xiàn)93.2 Hook技術(shù)93.2.1 Hook函數(shù)簡(jiǎn)介及類(lèi)型93.2.2 Hook子過(guò)程處理123.2.3 Hook的安裝/卸載133.3 設(shè)計(jì)流程及函數(shù)思想
8、153.3.1 簡(jiǎn)述153.3.2 代碼分析154 程序測(cè)試與相應(yīng)改進(jìn)184.1 程序界面184.2程序相關(guān)測(cè)試194.2.1 獲取對(duì)方相關(guān)信息194.2.2發(fā)送消息及存貯194.2.3被指導(dǎo)端顯示信息204.3 相關(guān)改進(jìn)20結(jié) 論20參考文獻(xiàn)211引言近年來(lái),隨著信息技術(shù)的發(fā)展,計(jì)算機(jī)的普及,網(wǎng)絡(luò)為我們帶了更多的便利。網(wǎng)絡(luò)技術(shù)的發(fā)展,引發(fā)了控制領(lǐng)域的深刻技術(shù)變革,控制系統(tǒng)結(jié)構(gòu)沿著網(wǎng)絡(luò)化方向與控制系統(tǒng)體系沿著開(kāi)放性方向發(fā)展將是控制系統(tǒng)技術(shù)創(chuàng)新的大潮流。計(jì)算機(jī)局域網(wǎng)絡(luò)、企業(yè)網(wǎng)絡(luò)、現(xiàn)代信號(hào)處理等等使自動(dòng)化系統(tǒng)與工業(yè)控制系統(tǒng)從體系結(jié)構(gòu)、控制方法、產(chǎn)品系列、人機(jī)協(xié)作方法等都發(fā)生了重大的變化。進(jìn)入21世
9、紀(jì)的控制系統(tǒng)以網(wǎng)絡(luò)為主要特征:一方面是在自動(dòng)化與工業(yè)控制中需要更深層次地滲透通信與網(wǎng)絡(luò)技術(shù),另一方面是在通信網(wǎng)絡(luò)的管理與控制中也要求更多的采用控制理論與策略并且由于系統(tǒng)中需要大量的數(shù)據(jù)交換,服務(wù)器的負(fù)擔(dān)很重,所以我們就研究出了基于網(wǎng)絡(luò)的虛擬實(shí)驗(yàn)平臺(tái)。作為基于網(wǎng)絡(luò)的虛擬實(shí)驗(yàn)平臺(tái)的遠(yuǎn)程指導(dǎo)模塊,本文通過(guò)Windows Socket編程,以HOOK技術(shù),多線(xiàn)程技術(shù)作為基礎(chǔ),再利用其他的API函數(shù)來(lái)實(shí)現(xiàn)被指導(dǎo)端對(duì)指導(dǎo)端發(fā)送請(qǐng)求信息,將信息打包以后通過(guò)網(wǎng)絡(luò)傳輸?shù)椒?wù)器端,指導(dǎo)端收到信息以后,將信息解包,根據(jù)信息提示來(lái)對(duì)被指導(dǎo)端進(jìn)行相關(guān)指導(dǎo):獲取客戶(hù)的相關(guān)信息、鎖定鼠標(biāo)和鍵盤(pán),對(duì)鼠標(biāo)進(jìn)行動(dòng)態(tài)的控制和指導(dǎo)鍵
10、盤(pán)的信息輸入。1.1項(xiàng)目背景全球信息化的發(fā)展,計(jì)算機(jī)網(wǎng)絡(luò)給我們提供了優(yōu)越的通信平臺(tái),優(yōu)秀的軟件系統(tǒng)必須要具有網(wǎng)絡(luò)功能。虛擬實(shí)驗(yàn)平臺(tái)正是應(yīng)這個(gè)大需求而誕生。并且隨著信息技術(shù)的發(fā)展,網(wǎng)絡(luò)無(wú)疑為我們帶了更多的便利,同時(shí)一個(gè)優(yōu)秀的系統(tǒng)必須要具有網(wǎng)絡(luò)功能,要完成這些功能,那就要把各種網(wǎng)絡(luò)通過(guò)某種方式連接起來(lái),在網(wǎng)絡(luò)實(shí)現(xiàn)過(guò)程中存在穿透NAT的問(wèn)題,此問(wèn)題存在較長(zhǎng)時(shí)間,后來(lái)因?yàn)榫W(wǎng)絡(luò)地址不夠而產(chǎn)生了P2P技術(shù),伴隨著P2P技術(shù)的出現(xiàn),利用UDP實(shí)現(xiàn)P2P網(wǎng)絡(luò)穿越NAT的即時(shí)通訊技術(shù),而問(wèn)題即被解決。1.2項(xiàng)目介紹1.2.1 基于網(wǎng)絡(luò)的虛擬實(shí)驗(yàn)平臺(tái)計(jì)算機(jī)技術(shù)、大規(guī)模集成電路技術(shù)和通訊技術(shù)的飛速發(fā)展,為虛擬實(shí)驗(yàn)的
11、發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。虛擬實(shí)驗(yàn)就是在通用計(jì)算機(jī)上加載相應(yīng)的軟件或硬件,使得使用者在操作這臺(tái)計(jì)算機(jī)時(shí),就像是在操作一臺(tái)專(zhuān)用的傳統(tǒng)試驗(yàn)設(shè)備一樣。在虛擬實(shí)驗(yàn)系統(tǒng)中,軟件是整個(gè)系統(tǒng)的關(guān)鍵,任何使用者都可以通過(guò)軟件的相關(guān)設(shè)置來(lái)達(dá)到要實(shí)現(xiàn)實(shí)驗(yàn)的效果。虛擬實(shí)驗(yàn)就是利用外部輸入(如鼠標(biāo)的點(diǎn)擊、拖動(dòng)和鍵盤(pán)的敲擊等),將計(jì)算機(jī)上虛擬的各種儀器,按實(shí)驗(yàn)要求、過(guò)程,組裝成一個(gè)完整的實(shí)驗(yàn)環(huán)境,同時(shí)在這個(gè)環(huán)境中完成實(shí)驗(yàn)操作,包括實(shí)驗(yàn)器材的添加、實(shí)驗(yàn)條件的改變、數(shù)據(jù)采集以及實(shí)驗(yàn)結(jié)果的模擬、分析。它包含了虛擬仿真技術(shù)、計(jì)算機(jī)技術(shù)、實(shí)驗(yàn)技術(shù)、網(wǎng)絡(luò)技術(shù)與專(zhuān)業(yè)等多方面理論知識(shí)。1.2.2 遠(yuǎn)程指導(dǎo)模塊遠(yuǎn)程指導(dǎo)模塊是基于網(wǎng)絡(luò)的虛擬實(shí)
12、驗(yàn)平臺(tái)的一個(gè)通信模塊,是基于Windows Socket編程,使用Client/Server(客戶(hù)端/服務(wù)器)結(jié)構(gòu)來(lái)實(shí)現(xiàn)模塊的功能,以VC為開(kāi)發(fā)環(huán)境,同時(shí)以HOOK技術(shù)和多線(xiàn)程技術(shù)作為基礎(chǔ),再利用API相關(guān)函數(shù)來(lái)實(shí)現(xiàn)指導(dǎo)端和被指導(dǎo)端的互動(dòng)。 1.3 項(xiàng)目要求1.3.1 功能要求完成遠(yuǎn)程指導(dǎo)的基本功能,指導(dǎo)端和被指導(dǎo)端能夠進(jìn)行P2P網(wǎng)絡(luò)通信,指導(dǎo)端能夠控制被指導(dǎo)端的鼠標(biāo)和鍵盤(pán),并且能夠存儲(chǔ)相關(guān)信息,還能夠?qū)κ髽?biāo)進(jìn)行動(dòng)態(tài)控制和指導(dǎo)鍵盤(pán)的輸入。1.3.2 Client/Server(客戶(hù)端/服務(wù)器)結(jié)構(gòu)工作過(guò)程Client/Server(客戶(hù)端/服務(wù)器)結(jié)構(gòu),通過(guò)將任務(wù)合理分配到Client 端和S
13、erver 端,降低了系統(tǒng)的通訊開(kāi)銷(xiāo),可以充分利用兩端硬件環(huán)境的優(yōu)勢(shì),在TCP/IP網(wǎng)絡(luò)應(yīng)用中,通信的兩個(gè)進(jìn)程間相互作用的主要模式是客戶(hù)機(jī)/服務(wù)器模式(client/server),即客戶(hù)向服務(wù)器提出請(qǐng)求,服務(wù)器接收到請(qǐng)求后,提供相應(yīng)的服務(wù)??蛻?hù)機(jī)/服務(wù)器模式的建立基于以下兩點(diǎn):首先,建立網(wǎng)絡(luò)的起因是網(wǎng)絡(luò)中軟硬件資源、運(yùn)算能力和信息不均等,需要共享,從而造就擁有眾多資源的主機(jī)提供服務(wù),資源較少的客戶(hù)請(qǐng)求服務(wù)這一非對(duì)等作用。其次,網(wǎng)絡(luò)之間進(jìn)程通信完全是異步的,相互通信的進(jìn)程間既不存在父子關(guān)系,又不共享內(nèi)存緩沖區(qū),因此需要一種機(jī)制為希望通信的進(jìn)程間建立聯(lián)系,為二者的數(shù)據(jù)交換提供同步,這就是基于客戶(hù)
14、機(jī)/服務(wù)器模式的TCP/IP:客戶(hù)機(jī)/服務(wù)器模式在操作過(guò)程中采取的是主動(dòng)請(qǐng)求的方式。首先服務(wù)器方要先啟動(dòng),并根據(jù)請(qǐng)求提供相應(yīng)的服務(wù):打開(kāi)一個(gè)通信通道并告知本地主機(jī),它愿意在某一地址和端口上接收客戶(hù)請(qǐng)求。等待客戶(hù)請(qǐng)求到達(dá)該端口。接收到重復(fù)服務(wù)請(qǐng)求,處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。接收到并發(fā)服務(wù)請(qǐng)求,要激活一個(gè)新的進(jìn)程(或線(xiàn)程)來(lái)處理這個(gè)客戶(hù)請(qǐng)求。新進(jìn)程(或線(xiàn)程) 處理此客戶(hù)請(qǐng)求,并不需要對(duì)其它請(qǐng)求做出應(yīng)答。服務(wù)完成后,關(guān)閉此新進(jìn)程與客戶(hù)的通信鏈路,并終止。返回第二步,等待另一客戶(hù)請(qǐng)求,關(guān)閉服務(wù)器??蛻?hù)方:打開(kāi)一個(gè)通信通道,并連接到服務(wù)器所在主機(jī)的特定端口。向服務(wù)器發(fā)送服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)
15、提出請(qǐng)求。請(qǐng)求結(jié)束后關(guān)閉通信通道并終止。2網(wǎng)絡(luò)基礎(chǔ)知識(shí)簡(jiǎn)介2.1 OSI與TCP/IP參考模型的對(duì)應(yīng)關(guān)系2.1.1 OSI參考模型國(guó)際標(biāo)準(zhǔn)化組織(ISO)開(kāi)發(fā)了開(kāi)放式系統(tǒng)互聯(lián)(OSI)參考模型,以促進(jìn)計(jì)算機(jī)系統(tǒng)的開(kāi)放互聯(lián)。開(kāi)放式互聯(lián)就是可在多個(gè)廠(chǎng)家的環(huán)境中支持互聯(lián)。該模型為計(jì)算機(jī)間開(kāi)放式通信所需要定義的功能層次建立了全球標(biāo)準(zhǔn)。OSI模型將通信會(huì)話(huà)需要的各種進(jìn)程劃分成7個(gè)相對(duì)獨(dú)立的功能層次,這些層次的組織是以在一個(gè)通信會(huì)話(huà)中事件發(fā)生的自然順序?yàn)榛A(chǔ)的。表1描述了OSI, 1-3層提供了網(wǎng)絡(luò)訪(fǎng)問(wèn),4-7層用于支持端端通信。1、物理層是OSI模型的最低層,它建立在物理通信介質(zhì)的基礎(chǔ)上,規(guī)定了機(jī)械的、
16、電氣的功能;該層負(fù)責(zé)建立、保持和拆除物理鏈路;規(guī)定如何在此鏈路上傳送原始比特流;比特如何編碼,使用的電平,極性,連接插頭插座的插腳如何分配等。所以在物理層數(shù)據(jù)的傳送單位是比特(bit)。2、數(shù)據(jù)鏈路層它把相鄰兩個(gè)節(jié)點(diǎn)間不可靠的物理鏈路變成可靠的無(wú)差錯(cuò)的邏輯鏈路,包括把原始比特流分幀(frame)、順序、排序、設(shè)置檢錯(cuò)、確認(rèn)、重發(fā)、流控等功能;數(shù)據(jù)鏈路層傳動(dòng)信息的單位是frame,每幀(frame)包括一定數(shù)量的數(shù)據(jù)和一些必要的控制信息,在每幀(frame)的控制信息中,包括同步信息、地址信息、流量信息等;同物理層相似,數(shù)據(jù)鏈路層負(fù)責(zé)建立、維護(hù)和釋放數(shù)據(jù)鏈路。3、網(wǎng)絡(luò)層,它連接網(wǎng)絡(luò)中任何兩個(gè)計(jì)算
17、機(jī)點(diǎn),從一個(gè)節(jié)點(diǎn)上接收數(shù)據(jù),正確的傳送到另一個(gè)節(jié)點(diǎn);在網(wǎng)絡(luò)層,傳送的信息單位是分組或包(packet)。網(wǎng)絡(luò)層的主要任務(wù)是要選擇合適的路由和交換節(jié)點(diǎn),透明地向目的站交付發(fā)送站所發(fā)的分組或包,這里的透明表示收發(fā)兩端好像是直接連通的,另外網(wǎng)絡(luò)層還要解決網(wǎng)絡(luò)互連、擁擠控制等問(wèn)題。上述三層組成了所謂的通信子網(wǎng),用戶(hù)計(jì)算機(jī)連接到此子網(wǎng)上。通信子網(wǎng)負(fù)責(zé)把一個(gè)地方的數(shù)據(jù)可靠地傳送到另一個(gè)地方,但并未實(shí)現(xiàn)兩個(gè)地方主機(jī)上進(jìn)行進(jìn)程之間的通信,通信子網(wǎng)的主要功能是面向通信的。4、傳輸層上真正地實(shí)現(xiàn)了端對(duì)端通信,把數(shù)據(jù)可靠地從一方的用戶(hù)進(jìn)程或程序送到另一方的用戶(hù)進(jìn)程或程序。這一層的控制通常由通信兩端的計(jì)算機(jī)完成。中間
18、節(jié)點(diǎn)一般不提供這一層的服務(wù),這一層的通信與通信子網(wǎng)無(wú)關(guān)。從這一層開(kāi)始的以上各層全部是針對(duì)通信的最終的源端目的端計(jì)算機(jī)的進(jìn)程之間的。傳輸層傳送的信息單位是報(bào)文(message)。傳輸層向上一層提供一個(gè)可靠的端一端服務(wù),使上一層看不見(jiàn)下面幾層的通信細(xì)節(jié)。正因?yàn)槿绱耍瑐鬏攲映蔀榫W(wǎng)絡(luò)體系結(jié)構(gòu)中關(guān)鍵的一層,對(duì)于傳輸層的功能,主要在主機(jī)內(nèi)實(shí)現(xiàn)。而對(duì)于物理層、數(shù)據(jù)鏈路層以及網(wǎng)絡(luò)層的功能均能在報(bào)文接口機(jī)中實(shí)現(xiàn)。對(duì)于傳輸層之上的各個(gè)層次的功能通常在主機(jī)中實(shí)現(xiàn)。5、會(huì)話(huà)層又稱(chēng)對(duì)話(huà)層會(huì)話(huà)層允許兩個(gè)計(jì)算機(jī)上的用戶(hù)進(jìn)程建立對(duì)話(huà)連接,雙方相互確認(rèn)身份,協(xié)商對(duì)話(huà)連接的細(xì)節(jié);它可管理對(duì)話(huà)是雙向同時(shí)進(jìn)行的,還是任何時(shí)刻只能一個(gè)
19、方向進(jìn)行。在后一種情況下,對(duì)話(huà)層控制哪一方有權(quán)發(fā)送數(shù)據(jù);對(duì)話(huà)層還提供同步機(jī)制,在數(shù)據(jù)流中插入同步點(diǎn)機(jī)制,在每次網(wǎng)絡(luò)出現(xiàn)故障后可以?xún)H重傳最近一個(gè)同步點(diǎn)以后的數(shù)據(jù),而不必從頭開(kāi)始。以上兩層為兩個(gè)計(jì)算機(jī)上的用戶(hù)進(jìn)程或程序之間提供了正確傳送數(shù)據(jù)的手段。6、表示層主要解決用戶(hù)信息的語(yǔ)法表示問(wèn)題。表示層將數(shù)據(jù)從適合于某一系統(tǒng)的語(yǔ)法轉(zhuǎn)變?yōu)檫m合于OSI系統(tǒng)內(nèi)部使用的語(yǔ)法。具體地講,表示層對(duì)傳送的用戶(hù)數(shù)據(jù)進(jìn)行翻譯、編碼和變換,使得不同類(lèi)型的機(jī)器對(duì)數(shù)據(jù)信息的不同表示方法可以相互理解。7、應(yīng)用層主要處理資源可用性和安全問(wèn)題,它包含了大量人們普遍需要的協(xié)議,如FTP、TELNET、HTTP、SMTP等。最近幾年,應(yīng)用
20、層協(xié)議發(fā)展很快,出現(xiàn)了很多新的應(yīng)用,如ICQ、Multimedia stream等。2.1.2 TCP/IP參考模型與OSI參考模型不同,TCP/IP模(表2)更側(cè)重于互聯(lián)設(shè)備間的數(shù)據(jù)傳送,而不是嚴(yán)格的功能層次劃分。它通過(guò)解釋功能層次分布的重要性來(lái)做到這點(diǎn),但仍為設(shè)計(jì)者具體實(shí)現(xiàn)協(xié)議留下很大的余地。因此,OSI參考模型在解釋互聯(lián)網(wǎng)絡(luò)通信機(jī)制比較適合,但TCP/IP成為了互聯(lián)網(wǎng)絡(luò)協(xié)議的市場(chǎng)標(biāo)準(zhǔn)。TCP/IP老-模型是在它所解釋的協(xié)議出現(xiàn)很久以后才發(fā)展起來(lái)的,更重要的是,在于它更強(qiáng)調(diào)功能分布而不是嚴(yán)格的功能層次的劃分,因此它比OSI模型更靈活。1 應(yīng)用層 應(yīng)用層包括SMTP, FTP, HTTP,
21、NFS, NIS, LPD, Telnet f II Remote Login應(yīng)用層包括一些服務(wù),這些服務(wù)在OSI中由獨(dú)立的三層實(shí)現(xiàn)。這些服務(wù)是和用戶(hù)相關(guān)的認(rèn)證、數(shù)據(jù)處理以及壓縮。包括電子郵件、瀏覽器、Telnet以及其他的Internet應(yīng)用。2傳輸層 傳輸層包括TCP ( Transport Control Protocol,傳輸控制協(xié)議)和UDP (User Datagram Protocol,用戶(hù)數(shù)據(jù)報(bào)協(xié)議)。UDP幾乎不進(jìn)行檢查,而TCP提供傳輸保證。與OSI中傳輸層不一樣,TCP不保證報(bào)文的準(zhǔn)確傳輸。TCP為兩臺(tái)主機(jī)提供高可靠性的數(shù)據(jù)通信。而另一方面,UDP則為應(yīng)用層提供一種非常簡(jiǎn)
22、單的服務(wù),它只是把稱(chēng)作數(shù)據(jù)報(bào)的分組從一臺(tái)主機(jī)發(fā)送到另一臺(tái)主機(jī),但并不保證該數(shù)據(jù)報(bào)能到達(dá)另一端。任何必需的可靠性必須由應(yīng)用層來(lái)提供。 3網(wǎng)絡(luò)層 TCP/IP協(xié)議族中,網(wǎng)絡(luò)層由以下協(xié)議組成:ICMP (Internt聯(lián)網(wǎng)托制報(bào)文協(xié)議)、IP(網(wǎng)際協(xié)議)、IGMP (Internet組管理協(xié)議)、RIP, OSPF和路由的EGP網(wǎng)絡(luò)層處理報(bào)文的路由管理。 4鏈路層 鏈路層包括ARP和RARP,負(fù)責(zé)報(bào)文傳輸。鏈路層管理網(wǎng)絡(luò)的連接并提供網(wǎng)絡(luò)上的報(bào)文輸入/輸出。表1 OSI模型0 SI參考模型層次描述OSI層次號(hào)應(yīng)用層7表示層6會(huì)話(huà)層5傳輸層4網(wǎng)絡(luò)層3數(shù)據(jù)鏈路層2物理層1 表2 TCP/IP模型TCP/I
23、P參考模型層次描述TCP/IP層次號(hào)應(yīng)用層4傳輸層3網(wǎng)絡(luò)層2數(shù)據(jù)鏈路層1 2.2 Windows Socket編程原理及操作步驟Windows Sockets是Microsoft Windows的網(wǎng)絡(luò)程序設(shè)計(jì)接口,它是從Berkeley Sockets擴(kuò)展而來(lái)的,以動(dòng)態(tài)鏈接庫(kù)的形式提供給我們使用。Windows Sockets在繼承了Berkeley Sockets主要特征的基礎(chǔ)上,又對(duì)它進(jìn)行了重要擴(kuò)充。這些擴(kuò)充主要是提供了一些異步函數(shù),并增加了符合Windows消息驅(qū)動(dòng)特性的網(wǎng)絡(luò)事件異步選擇機(jī)制。Windows Sockets 1.1和Berkeley Sockets都是基于TCP/IP協(xié)議
24、的;Windows Sockets 2從Windows Sockets 1.1發(fā)展而來(lái),與協(xié)議無(wú)關(guān)并向下兼容,可以使用任何底層傳輸協(xié)議提供的通信能力,來(lái)為上層應(yīng)用程序完成網(wǎng)絡(luò)數(shù)據(jù)通訊,而不關(guān)心底層網(wǎng)絡(luò)鏈路的通訊情況,真正實(shí)現(xiàn)了底層網(wǎng)絡(luò)通訊對(duì)應(yīng)用程序的透明。流式套接字(SOCK_STREAM)提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù),數(shù)據(jù)無(wú)差錯(cuò)、無(wú)重復(fù)的發(fā)送,且按發(fā)送順序接收。數(shù)據(jù)報(bào)式套接字(SOCK_DGRAM)提供無(wú)連接服務(wù)。數(shù)據(jù)包以“獨(dú)立包”形式發(fā)送,不提供無(wú)錯(cuò)保證,數(shù)據(jù)可能丟失或重復(fù),并且接收順序混亂。原始套接字(SOCK_RAW)?;赥CP(面向連接)的socket編程:服務(wù)器端程序:1、創(chuàng)
25、建套接字(socket)。2、將套接字綁定到一個(gè)本地地址和端口上(bind)。3、將套接字設(shè)為監(jiān)聽(tīng)模式,準(zhǔn)備接收客戶(hù)請(qǐng)求(listen)。4、等待客戶(hù)請(qǐng)求到來(lái);當(dāng)請(qǐng)求到來(lái)后,接受連接請(qǐng)求,返回一個(gè)新的對(duì)應(yīng)于此次連接的套接字(accept)。5、用返回的套接字和客戶(hù)端進(jìn)行通信(send/recv)。6、返回,等待另一客戶(hù)請(qǐng)求。7、關(guān)閉套接字。客戶(hù)端程序:1、創(chuàng)建套接字(socket)。2、向服務(wù)器發(fā)出連接請(qǐng)求(connect)。3、和服務(wù)器端進(jìn)行通信(send/recv)。4、關(guān)閉套接字?;赨DP(面向無(wú)連接)的socket編程:服務(wù)器端(接收端)程序:1、創(chuàng)建套接字(socket)。2、將套
26、接字綁定到一個(gè)本地地址和端口上(bind)。3、等待接收數(shù)據(jù)(recvfrom)。4、關(guān)閉套接字??蛻?hù)端(發(fā)送端)程序:1、創(chuàng)建套接字(socket)。2、向服務(wù)器發(fā)送數(shù)據(jù)(send to)。3、關(guān)閉套接字。相關(guān)函數(shù)說(shuō)明;int bind( SOCKET s, const struct sockaddr FAR *name, int namelen ); 這個(gè)函數(shù)接收三個(gè)參數(shù)。第一個(gè)參數(shù)s指定要綁定的套接字,第二個(gè)參數(shù)指定了該套接字的本地地址信息,是指向sockaddr結(jié)構(gòu)的指針變量,由于該地址結(jié)構(gòu)是為所有的地址家族準(zhǔn)備的,這個(gè)結(jié)構(gòu)可能(通常會(huì))隨所使用的網(wǎng)絡(luò)協(xié)議不同而不同,所以,要用第三個(gè)參
27、數(shù)指定該地址結(jié)構(gòu)的長(zhǎng)度。 sockaddr結(jié)構(gòu)定義如下: struct sockaddr u_short sa_family; char sa_data14; ; sockaddr的第一個(gè)字段sa_family指定該地址家族,在這里必須設(shè)為AF_INET。sa_data僅僅是表示要求一塊內(nèi)存分配區(qū),起到占位的作用,該區(qū)域中指定與協(xié)議相關(guān)的具體地址信息。由于實(shí)際要求的只是內(nèi)存區(qū),所以對(duì)于不同的協(xié)議家族,用不同的結(jié)構(gòu)來(lái)替換sockaddr。除了sa_family外,sockaddr是按網(wǎng)絡(luò)字節(jié)順序表示的。在TCP/IP中,我們可以用sockaddr_in結(jié)構(gòu)替換sockaddr,以方便我們填寫(xiě)地址
28、信息。sockaddr_in的定義如下: struct sockaddr_in short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero8; ; 其中,sin_family表示地址族,對(duì)于IP地址,sin_family成員將一直是AF_INET。成員sin_port指定的是將要分配給套接字的端口。成員sin_addr給出的是套接字的主機(jī)IP地址。而成員sin_zero只是一個(gè)填充數(shù),以使sockaddr_in結(jié)構(gòu)和sockaddr結(jié)構(gòu)的長(zhǎng)度一樣。如果這個(gè)函數(shù)調(diào)用成功
29、,它將返回0。如果調(diào)用失敗,這個(gè)函數(shù)就會(huì)返回一個(gè)SOCKET_ERROR,錯(cuò)誤信息可以通過(guò)WSAGetLastError函數(shù)返回。 將IP地址指定為INADDR_ANY,允許套接字向任何分配給本地機(jī)器的IP地址發(fā)送或接收數(shù)據(jù)。多數(shù)情況下,每個(gè)機(jī)器只有一個(gè)IP地址,但有的機(jī)器可能會(huì)有多個(gè)網(wǎng)卡,每個(gè)網(wǎng)卡都可以有自己的IP地址,用INADDR_ANY可以簡(jiǎn)化應(yīng)用程序的編寫(xiě)。將地址指定為INADDR_ANY,允許一個(gè)獨(dú)立應(yīng)用接受發(fā)自多個(gè)接口的回應(yīng)。如果我們只想讓套接字使用多個(gè)IP中的一個(gè)地址,就必須指定實(shí)際地址,要做到這一點(diǎn),可以用inet_addr()函數(shù),這個(gè)函數(shù)需要一個(gè)字符串作為其參數(shù),該字符串
30、指定了以點(diǎn)分十進(jìn)制格式表示的IP地址(如6)。而且inet_addr()函數(shù)會(huì)返回一個(gè)適合分配給S_addr的u_long類(lèi)型的數(shù)值。inet_ntoa()函數(shù)會(huì)完成相反的轉(zhuǎn)換,它接受一個(gè)in_addr結(jié)構(gòu)體類(lèi)型的參數(shù)并返回一個(gè)以點(diǎn)分十進(jìn)制格式表示的IP地址字符串。2.3 P2P網(wǎng)絡(luò)介紹P2P技術(shù)源于局域網(wǎng)共享,其目標(biāo)是改變?nèi)藗兺ㄟ^(guò)服務(wù)器中轉(zhuǎn)交換文件的傳統(tǒng)方式,達(dá)到自由交換資源的目的。IBM為P2P下了如下定義:系統(tǒng)由若干互聯(lián)協(xié)作的計(jì)算機(jī)構(gòu)成,且至少具有如下特征之一:系統(tǒng)依存于邊緣化(非中央式服務(wù)器)設(shè)備的主動(dòng)協(xié)作,每個(gè)成員直接從其他成員而不是從服務(wù)器的參與中受益;系統(tǒng)中
31、成員同時(shí)扮演服務(wù)器與客戶(hù)端的角色;系統(tǒng)應(yīng)用的用戶(hù)能夠意識(shí)到彼此的存在,構(gòu)成一個(gè)虛擬或?qū)嶋H的群體。P2P網(wǎng)絡(luò)是互聯(lián)網(wǎng)整體架構(gòu)的基礎(chǔ),互聯(lián)網(wǎng)中最基本的 TCP/IP協(xié)議并沒(méi)有客戶(hù)端和服務(wù)器的概念,在通訊過(guò)程中,所有的設(shè)備都是平等的一端。P2P 技術(shù)改變了“內(nèi)容”所在的位置,使其正在從“中心”走向“邊緣”,也就是說(shuō)不再如CS模式將內(nèi)容存于主要的服務(wù)器上,而是存在所有用戶(hù)的 PC 機(jī)上。廣義的P2P 網(wǎng)絡(luò)將 P2P網(wǎng)絡(luò)劃分為純分散式 P2P網(wǎng)絡(luò)(如gnutella模型)、超級(jí)結(jié)點(diǎn)式網(wǎng)絡(luò)和混合式 P2P網(wǎng)絡(luò)等大類(lèi)。3相關(guān)函數(shù)分析與代碼實(shí)現(xiàn)3.1多線(xiàn)程3.1.1 進(jìn)程介紹進(jìn)程:通常被定義為一個(gè)正在運(yùn)行的程
32、序的實(shí)例,是一個(gè)程序在其自身的地址空間中的一次執(zhí)行活動(dòng)。進(jìn)程是資源申請(qǐng)、調(diào)度和獨(dú)立運(yùn)行的單位,因此,它使用系統(tǒng)中的運(yùn)行資源;而程序不能申請(qǐng)系統(tǒng)資源,不能被系統(tǒng)調(diào)度,也不能作為獨(dú)立運(yùn)行的單位,因此,它不占用系統(tǒng)的運(yùn)行資源進(jìn)程由兩個(gè)部分組成:1、操作系統(tǒng)用來(lái)管理進(jìn)程的內(nèi)核對(duì)象。內(nèi)核對(duì)象也是系統(tǒng)用來(lái)存放關(guān)于進(jìn)程的統(tǒng)計(jì)信息的地方。2、地址空間。它包含所有可執(zhí)行模塊或DLL模塊的代碼和數(shù)據(jù)。它還包含動(dòng)態(tài)內(nèi)存分配的空間。如線(xiàn)程堆棧和堆分配空間。3.1.2 線(xiàn)程介紹線(xiàn)程由兩個(gè)部分組成:1、線(xiàn)程的內(nèi)核對(duì)象,操作系統(tǒng)用它來(lái)對(duì)線(xiàn)程實(shí)施管理。內(nèi)核對(duì)象也是系統(tǒng)用來(lái)存放線(xiàn)程統(tǒng)計(jì)信息的地方。2、線(xiàn)程堆棧,它用于維護(hù)線(xiàn)程在
33、執(zhí)行代碼時(shí)需要的所有參數(shù)和局部變量。當(dāng)創(chuàng)建線(xiàn)程時(shí),系統(tǒng)創(chuàng)建一個(gè)線(xiàn)程內(nèi)核對(duì)象。該線(xiàn)程內(nèi)核對(duì)象不是線(xiàn)程本身,而是操作系統(tǒng)用來(lái)管理線(xiàn)程的較小的數(shù)據(jù)結(jié)構(gòu)??梢詫⒕€(xiàn)程內(nèi)核對(duì)象視為由關(guān)于線(xiàn)程的統(tǒng)計(jì)信息組成的一個(gè)小型數(shù)據(jù)結(jié)構(gòu)。 線(xiàn)程總是在某個(gè)進(jìn)程環(huán)境中創(chuàng)建。系統(tǒng)從進(jìn)程的地址空間中分配內(nèi)存,供線(xiàn)程的堆棧使用。新線(xiàn)程運(yùn)行的進(jìn)程環(huán)境與創(chuàng)建線(xiàn)程的環(huán)境相同。因此,新線(xiàn)程可以訪(fǎng)問(wèn)進(jìn)程的內(nèi)核對(duì)象的所有句柄、進(jìn)程中的所有內(nèi)存和在這個(gè)相同的進(jìn)程中的所有其他線(xiàn)程的堆棧。這使得單個(gè)進(jìn)程中的多個(gè)線(xiàn)程確實(shí)能夠非常容易地互相通信。 3.1.3 進(jìn)程與線(xiàn)程的關(guān)系進(jìn)程是不活潑的。進(jìn)程從來(lái)不執(zhí)行任何東西,它只是線(xiàn)程的容器。若要使進(jìn)程某操作,
34、它必須擁有一個(gè)在它的環(huán)境中運(yùn)行的線(xiàn)程,此線(xiàn)程負(fù)責(zé)執(zhí)行包含在進(jìn)程的地址空間中的代碼。單個(gè)進(jìn)程可能包含若干個(gè)線(xiàn)程,這些線(xiàn)程都“同時(shí)” 執(zhí)行進(jìn)程地址空間中的代碼。每個(gè)進(jìn)程至少擁有一個(gè)線(xiàn)程,來(lái)執(zhí)行進(jìn)程的地址空間中的代碼。當(dāng)創(chuàng)建一個(gè)進(jìn)程時(shí),操作系統(tǒng)會(huì)自動(dòng)創(chuàng)建這個(gè)進(jìn)程的第一個(gè)線(xiàn)程,稱(chēng)為主線(xiàn)程。此后,該線(xiàn)程可以創(chuàng)建其他的線(xiàn)程。3.1.4多線(xiàn)程實(shí)現(xiàn)線(xiàn)程只有一個(gè)內(nèi)核對(duì)象和一個(gè)堆棧,保留的記錄很少,因此所需要的內(nèi)存也很少。因?yàn)榫€(xiàn)程需要的開(kāi)銷(xiāo)比進(jìn)程少,因此在編程中經(jīng)常采用多線(xiàn)程來(lái)解決編程問(wèn)題,而盡量避免創(chuàng)建新的進(jìn)程。3.2 Hook技術(shù)3.2.1 Hook函數(shù)簡(jiǎn)介及類(lèi)型Hook(鉤子)是WINDOWS提供的一種消息
35、處理機(jī)制,是指在程序正常運(yùn)行中接受信息之前預(yù)先啟動(dòng)的函數(shù),用來(lái)檢查和修改傳給該程序的信息,(鉤子)實(shí)際上是一個(gè)處理消息的程序段,通過(guò)系統(tǒng)調(diào)用,把它掛入系統(tǒng)。每當(dāng)特定的消息發(fā)出,在沒(méi)有到達(dá)目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數(shù)先得到控制權(quán)。這時(shí)鉤子函數(shù)即可以加工處理(改變)該消息,也可以不作處理而繼續(xù)傳遞該消息,還可以強(qiáng)制結(jié)束消息的傳遞。安裝鉤子函數(shù)將會(huì)影響系統(tǒng)的性能。監(jiān)測(cè)“系統(tǒng)范圍事件”的系統(tǒng)鉤子特別明顯。因?yàn)橄到y(tǒng)在處理所有的相關(guān)事件時(shí)都將調(diào)用您的鉤子函數(shù),這樣系統(tǒng)將會(huì)明顯的減慢。HOOK鏈WINDOWS提供了14種不同類(lèi)型的HOOKS,不同的HOOK可以處理不同的消息。例如:WH_
36、MOUSE HOOK用來(lái)監(jiān)視鼠標(biāo)消息。WINDOWS為這幾種HOOKS維護(hù)著各自的HOOK鏈表。HOOK鏈表是一串由應(yīng)用程序定義的回調(diào)函數(shù)(CALLBACK Function)隊(duì)列,當(dāng)某種類(lèi)型的消息發(fā)生時(shí),WINDOWS向此種類(lèi)型的HOOK鏈的第一個(gè)函數(shù)(HOOK鏈的頂部)發(fā)送該消息,在第一函數(shù)處理完該消息后由該函數(shù)向鏈表中的下一個(gè)函數(shù)傳遞消息,依次向下。如果鏈中某個(gè)函數(shù)沒(méi)有向下傳送該消息,那么鏈表中后面的函數(shù)將得不到此消息。(對(duì)于某些類(lèi)型的HOOK,不管HOOK鏈中的函數(shù)是否向下傳遞消息,與此類(lèi)型HOOK聯(lián)系的所有HOOK函數(shù)都會(huì)收到系統(tǒng)發(fā)送的消息)一些Hook子過(guò)程可以只監(jiān)視消息,或者修改
37、消息,或者停止消息的前進(jìn),避免這些消息傳遞到下一個(gè)Hook子過(guò)程或者目的窗口。最近安裝的鉤子放在鏈的開(kāi)始,而最早安裝的鉤子放在最后,也就是后加入的先獲得控制權(quán)。HOOK的作用范圍兩種類(lèi)型:局部和遠(yuǎn)程 一、局部鉤子僅鉤掛您自己進(jìn)程的事件。 二、遠(yuǎn)程的鉤子還可以將鉤掛其它進(jìn)程發(fā)生的事件。遠(yuǎn)程的鉤子又有兩種: 1、基于線(xiàn)程的 它將捕獲其它進(jìn)程中某一特定線(xiàn)程的事件。簡(jiǎn)言之,就是可以用來(lái)觀(guān)察其它進(jìn)程中的某一特定線(xiàn)程將發(fā)生的事件。 2、系統(tǒng)范圍的 將捕捉系統(tǒng)中所有進(jìn)程將發(fā)生的事件消息。 HOOK類(lèi)型Windows共有14種HOOKS,每一種類(lèi)型的Hook可以使應(yīng)用程序能夠監(jiān)視不同類(lèi)型的系統(tǒng)消息處理機(jī)制。下
38、面描述所有可以利用的Hook類(lèi)型的發(fā)生時(shí)機(jī)。(這些常數(shù)值均可以API瀏覽器里查到)1、WH_CALLWNDPROC和WH_CALLWNDPROCRET HooksWH_CALLWNDPROC和WH_CALLWNDPROCRET Hooks使你可以監(jiān)視發(fā)送到窗口過(guò)程的消息。系統(tǒng)在消息發(fā)送到接收窗口過(guò)程之前調(diào)用WH_CALLWNDPROC Hook子過(guò)程,并且在窗口過(guò)程處理完消息之后調(diào)用WH_CALLWNDPROCRET Hook子過(guò)程。WH_CALLWNDPROCRET Hook傳遞指針到CWPRETSTRUCT結(jié)構(gòu),再傳遞到Hook子過(guò)程。CWPRETSTRUCT結(jié)構(gòu)包含了來(lái)自處理消息的窗口過(guò)
39、程的返回值,同樣也包括了與這個(gè)消息關(guān)聯(lián)的消息參數(shù)。2、WH_CBT Hook在以下事件之前,系統(tǒng)都會(huì)調(diào)用WH_CBT Hook子過(guò)程,這些事件包括:1. 激活,建立,銷(xiāo)毀,最小化,最大化,移動(dòng),改變尺寸等窗口事件;2. 完成系統(tǒng)指令;3. 來(lái)自系統(tǒng)消息隊(duì)列中的移動(dòng)鼠標(biāo),鍵盤(pán)事件;4. 設(shè)置輸入焦點(diǎn)事件;5. 同步系統(tǒng)消息隊(duì)列事件。Hook子過(guò)程的返回值確定系統(tǒng)是否允許或者防止這些操作中的一個(gè)。3、WH_DEBUG Hook在系統(tǒng)調(diào)用系統(tǒng)中與其它Hook關(guān)聯(lián)的Hook子過(guò)程之前,系統(tǒng)會(huì)調(diào)用WH_DEBUG Hook子過(guò)程。你可以使用這個(gè)Hook來(lái)決定是否允許系統(tǒng)調(diào)用與其它Hook關(guān)聯(lián)的Hook子
40、過(guò)程。4、WH_FOREGROUNDIDLE Hook當(dāng)應(yīng)用程序的前臺(tái)線(xiàn)程處于空閑狀態(tài)時(shí),可以使用WH_FOREGROUNDIDLE Hook執(zhí)行低優(yōu)先級(jí)的任務(wù)。當(dāng)應(yīng)用程序的前臺(tái)線(xiàn)程大概要變成空閑狀態(tài)時(shí),系統(tǒng)就會(huì)調(diào)用WH_FOREGROUNDIDLE Hook子過(guò)程。5、WH_GETMESSAGE Hook應(yīng)用程序使用WH_GETMESSAGE Hook來(lái)監(jiān)視從GetMessage or PeekMessage函數(shù)返回的消息。你可以使用WH_GETMESSAGE Hook去監(jiān)視鼠標(biāo)和鍵盤(pán)輸入,以及其它發(fā)送到消息隊(duì)列中的消息。6、WH_JOURNALPLAYBACK HookWH_JOURNAL
41、PLAYBACK Hook使應(yīng)用程序可以插入消息到系統(tǒng)消息隊(duì)列。以使用這個(gè)Hook回放通過(guò)使用WH_JOURNALRECORD Hook記錄下來(lái)的連續(xù)的鼠標(biāo)和鍵盤(pán)事件。WH_JOURNALPLAYBACK Hook已經(jīng)安裝,正常的鼠標(biāo)和鍵盤(pán)事件就是無(wú)效的。WH_JOURNALPLAYBACK Hook是全局Hook,它不能像線(xiàn)程特定Hook一樣使用。WH_JOURNALPLAYBACK Hook返回超時(shí)值,這個(gè)值告訴系統(tǒng)在處理來(lái)自回放Hook當(dāng)前消息之前需要等待多長(zhǎng)時(shí)間(毫秒)。這就使Hook可以控制實(shí)時(shí)事件的回放。WH_JOURNALPLAYBACK是system-wide local ho
42、oks,它們不會(huì)被注射到任何行程地址空間。7、WH_JOURNALRECORD HookWH_JOURNALRECORD Hook用來(lái)監(jiān)視和記錄輸入事件。典型的,可以使用這個(gè)Hook記錄連續(xù)的鼠標(biāo)和鍵盤(pán)事件,然后通過(guò)使用WH_JOURNALPLAYBACK Hook來(lái)回放。WH_JOURNALRECORD Hook是全局Hook,它不能像線(xiàn)程特定Hook一樣使用。WH_JOURNALRECORD是system-wide local hooks,它們不會(huì)被注射到任何行程地址空間。8、WH_KEYBOARD Hook在應(yīng)用程序中,WH_KEYBOARD Hook用來(lái)監(jiān)視WM_KEYDOWN and
43、 WM_KEYUP消息,這些消息通過(guò)GetMessage or PeekMessage function返回??梢允褂眠@個(gè)Hook來(lái)監(jiān)視輸入到消息隊(duì)列中的鍵盤(pán)消息。9、WH_KEYBOARD_LL HookWH_KEYBOARD_LL Hook監(jiān)視輸入到線(xiàn)程消息隊(duì)列中的鍵盤(pán)消息。10、WH_MOUSE HookWH_MOUSE Hook監(jiān)視從GetMessage 或者 PeekMessage 函數(shù)返回的鼠標(biāo)消息。使用這個(gè)Hook監(jiān)視輸入到消息隊(duì)列中的鼠標(biāo)消息。11、WH_MOUSE_LL HookWH_MOUSE_LL Hook監(jiān)視輸入到線(xiàn)程消息隊(duì)列中的鼠標(biāo)消息。12、WH_MSGFILTER
44、 和 WH_SYSMSGFILTER HooksWH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我們可以監(jiān)視菜單,滾動(dòng)條,消息框,對(duì)話(huà)框消息并且發(fā)現(xiàn)用戶(hù)使用ALT+TAB or ALT+ESC 組合鍵切換窗口。WH_MSGFILTER Hook只能監(jiān)視傳遞到菜單,滾動(dòng)條,消息框的消息,以及傳遞到通過(guò)安裝了Hook子過(guò)程的應(yīng)用程序建立的對(duì)話(huà)框的消息。WH_SYSMSGFILTER Hook監(jiān)視所有應(yīng)用程序消息。WH_MSGFILTER 和 WH_SYSMSGFILTER Hooks使我們可以在模式循環(huán)期間過(guò)濾消息,這等價(jià)于在主消息循環(huán)中過(guò)濾消息。通過(guò)調(diào)用CallMsgF
45、ilter function可以直接的調(diào)用WH_MSGFILTER Hook。通過(guò)使用這個(gè)函數(shù),應(yīng)用程序能夠在模式循環(huán)期間使用相同的代碼去過(guò)濾消息,如同在主消息循環(huán)里一樣。13、WH_SHELL Hook外殼應(yīng)用程序可以使用WH_SHELL Hook去接收重要的通知。當(dāng)外殼應(yīng)用程序是激活的并且當(dāng)頂層窗口建立或者銷(xiāo)毀時(shí),系統(tǒng)調(diào)用WH_SHELL Hook子過(guò)程。WH_SHELL 共有種情況:1. 只要有個(gè)top-level、unowned 窗口被產(chǎn)生、起作用、或是被摧毀;2. 當(dāng)Taskbar需要重畫(huà)某個(gè)按鈕;3. 當(dāng)系統(tǒng)需要顯示關(guān)于Taskbar的一個(gè)程序的最小化形式;4. 當(dāng)目前的鍵盤(pán)布局狀
46、態(tài)改變;5. 當(dāng)使用者按Ctrl+Esc去執(zhí)行Task Manager(或相同級(jí)別的程序)。按照慣例,外殼應(yīng)用程序都不接收WH_SHELL消息。所以,在應(yīng)用程序能夠接收WH_SHELL消息之前,應(yīng)用程序必須調(diào)用SystemParametersInfo function注冊(cè)它自己。3.2.2 Hook子過(guò)程處理回調(diào)函數(shù)(HOOK處理子過(guò)程)為了攔截和處理特定的消息,你可以使用SetWindowsHookEx函數(shù)(下面將具體說(shuō)明這些函數(shù)的聲明及各種參數(shù))在該類(lèi)型的HOOK鏈中安裝你自己的處理HOOK的子過(guò)程(回調(diào)函數(shù))。只要您安裝的鉤子的消息事件類(lèi)型發(fā)生,WINDOWS就將調(diào)用鉤子函數(shù)。譬如您安裝
47、的鉤子是WH_MOUSE類(lèi)型,那么只要有一個(gè)鼠標(biāo)事件發(fā)生時(shí),該鉤子函數(shù)就會(huì)被調(diào)用。不管您安裝的是那一類(lèi)型鉤子,鉤子函數(shù)的原型都時(shí)是一樣的,語(yǔ)法如下:public function MyHook(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) as long處理代碼end function其中MyHook可以隨便命名,其它不能變。該函數(shù)必須放在模塊段。參數(shù)說(shuō)明:nCode指定HOOK傳入的信息類(lèi)型。Hook子過(guò)程使用這個(gè)參數(shù)來(lái)確定任務(wù)。這個(gè)參數(shù)的值依賴(lài)于Hook類(lèi)型,每一種Hook都有自己的Hook代碼特征字符集。
48、wParam:短整型參數(shù)。 lParam:長(zhǎng)整型參數(shù)。wParam,iParam的取值隨nCode不同而不同,它代表了某種類(lèi)型的HOOK的某個(gè)特定的動(dòng)作。它們的典型值是包含了關(guān)于發(fā)送或者接收消息的信息。至于以上的幾個(gè)參數(shù)及返回值的具體含義,各種類(lèi)型的鉤子都不相同,所以您必須查詢(xún)WIN32 API 指南來(lái)得到不同類(lèi)型鉤子參數(shù)的詳細(xì)定義以及它們返回值的意義。譬如: WH_CALLWNDPROC nCode 只能是HC_ACTION,它代表有一個(gè)消息發(fā)送給了一個(gè)窗口 wParam 如果非0,代表正被發(fā)送的消息 lParam 指向CWPSTRUCT型結(jié)構(gòu)體變量的指針 return value: 未使用
49、,返回0 WH_MOUSE nCode 為HC_ACTION 或 HC_NOREMOVE wParam 包含鼠標(biāo)的事件消息 lParam 指向MOUSEHOOKSTRUCT型結(jié)構(gòu)體變量的指針 return value: 如果不處理返回0,否則返回非0值3.2.3 Hook的安裝/卸載安裝鉤子使用SetWindowsHookEx函數(shù)(API函數(shù)),指定一個(gè)HOOK類(lèi)型、自己的HOOK過(guò)程是全局還是局部HOOK,同時(shí)給出HOOK過(guò)程的進(jìn)入點(diǎn),就可以輕松的安裝你自己的HOOK過(guò)程。SetWindowsHookEx總是將你的HOOK函數(shù)放置在HOOK鏈的頂端。你可以使用CallNextHookEx函數(shù)
50、將系統(tǒng)消息傳遞給HOOK鏈中的下一個(gè)函數(shù)。注意對(duì)于某些類(lèi)型的HOOK,系統(tǒng)將向該類(lèi)的所有HOOK函數(shù)發(fā)送消息,這時(shí),HOOK函數(shù)中的CallNextHookEx語(yǔ)句將被忽略。全局(遠(yuǎn)程鉤子)HOOK函數(shù)可以攔截系統(tǒng)中所有線(xiàn)程的某個(gè)特定的消息,為了安裝一個(gè)全局HOOK過(guò)程,必須在應(yīng)用程序外建立一個(gè)DLL,并將該HOOK函數(shù)封裝到其中,應(yīng)用程序在安裝全局HOOK過(guò)程時(shí)必須先得到該DLL模塊的句柄。將DLL名傳遞給LoadLibrary 函數(shù),就會(huì)得到該DLL模塊的句柄;得到該句柄 后,使用GetProcAddress函數(shù)可以得到HOOK過(guò)程的地址。最后,使用SetWindowsHookEx將HOO
51、K過(guò)程的首址嵌入相應(yīng)的HOOK鏈中,SetWindowsHookEx傳遞一個(gè)模塊句柄,它為HOOK過(guò)程的進(jìn)入點(diǎn),線(xiàn)程標(biāo)識(shí)符置為0,指出:該HOOK過(guò)程同系統(tǒng)中的所有線(xiàn)程關(guān)聯(lián)。如果是安裝局部HOOK此時(shí)該HOOK函數(shù)可以放置在DLL中,也可以放置在應(yīng)用程序的模塊段。SetWindowHookEx函數(shù)參數(shù)說(shuō)明:idHook:代表是何種Hook(也就是上面講的14種Hook)lpfn:代表處理Hook的過(guò)程所在的Address,這是一個(gè)CallBack Fucnction(也就是上面講的回調(diào)函數(shù)),當(dāng)掛上某個(gè)Hook時(shí),我們便得定義一個(gè)Function來(lái)當(dāng)作某個(gè)信息產(chǎn)生時(shí),來(lái)處理它的Function。因這個(gè)參數(shù)是一個(gè) Fu
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)臺(tái)歷配件行業(yè)市場(chǎng)發(fā)展前景及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2025年度建筑工程抗震設(shè)防設(shè)計(jì)合同
- 2025年度人工智能技術(shù)研發(fā)外聘專(zhuān)家服務(wù)合同
- 跨學(xué)院轉(zhuǎn)專(zhuān)業(yè)申請(qǐng)書(shū)
- 助貸款申請(qǐng)書(shū)
- 班級(jí)文化塑造與育人環(huán)境優(yōu)化方案
- 電子競(jìng)技行業(yè)的社會(huì)影響力研究報(bào)告
- 2024-2025年中國(guó)軟件設(shè)計(jì)行業(yè)發(fā)展趨勢(shì)預(yù)測(cè)及投資戰(zhàn)略咨詢(xún)報(bào)告
- 醫(yī)療電梯采購(gòu)合同范例
- 中國(guó)來(lái)料各種服裝項(xiàng)目投資可行性研究報(bào)告
- GB/Z 30966.71-2024風(fēng)能發(fā)電系統(tǒng)風(fēng)力發(fā)電場(chǎng)監(jiān)控系統(tǒng)通信第71部分:配置描述語(yǔ)言
- 腦梗死的護(hù)理查房
- 2025高考數(shù)學(xué)專(zhuān)項(xiàng)復(fù)習(xí):概率與統(tǒng)計(jì)的綜合應(yīng)用(十八大題型)含答案
- 產(chǎn)后抑郁癥講課課件
- 2024-2030年中國(guó)紫蘇市場(chǎng)深度局勢(shì)分析及未來(lái)5發(fā)展趨勢(shì)報(bào)告
- 銷(xiāo)售人員課件教學(xué)課件
- LED大屏技術(shù)方案(適用于簡(jiǎn)單的項(xiàng)目)
- 2024智慧城市數(shù)據(jù)采集標(biāo)準(zhǔn)規(guī)范
- Lesson 6 What colour is it(教學(xué)設(shè)計(jì))-2023-2024學(xué)年接力版英語(yǔ)三年級(jí)下冊(cè)
- 歷年國(guó)家二級(jí)(Python)機(jī)試真題匯編(含答案)
- 第五單元任務(wù)二《準(zhǔn)備與排練》教學(xué)設(shè)計(jì) 統(tǒng)編版語(yǔ)文九年級(jí)下冊(cè)
評(píng)論
0/150
提交評(píng)論