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

下載本文檔

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

文檔簡介

1、網(wǎng)絡(luò)流量監(jiān)控及分析工具的設(shè)計與實(shí)現(xiàn)摘 要互聯(lián)網(wǎng)迅速發(fā)展的同時,網(wǎng)絡(luò)安全問題日益成為人們關(guān)注的焦點(diǎn),病毒、惡意攻擊、非法訪問等都容易影響網(wǎng)絡(luò)的正常運(yùn)行,多種網(wǎng)絡(luò)防御技術(shù)被綜合應(yīng)用到網(wǎng)絡(luò)安全管理體系中,流量監(jiān)控系統(tǒng)便是其中一種分析網(wǎng)絡(luò)狀況的有效方法,它從數(shù)據(jù)包流量分析角度,通過實(shí)時地收集和監(jiān)視網(wǎng)絡(luò)數(shù)據(jù)包信息,來檢查是否有違反安全策略的行為和網(wǎng)絡(luò)工作異常的跡象。在研究網(wǎng)絡(luò)數(shù)據(jù)包捕獲、 TCP/IP原理的基礎(chǔ)上,采用面向?qū)ο蟮姆椒ㄟM(jìn)行了需求分析與功能設(shè)計。該系統(tǒng)在VisualC+6.0環(huán)境下進(jìn)行開發(fā),綜合采用了Socket-Raw、注冊表編程和IP助手API等VC編程技術(shù),在系統(tǒng)需求分析的基礎(chǔ)上,對主

2、要功能的實(shí)現(xiàn)方案和技術(shù)細(xì)節(jié)進(jìn)行了詳細(xì)分析與設(shè)計,并通過測試,最終實(shí)現(xiàn)了數(shù)據(jù)包捕獲、流量監(jiān)視與統(tǒng)計主要功能,達(dá)到了預(yù)定要求,為網(wǎng)絡(luò)管理員了解網(wǎng)絡(luò)運(yùn)行狀態(tài)提供了參考。關(guān)鍵詞:網(wǎng)絡(luò)管理;數(shù)據(jù)采集;流量統(tǒng)計;Winsock2目 錄論文總頁數(shù):22頁1 引言 . 1.41.52 課題背景 . 1 網(wǎng)絡(luò)安全管理的現(xiàn)狀與需求 . 1 網(wǎng)絡(luò)流量監(jiān)控的引入 . 1 本文的目的與任務(wù) . 2 論文結(jié)構(gòu)安排 . 2 相關(guān)的概念與技術(shù) . 22.1 OSI參考模型與TCP/IP體系結(jié)構(gòu) . 2OSI參考模型 . 2TCP/IP體系結(jié)構(gòu) . 3OSI模型與TCP/IP體系結(jié)構(gòu)的區(qū)別. 4 2.1.1

3、 2.1.2 傳輸層的編程接口Windows套接字編程技術(shù) . 4Windows套接字的概念 . 4套接字類型 . 5涉及的幾個基本概念 . 5 2.2.1 2.2.2 3 原始套接字 . 5 網(wǎng)絡(luò)數(shù)據(jù)的采集技術(shù)分析 . 63.13.2 Windows下原始數(shù)據(jù)包捕獲的實(shí)現(xiàn) . 6 原始數(shù)據(jù)包捕獲的關(guān)鍵函數(shù) . 74 網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)各模塊的設(shè)計與實(shí)現(xiàn) . 4.4 開發(fā)背景介紹 . 9 總體結(jié)構(gòu)設(shè)計 . 9 流程圖設(shè)計 . 10 各模塊功能概述與實(shí)現(xiàn) . 11數(shù)據(jù)包采集中各類的關(guān)系 . 11數(shù)據(jù)包捕獲與分析模塊 . 11流量獲取模塊 . 1

4、3數(shù)據(jù)統(tǒng)計模塊 . 17常見攻擊分析功能 . 18 4.4.1 4.4.2 4.4.3 4.4.4 4.4.55 系統(tǒng)測試 . 195.1 測試環(huán)境 . 19硬件環(huán)境 . 19 .25.25.3 操作系統(tǒng)及軟件運(yùn)行環(huán)境 . 19 測試步驟 . 19 測試結(jié)果評價 . 19結(jié) 論 . 19參考文獻(xiàn) . 20致 謝 . 21聲 明 . 221 引言1.1 課題背景隨著構(gòu)建網(wǎng)絡(luò)基礎(chǔ)技術(shù)和網(wǎng)絡(luò)應(yīng)用的迅速發(fā)展以及用戶對網(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ā)展,入侵和攻擊的案例日益

5、增多,對穩(wěn)定的網(wǎng)絡(luò)服務(wù)、信息安全、互聯(lián)網(wǎng)秩序都提出了嚴(yán)峻的挑戰(zhàn),網(wǎng)絡(luò)安全管理在整個網(wǎng)絡(luò)管理系統(tǒng)里扮演起更為重要的角色。1.2 網(wǎng)絡(luò)安全管理的現(xiàn)狀與需求目前,在網(wǎng)絡(luò)應(yīng)用不斷深入和技術(shù)頻繁升級的同時,非法訪問、惡意攻擊等安全威脅也在不斷推陳出新,愈演愈烈。防火墻、VPN、IDS、防病毒、身份認(rèn)證、數(shù)據(jù)加密、安全審計等安全防護(hù)和管理系統(tǒng)在網(wǎng)絡(luò)中得到了廣泛應(yīng)用。從網(wǎng)絡(luò)安全專業(yè)管理人員的角度來說,最直接的需求就是根據(jù)分類在統(tǒng)一的界面中監(jiān)視網(wǎng)絡(luò)中各種運(yùn)行性能狀態(tài),獲取相關(guān)數(shù)據(jù)信息、日志信息和報警信息等,并進(jìn)行分類匯總、分析和審計;同時完成攻擊事件報警、響應(yīng)等功能。因此,用戶的網(wǎng)絡(luò)管理需要不斷健全整體網(wǎng)絡(luò)安

6、全管理解決方案,從統(tǒng)一安全管理平臺總體調(diào)控配置到多層面、分布式的安全系統(tǒng),實(shí)現(xiàn)對各種網(wǎng)絡(luò)安全資源的集中監(jiān)控、策略管理、審計及多種安全功能模塊之間的互動,從而有效簡化網(wǎng)絡(luò)安全管理工作,提升網(wǎng)絡(luò)的安全水平和可用性、可控制性、可管理性。1.3 網(wǎng)絡(luò)流量監(jiān)控的引入網(wǎng)絡(luò)安全管理體系中,流量監(jiān)控和統(tǒng)計分析是整個管理的基礎(chǔ)。流量檢測主要目的是通過對網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行實(shí)時連續(xù)的采集監(jiān)測網(wǎng)絡(luò)流量,對獲得的流量數(shù)據(jù)進(jìn)行統(tǒng)計計算,從而得到網(wǎng)絡(luò)主要成分的性能指標(biāo)。網(wǎng)絡(luò)管理員根據(jù)流量數(shù)據(jù)就可以對網(wǎng)絡(luò)主要成分進(jìn)行性能分析管理,發(fā)現(xiàn)性能變化趨勢,并分析出影響網(wǎng)絡(luò)性能的因素及問題所在。此外,在網(wǎng)絡(luò)流量異常的情況下,通過擴(kuò)展的流量檢

7、測報警系統(tǒng)還可以向管理人員報警,及時發(fā)現(xiàn)故障加以處理。在網(wǎng)絡(luò)流量檢測的基礎(chǔ)上,管理員還可對感興趣的網(wǎng)絡(luò)管理對象設(shè)置審查值范圍及配置網(wǎng)絡(luò)性能對象,監(jiān)控實(shí)時輪詢網(wǎng)絡(luò)獲取定義對象的當(dāng)前值,若超出審查值的正常預(yù)定值則報警,協(xié)助管理員發(fā)現(xiàn)網(wǎng)絡(luò)瓶頸,這樣就能實(shí)現(xiàn)一定程度上的故障管理。而網(wǎng)絡(luò)流量檢測本身也涉及到安全管理方面的內(nèi)容。由此可見,對于一個有效的網(wǎng)絡(luò)安全管理系統(tǒng)來說,功能的實(shí)現(xiàn)都或多或少的依賴于流量信息的獲取。因此網(wǎng)絡(luò)流量信息的采集可以說是網(wǎng)絡(luò)安全管理系統(tǒng)得以實(shí)現(xiàn)的核心基石。它的應(yīng)用可以在一定程度上檢測到入侵攻擊,可以有效地幫助管理人員進(jìn)行網(wǎng)絡(luò)性能管理,并利用報警機(jī)制協(xié)助網(wǎng)管人員采取對應(yīng)的安全第 1

8、 頁 共 22 頁策略與防護(hù)措施,從而減少入侵攻擊所造成的損失。1.4 本文的目的與任務(wù)該網(wǎng)絡(luò)流量監(jiān)控及分析工具主要用途是通過實(shí)時連續(xù)地采集網(wǎng)絡(luò)數(shù)據(jù)并對其進(jìn)行統(tǒng)計,得到主要成分性能指標(biāo),結(jié)合網(wǎng)絡(luò)流量的理論,通過統(tǒng)計出的性能指數(shù)觀察網(wǎng)絡(luò)狀態(tài),分析出網(wǎng)絡(luò)變化趨勢,找出影響網(wǎng)絡(luò)性能的因素。本設(shè)計題目是教師自擬項(xiàng)目,前期任務(wù)主要是設(shè)計并完成系統(tǒng)的初步框架,實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)的捕獲,并解決相應(yīng)問題,后期主要是通過一些API函數(shù)完成對各類數(shù)據(jù)信息的統(tǒng)計。本系統(tǒng)實(shí)現(xiàn)以下功能:(1)采用Winsock編寫原始套接字Socket-Raw對數(shù)據(jù)包進(jìn)行采集捕獲,并可實(shí)現(xiàn)分類及自定義范圍進(jìn)行捕獲;(2)對捕獲的數(shù)據(jù)包進(jìn)行一

9、定的解析;(3)訪問操作系統(tǒng)提供的網(wǎng)絡(luò)性能參數(shù)接口,得到網(wǎng)卡總流量、輸入流量和輸出流量;(4)系統(tǒng)提供了多種方式顯示結(jié)果,如曲線圖、列表等;(5)使用IP幫助API獲取網(wǎng)絡(luò)統(tǒng)計信息;(6)實(shí)現(xiàn)對部分常見威脅的預(yù)警,可繼續(xù)開發(fā)擴(kuò)展其報警功能。1.5 論文結(jié)構(gòu)安排本論文圍繞Winsock標(biāo)準(zhǔn)套接字網(wǎng)絡(luò)編程的各項(xiàng)實(shí)踐內(nèi)容展開。具體內(nèi)容安排如下:第一章是引言,簡要介紹開發(fā)背景、設(shè)計任務(wù)和論文結(jié)構(gòu)安排;第二章介紹網(wǎng)絡(luò)基礎(chǔ)理論研究、數(shù)據(jù)包捕獲與流量檢測的技術(shù)原理;第三章介紹如何使用原始套接字實(shí)現(xiàn)數(shù)據(jù)捕獲;第四章重點(diǎn)介紹網(wǎng)絡(luò)流量監(jiān)測工具的設(shè)計與實(shí)現(xiàn)過程,并且詳細(xì)闡述了從系統(tǒng)功能總體設(shè)計、詳細(xì)設(shè)計、具體實(shí)現(xiàn)的

10、全部過程;第五章介紹了軟件測試情況。2 相關(guān)的概念與技術(shù)2.1 OSI參考模型與TCP/IP體系結(jié)構(gòu)2.1.1 OSI參考模型開放系統(tǒng)互聯(lián)參考模型OSI是由國際標(biāo)準(zhǔn)化組織ISO制定的標(biāo)準(zhǔn)化開放式的計算機(jī)網(wǎng)絡(luò)層次結(jié)構(gòu)模型,其結(jié)構(gòu)如圖1所示??梢钥闯觯摻Y(jié)構(gòu)共有七層,各層主要實(shí)現(xiàn)如下功能:(1)物理層,利用傳輸介質(zhì)實(shí)現(xiàn)相鄰節(jié)點(diǎn)間的物理連接,主要對機(jī)械、電氣、功能和規(guī)程四個方面及信號傳輸速率方面進(jìn)行規(guī)定;(2)數(shù)據(jù)鏈路層,完成管理數(shù)據(jù)的傳輸,提供差錯檢測和恢復(fù),并且提供第 2 頁 共 22 頁流量控制,最終實(shí)現(xiàn)向上一層提供無差錯、高可靠性的傳輸鏈路;(3)網(wǎng)絡(luò)層,執(zhí)行路由算法和流量控制算法,完成數(shù)據(jù)

11、分組傳輸,它是通信子網(wǎng)的最高層;(4)傳輸層,提供端到端的無差錯傳輸,同時,它也提供屬于局通信網(wǎng)絡(luò)接口,比如SOCKET;(5)會話層,完成用戶之間會話的組織、協(xié)調(diào)、分配用戶名等;(6)表示層,解決數(shù)據(jù)格式問題,規(guī)定編碼方式;(7)應(yīng)用層,OSI的最高層,利用應(yīng)用進(jìn)程提供網(wǎng)絡(luò)訪問手段。2.1.2 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)如

12、圖2所示。圖2 OSI參考模型與TCP/IP結(jié)構(gòu)第 3 頁 共 22 頁 圖1 OSI參考模型TCP/IP在設(shè)計時重點(diǎn)并沒有放在具體通信的實(shí)現(xiàn)上,所以對最后兩層沒有做出具體規(guī)定,同時表明它允許不同類型的通信網(wǎng)絡(luò)參與通信。它的四個層次功能如下。(1)應(yīng)用層,提供常用的應(yīng)用程序及自定義的應(yīng)用程序,數(shù)據(jù)傳輸時用TCP/IP協(xié)議來進(jìn)行;(2)傳輸層,提供端到端的應(yīng)用程序之間的通信,可以使用傳輸控制協(xié)議TCP(Transmission Control Protocol)或用戶數(shù)據(jù)報協(xié)議UDP(User Datagram Protocol)協(xié)議,前者提供可靠傳輸,傳送單位是報文段,后者提供不可靠服務(wù),傳輸

13、單位是數(shù)據(jù)報,即分組。此外,傳輸層另外一個功能就是區(qū)別應(yīng)用程序;(3)網(wǎng)際層,負(fù)責(zé)計算機(jī)之間的通信,采用的協(xié)議是IP協(xié)議,數(shù)據(jù)傳送單位是分組,向上提供不可靠的傳輸服務(wù);(4)網(wǎng)絡(luò)接口層,負(fù)責(zé)接收數(shù)據(jù)報,并實(shí)現(xiàn)發(fā)送,或者接收幀,提取IP數(shù)據(jù)報,交給互聯(lián)網(wǎng)層。2.1.3 OSI模型與TCP/IP體系結(jié)構(gòu)的區(qū)別從前面的分析可以看出OSI模型和TCP/IP體系有許多不同之處,主要體現(xiàn)在問題的處理上面,例如:(1)TCP/IP一開始就考慮的是異構(gòu)網(wǎng)絡(luò)的互聯(lián)問題,并將IP看作是整個體系的重要組成部分,而ISO并沒有認(rèn)識到網(wǎng)際協(xié)議IP的重要性,導(dǎo)致最后只能單獨(dú)劃分一個子層來完成IP的作用;(2)OSI最開始

14、只注意到了面向連接的服務(wù),而TCP/IP一開始就注意了面向連接和無連接的并重。相比起來,TCP/IP更注重了數(shù)據(jù)傳輸?shù)男?,而OSI則注重了傳輸?shù)目煽啃裕唬?)TCP/IP雖然分層,但是調(diào)用關(guān)系并不像OSI那樣嚴(yán)格,減少了不必要的開銷,提高了傳輸效率。2.2 傳輸層的編程接口Windows套接字編程技術(shù)2.2.1 Windows套接字的概念Windows套接字SOCKET,是為Windows系統(tǒng)開發(fā)的一套標(biāo)準(zhǔn)通用支持網(wǎng)絡(luò)協(xié)議數(shù)據(jù)通信的API,它是網(wǎng)絡(luò)通信的基礎(chǔ),即TCP/IP的網(wǎng)絡(luò)編程接口,1994年被定為網(wǎng)絡(luò)編程標(biāo)準(zhǔn)后,主要經(jīng)歷了Winsock1.1和Winsock2.0兩種版本,它產(chǎn)生最終

15、目的是可以適應(yīng)應(yīng)用程序開發(fā)者、網(wǎng)絡(luò)服務(wù)商的需求,進(jìn)程通過套接字的通信域來完成通信。需要指出的是,套接字主要負(fù)責(zé)控制數(shù)據(jù)的輸入與輸出,主要在傳輸層和網(wǎng)絡(luò)層,屏蔽了數(shù)據(jù)鏈路層和物理層。 2第 4 頁 共 22 頁2.2.2 套接字類型根據(jù)通信性質(zhì)把套接字主要分為流式套接字和數(shù)據(jù)報套接字兩種。它們的區(qū)別在于流式套接字提供雙向、有序、無重復(fù)的數(shù)據(jù)流服務(wù),但相對于數(shù)據(jù)報套接字來說系統(tǒng)開銷較大。數(shù)據(jù)報套接字也支持雙向數(shù)據(jù)流,但并不注重傳輸可靠性、無重復(fù)性和有序性,但它保留了記錄邊界,由于數(shù)據(jù)報傳輸效率較高,所以還是得到了比較廣泛的應(yīng)用。2.2.3 涉及的幾個基本概念(1)字節(jié)順序,不同的計算機(jī)采用不同的自

16、己順序存儲數(shù)據(jù),所以在這些數(shù)據(jù)進(jìn)行通信時需要進(jìn)行字節(jié)順序的轉(zhuǎn)換,所有傳送給網(wǎng)絡(luò)上套接字函數(shù)的IP地址和端口號均按照網(wǎng)絡(luò)順序安排,主要由sockaddr_in這個結(jié)構(gòu)規(guī)范。特別要注意的是,應(yīng)用程序建立地址結(jié)構(gòu)之前,用戶輸入需要將主機(jī)序列轉(zhuǎn)換為網(wǎng)絡(luò)序列(使用htons函數(shù),反之使用ntohs函數(shù))。(2)阻塞與非阻塞,套接字有同步阻塞和異步非阻塞兩種方法,阻塞模式時,套接字需要等待操作全部完成才結(jié)束,而當(dāng)套接字處于非阻塞模式時,套接字以是否有新數(shù)據(jù)到達(dá)作為阻塞的標(biāo)志。阻塞方式套接字簡單、方便,但是效率比較低,而非阻塞模式使用復(fù)雜點(diǎn),但效率很高。但是仍需強(qiáng)調(diào)一點(diǎn),Winsock提供了幾種I/O模型來

17、解決異步問題,如“選擇”、“重疊”、“事件選擇”、“異步選擇”等。 32.3 原始套接字從用戶的角度來看,標(biāo)準(zhǔn)的流式套接字和數(shù)據(jù)報套接字這兩類套接字似乎涵蓋了TCP/IP應(yīng)用的全部,因?yàn)榛赥CP/IP的應(yīng)用,從協(xié)議棧的層次(如圖3所示)上講,在傳輸層的確只可能建立于TCP或UDP協(xié)議之上,而流式套接字和數(shù)據(jù)報套接字又分別對應(yīng)于TCP和UDP,所以幾乎所有的應(yīng)用都可以用這兩類套接字實(shí)現(xiàn)。但是,當(dāng)需要自定義數(shù)據(jù)包發(fā)送時或者需要分析所有經(jīng)過網(wǎng)絡(luò)的數(shù)據(jù)包的時候,就必須面臨一種不同于前兩者的方式Raw Socket,即原始套接字,程序員可以用它來發(fā)送和接收 IP 層以上的原始數(shù)據(jù)包, 如 ICMP,T

18、CP, UDP等,不僅這樣,它還可以實(shí)現(xiàn)如偽裝本地IP、發(fā)送ICMP包等功能。第 5 頁 共 22 頁Raw Socket廣泛應(yīng)用于高級網(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é)議的外圍,如圖4所示。圖 4 標(biāo)準(zhǔn)套接與原始套接字的關(guān)系圖 3 協(xié)議棧層次3 網(wǎng)絡(luò)數(shù)據(jù)的

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

20、據(jù)幀,一種是與自己的硬件相匹配的數(shù)據(jù)幀,另一種四向所有計算機(jī)廣播的數(shù)據(jù)幀。在系統(tǒng)中,數(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ū)動程序設(shè)置的網(wǎng)卡中斷程序地址調(diào)用驅(qū)動程序接收數(shù)據(jù),然后放入堆棧進(jìn)行系統(tǒng)相關(guān)處理,若不匹配則直接丟棄該數(shù)據(jù)包。對于網(wǎng)絡(luò)接口,它一般具有4種數(shù)據(jù)接收模式:廣播、組播、直接和混雜模式,只有當(dāng)把接口設(shè)置為混雜模式時,網(wǎng)絡(luò)接口才能接收所有的數(shù)據(jù),無論地址是否匹配,所以在做本設(shè)計的時候一定要設(shè)置為混雜模式才能實(shí)現(xiàn)數(shù)據(jù)的采集。第二,需要了解套接字的工作程序和使用方法:一般來說,采

21、用套接字開發(fā)網(wǎng)絡(luò)程序需要經(jīng)歷以下幾個基本步驟:啟動、創(chuàng)建、綁定、監(jiān)聽(接受連接)、連接、發(fā)送/接收數(shù)據(jù)、關(guān)閉、卸載等。第三,具體到Windows下利用原始套接字捕獲網(wǎng)絡(luò)數(shù)據(jù)可以這樣設(shè)計:(1)啟動套接字;(2)創(chuàng)建一個原始套接字;(3)將套接字與本地地址綁定;(4)設(shè)置操作參數(shù);(5)設(shè)置網(wǎng)絡(luò)接口為混雜模式;(6)啟動監(jiān)聽線程,開始接收數(shù)據(jù);(7)退出關(guān)閉套接字。 33.2 原始數(shù)據(jù)包捕獲的關(guān)鍵函數(shù)(1)啟動函數(shù)WSAStartupint PASCAL FAR WSAStartup (DWORD wVersionRequested , LPWSADATA lpWSAData);每一個套接字應(yīng)用

22、程序都必須調(diào)用該函數(shù)進(jìn)行一系列初始化工作,并且只有調(diào)用成功返回后,才能開始使用套接字,其中參數(shù)wVersionRequested是版本號,高字節(jié)是次版本號、低字節(jié)是主版本號,參數(shù)lpWSAData是指向WSADATA結(jié)構(gòu)的指針。(2)套接字創(chuàng)建函數(shù)socketSOCKET socket (int af , int type , int protocol);所有的通信在建立之前都必須創(chuàng)建一個套接字,socket函數(shù)的功能就是創(chuàng)第 7 頁 共 22 頁建套接字,其中參數(shù)af指協(xié)議地址族(address family),當(dāng)建立的套接字是依賴于UDP或TCP的話,需要設(shè)置af為AF_INET,表示采用

23、IP協(xié)議。參數(shù)type是指協(xié)議的套接字類型,采用流式套接字時用SOCK_STREAM,采用數(shù)據(jù)報套接字時用SOCK_DGRAM,采用原始套接字時用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是需要綁定的通信對象的信息結(jié)構(gòu)體指針,namelen是該結(jié)構(gòu)的長度。需要注意的是sockaddr_in結(jié)構(gòu):struct soc

24、kaddr_inshort sin_family; /地址族,設(shè)置為AF_INETunsigned short sin_port; /指定的端口號struct in_addr sin_addr; /IP地址char;由于主機(jī)序列與網(wǎng)絡(luò)序列的關(guān)系,在程序中需要使用htons等函數(shù)進(jìn)行轉(zhuǎn)換工作。(4)設(shè)置接口模式函數(shù)WSAIoctlint WSAAPI WSAIoctl(SOCKET s, DWORDdwIoControlCode, LPVOID lpvInBuffer, DWORDcbInBuffer, LPVOID lpvOutBuffer, DWORDcbOutBuffer, LPDWORD

25、 lpcbBytesReturned,LPWSAOVERLAPPED lpOverlapped,LPWSAOVERLAPPED_COMPLETION_ROUTINElpCompletionRoutine);其中,s為一個套接口的句柄,dwIoControlCode為操作控制代碼,lpvInBuffer為輸入緩沖區(qū)的地址,cbInBuffer為輸入緩沖區(qū)的大小,lpvOutBuffer為輸出緩沖區(qū)的地址,cbOutBuffer為輸出緩沖區(qū)的大小,lpcbBytesReturned為輸出實(shí)際字節(jié)數(shù)的地址,lpOverlapped為WSAOVERLAPPED結(jié)構(gòu)的地址,lpCompletionRou

26、tine為一個指向操作結(jié)束后調(diào)用的例程指針。調(diào)用成功后,WSAIoctl 函數(shù)返回0,否則的話,將返回INVALID_SOCKET錯誤,應(yīng)用程序可通過WSAGetLastError來獲取錯誤代碼。 sin_zero8;第 8 頁 共 22 頁(5)數(shù)據(jù)接收函數(shù)recvint recv (SOCKET s , char* buf ,int len , int flags);4 網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)各模塊的設(shè)計與實(shí)現(xiàn)4.1 開發(fā)背景介紹本設(shè)計開發(fā)平臺采用Microsoft Visualstudio6.0,它是目前使用比較廣泛的Winsock開發(fā)平臺,因此具有較強(qiáng)的適應(yīng)性,能夠在很多的操作系統(tǒng)平臺上運(yùn)行

27、,設(shè)計后具有直觀的簡潔的操作界面,穩(wěn)定性也比較高。4.2 總體結(jié)構(gòu)設(shè)計通過收集與分析簡單網(wǎng)絡(luò)流量監(jiān)控軟件的用戶需求,總結(jié)出以下特征:(1)需要實(shí)現(xiàn)對網(wǎng)絡(luò)接口數(shù)據(jù)包的盡可能多的捕獲,將網(wǎng)卡設(shè)置為混雜模式,然后進(jìn)行數(shù)據(jù)包的采集;(2)數(shù)據(jù)包的內(nèi)容要進(jìn)行一定的解析,對數(shù)據(jù)包的協(xié)議類型、源目地址、數(shù)據(jù)包截獲時間、數(shù)據(jù)包內(nèi)容需要進(jìn)行分析;(3)根據(jù)用戶不同的要求能夠依照特定地址范圍、特定協(xié)議類型相關(guān)包等條件進(jìn)行自定義監(jiān)視;(4)監(jiān)視結(jié)果輸出有實(shí)時流量圖、列表等顯示;(5)實(shí)現(xiàn)日志記錄,便于日后分析;(6)對某些常見的攻擊進(jìn)行發(fā)現(xiàn)分析。總合以上系統(tǒng)要求與綜合分析,本系統(tǒng)總體設(shè)計如下,采用VC+6.0編寫,

28、系統(tǒng)具有三個主要功能部分:數(shù)據(jù)捕獲與顯示模塊、流量信息統(tǒng)計模塊、流量繪制模塊,如圖5所示。圖 5 系統(tǒng)總體設(shè)計結(jié)構(gòu)圖 數(shù)據(jù)采集模塊 信息統(tǒng)計模塊 流量繪制模塊 流量監(jiān)控分析系統(tǒng)數(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ù)據(jù)封包日志記錄,提高了系統(tǒng)的靈活性。同時,在對數(shù)據(jù)包的解析過程中對一些常見入侵攻擊特征進(jìn)行判斷,發(fā)出預(yù)警。該模塊采用編寫原始套接字開發(fā)。第 9 頁 共 22 頁信息統(tǒng)計模塊:完成統(tǒng)計功能,如統(tǒng)計IP要實(shí)現(xiàn)統(tǒng)計接收到的數(shù)據(jù)報數(shù)量、接收到的數(shù)據(jù)中

29、協(xié)議出錯的數(shù)量、正在請求傳輸?shù)臄?shù)量、路由表中可用路由數(shù)量、丟棄的數(shù)量、需要重組/成功重組的數(shù)量等,統(tǒng)計ICMP需要完成發(fā)送/接收的消息數(shù)量、滿足超過TTL的數(shù)量、重定向數(shù)量、時間戳請求/應(yīng)答數(shù)量等;采用IP助手函數(shù)完成。流量繪制模塊:完成總流量、輸入流量、輸出流量、瞬時流量值、最高流量值的顯示;采用訪問注冊表網(wǎng)絡(luò)性能數(shù)據(jù)完成有關(guān)數(shù)據(jù)的獲取,通過流量圖顯示。4.3 流程圖設(shè)計根據(jù)上面對各個功能模塊的劃分,進(jìn)行更進(jìn)一步的分析和設(shè)計,得到數(shù)據(jù)采集、注冊表網(wǎng)絡(luò)性能塊訪問大致的工作流程圖,如圖6與圖7所示。第 10 頁 共 22 頁 圖 7 網(wǎng)絡(luò)性能數(shù)據(jù)塊訪問流程圖 6 數(shù)據(jù)捕獲處理流程4.4 各模塊功

30、能概述與實(shí)現(xiàn)4.4.1 數(shù)據(jù)包采集中各類的關(guān)系經(jīng)過上面的分析與設(shè)計,得到該系統(tǒng)的總體功能結(jié)構(gòu)、工作流程,也確定了從編寫套接字到最后捕獲數(shù)據(jù),要經(jīng)過創(chuàng)建、綁定、設(shè)置工作模式、啟動線程、接收數(shù)據(jù)等一系列的處理操作。為了實(shí)現(xiàn)處理中的每一步操作,設(shè)計了數(shù)據(jù)捕獲的類關(guān)系,如圖8所示。圖 8 數(shù)據(jù)包采集中各類的關(guān)系在上圖中CSockSupport,CSockHelper ,CPackInterDlg,CBinDataDlg等是封裝了各部分主要處理功能的類。且這些類中封裝了和這些類的操作相關(guān)的方法。將在后面對這些類的功能和實(shí)現(xiàn)進(jìn)行詳細(xì)介紹。4.4.2 數(shù)據(jù)包捕獲與分析模塊(1)功能實(shí)現(xiàn)說明該功能模塊主要由封

31、裝的CSockSupport,CsockHelper ,CpackInterDlg,CbinDataDlg四個類完成,下面將對這些類進(jìn)行詳細(xì)說明。CsockSupport類:主要負(fù)責(zé)檢查Socket是否支持2.0版本,在該類中封裝了WSAStartup完成Socket的啟動;CsockHelper類:主要實(shí)現(xiàn)了從獲取本機(jī)信息結(jié)構(gòu)、Socket創(chuàng)建、綁定、設(shè)置、啟動線程、數(shù)據(jù)接收到協(xié)議分析的全部方法,詳細(xì)處理流程見圖9所示。GetLocalIP實(shí)現(xiàn)獲取本機(jī)地址操作的方法,LPHOSTENT lphp是定義一個主機(jī)信息結(jié)構(gòu),獲取過程由gethostname(szLocname,MAX_HOSTNA

32、ME_LAN)與圖 9 CSockHelper類處理流程 gethostbyname(szLocname)完成;第一個參數(shù)是用于放置本機(jī)名稱的緩沖,第二個參數(shù)是緩沖區(qū)長度,最后利用inet_ntoa將IP地址轉(zhuǎn)化為“.”式地址。第 11 頁 共 22 頁StartCapture方法完成套接字的創(chuàng)建、綁定、設(shè)置操作方式和啟動線程;具體完成如下:m_sockCap = socket(AF_INET , SOCK_RAW , IPPROTO_IP);/創(chuàng)建套接字 bind(m_sockCap, (PSOCKADDR)&sa, sizeof(sa);/綁定setsockopt(m_sockCa

33、p, SOL_SOCKET, SO_REUSEADDR, (char*)&bopt, sizeof(bopt) ;/設(shè)置操作setsockopt(m_sockCap,sizeof(bopt) ;/設(shè)置操作WSAIoctl(m_sockCap,SIO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen),dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);/混雜模式m_hCapThread = CreateThread(NULL, 0, CaptureThread, th

34、is, 0, NULL);/啟動線程線程函數(shù)CaptureThread主要完成數(shù)據(jù)的接收。數(shù)據(jù)接收后,將緩沖區(qū)數(shù)據(jù)轉(zhuǎn)化為IP數(shù)據(jù)格式后即可以開始解析過程,協(xié)議名稱獲取如下:for(int i=0; i<MAX_PROTO_NUM; i+)ParseIPPack方法完成數(shù)據(jù)包的解析:int iIphLen = sizeof(unsigned long) * (pIpheader->h_lenver & 0xf) /獲取數(shù)據(jù)包長度協(xié)議解析:switch(iProtocol) case IPPROTO_TCP : case IPPROTO_UDP : case IPPROTO_I

35、CMP :default : StopCapture完成關(guān)閉線程和套接字操作: if(ProtoMapi.ProtoNum=iProtocol) return ProtoMapi.ProtoText; return “”; IPPROTO_IP, IP_HDRINCL, (char*)&bopt,第 12 頁 共 22 頁if(m_hCapThread) TerminateThread(m_hCapThread, 0); /中斷進(jìn)程 CloseHandle(m_hCapThread); /關(guān)閉句柄 m_hCapThread = NULL; closesocket(m_sockCap);

36、 /關(guān)閉套接字 if(m_sockCap)CbinDataDlg類主要完成對已捕獲數(shù)據(jù)的存儲和顯示方法;CpackInterDlg類通過建立CbinDataDlg類和CsockHelper類對象實(shí)現(xiàn)數(shù)據(jù)捕獲、解析、顯示、存儲等,同時它完成對捕獲條件設(shè)置控件、日志記錄控件的編寫,在這里就不做詳細(xì)介紹了。(2)界面設(shè)計(見圖10)圖 10 數(shù)據(jù)捕獲模塊界面4.4.3 流量獲取模塊(1)設(shè)計說明設(shè)計思路:實(shí)際編程時,Windows系統(tǒng)內(nèi)提供了一個系統(tǒng)性能的接口,只需要訪問這個接口就可以得到網(wǎng)絡(luò)性能相關(guān)的數(shù)據(jù),如流量;根據(jù)這個想法,設(shè)計出了本功能模塊的子功能模塊如下: 訪問性能數(shù)據(jù)子模塊:負(fù)責(zé)對注冊表

37、進(jìn)行訪問,獲取流量數(shù)據(jù); 顯示子模塊:負(fù)責(zé)將數(shù)據(jù)繪制在窗口中;第 13 頁 共 22 頁 框架子模塊:負(fù)責(zé)消息映射和消息處理;本模塊中,將使用到一個注冊表訪問函數(shù)RegQueryValueEx,它根據(jù)開放的注冊表鍵值與名字查找相關(guān)的類型和數(shù)據(jù)。它的函數(shù)原型如下:LONG RegQueryValueEx(HKEY hKey , LPCTSTR lpValueName , LPDWORD lpReserved , LPDWORD lpType , LPBYTE lpData , LPDWORD lpcbData);參數(shù)說明: hKey為預(yù)定的注冊表系統(tǒng)鍵值; lpValueName為需要查詢的目標(biāo)

38、鍵值的名字; lpReserved保留,但是必須為NULL; lpType為鍵值類型; lpData輸入/輸出接收鍵值的數(shù)據(jù); lpcbData輸入/輸出接收鍵值的緩沖大小標(biāo)志。在WindowsNT下,當(dāng)調(diào)用RegQueryValueEx時,若hKey被設(shè)置為HKEY_PERFORMANCE_DATA返回的數(shù)據(jù)并不是直接顯示被請求的數(shù)據(jù)對象。所以程序需要遍歷整個數(shù)據(jù)塊,數(shù)據(jù)塊中的邏輯結(jié)構(gòu)如圖11所示。圖 11 注冊表網(wǎng)絡(luò)性能數(shù)據(jù)塊邏輯結(jié)構(gòu)參照圖4-6可以很容易地確定性能數(shù)據(jù)塊的查詢過程,從數(shù)據(jù)塊的性能數(shù)據(jù)結(jié)構(gòu)PERF_DATA_BLOCK開始,然后索引到PERF_OBJECT_TYPE結(jié)構(gòu),而

39、PERF_COUNTER_DEFINITION結(jié)構(gòu)可以通過PERF_OBJECT_TYPE的成員HeaderByteLength找到位置偏移,每一個PERF_OBJECT_TYPE的成員DefinitionLength都能確定一個對應(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 = Interfaces.GetAt(pos);/開辟性能數(shù)據(jù)緩沖第 14 頁 共 22 頁unsigned char

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

41、tPtr = FirstObject(dataBlockPtr);/遍歷鏈表for(int a=0 ; a<(int)dataBlockPtr->NumObjectTypes ; a+) char nameBuffer255; if(objectPtr->ObjectNameTitleIndex = 510) /偏移變量 DWORD processIdOffset = ULONG_MAX; /找到第一個計數(shù)器 PERF_COUNTER_DEFINITION *counterPtr = FirstCounter(objectPtr); /遍歷鏈表 for(int b=0 ; b

42、<(int)objectPtr->NumCounters ; b+) /判斷接收的數(shù)據(jù)類型是否是我們需要的 if(int)counterPtr->CounterNameTitleIndex = CurrentTrafficType) processIdOffset = counterPtr->CounterOffset; /下一個計數(shù)器 counterPtr = NextCounter(counterPtr); if(processIdOffset = ULONG_MAX) delete data; return 1; /找到第一個實(shí)例(instance) /判斷是否是

43、網(wǎng)絡(luò)對象索引號是510 /數(shù)據(jù)類型不是我們需要的第 15 頁 共 22 頁P(yáng)ERF_INSTANCE_DEFINITION *instancePtr = FirstInstance(objectPtr);/遍歷整個實(shí)例 for(b=0 ; b<objectPtr->NumInstances ; b+) wchar_t *namePtr = (wchar_t *) (BYTE *)instancePtr +*counterBlockPtr = /得到這個實(shí)例的PERF_COUNTER_BLOCK instancePtr->NameOffset); PERF_COUNTER_BL

44、OCKGetCounterBlock(instancePtr);/現(xiàn)在得到了接口的名字char *pName = WideToMulti(namePtr, nameBuffer, sizeof(nameBuffer); POSITION pos = TotalTraffics.FindIndex(b); /下一個實(shí)例 instancePtr = NextInstance(instancePtr); delete data; return(trafficdelta); if(pos!=NULL) fullTraffic = *(DWORD *) (BYTE *)counterBlockPtr +

45、 TotalTraffics.SetAt(pos,fullTraffic); if(InterfaceName = iName) traffic = *(DWORD *) (BYTE *)counterBlockPtr + processIdOffset); /如果當(dāng)前的接口就是我們選擇的接口 processIdOffset); /判斷處理的接口是否是新的 if(CurrentInterface != interfaceNumber) lasttraffic = acttraffic; trafficdelta = 0.0; CurrentInterface = interfaceNumber; else lasttraffic = acttraffic; trafficdelta = acttraffic - lasttraffic;第 16 頁 共 22 頁 objectPtr = NextObject(objectPtr); delete data; return 0; /下一個對象 catch(.) return 0;(2)界面設(shè)計(見圖12)4.4.4 數(shù)據(jù)統(tǒng)計模塊(

溫馨提示

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

評論

0/150

提交評論