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

下載本文檔

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

文檔簡介

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

2、c+6.0 環(huán)境下進行開發(fā),綜合采用 了 socket-raw、注冊表編程和 ip 助手 api 等 vc 編程技術(shù),在系統(tǒng)需求分析的 基礎(chǔ)上,對主要功能的實現(xiàn)方案和技術(shù)細節(jié)進行了詳細分析與設(shè)計,并通過測 試,最終實現(xiàn)了數(shù)據(jù)包捕獲、流量監(jiān)視與統(tǒng)計主要功能,達到了預(yù)定要求,為 網(wǎng)絡(luò)管理員了解網(wǎng)絡(luò)運行狀態(tài)提供了參考。 關(guān)鍵詞關(guān)鍵詞:網(wǎng)絡(luò)管理;數(shù)據(jù)采集;流量統(tǒng)計;winsock2 the design and implementation of monitoring and analyzing tool for network traffic abstract with the rapid deve

3、lopment of internet, network safety has become peoples concern, virus, vigorous attack, illegal visit and so on can easily affect the normal network performance. various kinds of network defending technology have been comprehensively applied into the management system of network safety. network traf

4、fic system is one of the effective measures to analysis network condition. from the angle of analyzing packet traffic, it can examine the safety violation and the abnormal performance of network by timely collecting and monitoring packets information. by using the way of object-oriented, this design

5、 makes a needs analysis and ability designing based on the study of network packet collecting and tcp/ip theory. under the environment of visual c+6.0, this system adopts vc program technologies of socket-raw, windows register and iphelper api. on the basis of system analysis, it makes a deliberate

6、analysis and test of plans and details to implement packets collecting, traffic monitoring and statistics. so this meets our needs and makes a reference for managers to get to know the network conditions. key words: network management; data collection; traffic analysis; winsock2 目目 錄錄 論文總頁數(shù):22 頁 1引言

7、.1 1.1課題背景.1 1.2網(wǎng)絡(luò)安全管理的現(xiàn)狀與需求.1 1.3網(wǎng)絡(luò)流量監(jiān)控的引入.1 1.4本文的目的與任務(wù).2 1.5論文結(jié)構(gòu)安排.2 2相關(guān)的概念與技術(shù).2 2.1osi 參考模型與 tcp/ip 體系結(jié)構(gòu).2 2.1.1osi 參考模型.2 2.1.2tcp/ip 體系結(jié)構(gòu).3 2.1.3osi 模型與 tcp/ip 體系結(jié)構(gòu)的區(qū)別.4 2.2傳輸層的編程接口windows 套接字編程技術(shù) .4 2.2.1windows 套接字的概念 .4 2.2.2套接字類型.5 2.2.3涉及的幾個基本概念.5 2.3原始套接字.5 3網(wǎng)絡(luò)數(shù)據(jù)的采集技術(shù)分析.6 3.1windows 下原始數(shù)

8、據(jù)包捕獲的實現(xiàn) .6 3.2原始數(shù)據(jù)包捕獲的關(guān)鍵函數(shù).7 4網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)各模塊的設(shè)計與實現(xiàn).9 4.1開發(fā)背景介紹.9 4.2總體結(jié)構(gòu)設(shè)計.9 4.3流程圖設(shè)計.10 4.4各模塊功能概述與實現(xiàn).11 4.4.1數(shù)據(jù)包采集中各類的關(guān)系.11 4.4.2數(shù)據(jù)包捕獲與分析模塊.11 4.4.3流量獲取模塊.13 4.4.4數(shù)據(jù)統(tǒng)計模塊.17 4.4.5常見攻擊分析功能.18 5系統(tǒng)測試.19 5.1測試環(huán)境.19 5.1.1硬件環(huán)境.19 5.1.2操作系統(tǒng)及軟件運行環(huán)境.19 5.2測試步驟.19 5.3測試結(jié)果評價.19 結(jié) 論.19 參考文獻.20 致 謝.21 聲 明.22 第 2 頁

9、 共 22 頁 1 1 引言引言 1.11.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)定運行和持續(xù)發(fā)展,更重要的是,隨著網(wǎng)絡(luò)規(guī)模的擴大和黑客技術(shù)的發(fā)展, 入侵和攻擊的案例日益增多,對穩(wěn)定的網(wǎng)絡(luò)服務(wù)、信息安全、互聯(lián)網(wǎng)秩序都提 出了嚴峻的挑戰(zhàn),網(wǎng)絡(luò)安全管理在整個網(wǎng)絡(luò)管理系統(tǒng)里扮演起更為重要的角色。 1.21.2 網(wǎng)絡(luò)安全管理的現(xiàn)狀與需求網(wǎng)絡(luò)安全管理的現(xiàn)狀與需求 目前,在網(wǎng)絡(luò)應(yīng)用不斷深入和技術(shù)頻繁升級的同時,非法訪問、惡意攻擊 等安全威脅也在不斷推陳出新,愈演愈烈。防火墻、vpn、

10、ids、防病毒、身份 認證、數(shù)據(jù)加密、安全審計等安全防護和管理系統(tǒng)在網(wǎng)絡(luò)中得到了廣泛應(yīng)用。 從網(wǎng)絡(luò)安全專業(yè)管理人員的角度來說,最直接的需求就是根據(jù)分類在統(tǒng)一的界 面中監(jiān)視網(wǎng)絡(luò)中各種運行性能狀態(tài),獲取相關(guān)數(shù)據(jù)信息、日志信息和報警信息 等,并進行分類匯總、分析和審計;同時完成攻擊事件報警、響應(yīng)等功能。因 此,用戶的網(wǎng)絡(luò)管理需要不斷健全整體網(wǎng)絡(luò)安全管理解決方案,從統(tǒng)一安全管 理平臺總體調(diào)控配置到多層面、分布式的安全系統(tǒng),實現(xiàn)對各種網(wǎng)絡(luò)安全資源 的集中監(jiān)控、策略管理、審計及多種安全功能模塊之間的互動,從而有效簡化 網(wǎng)絡(luò)安全管理工作,提升網(wǎng)絡(luò)的安全水平和可用性、可控制性、可管理性。 1.31.3 網(wǎng)絡(luò)流

11、量監(jiān)控的引入網(wǎng)絡(luò)流量監(jiān)控的引入 網(wǎng)絡(luò)安全管理體系中,流量監(jiān)控和統(tǒng)計分析是整個管理的基礎(chǔ)。 流量檢測主要目的是通過對網(wǎng)絡(luò)數(shù)據(jù)進行實時連續(xù)的采集監(jiān)測網(wǎng)絡(luò)流量, 對獲得的流量數(shù)據(jù)進行統(tǒng)計計算,從而得到網(wǎng)絡(luò)主要成分的性能指標。網(wǎng)絡(luò)管 理員根據(jù)流量數(shù)據(jù)就可以對網(wǎng)絡(luò)主要成分進行性能分析管理,發(fā)現(xiàn)性能變化趨 勢,并分析出影響網(wǎng)絡(luò)性能的因素及問題所在。此外,在網(wǎng)絡(luò)流量異常的情況 下,通過擴展的流量檢測報警系統(tǒng)還可以向管理人員報警,及時發(fā)現(xiàn)故障加以 處理。在網(wǎng)絡(luò)流量檢測的基礎(chǔ)上,管理員還可對感興趣的網(wǎng)絡(luò)管理對象設(shè)置審 查值范圍及配置網(wǎng)絡(luò)性能對象,監(jiān)控實時輪詢網(wǎng)絡(luò)獲取定義對象的當前值,若 超出審查值的正常預(yù)定值則

12、報警,協(xié)助管理員發(fā)現(xiàn)網(wǎng)絡(luò)瓶頸,這樣就能實現(xiàn)一 定程度上的故障管理。而網(wǎng)絡(luò)流量檢測本身也涉及到安全管理方面的內(nèi)容。 由此可見,對于一個有效的網(wǎng)絡(luò)安全管理系統(tǒng)來說,功能的實現(xiàn)都或多或 少的依賴于流量信息的獲取。因此網(wǎng)絡(luò)流量信息的采集可以說是網(wǎng)絡(luò)安全管理 系統(tǒng)得以實現(xiàn)的核心基石。它的應(yīng)用可以在一定程度上檢測到入侵攻擊,可以 第 3 頁 共 22 頁 有效地幫助管理人員進行網(wǎng)絡(luò)性能管理,并利用報警機制協(xié)助網(wǎng)管人員采取對 應(yīng)的安全策略與防護措施,從而減少入侵攻擊所造成的損失。 1.41.4 本本文的目的與任務(wù)文的目的與任務(wù) 該網(wǎng)絡(luò)流量監(jiān)控及分析工具主要用途是通過實時連續(xù)地采集網(wǎng)絡(luò)數(shù)據(jù)并對 其進行統(tǒng)計,得

13、到主要成分性能指標,結(jié)合網(wǎng)絡(luò)流量的理論,通過統(tǒng)計出的性 能指數(shù)觀察網(wǎng)絡(luò)狀態(tài),分析出網(wǎng)絡(luò)變化趨勢,找出影響網(wǎng)絡(luò)性能的因素。 本設(shè)計題目是教師自擬項目,前期任務(wù)主要是設(shè)計并完成系統(tǒng)的初步框架, 實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)的捕獲,并解決相應(yīng)問題,后期主要是通過一些 api 函數(shù)完成對 各類數(shù)據(jù)信息的統(tǒng)計。 本系統(tǒng)實現(xiàn)以下功能: (1)采用 winsock 編寫原始套接字 socket-raw 對數(shù)據(jù)包進行采集捕獲, 并可實現(xiàn)分類及自定義范圍進行捕獲; (2)對捕獲的數(shù)據(jù)包進行一定的解析; (3)訪問操作系統(tǒng)提供的網(wǎng)絡(luò)性能參數(shù)接口,得到網(wǎng)卡總流量、輸入流量 和輸出流量; (4)系統(tǒng)提供了多種方式顯示結(jié)果,如曲線圖、

14、列表等; (5)使用 ip 幫助 api 獲取網(wǎng)絡(luò)統(tǒng)計信息; (6)實現(xiàn)對部分常見威脅的預(yù)警,可繼續(xù)開發(fā)擴展其報警功能。 1.51.5 論文結(jié)構(gòu)安排論文結(jié)構(gòu)安排 本論文圍繞 winsock 標準套接字網(wǎng)絡(luò)編程的各項實踐內(nèi)容展開。具體內(nèi)容 安排如下:第一章是引言,簡要介紹開發(fā)背景、設(shè)計任務(wù)和論文結(jié)構(gòu)安排;第 二章介紹網(wǎng)絡(luò)基礎(chǔ)理論研究、數(shù)據(jù)包捕獲與流量檢測的技術(shù)原理;第三章介紹 如何使用原始套接字實現(xiàn)數(shù)據(jù)捕獲;第四章重點介紹網(wǎng)絡(luò)流量監(jiān)測工具的設(shè)計 與實現(xiàn)過程,并且詳細闡述了從系統(tǒng)功能總體設(shè)計、詳細設(shè)計、具體實現(xiàn)的全 部過程;第五章介紹了軟件測試情況。 2 2 相關(guān)的概念與技術(shù)相關(guān)的概念與技術(shù) 2.

15、12.1 osiosi 參考模型與參考模型與 tcp/iptcp/ip 體系結(jié)構(gòu)體系結(jié)構(gòu) 2.1.12.1.1 osiosi 參考模型參考模型 開放系統(tǒng)互聯(lián)參考模型 osi 是由國際標準化組織 iso 制定的標準化開放式 的計算機網(wǎng)絡(luò)層次結(jié)構(gòu)模型,其結(jié)構(gòu)如圖 1 所示。 可以看出,該結(jié)構(gòu)共有七層,各層主要實現(xiàn)如下功能: (1)物理層,利用傳輸介質(zhì)實現(xiàn)相鄰節(jié)點間的物理連接,主要對機械、電 氣、功能和規(guī)程四個方面及信號傳輸速率方面進行規(guī)定; 第 4 頁 共 22 頁 (2)數(shù)據(jù)鏈路層,完成管理數(shù)據(jù)的傳輸,提供差錯檢測和恢復(fù),并且提供 流量控制,最終實現(xiàn)向上一層提供無差錯、高可靠性的傳輸鏈路; (3

16、)網(wǎng)絡(luò)層,執(zhí)行路由算法和流量控制算法,完成數(shù)據(jù)分組傳輸,它是通 信子網(wǎng)的最高層; (4)傳輸層,提供端到端的無差錯傳輸,同時,它也提供屬于局通信網(wǎng)絡(luò) 接口,比如 socket; (5)會話層,完成用戶之間會話的組織、協(xié)調(diào)、分配用戶名等; (6)表示層,解決數(shù)據(jù)格式問題,規(guī)定編碼方式; (7)應(yīng)用層,osi 的最高層,利用應(yīng)用進程提供網(wǎng)絡(luò)訪問手段。 2.1.22.1.2 tcp/iptcp/ip 體系結(jié)構(gòu)體系結(jié)構(gòu) 由于 tcp/ip 比其之前的 osi 模型更具體實現(xiàn),隨著互聯(lián)網(wǎng)的不斷發(fā)展,遵 循 tcp/ip 結(jié)構(gòu)的網(wǎng)絡(luò)不斷普及,因此現(xiàn)在通常采用 tcp/ip 代表 internet 體系 結(jié)

17、構(gòu)。tcp/ip 的目的是在網(wǎng)絡(luò)標準不同的情況下解決互聯(lián)問題,可以說,網(wǎng)絡(luò) 互聯(lián)是 tcp/ip 的核心。tcp/ip 的體系結(jié)構(gòu)如圖 2 所示。 圖 2 osi 參考模型與 tcp/ip 結(jié)構(gòu) 圖 1 osi 參考模型 第 5 頁 共 22 頁 tcp/ip 在設(shè)計時重點并沒有放在具體通信的實現(xiàn)上,所以對最后兩層沒有 做出具體規(guī)定,同時表明它允許不同類型的通信網(wǎng)絡(luò)參與通信。它的四個層次 功能如下。 (1)應(yīng)用層,提供常用的應(yīng)用程序及自定義的應(yīng)用程序,數(shù)據(jù)傳輸時用 tcp/ip 協(xié)議來進行; (2)傳輸層,提供端到端的應(yīng)用程序之間的通信,可以使用傳輸控制協(xié)議 tcp(transmission

18、control protocol)或用戶數(shù)據(jù)報協(xié)議 udp(user datagram protocol)協(xié)議,前者提供可靠傳輸,傳送單位是報文段,后者提供 不可靠服務(wù),傳輸單位是數(shù)據(jù)報,即分組。此外,傳輸層另外一個功能就是區(qū) 別應(yīng)用程序; (3)網(wǎng)際層,負責(zé)計算機之間的通信,采用的協(xié)議是 ip 協(xié)議,數(shù)據(jù)傳送 單位是分組,向上提供不可靠的傳輸服務(wù); (4)網(wǎng)絡(luò)接口層,負責(zé)接收數(shù)據(jù)報,并實現(xiàn)發(fā)送,或者接收幀,提取 ip 數(shù)據(jù)報,交給互聯(lián)網(wǎng)層。 2.1.32.1.3 osiosi 模型與模型與 tcp/iptcp/ip 體系結(jié)構(gòu)的區(qū)別體系結(jié)構(gòu)的區(qū)別 從前面的分析可以看出 osi 模型和 tcp/

19、ip 體系有許多不同之處,主要體現(xiàn) 在問題的處理上面,例如: (1)tcp/ip 一開始就考慮的是異構(gòu)網(wǎng)絡(luò)的互聯(lián)問題,并將 ip 看作是整個 體系的重要組成部分,而 iso 并沒有認識到網(wǎng)際協(xié)議 ip 的重要性,導(dǎo)致最后只 能單獨劃分一個子層來完成 ip 的作用; (2)osi 最開始只注意到了面向連接的服務(wù),而 tcp/ip 一開始就注意了 面向連接和無連接的并重。相比起來,tcp/ip 更注重了數(shù)據(jù)傳輸?shù)男?,?osi 則注重了傳輸?shù)目煽啃裕?(4)tcp/ip 雖然分層,但是調(diào)用關(guān)系并不像 osi 那樣嚴格,減少了不必 要的開銷,提高了傳輸效率。 2.22.2 傳輸層的編程接口傳輸層的

20、編程接口windowswindows 套接字編程技術(shù)套接字編程技術(shù) 2.2.12.2.1 windowswindows 套接字的概念套接字的概念 windows 套接字socket,是為windows 系統(tǒng)開發(fā)的一套標準通用支持網(wǎng)絡(luò) 協(xié)議數(shù)據(jù)通信的 api,它是網(wǎng)絡(luò)通信的基礎(chǔ),即 tcp/ip 的網(wǎng)絡(luò)編程接口,1994 年被定為網(wǎng)絡(luò)編程標準后,主要經(jīng)歷了 winsock1.1 和winsock2.0 兩種版本,它 產(chǎn)生最終目的是可以適應(yīng)應(yīng)用程序開發(fā)者、網(wǎng)絡(luò)服務(wù)商的需求,進程通過套接 字的通信域來完成通信。需要指出的是,套接字主要負責(zé)控制數(shù)據(jù)的輸入與輸 第 6 頁 共 22 頁 出,主要在傳輸層

21、和網(wǎng)絡(luò)層,屏蔽了數(shù)據(jù)鏈路層和物理層2。 2.2.22.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.32.2.3 涉及的幾個基本概念涉及的幾個基本概念 (1)字節(jié)順序,不同的計算機采用不同的自己順序存儲數(shù)據(jù),所以在這些 數(shù)據(jù)進行通信時需要進行字節(jié)順序的轉(zhuǎn)換,所有傳送給網(wǎng)絡(luò)上套接字函數(shù)的 ip 地址

22、和端口號均按照網(wǎng)絡(luò)順序安排,主要由 sockaddr_in 這個結(jié)構(gòu)規(guī)范。特別 要注意的是,應(yīng)用程序建立地址結(jié)構(gòu)之前,用戶輸入需要將主機序列轉(zhuǎn)換為網(wǎng) 絡(luò)序列(使用 htons 函數(shù),反之使用 ntohs 函數(shù)) 。 (2)阻塞與非阻塞,套接字有同步阻塞和異步非阻塞兩種方法,阻塞模式 時,套接字需要等待操作全部完成才結(jié)束,而當套接字處于非阻塞模式時,套 接字以是否有新數(shù)據(jù)到達作為阻塞的標志。阻塞方式套接字簡單、方便,但是 效率比較低,而非阻塞模式使用復(fù)雜點,但效率很高。但是仍需強調(diào)一點, winsock 提供了幾種 i/o 模型來解決異步問題,如“選擇” 、 “重疊” 、 “事件選 擇” 、 “

23、異步選擇”等3。 2.32.3 原始套接字原始套接字 從用戶的角度來看,標準的流式套接字和數(shù)據(jù)報套接字這兩類套接字似乎 涵蓋了 tcp/ip 應(yīng)用的全部,因為基于 tcp/ip 的應(yīng)用,從協(xié)議棧的層次(如圖 3 所示)上講,在傳輸層的確只可能建立于 tcp 或 udp 協(xié)議之上,而流式套接 字和數(shù)據(jù)報套接字又分別對應(yīng)于 tcp 和 udp,所以幾乎所有的應(yīng)用都可以用這 兩類套接字實現(xiàn)。但是,當需要自定義數(shù)據(jù)包發(fā)送時或者需要分析所有經(jīng)過網(wǎng) 絡(luò)的數(shù)據(jù)包的時候,就必須面臨一種不同于前兩者的方式raw socket,即原 始套接字,程序員可以用它來發(fā)送和接收 ip 層以上的原始數(shù)據(jù)包, 如 icmp,

24、tcp, udp 等,不僅這樣,它還可以實現(xiàn)如偽裝本地 ip、發(fā)送 icmp 包等 功能。 第 7 頁 共 22 頁 raw socket 廣泛應(yīng)用于高級網(wǎng)絡(luò)編程,也是一種廣泛的黑客手段。著名的 網(wǎng)絡(luò) sniffer、拒絕服務(wù)攻擊(dos) 、ip 欺騙等都可以以 raw socket 實現(xiàn)。 raw socket 與標準套接字(sock_stream、sock_dgram)的區(qū)別在于前者直接 置根于操作系統(tǒng)網(wǎng)絡(luò)核心(network core) ,而 sock_stream、sock_dgram 則 “懸浮”于 tcp 和 udp 協(xié)議的外圍,如圖 4 所示。 3 3 網(wǎng)絡(luò)數(shù)據(jù)的采集技術(shù)分析網(wǎng)

25、絡(luò)數(shù)據(jù)的采集技術(shù)分析 3.13.1 windowswindows 下原始數(shù)據(jù)包捕獲的實現(xiàn)下原始數(shù)據(jù)包捕獲的實現(xiàn) 網(wǎng)絡(luò)上的數(shù)據(jù)包捕獲機制主要依賴于所使用的操作系統(tǒng),不同的操作系統(tǒng) 下有不同的實現(xiàn)途徑。在 windows 環(huán)境下,可通過網(wǎng)絡(luò)驅(qū)動程序接口規(guī)范 (ndis) ,winsock 的 sock_raw 或虛擬設(shè)備驅(qū)動技術(shù)(vxd)等技術(shù)實現(xiàn)網(wǎng)絡(luò)數(shù) 據(jù)包的捕獲功能。 圖 4 標準套接與原始套接字的關(guān)系 圖 3 協(xié)議棧層次 第 8 頁 共 22 頁 前面已經(jīng)介紹到了,使用原始套接字可以繞過 socket 提供的功能,對底層 的協(xié)議進行使用與開發(fā),可以根據(jù)自己的需要生成想要的數(shù)據(jù)報文等,下面開

26、始介紹使用原始套接字對數(shù)據(jù)包捕獲進行開發(fā)的相關(guān)技術(shù)知識。 第一,使用套接字前,需要了解網(wǎng)卡接收數(shù)據(jù)的工作原理: 在正常情況下,網(wǎng)絡(luò)接口只響應(yīng)兩種數(shù)據(jù)幀,一種是與自己的硬件相匹配 的數(shù)據(jù)幀,另一種四向所有計算機廣播的數(shù)據(jù)幀。在系統(tǒng)中,數(shù)據(jù)幀的收發(fā)由 網(wǎng)卡完成,網(wǎng)卡程序接收從網(wǎng)絡(luò)發(fā)來的數(shù)據(jù)包,根據(jù)其硬件地址去判斷是否與 本機的硬件地址匹配,若匹配就通知 cpu 產(chǎn)生中斷進行響應(yīng),然后調(diào)用驅(qū)動程 序設(shè)置的網(wǎng)卡中斷程序地址調(diào)用驅(qū)動程序接收數(shù)據(jù),然后放入堆棧進行系統(tǒng)相 關(guān)處理,若不匹配則直接丟棄該數(shù)據(jù)包3。 對于網(wǎng)絡(luò)接口,它一般具有 4 種數(shù)據(jù)接收模式:廣播、組播、直接和混雜 模式,只有當把接口設(shè)置為混

27、雜模式時,網(wǎng)絡(luò)接口才能接收所有的數(shù)據(jù),無論 地址是否匹配,所以在做本設(shè)計的時候一定要設(shè)置為混雜模式才能實現(xiàn)數(shù)據(jù)的 采集。 第二,需要了解套接字的工作程序和使用方法: 一般來說,采用套接字開發(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)閉套接字。 3.23.2 原始數(shù)據(jù)包捕獲

28、的關(guān)鍵函數(shù)原始數(shù)據(jù)包捕獲的關(guān)鍵函數(shù) (1)啟動函數(shù) wsastartup int pascal far wsastartup (dword wversionrequested , lpwsadata lpwsadata); 每一個套接字應(yīng)用程序都必須調(diào)用該函數(shù)進行一系列初始化工作,并且只 有調(diào)用成功返回后,才能開始使用套接字,其中參數(shù) wversionrequested 是版 本號,高字節(jié)是次版本號、低字節(jié)是主版本號,參數(shù) lpwsadata 是指向 wsadata 結(jié)構(gòu)的指針。 第 9 頁 共 22 頁 (2)套接字創(chuàng)建函數(shù) socket socket socket (int af , in

29、t type , int protocol); 所有的通信在建立之前都必須創(chuàng)建一個套接字,socket 函數(shù)的功能就是創(chuàng) 建套接字,其中參數(shù) af 指協(xié)議地址族(address family) ,當建立的套接字是 依賴于 udp 或 tcp 的話,需要設(shè)置 af 為 af_inet,表示采用 ip 協(xié)議。參數(shù) type 是指協(xié)議的套接字類型,采用流式套接字時用 sock_stream,采用數(shù)據(jù)報套接 字時用 sock_dgram,采用原始套接字時用 sock_raw。參數(shù) protocol 是協(xié)議字 段,默認情況下可直接設(shè)置為 0。 (3)綁定函數(shù) bind int bind ( socket

30、 s , struct sockaddr_in* name , int namelen); 成功創(chuàng)建套接字后的下一步工作就是將本地網(wǎng)絡(luò)接口與套接字進行綁定, 其中參數(shù) s 是創(chuàng)建的套接字,參數(shù) name 是需要綁定的通信對象的信息結(jié)構(gòu)體指 針,namelen 是該結(jié)構(gòu)的長度。需要注意的是 sockaddr_in 結(jié)構(gòu): struct sockaddr_in short sin_family; /地址族,設(shè)置為 af_inet unsigned short sin_port; /指定的端口號 struct in_addr sin_addr; /ip 地址 char sin_zero8; ; 由于

31、主機序列與網(wǎng)絡(luò)序列的關(guān)系,在程序中需要使用 htons 等函數(shù)進行轉(zhuǎn) 換工作。 (4)設(shè)置接口模式函數(shù) wsaioctl int wsaapi wsaioctl(socket s, dword dwiocontrolcode, lpvoid lpvinbuffer, dword cbinbuffer, lpvoid lpvoutbuffer, dword cboutbuffer, lpdword lpcbbytesreturned, lpwsaoverlapped lpoverlapped, lpwsaoverlapped_completion_routine lpcompletionrout

32、ine); 其中,s 為一個套接口的句柄,dwiocontrolcode 為操作控制代碼, lpvinbuffer 為輸入緩沖區(qū)的地址,cbinbuffer 為輸入緩沖區(qū)的大小, lpvoutbuffer 為輸出緩沖區(qū)的地址, cboutbuffer 為輸出緩沖區(qū)的大小,lpcbbytesreturned 為輸出實際字節(jié)數(shù) 的地址,lpoverlapped 為 wsaoverlapped 結(jié)構(gòu)的地址,lpcompletionroutine 第 10 頁 共 22 頁 為一個指向操作結(jié)束后調(diào)用的例程指針。 調(diào)用成功后,wsaioctl 函數(shù)返回 0,否則的話,將返回 invalid_socket

33、 錯誤,應(yīng)用程序可通過 wsagetlasterror 來獲取錯誤代碼。 (5)數(shù)據(jù)接收函數(shù) recv int recv (socket s , char* buf ,int len , int flags); 4 4 網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)各模塊的設(shè)計與實現(xiàn)網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)各模塊的設(shè)計與實現(xiàn) 4.14.1 開發(fā)背景介紹開發(fā)背景介紹 本設(shè)計開發(fā)平臺采用 microsoft visualstudio 6.0,它是目前使用比較廣 泛的 winsock 開發(fā)平臺,因此具有較強的適應(yīng)性,能夠在很多的操作系統(tǒng)平臺 上運行,設(shè)計后具有直觀的簡潔的操作界面,穩(wěn)定性也比較高。 4.24.2 總體結(jié)構(gòu)設(shè)計總體結(jié)構(gòu)設(shè)計

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

35、塊、流量信息統(tǒng)計模塊、流量 繪制模塊,如圖 5 所示。 數(shù)據(jù)采集模塊:完成網(wǎng)絡(luò)接口數(shù)據(jù)的捕獲、解析和顯示,可以根據(jù)用戶定 義條件組合來進行捕獲,如只監(jiān)視采用 tcp 或 udp 協(xié)議的數(shù)據(jù)包,也可以監(jiān)視 圖 5 系統(tǒng)總體設(shè)計結(jié)構(gòu)圖 流量監(jiān)控分析系統(tǒng) 數(shù)據(jù)采集模塊信息統(tǒng)計模塊流量繪制模塊 第 11 頁 共 22 頁 用戶希望關(guān)注的相關(guān) ip 地址的數(shù)據(jù)包,同時完成數(shù)據(jù)封包日志記錄,提高了系 統(tǒng)的靈活性。同時,在對數(shù)據(jù)包的解析過程中對一些常見入侵攻擊特征進行判 斷,發(fā)出預(yù)警。該模塊采用編寫原始套接字開發(fā)。 信息統(tǒng)計模塊:完成統(tǒng)計功能,如統(tǒng)計 ip 要實現(xiàn)統(tǒng)計接收到的數(shù)據(jù)報數(shù)量、 接收到的數(shù)據(jù)中協(xié)議

36、出錯的數(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.34.3 流程圖設(shè)計流程圖設(shè)計 根據(jù)上面對各個功能模塊的劃分,進行更進一步的分析和設(shè)計,得到數(shù)據(jù) 采集、注冊表網(wǎng)絡(luò)性能塊訪問大致的工作流程圖,如圖 6 與圖 7 所示。 圖 6 數(shù)據(jù)捕獲處理流程 第 12 頁 共 2

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

38、細介紹。 4.4.24.4.2 數(shù)據(jù)包捕獲與分析模塊數(shù)據(jù)包捕獲與分析模塊 (1)功能實現(xiàn)說明 該功能模塊主要由封裝的 csocksupport,csockhelper ,cpackinterdlg,cbindatadlg 四個類完成,下面將 對這些類進行詳細說明。 csocksupport 類:主要負責(zé)檢查 socket 是否支 持 2.0 版本,在該類中封裝了 wsastartup 完成 socket 的啟動; csockhelper 類:主要實現(xiàn)了從獲取本機信息結(jié) 構(gòu)、socket 創(chuàng)建、綁定、設(shè)置、啟動線程、數(shù)據(jù)接收 到協(xié)議分析的全部方法,詳細處理流程見圖 9 所示。 圖 8 數(shù)據(jù)包采集

39、中各類的關(guān)系 第 13 頁 共 22 頁 getlocalip 實現(xiàn)獲取本機地址操作的方法,lphostent lphp 是定義一個主 機信息結(jié)構(gòu),獲取過程由 gethostname(szlocname,max_hostname_lan)與 gethostbyname(szlocname)完成;第一個參數(shù)是用于 放置本機名稱的緩沖,第二個參數(shù)是緩沖區(qū)長度,最 后利用 inet_ntoa 將 ip 地址轉(zhuǎn)化為“.”式地址。 startcapture 方法完成套接字的創(chuàng)建、綁定、設(shè)置操作方式和啟動線程; 具體完成如下: m_sockcap = socket(af_inet , sock_raw ,

40、 ipproto_ip);/創(chuàng)建套接字 bind(m_sockcap, (psockaddr)/綁定 setsockopt(m_sockcap, sol_socket, so_reuseaddr, (char*)/設(shè)置操作 setsockopt(m_sockcap, ipproto_ip, ip_hdrincl, (char*)/設(shè)置操作 wsaioctl(m_sockcap,sio_rcvall,/混雜模 式 m_hcapthread = createthread(null, 0, capturethread, this, 0, null);/啟動線程 線程函數(shù) capturethread

41、主要完成數(shù)據(jù)的接收。數(shù)據(jù)接收后,將緩沖區(qū)數(shù) 據(jù)轉(zhuǎn)化為 ip 數(shù)據(jù)格式后即可以開始解析過程,協(xié)議名稱獲取如下: for(int i=0; ih_lenver /中斷進程 closehandle(m_hcapthread); /關(guān)閉句柄 m_hcapthread = null; if(m_sockcap) closesocket(m_sockcap); /關(guān)閉套接字 cbindatadlg 類主要完成對已捕獲數(shù)據(jù)的存儲和顯示方法;cpackinterdlg 類通過建立 cbindatadlg 類和 csockhelper 類對象實現(xiàn)數(shù)據(jù)捕獲、解析、顯示、 存儲等,同時它完成對捕獲條件設(shè)置控件、日志

42、記錄控件的編寫,在這里就不 做詳細介紹了。 (2)界面設(shè)計(見圖 10) 4.4.34.4.3 流量獲取模塊流量獲取模塊 (1)設(shè)計說明 圖 10 數(shù)據(jù)捕獲模塊界面 第 15 頁 共 22 頁 設(shè)計思路:實際編程時,windows 系統(tǒng)內(nèi)提供了一個系統(tǒng)性能的接口,只 需要訪問這個接口就可以得到網(wǎng)絡(luò)性能相關(guān)的數(shù)據(jù),如流量;根據(jù)這個想法, 設(shè)計出了本功能模塊的子功能模塊如下: 訪問性能數(shù)據(jù)子模塊:負責(zé)對注冊表進行訪問,獲取流量數(shù)據(jù); 顯示子模塊:負責(zé)將數(shù)據(jù)繪制在窗口中; 框架子模塊:負責(zé)消息映射和消息處理; 本模塊中,將使用到一個注冊表訪問函數(shù) regqueryvalueex,它根據(jù)開放 的注冊表

43、鍵值與名字查找相關(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 為需要查詢的目標鍵值的名字; lpreserved 保留,但是必須為 null; lptype 為鍵值類型; lpdata 輸入/輸出接收鍵值的數(shù)據(jù); lpcbdata 輸入/輸出接收鍵值的緩沖大小標志。 在 windo

44、wsnt 下,當調(diào)用 regqueryvalueex 時,若 hkey 被設(shè)置為 hkey_performance_data 返回的數(shù)據(jù)并不是直接顯示被請求的數(shù)據(jù)對象。所以 程序需要遍歷整個數(shù)據(jù)塊,數(shù)據(jù)塊中的邏輯結(jié)構(gòu)如圖 11 所示。 參照圖 4-6 可以很容易地確定性能數(shù)據(jù)塊的查詢過程,從數(shù)據(jù)塊的性能數(shù) 據(jù)結(jié)構(gòu) perf_data_block 開始,然后索引到 perf_object_type 結(jié)構(gòu),而 perf_counter_definition 結(jié)構(gòu)可以通過 perf_object_type 的成員 headerbytelength 找到位置偏移,每一個 perf_object_typ

45、e 的成員 definitionlength 都能確定一個對應(yīng)的 perf_instance_definition 結(jié)構(gòu), 圖 11 注冊表網(wǎng)絡(luò)性能數(shù)據(jù)塊邏輯結(jié)構(gòu) 第 16 頁 共 22 頁 perf_instance_definition 結(jié)構(gòu)決定著 perf_counter_block 結(jié)構(gòu)3。 下面列出了獲得網(wǎng)絡(luò)接口流量的部分關(guān)鍵代碼: /得到當前的接口名字 interfacename = interfaces.getat(pos); /開辟性能數(shù)據(jù)緩沖 unsigned char *data = new unsigned char default_buffer_size; /從 reg

46、queryvalueex 返回的值:本例中忽略改變量 /從網(wǎng)絡(luò)對象(索引是 510)查詢性能數(shù)據(jù) regqueryvalueex(hkey_performance_data, 510, null, 下面詳細說明,注冊表數(shù)據(jù)性能塊訪問過程的實現(xiàn): /枚舉鏈表中第一個對象 perf_object_type *objectptr = firstobject(datablockptr); /遍歷鏈表 for(int a=0 ; anumobjecttypes ; a+) char namebuffer255; /判斷是否是網(wǎng)絡(luò)對象索引號是 510 if(objectptr-objectnametitl

47、eindex = 510) /偏移變量 dword processidoffset = ulong_max; /找到第一個計數(shù)器 perf_counter_definition *counterptr = firstcounter(objectptr); /遍歷鏈表 for(int b=0 ; bnumcounters ; b+) /判斷接收的數(shù)據(jù)類型是否是我們需要的 if(int)counterptr-counternametitleindex = currenttraffictype) processidoffset = counterptr-counteroffset; /下一個計數(shù)器

48、counterptr = nextcounter(counterptr); 第 17 頁 共 22 頁 /數(shù)據(jù)類型不是我們需要的 if(processidoffset = ulong_max) delete data; return 1; /找到第一個實例(instance) perf_instance_definition *instanceptr = firstinstance(objectptr); /遍歷整個實例 for(b=0 ; bnuminstances ; b+) wchar_t *nameptr = (wchar_t *) (byte *)instanceptr + inst

49、anceptr-nameoffset); /得到這個實例的 perf_counter_block perf_counter_block *counterblockptr = getcounterblock(instanceptr); /現(xiàn)在得到了接口的名字 char *pname = widetomulti(nameptr, namebuffer, sizeof(namebuffer); position pos = totaltraffics.findindex(b); if(pos!=null) fulltraffic = *(dword *) (byte *)counterblockpt

50、r + processidoffset); totaltraffics.setat(pos,fulltraffic); /如果當前的接口就是我們選擇的接口 if(interfacename = iname) traffic = *(dword *) (byte *)counterblockptr + processidoffset); /判斷處理的接口是否是新的 if(currentinterface != interfacenumber) lasttraffic = acttraffic; trafficdelta = 0.0; currentinterface = interfacenum

51、ber; else trafficdelta = acttraffic - lasttraffic; lasttraffic = acttraffic; 第 18 頁 共 22 頁 delete data; return(trafficdelta); /下一個實例 instanceptr = nextinstance(instanceptr); /下一個對象 objectptr = nextobject(objectptr); delete data; return 0; catch(.) return 0; (2)界面設(shè)計(見圖 12) 第 19 頁 共 22 頁 4.4.44.4.4 數(shù)據(jù)統(tǒng)計模塊數(shù)據(jù)統(tǒng)計模塊 (1)可以利用微軟的 ip 助手中的 api 函數(shù)實現(xiàn) ip 的統(tǒng)計,網(wǎng)絡(luò)管理員通 過統(tǒng)計的數(shù)據(jù)可以在一定程度上發(fā)現(xiàn)網(wǎng)絡(luò)性能瓶頸。涉及到的函數(shù)有 getudpstatistic,gettcpstatistic,geticmpstatistic,getistatistic,需要 注意的是工程中要加載 iphelpapi.lib 庫。函數(shù)調(diào)用結(jié)果通過列表可以直觀顯 示出來,網(wǎng)絡(luò)管理人員可以通過其中統(tǒng)計數(shù)量的變化監(jiān)視網(wǎng)絡(luò)性能。 (2)界面設(shè)計(見圖 13) 4.4.54.4.5 常見攻擊

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論