網(wǎng)絡流量監(jiān)控及分析工具的設計與實現(xiàn)_第1頁
網(wǎng)絡流量監(jiān)控及分析工具的設計與實現(xiàn)_第2頁
網(wǎng)絡流量監(jiān)控及分析工具的設計與實現(xiàn)_第3頁
網(wǎng)絡流量監(jiān)控及分析工具的設計與實現(xiàn)_第4頁
網(wǎng)絡流量監(jiān)控及分析工具的設計與實現(xiàn)_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、目 錄1引言11.1課題背景11.2網(wǎng)絡流量監(jiān)控的引入11.3課程設計的目的與任務12相關的概念與技術22.1TCP/IP體系結構22.2原始套接字33網(wǎng)絡數(shù)據(jù)的采集技術分析43.1Windows下原始數(shù)據(jù)包捕獲的實現(xiàn)43.2原始數(shù)據(jù)包捕獲的關鍵函數(shù)54網(wǎng)絡流量監(jiān)控系統(tǒng)各模塊的設計與實現(xiàn)64.1總體結構設計64.2流程圖設計74.3各模塊功能概述與實現(xiàn)8數(shù)據(jù)包采集中各類的關系8數(shù)據(jù)包捕獲與分析模塊9流量獲取模塊10數(shù)據(jù)統(tǒng)計模塊135分析工具測試135.1測試環(huán)境135.2測試步驟135.3測試結果評價136結束語13參考文獻:141 引言1.1 課題背景隨著構建網(wǎng)絡基礎技術和網(wǎng)絡應用的迅速發(fā)展

2、以及用戶對網(wǎng)絡性能要求的提高,使得網(wǎng)絡管理成為迫切需要解決的問題,有效的網(wǎng)絡管理能夠保證網(wǎng)絡的穩(wěn)定運行和持續(xù)發(fā)展,更重要的是,隨著網(wǎng)絡規(guī)模的擴大和黑客技術的發(fā)展,入侵和攻擊的案例日益增多,對穩(wěn)定的網(wǎng)絡服務、信息安全、互聯(lián)網(wǎng)秩序都提出了嚴峻的挑戰(zhàn),網(wǎng)絡安全管理在整個網(wǎng)絡管理系統(tǒng)里扮演起更為重要的角色。1.2 網(wǎng)絡流量監(jiān)控的引入網(wǎng)絡安全管理體系中,流量監(jiān)控和統(tǒng)計分析是整個管理的基礎。流量檢測主要目的是通過對網(wǎng)絡數(shù)據(jù)進行實時連續(xù)的采集監(jiān)測網(wǎng)絡流量,對獲得的流量數(shù)據(jù)進行統(tǒng)計計算,從而得到網(wǎng)絡主要成分的性能指標。網(wǎng)絡管理員根據(jù)流量數(shù)據(jù)就可以對網(wǎng)絡主要成分進行性能分析管理,發(fā)現(xiàn)性能變化趨勢,并分析出影響網(wǎng)

3、絡性能的因素及問題所在。此外,在網(wǎng)絡流量異常的情況下,通過擴展的流量檢測報警系統(tǒng)還可以向管理人員報警,及時發(fā)現(xiàn)故障加以處理。在網(wǎng)絡流量檢測的基礎上,管理員還可對感興趣的網(wǎng)絡管理對象設置審查值范圍及配置網(wǎng)絡性能對象,監(jiān)控實時輪詢網(wǎng)絡獲取定義對象的當前值,若超出審查值的正常預定值則報警,協(xié)助管理員發(fā)現(xiàn)網(wǎng)絡瓶頸,這樣就能實現(xiàn)一定程度上的故障管理。而網(wǎng)絡流量檢測本身也涉及到安全管理方面的內容。由此可見,對于一個有效的網(wǎng)絡安全管理系統(tǒng)來說,功能的實現(xiàn)都或多或少的依賴于流量信息的獲取。因此網(wǎng)絡流量信息的采集可以說是網(wǎng)絡安全管理系統(tǒng)得以實現(xiàn)的核心基石。它的應用可以在一定程度上檢測到入侵攻擊,可以有效地幫助管

4、理人員進行網(wǎng)絡性能管理,并利用報警機制協(xié)助網(wǎng)管人員采取對應的安全策略與防護措施,從而減少入侵攻擊所造成的損失。1.3 課程設計的目的與任務該網(wǎng)絡流量監(jiān)控及分析工具主要用途是通過實時連續(xù)地采集網(wǎng)絡數(shù)據(jù)并對其進行統(tǒng)計,得到主要成分性能指標,結合網(wǎng)絡流量的理論,通過統(tǒng)計出的性能指數(shù)觀察網(wǎng)絡狀態(tài),分析出網(wǎng)絡變化趨勢,找出影響網(wǎng)絡性能的因素。課程設計開發(fā)的工具實現(xiàn)以下功能:(1)采用Winsock編寫原始套接字Socket-Raw對數(shù)據(jù)包進行采集捕獲,并可實現(xiàn)分類及自定義范圍進行捕獲;(2)對捕獲的數(shù)據(jù)包進行一定的解析;(3)訪問操作系統(tǒng)提供的網(wǎng)絡性能參數(shù)接口,得到網(wǎng)卡總流量、輸入流量和輸出流量;(4)

5、系統(tǒng)提供了多種方式顯示結果,如曲線圖、列表等;(5)使用IP幫助API獲取網(wǎng)絡統(tǒng)計信息;(6)實現(xiàn)對部分常見威脅的預警,可繼續(xù)開發(fā)擴展其報警功能。2 相關的概念與技術2.1 TCP/IP體系結構由于TCP/IP比其之前的OSI模型更具體實現(xiàn),隨著互聯(lián)網(wǎng)的不斷發(fā)展,遵循TCP/IP結構的網(wǎng)絡不斷普及,因此現(xiàn)在通常采用TCP/IP代表Internet體系結構。TCP/IP的目的是在網(wǎng)絡標準不同的情況下解決互聯(lián)問題,可以說,網(wǎng)絡互聯(lián)是TCP/IP的核心。TCP/IP的體系結構如圖1所示。圖1TCP/IP在設計時重點并沒有放在具體通信的實現(xiàn)上,所以對最后兩層沒有做出具體規(guī)定,同時表明它允許不同類型的通

6、信網(wǎng)絡參與通信。它的四個層次功能如下。(1)應用層,提供常用的應用程序及自定義的應用程序,數(shù)據(jù)傳輸時用TCP/IP協(xié)議來進行;(2)傳輸層,提供端到端的應用程序之間的通信,可以使用傳輸控制協(xié)議TCP(Transmission Control Protocol)或用戶數(shù)據(jù)報協(xié)議UDP(User Datagram Protocol)協(xié)議,前者提供可靠傳輸,傳送單位是報文段,后者提供不可靠服務,傳輸單位是數(shù)據(jù)報,即分組。此外,傳輸層另外一個功能就是區(qū)別應用程序;(3)網(wǎng)際層,負責計算機之間的通信,采用的協(xié)議是IP協(xié)議,數(shù)據(jù)傳送單位是分組,向上提供不可靠的傳輸服務;(4)網(wǎng)絡接口層,負責接收數(shù)據(jù)報,并

7、實現(xiàn)發(fā)送,或者接收幀,提取IP數(shù)據(jù)報,交給互聯(lián)網(wǎng)層。2.2 原始套接字從用戶的角度來看,標準的流式套接字和數(shù)據(jù)報套接字這兩類套接字似乎涵蓋了TCP/IP應用的全部,因為基于TCP/IP的應用,從協(xié)議棧的層次(如圖2.2.1所示)上講,在傳輸層的確只可能建立于TCP或UDP協(xié)議之上,而流式套接字和數(shù)據(jù)報套接字又分別對應于TCP和UDP,所以幾乎所有的應用都可以用這兩類套接字實現(xiàn)。但是,當需要自定義數(shù)據(jù)包發(fā)送時或者需要分析所有經過網(wǎng)絡的數(shù)據(jù)包的時候,就必須面臨一種不同于前兩者的方式Raw Socket,即原始套接字,程序員可以用它來發(fā)送和接收 IP 層以上的原始數(shù)據(jù)包, 如 ICMP,TCP, U

8、DP等,不僅這樣,它還可以實現(xiàn)如偽裝本地IP、發(fā)送ICMP包等功能。圖 2.2.1 協(xié)議棧層次圖 標準套接與原始套接字的關系Raw Socket廣泛應用于高級網(wǎng)絡編程,也是一種廣泛的黑客手段。著名的網(wǎng)絡sniffer、拒絕服務攻擊(DOS)、IP欺騙等都可以以Raw Socket實現(xiàn)。Raw Socket與標準套接字(SOCK_STREAM、SOCK_DGRAM)的區(qū)別在于前者直接置根于操作系統(tǒng)網(wǎng)絡核心(Network Core),而SOCK_STREAM、SOCK_DGRAM則“懸浮”于TCP和UDP協(xié)議外圍,如圖所示。3 網(wǎng)絡數(shù)據(jù)的采集技術分析3.1 Windows下原始數(shù)據(jù)包捕獲的實現(xiàn)網(wǎng)

9、絡上的數(shù)據(jù)包捕獲機制主要依賴于所使用的操作系統(tǒng),不同的操作系統(tǒng)下有不同的實現(xiàn)途徑。在Windows環(huán)境下,可通過網(wǎng)絡驅動程序接口規(guī)范(NDIS),WinSock的SOCK_RAW或虛擬設備驅動技術(VxD)等技術實現(xiàn)網(wǎng)絡數(shù)據(jù)包的捕獲功能。前面已經介紹到了,使用原始套接字可以繞過Socket提供的功能,對底層的協(xié)議進行使用與開發(fā),可以根據(jù)自己的需要生成想要的數(shù)據(jù)報文等,下面開始介紹使用原始套接字對數(shù)據(jù)包捕獲進行開發(fā)的相關技術知識。第一,使用套接字前,需要了解網(wǎng)卡接收數(shù)據(jù)的工作原理:在正常情況下,網(wǎng)絡接口只響應兩種數(shù)據(jù)幀,一種是與自己的硬件相匹配的數(shù)據(jù)幀,另一種四向所有計算機廣播的數(shù)據(jù)幀。在系統(tǒng)中

10、,數(shù)據(jù)幀的收發(fā)由網(wǎng)卡完成,網(wǎng)卡程序接收從網(wǎng)絡發(fā)來的數(shù)據(jù)包,根據(jù)其硬件地址去判斷是否與本機的硬件地址匹配,若匹配就通知CPU產生中斷進行響應,然后調用驅動程序設置的網(wǎng)卡中斷程序地址調用驅動程序接收數(shù)據(jù),然后放入堆棧進行系統(tǒng)相關處理,若不匹配則直接丟棄該數(shù)據(jù)包3。對于網(wǎng)絡接口,它一般具有4種數(shù)據(jù)接收模式:廣播、組播、直接和混雜模式,只有當把接口設置為混雜模式時,網(wǎng)絡接口才能接收所有的數(shù)據(jù),無論地址是否匹配,所以在做本設計的時候一定要設置為混雜模式才能實現(xiàn)數(shù)據(jù)的采集。第二,需要了解套接字的工作程序和使用方法:一般來說,采用套接字開發(fā)網(wǎng)絡程序需要經歷以下幾個基本步驟:啟動、創(chuàng)建、綁定、監(jiān)聽(接受連接)

11、、連接、發(fā)送/接收數(shù)據(jù)、關閉、卸載等。第三,具體到Windows下利用原始套接字捕獲網(wǎng)絡數(shù)據(jù)可以這樣設計:(1)啟動套接字;(2)創(chuàng)建一個原始套接字;(3)將套接字與本地地址綁定;(4)設置操作參數(shù);(5)設置網(wǎng)絡接口為混雜模式;(6)啟動監(jiān)聽線程,開始接收數(shù)據(jù);(7)退出關閉套接字。3.2 原始數(shù)據(jù)包捕獲的關鍵函數(shù)(1)啟動函數(shù)WSAStartupint PASCAL FAR WSAStartup (DWORD wVersionRequested , LPWSADATA lpWSAData);每一個套接字應用程序都必須調用該函數(shù)進行一系列初始化工作,并且只有調用成功返回后,才能開始使用套接字

12、,其中參數(shù)wVersionRequested是版本號,高字節(jié)是次版本號、低字節(jié)是主版本號,參數(shù)lpWSAData是指向WSADATA結構的指針。(2)套接字創(chuàng)建函數(shù)socketSOCKET socket (int af , int type , int protocol);所有的通信在建立之前都必須創(chuàng)建一個套接字,socket函數(shù)的功能就是創(chuàng)建套接字,其中參數(shù)af指協(xié)議地址族(address family),當建立的套接字是依賴于UDP或TCP的話,需要設置af為AF_INET,表示采用IP協(xié)議。參數(shù)type是指協(xié)議的套接字類型,采用流式套接字時用SOCK_STREAM,采用數(shù)據(jù)報套接字時用S

13、OCK_DGRAM,采用原始套接字時用SOCK_RAW。參數(shù)protocol是協(xié)議字段,默認情況下可直接設置為0。(3)綁定函數(shù)bindint bind ( SOCKET s , struct sockaddr_in* name , int namelen);成功創(chuàng)建套接字后的下一步工作就是將本地網(wǎng)絡接口與套接字進行綁定,其中參數(shù)s是創(chuàng)建的套接字,參數(shù)name是需要綁定的通信對象的信息結構體指針,namelen是該結構的長度。需要注意的是sockaddr_in結構:struct sockaddr_inshort sin_family; /地址族,設置為AF_INETunsigned short

14、 sin_port; /指定的端口號struct in_addr sin_addr; /IP地址char sin_zero8;由于主機序列與網(wǎng)絡序列的關系,在程序中需要使用htons等函數(shù)進行轉換工作。(4)設置接口模式函數(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為一個套接口的句柄,dwIoControlCode為操作控制代碼,lpvInBuffer為輸入緩沖區(qū)的地址,cbInBuffer為輸入緩沖區(qū)的大小,lpvOutBuffer為輸出緩沖區(qū)的地址,cbOutBuffer為輸出緩沖區(qū)的大小,lpcbBytesReturned為輸出實際字節(jié)數(shù)的地址,lpOverlapped為WSAOVERLAPPED結構的地址,lpCompletionRoutine為一個指向操作結束后調用的例程指針。調用成功后,WSAIoctl 函數(shù)

16、返回0,否則的話,將返回INVALID_SOCKET錯誤,應用程序可通過WSAGetLastError來獲取錯誤代碼。(5)數(shù)據(jù)接收函數(shù)recvint recv (SOCKET s , char* buf ,int len , int flags);4 網(wǎng)絡流量監(jiān)控系統(tǒng)各模塊的設計與實現(xiàn)4.1 總體結構設計通過收集與分析簡單網(wǎng)絡流量監(jiān)控軟件的需求,總結出以下特征:(1)需要實現(xiàn)對網(wǎng)絡接口數(shù)據(jù)包的盡可能多的捕獲,將網(wǎng)卡設置為混雜模式,然后進行數(shù)據(jù)包的采集;(2)數(shù)據(jù)包的內容要進行一定的解析,對數(shù)據(jù)包的協(xié)議類型、源目地址、數(shù)據(jù)包截獲時間、數(shù)據(jù)包內容需要進行分析;(3)監(jiān)視結果輸出有實時流量圖、列表

17、等顯示;(4)實現(xiàn)日志記錄,便于日后分析;(5)對某些常見的攻擊進行發(fā)現(xiàn)分析。總合以上要求與綜合分析,分析工具總體設計如下,采用VC+6.0編寫,分析工具具有三個主要功能部分:數(shù)據(jù)捕獲與顯示模塊、流量信息統(tǒng)計模塊、流量繪制模塊,如圖4.1_1所示。流量監(jiān)控分析系統(tǒng)數(shù)據(jù)采集模塊信息統(tǒng)計模塊流量繪制模塊圖 4.1_1 系統(tǒng)總體設計結構圖數(shù)據(jù)采集模塊:完成網(wǎng)絡接口數(shù)據(jù)的捕獲、解析和顯示,可以根據(jù)用戶定義條件組合來進行捕獲,如只監(jiān)視采用TCP或UDP協(xié)議的數(shù)據(jù)包,也可以監(jiān)視用戶希望關注的相關IP地址的數(shù)據(jù)包,同時完成數(shù)據(jù)封包日志記錄,提高了系統(tǒng)的靈活性。同時,在對數(shù)據(jù)包的解析過程中對一些常見入侵攻擊特

18、征進行判斷,發(fā)出預警。該模塊采用編寫原始套接字開發(fā)。信息統(tǒng)計模塊:完成統(tǒng)計功能,如統(tǒng)計IP要實現(xiàn)統(tǒng)計接收到的數(shù)據(jù)報數(shù)量、接收到的數(shù)據(jù)中協(xié)議出錯的數(shù)量、正在請求傳輸?shù)臄?shù)量、路由表中可用路由數(shù)量、丟棄的數(shù)量、需要重組/成功重組的數(shù)量等,統(tǒng)計ICMP需要完成發(fā)送/接收的消息數(shù)量、滿足超過TTL的數(shù)量、重定向數(shù)量、時間戳請求/應答數(shù)量等;采用IP助手函數(shù)完成。流量繪制模塊:完成總流量、輸入流量、輸出流量、瞬時流量值、最高流量值的顯示;采用訪問注冊表網(wǎng)絡性能數(shù)據(jù)完成有關數(shù)據(jù)的獲取,通過流量圖顯示。4.2 流程圖設計根據(jù)上面對各個功能模塊的劃分,進行更進一步的分析和設計,得到數(shù)據(jù)采集、注冊表網(wǎng)絡性能塊訪問

19、大致的工作流程圖,如4.2_1與圖4.2_2所示。圖 4.2_1 數(shù)據(jù)捕獲處理流程圖 4.2_2 網(wǎng)絡性能數(shù)據(jù)塊訪問流程4.3 各模塊功能概述與實現(xiàn)4.3.1 數(shù)據(jù)包采集中各類的關系經過上面的分析與設計,得到該系統(tǒng)的總體功能結構、工作流程,也確定了從編寫套接字到最后捕獲數(shù)據(jù),要經過創(chuàng)建、綁定、設置工作模式、啟動線程、接收數(shù)據(jù)等一系列的處理操作。為了實現(xiàn)處理中的每一步操作,設計了數(shù)據(jù)捕獲的類關系,如圖所示。圖 數(shù)據(jù)包采集中各類的關系在上圖中CSockSupport,CSockHelper ,CPackInterDlg,CBinDataDlg等是封裝了各部分主要處理功能的類。且這些類中封裝了和這些

20、類的操作相關的方法。將在后面對這些類的功能和實現(xiàn)進行詳細介紹。4.3.2 數(shù)據(jù)包捕獲與分析模塊功能實現(xiàn)說明該功能模塊主要由封裝的CSockSupport,CsockHelper ,CpackInterDlg,CbinDataDlg四個類完成,下面將對這些類進行詳細說明。CsockSupport類:主要負責檢查Socket是否支持2.0版本,在該類中封裝了WSAStartup完成Socket的啟動;CsockHelper類:主要實現(xiàn)了從獲取本機信息結構、Socket創(chuàng)建、綁定、設置、啟動線程、數(shù)據(jù)接收到協(xié)議分析的全部方法,詳細處理流程見圖所示。GetLocalIP實現(xiàn)獲取本機地址操作的方法,LP

21、HOSTENT lphp是定義一個主機信息結構,獲取過程由gethostname(szLocname,MAX_HOSTNAME_LAN)與gethostbyname(szLocname)完成;第一個參數(shù)是用于放置本機名稱的緩沖,第二個參數(shù)是緩沖區(qū)長度,最后利用inet_ntoa將IP地址轉化為“.”式地址。StartCapture方法完成套接字的創(chuà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) ;/設置操作setsockopt(m_sockCap, IPPROTO_IP, IP_HDRINCL, (char*)&bopt, sizeof(bopt) ;/設置操作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);/啟動線程線程函數(shù)CaptureThread主要完成數(shù)據(jù)的接收。數(shù)據(jù)接收后,將緩沖區(qū)數(shù)據(jù)轉化為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完成關閉線程和套接字操

24、作:if(m_hCapThread)TerminateThread(m_hCapThread, 0); /中斷進程CloseHandle(m_hCapThread); /關閉句柄m_hCapThread = NULL;if(m_sockCap)closesocket(m_sockCap); /關閉套接字CbinDataDlg類主要完成對已捕獲數(shù)據(jù)的存儲和顯示方法;CpackInterDlg類通過建立CbinDataDlg類和CsockHelper類對象實現(xiàn)數(shù)據(jù)捕獲、解析、顯示、存儲等,同時它完成對捕獲條件設置控件、日志記錄控件的編寫,在這里就不做詳細介紹了。4.3.3 流量獲取模塊設計說明設計

25、思路:實際編程時,Windows系統(tǒng)內提供了一個系統(tǒng)性能的接口,只需要訪問這個接口就可以得到網(wǎng)絡性能相關的數(shù)據(jù),如流量;根據(jù)這個想法,設計出了本功能模塊的子功能模塊如下:訪問性能數(shù)據(jù)子模塊:負責對注冊表進行訪問,獲取流量數(shù)據(jù);顯示子模塊:負責將數(shù)據(jù)繪制在窗口中;框架子模塊:負責消息映射和消息處理;本模塊中,將使用到一個注冊表訪問函數(shù)RegQueryValueEx,它根據(jù)開放的注冊表鍵值與名字查找相關的類型和數(shù)據(jù)。它的函數(shù)原型如下:LONG RegQueryValueEx(HKEY hKey , LPCTSTR lpValueName , LPDWORD lpReserved , LPDWORD

26、 lpType , LPBYTE lpData , LPDWORD lpcbData);參數(shù)說明:hKey為預定的注冊表系統(tǒng)鍵值;lpValueName為需要查詢的目標鍵值的名字;lpReserved保留,但是必須為NULL;lpType為鍵值類型;lpData輸入/輸出接收鍵值的數(shù)據(jù);lpcbData輸入/輸出接收鍵值的緩沖大小標志。在WindowsNT下,當調用RegQueryValueEx時,若hKey被設置為HKEY_PERFORMANCE_DATA返回的數(shù)據(jù)并不是直接顯示被請求的數(shù)據(jù)對象。所以程序需要遍歷整個數(shù)據(jù)塊,數(shù)據(jù)塊中的邏輯結構如圖所示。圖 注冊表網(wǎng)絡性能數(shù)據(jù)塊邏輯結構從數(shù)據(jù)塊

27、的性能數(shù)據(jù)結構PERF_DATA_BLOCK開始,然后索引到PERF_OBJECT_TYPE結構,而PERF_COUNTER_DEFINITION結構可以通過PERF_OBJECT_TYPE的成員HeaderByteLength找到位置偏移,每一個PERF_OBJECT_TYPE的成員DefinitionLength都能確定一個對應的PERF_INSTANCE_DEFINITION結構,PERF_INSTANCE_DEFINITION結構決定著PERF_COUNTER_BLOCK結構3。下面列出了獲得網(wǎng)絡接口流量的部分關鍵代碼:/得到當前的接口名字InterfaceName = Interfa

28、ces.GetAt(pos);/開辟性能數(shù)據(jù)緩沖unsigned char *data = new unsigned char DEFAULT_BUFFER_SIZE;/從RegQueryValueEx返回的值:本例中忽略改變量/從網(wǎng)絡對象(索引是510)查詢性能數(shù)據(jù)RegQueryValueEx(HKEY_PERFORMANCE_DATA, 510, NULL, &type, data, &size)PERF_DATA_BLOCK *dataBlockPtr = (PERF_DATA_BLOCK *)data;下面詳細說明,注冊表數(shù)據(jù)性能塊訪問過程的實現(xiàn):/枚舉鏈表中第一個對象PERF_OB

29、JECT_TYPE *objectPtr = FirstObject(dataBlockPtr);/遍歷鏈表 for(int a=0 ; aNumObjectTypes ; a+) char nameBuffer255;/判斷是否是網(wǎng)絡對象索引號是510if(objectPtr-ObjectNameTitleIndex = 510) /偏移變量DWORD processIdOffset = ULONG_MAX;/找到第一個計數(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; /下一個計數(shù)器counterPtr = NextCounter(counterPtr);/數(shù)據(jù)類型不是我們需要的if(processIdOffset = ULONG_MAX) delete data;return 1;/找到第一個實例(instance)PERF_INSTANCE_DEFINITION *instance

31、Ptr = FirstInstance(objectPtr);/遍歷整個實例for(b=0 ; bNumInstances ; b+) wchar_t *namePtr = (wchar_t *) (BYTE *)instancePtr + instancePtr-NameOffset);/得到這個實例的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);/如果當前的接口就是我們選擇的接口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); /下一個實例instancePtr = NextInstance(instancePtr); /下一個對象objectPtr = NextObject(obj

34、ectPtr);delete data;return 0;catch(.)return 0;4.3.4 數(shù)據(jù)統(tǒng)計模塊可以利用微軟的IP助手中的API函數(shù)實現(xiàn)IP的統(tǒng)計,通過統(tǒng)計的數(shù)據(jù)可以在一定程度上發(fā)現(xiàn)網(wǎng)絡性能瓶頸。涉及到的函數(shù)有GetUdpStatistic,GetTcpStatistic,GetIcmpStatistic,GetIStatistic,需要注意的是工程中要加載IPHelpapi.lib庫。函數(shù)調用結果通過列表可以直觀顯示出來,網(wǎng)絡管理人員可以通過其中統(tǒng)計數(shù)量的變化監(jiān)視網(wǎng)絡性能。5 分析工具測試5.1 測試環(huán)境(1) 處理器P4 2.0 G Mhz以上;(2) 內存512M以上;(3) 多臺普通搭載網(wǎng)卡的PC、經過路由器或交換機互聯(lián)。(4) 操作系統(tǒng)Win2000/NT/xp/win7/server2003等;(5) VC+6.0。5.2 測試步驟(1) 首先,用多臺PC搭建局域網(wǎng)絡。(2) 其次,選定一臺PC進行測試:數(shù)據(jù)包捕獲(含設定條件)、封包日志保存、流量峰值、數(shù)據(jù)統(tǒng)計。(3) 確定每個功能模塊的測試要求。(4) 對每個功能模塊進行數(shù)據(jù)合法性檢查、數(shù)據(jù)一致性檢查。(5) 進行各模塊的功能測試后,對關鍵模塊進行回歸測試。5.

溫馨提示

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

評論

0/150

提交評論