版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、目 錄1引言11.1課題背景11.2網(wǎng)絡(luò)流量監(jiān)控的引入11.3課程設(shè)計(jì)的目的與任務(wù)12相關(guān)的概念與技術(shù)22.1TCP/IP體系結(jié)構(gòu)22.2原始套接字33網(wǎng)絡(luò)數(shù)據(jù)的采集技術(shù)分析43.1Windows下原始數(shù)據(jù)包捕獲的實(shí)現(xiàn)43.2原始數(shù)據(jù)包捕獲的關(guān)鍵函數(shù)54網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)各模塊的設(shè)計(jì)與實(shí)現(xiàn)64.1總體結(jié)構(gòu)設(shè)計(jì)64.2流程圖設(shè)計(jì)74.3各模塊功能概述與實(shí)現(xiàn)8數(shù)據(jù)包采集中各類的關(guān)系8數(shù)據(jù)包捕獲與分析模塊9流量獲取模塊10數(shù)據(jù)統(tǒng)計(jì)模塊135分析工具測試135.1測試環(huán)境135.2測試步驟135.3測試結(jié)果評(píng)價(jià)136結(jié)束語13參考文獻(xiàn):141 引言1.1 課題背景隨著構(gòu)建網(wǎng)絡(luò)基礎(chǔ)技術(shù)和網(wǎng)絡(luò)應(yīng)用的迅速發(fā)展
2、以及用戶對(duì)網(wǎng)絡(luò)性能要求的提高,使得網(wǎng)絡(luò)管理成為迫切需要解決的問題,有效的網(wǎng)絡(luò)管理能夠保證網(wǎng)絡(luò)的穩(wěn)定運(yùn)行和持續(xù)發(fā)展,更重要的是,隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大和黑客技術(shù)的發(fā)展,入侵和攻擊的案例日益增多,對(duì)穩(wěn)定的網(wǎng)絡(luò)服務(wù)、信息安全、互聯(lián)網(wǎng)秩序都提出了嚴(yán)峻的挑戰(zhàn),網(wǎng)絡(luò)安全管理在整個(gè)網(wǎng)絡(luò)管理系統(tǒng)里扮演起更為重要的角色。1.2 網(wǎng)絡(luò)流量監(jiān)控的引入網(wǎng)絡(luò)安全管理體系中,流量監(jiān)控和統(tǒng)計(jì)分析是整個(gè)管理的基礎(chǔ)。流量檢測主要目的是通過對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行實(shí)時(shí)連續(xù)的采集監(jiān)測網(wǎng)絡(luò)流量,對(duì)獲得的流量數(shù)據(jù)進(jìn)行統(tǒng)計(jì)計(jì)算,從而得到網(wǎng)絡(luò)主要成分的性能指標(biāo)。網(wǎng)絡(luò)管理員根據(jù)流量數(shù)據(jù)就可以對(duì)網(wǎng)絡(luò)主要成分進(jìn)行性能分析管理,發(fā)現(xiàn)性能變化趨勢,并分析出影響網(wǎng)
3、絡(luò)性能的因素及問題所在。此外,在網(wǎng)絡(luò)流量異常的情況下,通過擴(kuò)展的流量檢測報(bào)警系統(tǒng)還可以向管理人員報(bào)警,及時(shí)發(fā)現(xiàn)故障加以處理。在網(wǎng)絡(luò)流量檢測的基礎(chǔ)上,管理員還可對(duì)感興趣的網(wǎng)絡(luò)管理對(duì)象設(shè)置審查值范圍及配置網(wǎng)絡(luò)性能對(duì)象,監(jiān)控實(shí)時(shí)輪詢網(wǎng)絡(luò)獲取定義對(duì)象的當(dāng)前值,若超出審查值的正常預(yù)定值則報(bào)警,協(xié)助管理員發(fā)現(xiàn)網(wǎng)絡(luò)瓶頸,這樣就能實(shí)現(xiàn)一定程度上的故障管理。而網(wǎng)絡(luò)流量檢測本身也涉及到安全管理方面的內(nèi)容。由此可見,對(duì)于一個(gè)有效的網(wǎng)絡(luò)安全管理系統(tǒng)來說,功能的實(shí)現(xiàn)都或多或少的依賴于流量信息的獲取。因此網(wǎng)絡(luò)流量信息的采集可以說是網(wǎng)絡(luò)安全管理系統(tǒng)得以實(shí)現(xiàn)的核心基石。它的應(yīng)用可以在一定程度上檢測到入侵攻擊,可以有效地幫助管
4、理人員進(jìn)行網(wǎng)絡(luò)性能管理,并利用報(bào)警機(jī)制協(xié)助網(wǎng)管人員采取對(duì)應(yīng)的安全策略與防護(hù)措施,從而減少入侵攻擊所造成的損失。1.3 課程設(shè)計(jì)的目的與任務(wù)該網(wǎng)絡(luò)流量監(jiān)控及分析工具主要用途是通過實(shí)時(shí)連續(xù)地采集網(wǎng)絡(luò)數(shù)據(jù)并對(duì)其進(jìn)行統(tǒng)計(jì),得到主要成分性能指標(biāo),結(jié)合網(wǎng)絡(luò)流量的理論,通過統(tǒng)計(jì)出的性能指數(shù)觀察網(wǎng)絡(luò)狀態(tài),分析出網(wǎng)絡(luò)變化趨勢,找出影響網(wǎng)絡(luò)性能的因素。課程設(shè)計(jì)開發(fā)的工具實(shí)現(xiàn)以下功能:(1)采用Winsock編寫原始套接字Socket-Raw對(duì)數(shù)據(jù)包進(jìn)行采集捕獲,并可實(shí)現(xiàn)分類及自定義范圍進(jìn)行捕獲;(2)對(duì)捕獲的數(shù)據(jù)包進(jìn)行一定的解析;(3)訪問操作系統(tǒng)提供的網(wǎng)絡(luò)性能參數(shù)接口,得到網(wǎng)卡總流量、輸入流量和輸出流量;(4)
5、系統(tǒng)提供了多種方式顯示結(jié)果,如曲線圖、列表等;(5)使用IP幫助API獲取網(wǎng)絡(luò)統(tǒng)計(jì)信息;(6)實(shí)現(xiàn)對(duì)部分常見威脅的預(yù)警,可繼續(xù)開發(fā)擴(kuò)展其報(bào)警功能。2 相關(guān)的概念與技術(shù)2.1 TCP/IP體系結(jié)構(gòu)由于TCP/IP比其之前的OSI模型更具體實(shí)現(xiàn),隨著互聯(lián)網(wǎng)的不斷發(fā)展,遵循TCP/IP結(jié)構(gòu)的網(wǎng)絡(luò)不斷普及,因此現(xiàn)在通常采用TCP/IP代表Internet體系結(jié)構(gòu)。TCP/IP的目的是在網(wǎng)絡(luò)標(biāo)準(zhǔn)不同的情況下解決互聯(lián)問題,可以說,網(wǎng)絡(luò)互聯(lián)是TCP/IP的核心。TCP/IP的體系結(jié)構(gòu)如圖1所示。圖1TCP/IP在設(shè)計(jì)時(shí)重點(diǎn)并沒有放在具體通信的實(shí)現(xiàn)上,所以對(duì)最后兩層沒有做出具體規(guī)定,同時(shí)表明它允許不同類型的通
6、信網(wǎng)絡(luò)參與通信。它的四個(gè)層次功能如下。(1)應(yīng)用層,提供常用的應(yīng)用程序及自定義的應(yīng)用程序,數(shù)據(jù)傳輸時(shí)用TCP/IP協(xié)議來進(jìn)行;(2)傳輸層,提供端到端的應(yīng)用程序之間的通信,可以使用傳輸控制協(xié)議TCP(Transmission Control Protocol)或用戶數(shù)據(jù)報(bào)協(xié)議UDP(User Datagram Protocol)協(xié)議,前者提供可靠傳輸,傳送單位是報(bào)文段,后者提供不可靠服務(wù),傳輸單位是數(shù)據(jù)報(bào),即分組。此外,傳輸層另外一個(gè)功能就是區(qū)別應(yīng)用程序;(3)網(wǎng)際層,負(fù)責(zé)計(jì)算機(jī)之間的通信,采用的協(xié)議是IP協(xié)議,數(shù)據(jù)傳送單位是分組,向上提供不可靠的傳輸服務(wù);(4)網(wǎng)絡(luò)接口層,負(fù)責(zé)接收數(shù)據(jù)報(bào),并
7、實(shí)現(xiàn)發(fā)送,或者接收幀,提取IP數(shù)據(jù)報(bào),交給互聯(lián)網(wǎng)層。2.2 原始套接字從用戶的角度來看,標(biāo)準(zhǔn)的流式套接字和數(shù)據(jù)報(bào)套接字這兩類套接字似乎涵蓋了TCP/IP應(yīng)用的全部,因?yàn)榛赥CP/IP的應(yīng)用,從協(xié)議棧的層次(如圖2.2.1所示)上講,在傳輸層的確只可能建立于TCP或UDP協(xié)議之上,而流式套接字和數(shù)據(jù)報(bào)套接字又分別對(duì)應(yīng)于TCP和UDP,所以幾乎所有的應(yīng)用都可以用這兩類套接字實(shí)現(xiàn)。但是,當(dāng)需要自定義數(shù)據(jù)包發(fā)送時(shí)或者需要分析所有經(jīng)過網(wǎng)絡(luò)的數(shù)據(jù)包的時(shí)候,就必須面臨一種不同于前兩者的方式Raw Socket,即原始套接字,程序員可以用它來發(fā)送和接收 IP 層以上的原始數(shù)據(jù)包, 如 ICMP,TCP, U
8、DP等,不僅這樣,它還可以實(shí)現(xiàn)如偽裝本地IP、發(fā)送ICMP包等功能。圖 2.2.1 協(xié)議棧層次圖 標(biāo)準(zhǔn)套接與原始套接字的關(guān)系Raw Socket廣泛應(yīng)用于高級(jí)網(wǎng)絡(luò)編程,也是一種廣泛的黑客手段。著名的網(wǎng)絡(luò)sniffer、拒絕服務(wù)攻擊(DOS)、IP欺騙等都可以以Raw Socket實(shí)現(xiàn)。Raw Socket與標(biāo)準(zhǔn)套接字(SOCK_STREAM、SOCK_DGRAM)的區(qū)別在于前者直接置根于操作系統(tǒng)網(wǎng)絡(luò)核心(Network Core),而SOCK_STREAM、SOCK_DGRAM則“懸浮”于TCP和UDP協(xié)議外圍,如圖所示。3 網(wǎng)絡(luò)數(shù)據(jù)的采集技術(shù)分析3.1 Windows下原始數(shù)據(jù)包捕獲的實(shí)現(xiàn)網(wǎng)
9、絡(luò)上的數(shù)據(jù)包捕獲機(jī)制主要依賴于所使用的操作系統(tǒng),不同的操作系統(tǒng)下有不同的實(shí)現(xiàn)途徑。在Windows環(huán)境下,可通過網(wǎng)絡(luò)驅(qū)動(dòng)程序接口規(guī)范(NDIS),WinSock的SOCK_RAW或虛擬設(shè)備驅(qū)動(dòng)技術(shù)(VxD)等技術(shù)實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲功能。前面已經(jīng)介紹到了,使用原始套接字可以繞過Socket提供的功能,對(duì)底層的協(xié)議進(jìn)行使用與開發(fā),可以根據(jù)自己的需要生成想要的數(shù)據(jù)報(bào)文等,下面開始介紹使用原始套接字對(duì)數(shù)據(jù)包捕獲進(jìn)行開發(fā)的相關(guān)技術(shù)知識(shí)。第一,使用套接字前,需要了解網(wǎng)卡接收數(shù)據(jù)的工作原理:在正常情況下,網(wǎng)絡(luò)接口只響應(yīng)兩種數(shù)據(jù)幀,一種是與自己的硬件相匹配的數(shù)據(jù)幀,另一種四向所有計(jì)算機(jī)廣播的數(shù)據(jù)幀。在系統(tǒng)中
10、,數(shù)據(jù)幀的收發(fā)由網(wǎng)卡完成,網(wǎng)卡程序接收從網(wǎng)絡(luò)發(fā)來的數(shù)據(jù)包,根據(jù)其硬件地址去判斷是否與本機(jī)的硬件地址匹配,若匹配就通知CPU產(chǎn)生中斷進(jìn)行響應(yīng),然后調(diào)用驅(qū)動(dòng)程序設(shè)置的網(wǎng)卡中斷程序地址調(diào)用驅(qū)動(dòng)程序接收數(shù)據(jù),然后放入堆棧進(jìn)行系統(tǒng)相關(guān)處理,若不匹配則直接丟棄該數(shù)據(jù)包3。對(duì)于網(wǎng)絡(luò)接口,它一般具有4種數(shù)據(jù)接收模式:廣播、組播、直接和混雜模式,只有當(dāng)把接口設(shè)置為混雜模式時(shí),網(wǎng)絡(luò)接口才能接收所有的數(shù)據(jù),無論地址是否匹配,所以在做本設(shè)計(jì)的時(shí)候一定要設(shè)置為混雜模式才能實(shí)現(xiàn)數(shù)據(jù)的采集。第二,需要了解套接字的工作程序和使用方法:一般來說,采用套接字開發(fā)網(wǎng)絡(luò)程序需要經(jīng)歷以下幾個(gè)基本步驟:啟動(dòng)、創(chuàng)建、綁定、監(jiān)聽(接受連接)
11、、連接、發(fā)送/接收數(shù)據(jù)、關(guān)閉、卸載等。第三,具體到Windows下利用原始套接字捕獲網(wǎng)絡(luò)數(shù)據(jù)可以這樣設(shè)計(jì):(1)啟動(dòng)套接字;(2)創(chuàng)建一個(gè)原始套接字;(3)將套接字與本地地址綁定;(4)設(shè)置操作參數(shù);(5)設(shè)置網(wǎng)絡(luò)接口為混雜模式;(6)啟動(dòng)監(jiān)聽線程,開始接收數(shù)據(jù);(7)退出關(guān)閉套接字。3.2 原始數(shù)據(jù)包捕獲的關(guān)鍵函數(shù)(1)啟動(dòng)函數(shù)WSAStartupint PASCAL FAR WSAStartup (DWORD wVersionRequested , LPWSADATA lpWSAData);每一個(gè)套接字應(yīng)用程序都必須調(diào)用該函數(shù)進(jìn)行一系列初始化工作,并且只有調(diào)用成功返回后,才能開始使用套接字
12、,其中參數(shù)wVersionRequested是版本號(hào),高字節(jié)是次版本號(hào)、低字節(jié)是主版本號(hào),參數(shù)lpWSAData是指向WSADATA結(jié)構(gòu)的指針。(2)套接字創(chuàng)建函數(shù)socketSOCKET socket (int af , int type , int protocol);所有的通信在建立之前都必須創(chuàng)建一個(gè)套接字,socket函數(shù)的功能就是創(chuàng)建套接字,其中參數(shù)af指協(xié)議地址族(address family),當(dāng)建立的套接字是依賴于UDP或TCP的話,需要設(shè)置af為AF_INET,表示采用IP協(xié)議。參數(shù)type是指協(xié)議的套接字類型,采用流式套接字時(shí)用SOCK_STREAM,采用數(shù)據(jù)報(bào)套接字時(shí)用S
13、OCK_DGRAM,采用原始套接字時(shí)用SOCK_RAW。參數(shù)protocol是協(xié)議字段,默認(rèn)情況下可直接設(shè)置為0。(3)綁定函數(shù)bindint bind ( SOCKET s , struct sockaddr_in* name , int namelen);成功創(chuàng)建套接字后的下一步工作就是將本地網(wǎng)絡(luò)接口與套接字進(jìn)行綁定,其中參數(shù)s是創(chuàng)建的套接字,參數(shù)name是需要綁定的通信對(duì)象的信息結(jié)構(gòu)體指針,namelen是該結(jié)構(gòu)的長度。需要注意的是sockaddr_in結(jié)構(gòu):struct sockaddr_inshort sin_family; /地址族,設(shè)置為AF_INETunsigned short
14、 sin_port; /指定的端口號(hào)struct in_addr sin_addr; /IP地址char sin_zero8;由于主機(jī)序列與網(wǎng)絡(luò)序列的關(guān)系,在程序中需要使用htons等函數(shù)進(jìn)行轉(zhuǎn)換工作。(4)設(shè)置接口模式函數(shù)WSAIoctlint WSAAPI WSAIoctl(SOCKET s, DWORD dwIoControlCode, LPVOID lpvInBuffer, DWORD cbInBuffer, LPVOID lpvOutBuffer, DWORD cbOutBuffer, LPDWORD lpcbBytesReturned, LPWSAOVERLAPPED lpOver
15、lapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);其中,s為一個(gè)套接口的句柄,dwIoControlCode為操作控制代碼,lpvInBuffer為輸入緩沖區(qū)的地址,cbInBuffer為輸入緩沖區(qū)的大小,lpvOutBuffer為輸出緩沖區(qū)的地址,cbOutBuffer為輸出緩沖區(qū)的大小,lpcbBytesReturned為輸出實(shí)際字節(jié)數(shù)的地址,lpOverlapped為WSAOVERLAPPED結(jié)構(gòu)的地址,lpCompletionRoutine為一個(gè)指向操作結(jié)束后調(diào)用的例程指針。調(diào)用成功后,WSAIoctl 函數(shù)
16、返回0,否則的話,將返回INVALID_SOCKET錯(cuò)誤,應(yīng)用程序可通過WSAGetLastError來獲取錯(cuò)誤代碼。(5)數(shù)據(jù)接收函數(shù)recvint recv (SOCKET s , char* buf ,int len , int flags);4 網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)各模塊的設(shè)計(jì)與實(shí)現(xiàn)4.1 總體結(jié)構(gòu)設(shè)計(jì)通過收集與分析簡單網(wǎng)絡(luò)流量監(jiān)控軟件的需求,總結(jié)出以下特征:(1)需要實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)接口數(shù)據(jù)包的盡可能多的捕獲,將網(wǎng)卡設(shè)置為混雜模式,然后進(jìn)行數(shù)據(jù)包的采集;(2)數(shù)據(jù)包的內(nèi)容要進(jìn)行一定的解析,對(duì)數(shù)據(jù)包的協(xié)議類型、源目地址、數(shù)據(jù)包截獲時(shí)間、數(shù)據(jù)包內(nèi)容需要進(jìn)行分析;(3)監(jiān)視結(jié)果輸出有實(shí)時(shí)流量圖、列表
17、等顯示;(4)實(shí)現(xiàn)日志記錄,便于日后分析;(5)對(duì)某些常見的攻擊進(jìn)行發(fā)現(xiàn)分析??偤弦陨弦笈c綜合分析,分析工具總體設(shè)計(jì)如下,采用VC+6.0編寫,分析工具具有三個(gè)主要功能部分:數(shù)據(jù)捕獲與顯示模塊、流量信息統(tǒng)計(jì)模塊、流量繪制模塊,如圖4.1_1所示。流量監(jiān)控分析系統(tǒng)數(shù)據(jù)采集模塊信息統(tǒng)計(jì)模塊流量繪制模塊圖 4.1_1 系統(tǒng)總體設(shè)計(jì)結(jié)構(gòu)圖數(shù)據(jù)采集模塊:完成網(wǎng)絡(luò)接口數(shù)據(jù)的捕獲、解析和顯示,可以根據(jù)用戶定義條件組合來進(jìn)行捕獲,如只監(jiān)視采用TCP或UDP協(xié)議的數(shù)據(jù)包,也可以監(jiān)視用戶希望關(guān)注的相關(guān)IP地址的數(shù)據(jù)包,同時(shí)完成數(shù)據(jù)封包日志記錄,提高了系統(tǒng)的靈活性。同時(shí),在對(duì)數(shù)據(jù)包的解析過程中對(duì)一些常見入侵攻擊特
18、征進(jìn)行判斷,發(fā)出預(yù)警。該模塊采用編寫原始套接字開發(fā)。信息統(tǒng)計(jì)模塊:完成統(tǒng)計(jì)功能,如統(tǒng)計(jì)IP要實(shí)現(xiàn)統(tǒng)計(jì)接收到的數(shù)據(jù)報(bào)數(shù)量、接收到的數(shù)據(jù)中協(xié)議出錯(cuò)的數(shù)量、正在請(qǐng)求傳輸?shù)臄?shù)量、路由表中可用路由數(shù)量、丟棄的數(shù)量、需要重組/成功重組的數(shù)量等,統(tǒng)計(jì)ICMP需要完成發(fā)送/接收的消息數(shù)量、滿足超過TTL的數(shù)量、重定向數(shù)量、時(shí)間戳請(qǐng)求/應(yīng)答數(shù)量等;采用IP助手函數(shù)完成。流量繪制模塊:完成總流量、輸入流量、輸出流量、瞬時(shí)流量值、最高流量值的顯示;采用訪問注冊(cè)表網(wǎng)絡(luò)性能數(shù)據(jù)完成有關(guān)數(shù)據(jù)的獲取,通過流量圖顯示。4.2 流程圖設(shè)計(jì)根據(jù)上面對(duì)各個(gè)功能模塊的劃分,進(jìn)行更進(jìn)一步的分析和設(shè)計(jì),得到數(shù)據(jù)采集、注冊(cè)表網(wǎng)絡(luò)性能塊訪問
19、大致的工作流程圖,如4.2_1與圖4.2_2所示。圖 4.2_1 數(shù)據(jù)捕獲處理流程圖 4.2_2 網(wǎng)絡(luò)性能數(shù)據(jù)塊訪問流程4.3 各模塊功能概述與實(shí)現(xiàn)4.3.1 數(shù)據(jù)包采集中各類的關(guān)系經(jīng)過上面的分析與設(shè)計(jì),得到該系統(tǒng)的總體功能結(jié)構(gòu)、工作流程,也確定了從編寫套接字到最后捕獲數(shù)據(jù),要經(jīng)過創(chuàng)建、綁定、設(shè)置工作模式、啟動(dòng)線程、接收數(shù)據(jù)等一系列的處理操作。為了實(shí)現(xiàn)處理中的每一步操作,設(shè)計(jì)了數(shù)據(jù)捕獲的類關(guān)系,如圖所示。圖 數(shù)據(jù)包采集中各類的關(guān)系在上圖中CSockSupport,CSockHelper ,CPackInterDlg,CBinDataDlg等是封裝了各部分主要處理功能的類。且這些類中封裝了和這些
20、類的操作相關(guān)的方法。將在后面對(duì)這些類的功能和實(shí)現(xiàn)進(jìn)行詳細(xì)介紹。4.3.2 數(shù)據(jù)包捕獲與分析模塊功能實(shí)現(xiàn)說明該功能模塊主要由封裝的CSockSupport,CsockHelper ,CpackInterDlg,CbinDataDlg四個(gè)類完成,下面將對(duì)這些類進(jìn)行詳細(xì)說明。CsockSupport類:主要負(fù)責(zé)檢查Socket是否支持2.0版本,在該類中封裝了WSAStartup完成Socket的啟動(dòng);CsockHelper類:主要實(shí)現(xiàn)了從獲取本機(jī)信息結(jié)構(gòu)、Socket創(chuàng)建、綁定、設(shè)置、啟動(dòng)線程、數(shù)據(jù)接收到協(xié)議分析的全部方法,詳細(xì)處理流程見圖所示。GetLocalIP實(shí)現(xiàn)獲取本機(jī)地址操作的方法,LP
21、HOSTENT lphp是定義一個(gè)主機(jī)信息結(jié)構(gòu),獲取過程由gethostname(szLocname,MAX_HOSTNAME_LAN)與gethostbyname(szLocname)完成;第一個(gè)參數(shù)是用于放置本機(jī)名稱的緩沖,第二個(gè)參數(shù)是緩沖區(qū)長度,最后利用inet_ntoa將IP地址轉(zhuǎn)化為“.”式地址。StartCapture方法完成套接字的創(chuàng)建、綁定、設(shè)置操作方式和啟動(dòng)線程;具體完成如下:圖 CSockHelper類處理流程m_sockCap = socket(AF_INET , SOCK_RAW , IPPROTO_IP);/創(chuàng)建套接字bind(m_sockCap, (PSOCKADD
22、R)&sa, sizeof(sa);/綁定setsockopt(m_sockCap, SOL_SOCKET, SO_REUSEADDR, (char*)&bopt, sizeof(bopt) ;/設(shè)置操作setsockopt(m_sockCap, IPPROTO_IP, IP_HDRINCL, (char*)&bopt, sizeof(bopt) ;/設(shè)置操作WSAIoctl(m_sockCap,SIO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NUL
23、L,NULL);/混雜模式m_hCapThread = CreateThread(NULL, 0, CaptureThread, this, 0, NULL);/啟動(dòng)線程線程函數(shù)CaptureThread主要完成數(shù)據(jù)的接收。數(shù)據(jù)接收后,將緩沖區(qū)數(shù)據(jù)轉(zhuǎn)化為IP數(shù)據(jù)格式后即可以開始解析過程,協(xié)議名稱獲取如下:for(int i=0; ih_lenver & 0xf) /獲取數(shù)據(jù)包長度協(xié)議解析:switch(iProtocol)case IPPROTO_TCP :case IPPROTO_UDP :case IPPROTO_ICMP :default : StopCapture完成關(guān)閉線程和套接字操
24、作:if(m_hCapThread)TerminateThread(m_hCapThread, 0); /中斷進(jìn)程CloseHandle(m_hCapThread); /關(guān)閉句柄m_hCapThread = NULL;if(m_sockCap)closesocket(m_sockCap); /關(guān)閉套接字CbinDataDlg類主要完成對(duì)已捕獲數(shù)據(jù)的存儲(chǔ)和顯示方法;CpackInterDlg類通過建立CbinDataDlg類和CsockHelper類對(duì)象實(shí)現(xiàn)數(shù)據(jù)捕獲、解析、顯示、存儲(chǔ)等,同時(shí)它完成對(duì)捕獲條件設(shè)置控件、日志記錄控件的編寫,在這里就不做詳細(xì)介紹了。4.3.3 流量獲取模塊設(shè)計(jì)說明設(shè)計(jì)
25、思路:實(shí)際編程時(shí),Windows系統(tǒng)內(nèi)提供了一個(gè)系統(tǒng)性能的接口,只需要訪問這個(gè)接口就可以得到網(wǎng)絡(luò)性能相關(guān)的數(shù)據(jù),如流量;根據(jù)這個(gè)想法,設(shè)計(jì)出了本功能模塊的子功能模塊如下:訪問性能數(shù)據(jù)子模塊:負(fù)責(zé)對(duì)注冊(cè)表進(jìn)行訪問,獲取流量數(shù)據(jù);顯示子模塊:負(fù)責(zé)將數(shù)據(jù)繪制在窗口中;框架子模塊:負(fù)責(zé)消息映射和消息處理;本模塊中,將使用到一個(gè)注冊(cè)表訪問函數(shù)RegQueryValueEx,它根據(jù)開放的注冊(cè)表鍵值與名字查找相關(guān)的類型和數(shù)據(jù)。它的函數(shù)原型如下:LONG RegQueryValueEx(HKEY hKey , LPCTSTR lpValueName , LPDWORD lpReserved , LPDWORD
26、 lpType , LPBYTE lpData , LPDWORD lpcbData);參數(shù)說明:hKey為預(yù)定的注冊(cè)表系統(tǒng)鍵值;lpValueName為需要查詢的目標(biāo)鍵值的名字;lpReserved保留,但是必須為NULL;lpType為鍵值類型;lpData輸入/輸出接收鍵值的數(shù)據(jù);lpcbData輸入/輸出接收鍵值的緩沖大小標(biāo)志。在WindowsNT下,當(dāng)調(diào)用RegQueryValueEx時(shí),若hKey被設(shè)置為HKEY_PERFORMANCE_DATA返回的數(shù)據(jù)并不是直接顯示被請(qǐng)求的數(shù)據(jù)對(duì)象。所以程序需要遍歷整個(gè)數(shù)據(jù)塊,數(shù)據(jù)塊中的邏輯結(jié)構(gòu)如圖所示。圖 注冊(cè)表網(wǎng)絡(luò)性能數(shù)據(jù)塊邏輯結(jié)構(gòu)從數(shù)據(jù)塊
27、的性能數(shù)據(jù)結(jié)構(gòu)PERF_DATA_BLOCK開始,然后索引到PERF_OBJECT_TYPE結(jié)構(gòu),而PERF_COUNTER_DEFINITION結(jié)構(gòu)可以通過PERF_OBJECT_TYPE的成員HeaderByteLength找到位置偏移,每一個(gè)PERF_OBJECT_TYPE的成員DefinitionLength都能確定一個(gè)對(duì)應(yīng)的PERF_INSTANCE_DEFINITION結(jié)構(gòu),PERF_INSTANCE_DEFINITION結(jié)構(gòu)決定著PERF_COUNTER_BLOCK結(jié)構(gòu)3。下面列出了獲得網(wǎng)絡(luò)接口流量的部分關(guān)鍵代碼:/得到當(dāng)前的接口名字InterfaceName = Interfa
28、ces.GetAt(pos);/開辟性能數(shù)據(jù)緩沖unsigned char *data = new unsigned char DEFAULT_BUFFER_SIZE;/從RegQueryValueEx返回的值:本例中忽略改變量/從網(wǎng)絡(luò)對(duì)象(索引是510)查詢性能數(shù)據(jù)RegQueryValueEx(HKEY_PERFORMANCE_DATA, 510, NULL, &type, data, &size)PERF_DATA_BLOCK *dataBlockPtr = (PERF_DATA_BLOCK *)data;下面詳細(xì)說明,注冊(cè)表數(shù)據(jù)性能塊訪問過程的實(shí)現(xiàn):/枚舉鏈表中第一個(gè)對(duì)象PERF_OB
29、JECT_TYPE *objectPtr = FirstObject(dataBlockPtr);/遍歷鏈表 for(int a=0 ; aNumObjectTypes ; a+) char nameBuffer255;/判斷是否是網(wǎng)絡(luò)對(duì)象索引號(hào)是510if(objectPtr-ObjectNameTitleIndex = 510) /偏移變量DWORD processIdOffset = ULONG_MAX;/找到第一個(gè)計(jì)數(shù)器PERF_COUNTER_DEFINITION *counterPtr = FirstCounter(objectPtr);/遍歷鏈表for(int b=0 ; bNu
30、mCounters ; b+) /判斷接收的數(shù)據(jù)類型是否是我們需要的if(int)counterPtr-CounterNameTitleIndex= CurrentTrafficType) processIdOffset = counterPtr-CounterOffset; /下一個(gè)計(jì)數(shù)器counterPtr = NextCounter(counterPtr);/數(shù)據(jù)類型不是我們需要的if(processIdOffset = ULONG_MAX) delete data;return 1;/找到第一個(gè)實(shí)例(instance)PERF_INSTANCE_DEFINITION *instance
31、Ptr = FirstInstance(objectPtr);/遍歷整個(gè)實(shí)例for(b=0 ; bNumInstances ; b+) wchar_t *namePtr = (wchar_t *) (BYTE *)instancePtr + instancePtr-NameOffset);/得到這個(gè)實(shí)例的PERF_COUNTER_BLOCKPERF_COUNTER_BLOCK *counterBlockPtr = GetCounterBlock(instancePtr);/現(xiàn)在得到了接口的名字char *pName = WideToMulti(namePtr, nameBuffer, size
32、of(nameBuffer);POSITION pos = TotalTraffics.FindIndex(b);if(pos!=NULL)fullTraffic = *(DWORD *) (BYTE *)counterBlockPtr + processIdOffset);TotalTraffics.SetAt(pos,fullTraffic);/如果當(dāng)前的接口就是我們選擇的接口if(InterfaceName = iName) traffic = *(DWORD *) (BYTE *)counterBlockPtr + processIdOffset); /判斷處理的接口是否是新的if(C
33、urrentInterface != interfaceNumber) lasttraffic = acttraffic; trafficdelta = 0.0;CurrentInterface = interfaceNumber; else trafficdelta = acttraffic - lasttraffic;lasttraffic = acttraffic;delete data;return(trafficdelta); /下一個(gè)實(shí)例instancePtr = NextInstance(instancePtr); /下一個(gè)對(duì)象objectPtr = NextObject(obj
34、ectPtr);delete data;return 0;catch(.)return 0;4.3.4 數(shù)據(jù)統(tǒng)計(jì)模塊可以利用微軟的IP助手中的API函數(shù)實(shí)現(xiàn)IP的統(tǒng)計(jì),通過統(tǒng)計(jì)的數(shù)據(jù)可以在一定程度上發(fā)現(xiàn)網(wǎng)絡(luò)性能瓶頸。涉及到的函數(shù)有GetUdpStatistic,GetTcpStatistic,GetIcmpStatistic,GetIStatistic,需要注意的是工程中要加載IPHelpapi.lib庫。函數(shù)調(diào)用結(jié)果通過列表可以直觀顯示出來,網(wǎng)絡(luò)管理人員可以通過其中統(tǒng)計(jì)數(shù)量的變化監(jiān)視網(wǎng)絡(luò)性能。5 分析工具測試5.1 測試環(huán)境(1) 處理器P4 2.0 G Mhz以上;(2) 內(nèi)存512M以上;(3) 多臺(tái)普通搭載網(wǎng)卡的PC、經(jīng)過路由器或交換機(jī)互聯(lián)。(4) 操作系統(tǒng)Win2000/NT/xp/win7/server2003等;(5) VC+6.0。5.2 測試步驟(1) 首先,用多臺(tái)PC搭建局域網(wǎng)絡(luò)。(2) 其次,選定一臺(tái)PC進(jìn)行測試:數(shù)據(jù)包捕獲(含設(shè)定條件)、封包日志保存、流量峰值、數(shù)據(jù)統(tǒng)計(jì)。(3) 確定每個(gè)功能模塊的測試要求。(4) 對(duì)每個(gè)功能模塊進(jìn)行數(shù)據(jù)合法性檢查、數(shù)據(jù)一致性檢查。(5) 進(jìn)行各模塊的功能測試后,對(duì)關(guān)鍵模塊進(jìn)行回歸測試。5.
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 社區(qū)護(hù)理試題(含答案)
- 2025鋼結(jié)構(gòu)人行天橋施工合同
- 課題申報(bào)參考:旅游賦能稻作梯田生態(tài)產(chǎn)品增值增效路徑研究
- 課題申報(bào)參考:跨模態(tài)時(shí)序信息融合的在線學(xué)習(xí)者細(xì)粒度情感分析與調(diào)節(jié)策略研究
- 【深度分析】可再生能源新政何以推動(dòng)綠證市場發(fā)展-國金證券
- 二零二五年度電梯智能化系統(tǒng)研發(fā)與應(yīng)用合同4篇
- 去健身房鍛煉身體的說說范文
- 2025年粵教新版九年級(jí)歷史上冊(cè)月考試卷含答案
- 2025年華師大新版八年級(jí)物理下冊(cè)月考試卷含答案
- 2025年新世紀(jì)版選擇性必修二化學(xué)下冊(cè)月考試卷
- 安檢人員培訓(xùn)
- 山東省濰坊市2024-2025學(xué)年高三上學(xué)期1月期末 英語試題
- 危險(xiǎn)性較大分部分項(xiàng)工程及施工現(xiàn)場易發(fā)生重大事故的部位、環(huán)節(jié)的預(yù)防監(jiān)控措施
- 《榜樣9》觀后感心得體會(huì)四
- 2023事業(yè)單位筆試《公共基礎(chǔ)知識(shí)》備考題庫(含答案)
- 化學(xué)-廣東省廣州市2024-2025學(xué)年高一上學(xué)期期末檢測卷(一)試題和答案
- 2025四川中煙招聘高頻重點(diǎn)提升(共500題)附帶答案詳解
- EHS工程師招聘筆試題與參考答案(某大型央企)2024年
- 營銷策劃 -麗亭酒店品牌年度傳播規(guī)劃方案
- 2025年中國蛋糕行業(yè)市場規(guī)模及發(fā)展前景研究報(bào)告(智研咨詢發(fā)布)
- 潤滑油過濾培訓(xùn)
評(píng)論
0/150
提交評(píng)論