版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 網(wǎng)絡(luò)流量監(jiān)控及分析工具的設(shè)計(jì)與實(shí)現(xiàn)</p><p><b> 摘 要</b></p><p> 互聯(lián)網(wǎng)迅速發(fā)展的同時(shí),網(wǎng)絡(luò)安全問(wèn)題日益成為人們關(guān)注的焦點(diǎn),病毒、惡意攻擊、非法訪問(wèn)等都容易影響網(wǎng)絡(luò)的正常運(yùn)行,多種網(wǎng)絡(luò)防御技術(shù)被綜合應(yīng)用到網(wǎng)絡(luò)安全管理體系中,流量監(jiān)控系統(tǒng)便是其中一種分析網(wǎng)絡(luò)狀況的有效方法,它從數(shù)據(jù)包流量分析角度,通過(guò)實(shí)時(shí)地收集和
2、監(jiān)視網(wǎng)絡(luò)數(shù)據(jù)包信息,來(lái)檢查是否有違反安全策略的行為和網(wǎng)絡(luò)工作異常的跡象。</p><p> 在研究網(wǎng)絡(luò)數(shù)據(jù)包捕獲、 TCP/IP原理的基礎(chǔ)上,采用面向?qū)ο蟮姆椒ㄟM(jìn)行了需求分析與功能設(shè)計(jì)。該系統(tǒng)在VisualC++6.0環(huán)境下進(jìn)行開(kāi)發(fā),綜合采用了Socket-Raw、注冊(cè)表編程和IP助手API等VC編程技術(shù),在系統(tǒng)需求分析的基礎(chǔ)上,對(duì)主要功能的實(shí)現(xiàn)方案和技術(shù)細(xì)節(jié)進(jìn)行了詳細(xì)分析與設(shè)計(jì),并通過(guò)測(cè)試,最終實(shí)現(xiàn)了數(shù)據(jù)包捕
3、獲、流量監(jiān)視與統(tǒng)計(jì)主要功能,達(dá)到了預(yù)定要求,為網(wǎng)絡(luò)管理員了解網(wǎng)絡(luò)運(yùn)行狀態(tài)提供了參考。</p><p> 關(guān)鍵詞:網(wǎng)絡(luò)管理;數(shù)據(jù)采集;流量統(tǒng)計(jì);Winsock2</p><p> The Design and Implementation of Monitoring and Analyzing Tool for Network Traffic</p><p>&l
4、t;b> Abstract</b></p><p> With the rapid development of Internet, network safety has become people’s concern, virus, vigorous attack, illegal visit and so on can easily affect the normal network p
5、erformance. Various kinds of network defending technology have been comprehensively applied into the management system of network safety. Network traffic system is one of the effective measures to analysis network condit
6、ion. From the angle of analyzing packet traffic, it can examine the safety violation and the abnormal performa</p><p> By using the way of object-oriented, this design makes a needs analysis and ability des
7、igning 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
8、of system analysis, it makes a deliberate analysis and test of plans and details to implement packets collecting, traffic monitoring and statistics. So this meets our needs and makes a referenc</p><p> Key
9、words: network management; data collection; traffic analysis; Winsock2</p><p><b> 目 錄</b></p><p><b> 論文總頁(yè)數(shù):22頁(yè)</b></p><p><b> 1引言1</b></
10、p><p> 1.1課題背景1</p><p> 1.2網(wǎng)絡(luò)安全管理的現(xiàn)狀與需求1</p><p> 1.3網(wǎng)絡(luò)流量監(jiān)控的引入1</p><p> 1.4本文的目的與任務(wù)2</p><p> 1.5論文結(jié)構(gòu)安排2</p><p> 2相關(guān)的概念與技術(shù)2</p
11、><p> 2.1OSI參考模型與TCP/IP體系結(jié)構(gòu)2</p><p> 2.1.1OSI參考模型2</p><p> 2.1.2TCP/IP體系結(jié)構(gòu)3</p><p> 2.1.3OSI模型與TCP/IP體系結(jié)構(gòu)的區(qū)別4</p><p> 2.2傳輸層的編程接口—Windows套接字編程技術(shù)
12、4</p><p> 2.2.1Windows套接字的概念4</p><p> 2.2.2套接字類型5</p><p> 2.2.3涉及的幾個(gè)基本概念5</p><p> 2.3原始套接字5</p><p> 3網(wǎng)絡(luò)數(shù)據(jù)的采集技術(shù)分析6</p><p> 3.1
13、Windows下原始數(shù)據(jù)包捕獲的實(shí)現(xiàn)6</p><p> 3.2原始數(shù)據(jù)包捕獲的關(guān)鍵函數(shù)7</p><p> 4網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)各模塊的設(shè)計(jì)與實(shí)現(xiàn)9</p><p> 4.1開(kāi)發(fā)背景介紹9</p><p> 4.2總體結(jié)構(gòu)設(shè)計(jì)9</p><p> 4.3流程圖設(shè)計(jì)10</p>
14、;<p> 4.4各模塊功能概述與實(shí)現(xiàn)11</p><p> 4.4.1數(shù)據(jù)包采集中各類的關(guān)系11</p><p> 4.4.2數(shù)據(jù)包捕獲與分析模塊11</p><p> 4.4.3流量獲取模塊13</p><p> 4.4.4數(shù)據(jù)統(tǒng)計(jì)模塊17</p><p> 4.4.5
15、常見(jiàn)攻擊分析功能18</p><p><b> 5系統(tǒng)測(cè)試19</b></p><p> 5.1測(cè)試環(huán)境19</p><p> 5.1.1硬件環(huán)境19</p><p> 5.1.2操作系統(tǒng)及軟件運(yùn)行環(huán)境19</p><p> 5.2測(cè)試步驟19</p>
16、<p> 5.3測(cè)試結(jié)果評(píng)價(jià)19</p><p><b> 結(jié) 論19</b></p><p><b> 參考文獻(xiàn)20</b></p><p><b> 致 謝21</b></p><p><b> 聲 明22&l
17、t;/b></p><p><b> 引言</b></p><p><b> 課題背景</b></p><p> 隨著構(gòu)建網(wǎng)絡(luò)基礎(chǔ)技術(shù)和網(wǎng)絡(luò)應(yīng)用的迅速發(fā)展以及用戶對(duì)網(wǎng)絡(luò)性能要求的提高,使得網(wǎng)絡(luò)管理成為迫切需要解決的問(wèn)題,有效的網(wǎng)絡(luò)管理能夠保證網(wǎng)絡(luò)的穩(wěn)定運(yùn)行和持續(xù)發(fā)展,更重要的是,隨著網(wǎng)絡(luò)規(guī)模的擴(kuò)大和黑客技術(shù)的發(fā)
18、展,入侵和攻擊的案例日益增多,對(duì)穩(wěn)定的網(wǎng)絡(luò)服務(wù)、信息安全、互聯(lián)網(wǎng)秩序都提出了嚴(yán)峻的挑戰(zhàn),網(wǎng)絡(luò)安全管理在整個(gè)網(wǎng)絡(luò)管理系統(tǒng)里扮演起更為重要的角色。</p><p> 網(wǎng)絡(luò)安全管理的現(xiàn)狀與需求</p><p> 目前,在網(wǎng)絡(luò)應(yīng)用不斷深入和技術(shù)頻繁升級(jí)的同時(shí),非法訪問(wèn)、惡意攻擊等安全威脅也在不斷推陳出新,愈演愈烈。防火墻、VPN、IDS、防病毒、身份認(rèn)證、數(shù)據(jù)加密、安全審計(jì)等安全防護(hù)和管理系統(tǒng)
19、在網(wǎng)絡(luò)中得到了廣泛應(yīng)用。從網(wǎng)絡(luò)安全專業(yè)管理人員的角度來(lái)說(shuō),最直接的需求就是根據(jù)分類在統(tǒng)一的界面中監(jiān)視網(wǎng)絡(luò)中各種運(yùn)行性能狀態(tài),獲取相關(guān)數(shù)據(jù)信息、日志信息和報(bào)警信息等,并進(jìn)行分類匯總、分析和審計(jì);同時(shí)完成攻擊事件報(bào)警、響應(yīng)等功能。因此,用戶的網(wǎng)絡(luò)管理需要不斷健全整體網(wǎng)絡(luò)安全管理解決方案,從統(tǒng)一安全管理平臺(tái)總體調(diào)控配置到多層面、分布式的安全系統(tǒng),實(shí)現(xiàn)對(duì)各種網(wǎng)絡(luò)安全資源的集中監(jiān)控、策略管理、審計(jì)及多種安全功能模塊之間的互動(dòng),從而有效簡(jiǎn)化網(wǎng)絡(luò)安全
20、管理工作,提升網(wǎng)絡(luò)的安全水平和可用性、可控制性、可管理性。</p><p><b> 網(wǎng)絡(luò)流量監(jiān)控的引入</b></p><p> 網(wǎng)絡(luò)安全管理體系中,流量監(jiān)控和統(tǒng)計(jì)分析是整個(gè)管理的基礎(chǔ)。</p><p> 流量檢測(cè)主要目的是通過(guò)對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行實(shí)時(shí)連續(xù)的采集監(jiān)測(cè)網(wǎng)絡(luò)流量,對(duì)獲得的流量數(shù)據(jù)進(jìn)行統(tǒng)計(jì)計(jì)算,從而得到網(wǎng)絡(luò)主要成分的性能指標(biāo)。網(wǎng)絡(luò)管
21、理員根據(jù)流量數(shù)據(jù)就可以對(duì)網(wǎng)絡(luò)主要成分進(jìn)行性能分析管理,發(fā)現(xiàn)性能變化趨勢(shì),并分析出影響網(wǎng)絡(luò)性能的因素及問(wèn)題所在。此外,在網(wǎng)絡(luò)流量異常的情況下,通過(guò)擴(kuò)展的流量檢測(cè)報(bào)警系統(tǒng)還可以向管理人員報(bào)警,及時(shí)發(fā)現(xiàn)故障加以處理。在網(wǎng)絡(luò)流量檢測(cè)的基礎(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ò)流量檢
22、測(cè)本身也涉及到安全管理方面的內(nèi)容。</p><p> 由此可見(jiàn),對(duì)于一個(gè)有效的網(wǎng)絡(luò)安全管理系統(tǒng)來(lái)說(shuō),功能的實(shí)現(xiàn)都或多或少的依賴于流量信息的獲取。因此網(wǎng)絡(luò)流量信息的采集可以說(shuō)是網(wǎng)絡(luò)安全管理系統(tǒng)得以實(shí)現(xiàn)的核心基石。它的應(yīng)用可以在一定程度上檢測(cè)到入侵攻擊,可以有效地幫助管理人員進(jìn)行網(wǎng)絡(luò)性能管理,并利用報(bào)警機(jī)制協(xié)助網(wǎng)管人員采取對(duì)應(yīng)的安全策略與防護(hù)措施,從而減少入侵攻擊所造成的損失。</p><p&g
23、t;<b> 本文的目的與任務(wù)</b></p><p> 該網(wǎng)絡(luò)流量監(jiān)控及分析工具主要用途是通過(guò)實(shí)時(shí)連續(xù)地采集網(wǎng)絡(luò)數(shù)據(jù)并對(duì)其進(jìn)行統(tǒng)計(jì),得到主要成分性能指標(biāo),結(jié)合網(wǎng)絡(luò)流量的理論,通過(guò)統(tǒng)計(jì)出的性能指數(shù)觀察網(wǎng)絡(luò)狀態(tài),分析出網(wǎng)絡(luò)變化趨勢(shì),找出影響網(wǎng)絡(luò)性能的因素。</p><p> 本設(shè)計(jì)題目是教師自擬項(xiàng)目,前期任務(wù)主要是設(shè)計(jì)并完成系統(tǒng)的初步框架,實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)的捕獲,并解
24、決相應(yīng)問(wèn)題,后期主要是通過(guò)一些API函數(shù)完成對(duì)各類數(shù)據(jù)信息的統(tǒng)計(jì)。</p><p> 本系統(tǒng)實(shí)現(xiàn)以下功能:5.6 入庫(kù)</p><p> 入庫(kù)與出庫(kù)相反,其操作基本相同。代碼如下所示:</p><p><b> <%</b></p><p> CheckLogin</p><p>
25、 Showtitle(title)</p><p> getStorage(session("storage"))</p><p> if request("id")<>"" then</p><p> session("name_id")=request("
26、id")</p><p> sql="select * from stock where name_id="&session("name_id")</p><p> rs.open sql,conn,3,2</p><p> if not rs.eof then</p><p>
27、 session("name")=rs("name")</p><p> session("now_stock")="<font color=red>"&rs("now_stock")&"</font> "&rs("unit"
28、;)</p><p><b> rs.close</b></p><p> gettypepath</p><p> response.write " -> [ <font color=red>"&session("name")&" </font&g
29、t; ]"</p><p><b> else</b></p><p> showerror("沒(méi)有找到記錄!")</p><p><b> end if</b></p><p><b> %></b></p><
30、p> <form action="save_in.asp" method="POST" name="input"></p><p> <p align=center><font color=red>請(qǐng)?jiān)谝韵碌谋砀裰刑钊胂嚓P(guān)的數(shù)據(jù)</font></p><p><b&g
31、t; <p></b></p><p> <table align=center border=0></p><p><b> <tr></b></p><p> <td nowrap align=right><font color=blue>目前庫(kù)存:</td
32、></p><p> <td><%=session("now_stock")%></td></p><p><b> </tr></b></p><p><b> <tr></b></p><p> <
33、;td nowrap align=right><font color=blue>數(shù)量:</td></p><p> <td><input class=smallInput type=textbox name="in_num" value=''>**</td></p><p><b&
34、gt; </tr></b></p><p><b> <tr></b></p><p> <td nowrap align=right><font color=blue>單價(jià):</td></p><p> <td><input class=smal
35、lInput type=textbox name="in_price" value=''>**</td></p><p><b> </tr></b></p><p><b> <tr></b></p><p> <td valign
36、="top"><font color=blue>入庫(kù)摘要:</td></p><p> <td><textarea class=smallarea name=zy rows=3 cols=40>進(jìn)</textarea>**</td></p><p><b> </tr>
37、;</b></p><p><b> <tr></b></p><p> <td nowrap align=right><font color=blue>種類:</td></p><p> <td><input class=smallInput type=tex
38、tbox name="zl" value=' '></td></p><p><b> </tr></b></p><p><b> <tr></b></p><p> <td nowrap align=right><fo
39、nt color=blue>號(hào)數(shù):</td></p><p> <td><input class=smallInput type=textbox name="hs" value=' '></td></p><p><b> </tr></b></p>
40、<p><b> <tr></b></p><p> <td nowrap align=right><font color=blue>供應(yīng)商:</td></p><p><b> <td></b></p><p> <%ShowProvi
41、der%>**</p><p> [ <a href=providermanage.asp target=_blank>供應(yīng)商管理</a> ]</p><p><b> </td></b></p><p><b> </tr></b></p><
42、;p> 5.7 數(shù)據(jù)庫(kù)的連接</p><p> ASP與ACCESS數(shù)據(jù)庫(kù)連接的代碼如下:</p><p><b> <%</b></p><p> Set conn = Server.CreateObject("ADODB.Connection")</p><p> conn.
43、open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & DefaultDir &server.mappath("database\data.mdb")&";"</p><p> Set rs = Server.CreateObject("ADODB.Records
44、et")</p><p> Set rs2 = Server.CreateObject("ADODB.Recordset")</p><p> Set rs3 = Server.CreateObject("ADODB.Recordset")</p><p><b> %></b>&l
45、t;/p><p> 6 系統(tǒng)運(yùn)行環(huán)境及測(cè)試分析</p><p> 6.1 系統(tǒng)運(yùn)行環(huán)境</p><p> 系統(tǒng)運(yùn)行環(huán)境包括操作系統(tǒng)、硬件、地理信息系統(tǒng)和關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)等軟件平臺(tái)。</p><p> ?。?)操作系統(tǒng):WINDOWS95/98/2000,WINDOWS NT/XP等。</p><p> ?。?)配件
46、:PC機(jī)、工作站、服務(wù)器等。</p><p> ?。?)數(shù)據(jù)庫(kù):ACCESS數(shù)據(jù)庫(kù)。</p><p><b> 6.2 系統(tǒng)的運(yùn)行</b></p><p> 以下主要介紹本系統(tǒng)的運(yùn)行情況:</p><p> ?。?)本系統(tǒng)運(yùn)行后的大體效果如圖16所示。選擇界面中的各功能就能進(jìn)入相應(yīng)模塊。</p><
47、;p> 圖16 系統(tǒng)運(yùn)行效果</p><p> (2)選擇分類查看庫(kù)存(以目錄形式),進(jìn)入查看界面,如圖17所示。在這個(gè)窗體中,可以很直觀的查看到物品的分類,進(jìn)而逐步的找到需要的物品,該</p><p> (1)采用Winsock編寫原始套接字Socket-Raw對(duì)數(shù)據(jù)包進(jìn)行采集捕獲,并可實(shí)現(xiàn)分類及自定義范圍進(jìn)行捕獲;</p><p> ?。?)對(duì)捕獲的
48、數(shù)據(jù)包進(jìn)行一定的解析;</p><p> ?。?)訪問(wèn)操作系統(tǒng)提供的網(wǎng)絡(luò)性能參數(shù)接口,得到網(wǎng)卡總流量、輸入流量和輸出流量;</p><p> ?。?)系統(tǒng)提供了多種方式顯示結(jié)果,如曲線圖、列表等;</p><p> ?。?)使用IP幫助API獲取網(wǎng)絡(luò)統(tǒng)計(jì)信息;</p><p> ?。?)實(shí)現(xiàn)對(duì)部分常見(jiàn)威脅的預(yù)警,可繼續(xù)開(kāi)發(fā)擴(kuò)展其報(bào)警功能。&l
49、t;/p><p><b> 論文結(jié)構(gòu)安排</b></p><p> 本論文圍繞Winsock標(biāo)準(zhǔn)套接字網(wǎng)絡(luò)編程的各項(xiàng)實(shí)踐內(nèi)容展開(kāi)。具體內(nèi)容安排如下:第一章是引言,簡(jiǎn)要介紹開(kāi)發(fā)背景、設(shè)計(jì)任務(wù)和論文結(jié)構(gòu)安排;第二章介紹網(wǎng)絡(luò)基礎(chǔ)理論研究、數(shù)據(jù)包捕獲與流量檢測(cè)的技術(shù)原理;第三章介紹如何使用原始套接字實(shí)現(xiàn)數(shù)據(jù)捕獲;第四章重點(diǎn)介紹網(wǎng)絡(luò)流量監(jiān)測(cè)工具的設(shè)計(jì)與實(shí)現(xiàn)過(guò)程,并且詳細(xì)闡述了從
50、系統(tǒng)功能總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、具體實(shí)現(xiàn)的全部過(guò)程;第五章介紹了軟件測(cè)試情況。</p><p><b> 相關(guān)的概念與技術(shù)</b></p><p> OSI參考模型與TCP/IP體系結(jié)構(gòu)</p><p><b> OSI參考模型</b></p><p> 開(kāi)放系統(tǒng)互聯(lián)參考模型OSI是由國(guó)際標(biāo)準(zhǔn)化
51、組織ISO制定的標(biāo)準(zhǔn)化開(kāi)放式的計(jì)算機(jī)網(wǎng)絡(luò)層次結(jié)構(gòu)模型,其結(jié)構(gòu)如圖1所示。</p><p> 可以看出,該結(jié)構(gòu)共有七層,各層主要實(shí)現(xiàn)如下功能:</p><p> ?。?)物理層,利用傳輸介質(zhì)實(shí)現(xiàn)相鄰節(jié)點(diǎn)間的物理連接,主要對(duì)機(jī)械、電氣、功能和規(guī)程四個(gè)方面及信號(hào)傳輸速率方面進(jìn)行規(guī)定;</p><p> ?。?)數(shù)據(jù)鏈路層,完成管理數(shù)據(jù)的傳輸,提供差錯(cuò)檢測(cè)和恢復(fù),并且提供
52、流量控制,最終實(shí)現(xiàn)向上一層提供無(wú)差錯(cuò)、高可靠性的傳輸鏈路;</p><p> ?。?)網(wǎng)絡(luò)層,執(zhí)行路由算法和流量控制算法,完成數(shù)據(jù)分組傳輸,它是通信子網(wǎng)的最高層;</p><p> ?。?)傳輸層,提供端到端的無(wú)差錯(cuò)傳輸,同時(shí),它也提供屬于局通信網(wǎng)絡(luò)接口,比如SOCKET;</p><p> ?。?)會(huì)話層,完成用戶之間會(huì)話的組織、協(xié)調(diào)、分配用戶名等;</p&
53、gt;<p> (6)表示層,解決數(shù)據(jù)格式問(wèn)題,規(guī)定編碼方式;</p><p> ?。?)應(yīng)用層,OSI的最高層,利用應(yīng)用進(jìn)程提供網(wǎng)絡(luò)訪問(wèn)手段。</p><p> TCP/IP體系結(jié)構(gòu)</p><p> 由于TCP/IP比其之前的OSI模型更具體實(shí)現(xiàn),隨著互聯(lián)網(wǎng)的不斷發(fā)展,遵循TCP/IP結(jié)構(gòu)的網(wǎng)絡(luò)不斷普及,因此現(xiàn)在通常采用TCP/IP代表Int
54、ernet體系結(jié)構(gòu)。TCP/IP的目的是在網(wǎng)絡(luò)標(biāo)準(zhǔn)不同的情況下解決互聯(lián)問(wèn)題,可以說(shuō),網(wǎng)絡(luò)互聯(lián)是TCP/IP的核心。TCP/IP的體系結(jié)構(gòu)如圖2所示。</p><p> TCP/IP在設(shè)計(jì)時(shí)重點(diǎn)并沒(méi)有放在具體通信的實(shí)現(xiàn)上,所以對(duì)最后兩層沒(méi)有做出具體規(guī)定,同時(shí)表明它允許不同類型的通信網(wǎng)絡(luò)參與通信。它的四個(gè)層次功能如下。</p><p> (1)應(yīng)用層,提供常用的應(yīng)用程序及自定義的應(yīng)用程序,
55、數(shù)據(jù)傳輸時(shí)用TCP/IP協(xié)議來(lái)進(jìn)行;</p><p> ?。?)傳輸層,提供端到端的應(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)用程序;</p>
56、<p> ?。?)網(wǎng)際層,負(fù)責(zé)計(jì)算機(jī)之間的通信,采用的協(xié)議是IP協(xié)議,數(shù)據(jù)傳送單位是分組,向上提供不可靠的傳輸服務(wù);</p><p> (4)網(wǎng)絡(luò)接口層,負(fù)責(zé)接收數(shù)據(jù)報(bào),并實(shí)現(xiàn)發(fā)送,或者接收幀,提取IP數(shù)據(jù)報(bào),交給互聯(lián)網(wǎng)層。</p><p> OSI模型與TCP/IP體系結(jié)構(gòu)的區(qū)別</p><p> 從前面的分析可以看出OSI模型和TCP/IP體系有
57、許多不同之處,主要體現(xiàn)在問(wèn)題的處理上面,例如:</p><p> (1)TCP/IP一開(kāi)始就考慮的是異構(gòu)網(wǎng)絡(luò)的互聯(lián)問(wèn)題,并將IP看作是整個(gè)體系的重要組成部分,而ISO并沒(méi)有認(rèn)識(shí)到網(wǎng)際協(xié)議IP的重要性,導(dǎo)致最后只能單獨(dú)劃分一個(gè)子層來(lái)完成IP的作用;</p><p> ?。?)OSI最開(kāi)始只注意到了面向連接的服務(wù),而TCP/IP一開(kāi)始就注意了面向連接和無(wú)連接的并重。相比起來(lái),TCP/IP更注
58、重了數(shù)據(jù)傳輸?shù)男?,而OSI則注重了傳輸?shù)目煽啃裕?lt;/p><p> (4)TCP/IP雖然分層,但是調(diào)用關(guān)系并不像OSI那樣嚴(yán)格,減少了不必要的開(kāi)銷,提高了傳輸效率。</p><p> 傳輸層的編程接口—Windows套接字編程技術(shù)</p><p> Windows套接字的概念</p><p> Windows套接字—SOCKET,
59、是為Windows系統(tǒng)開(kāi)發(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)生最終目的是可以適應(yīng)應(yīng)用程序開(kāi)發(fā)者、網(wǎng)絡(luò)服務(wù)商的需求,進(jìn)程通過(guò)套接字的通信域來(lái)完成通信。需要指出的是,套接字主要負(fù)責(zé)控制數(shù)據(jù)的輸入與輸出,主要在傳輸層和網(wǎng)絡(luò)層,屏蔽了數(shù)據(jù)鏈路層和物理層[2]。</p><
60、;p><b> 套接字類型</b></p><p> 根據(jù)通信性質(zhì)把套接字主要分為流式套接字和數(shù)據(jù)報(bào)套接字兩種。它們的區(qū)別在于流式套接字提供雙向、有序、無(wú)重復(fù)的數(shù)據(jù)流服務(wù),但相對(duì)于數(shù)據(jù)報(bào)套接字來(lái)說(shuō)系統(tǒng)開(kāi)銷較大。數(shù)據(jù)報(bào)套接字也支持雙向數(shù)據(jù)流,但并不注重傳輸可靠性、無(wú)重復(fù)性和有序性,但它保留了記錄邊界,由于數(shù)據(jù)報(bào)傳輸效率較高,所以還是得到了比較廣泛的應(yīng)用。</p><
61、;p><b> 涉及的幾個(gè)基本概念</b></p><p> ?。?)字節(jié)順序,不同的計(jì)算機(jī)采用不同的自己順序存儲(chǔ)數(shù)據(jù),所以在這些數(shù)據(jù)進(jìn)行通信時(shí)需要進(jìn)行字節(jié)順序的轉(zhuǎn)換,所有傳送給網(wǎng)絡(luò)上套接字函數(shù)的IP地址和端口號(hào)均按照網(wǎng)絡(luò)順序安排,主要由sockaddr_in這個(gè)結(jié)構(gòu)規(guī)范。特別要注意的是,應(yīng)用程序建立地址結(jié)構(gòu)之前,用戶輸入需要將主機(jī)序列轉(zhuǎn)換為網(wǎng)絡(luò)序列(使用htons函數(shù),反之使用nt
62、ohs函數(shù))。</p><p> ?。?)阻塞與非阻塞,套接字有同步阻塞和異步非阻塞兩種方法,阻塞模式時(shí),套接字需要等待操作全部完成才結(jié)束,而當(dāng)套接字處于非阻塞模式時(shí),套接字以是否有新數(shù)據(jù)到達(dá)作為阻塞的標(biāo)志。阻塞方式套接字簡(jiǎn)單、方便,但是效率比較低,而非阻塞模式使用復(fù)雜點(diǎn),但效率很高。但是仍需強(qiáng)調(diào)一點(diǎn),Winsock提供了幾種I/O模型來(lái)解決異步問(wèn)題,如“選擇”、“重疊”、“事件選擇”、“異步選擇”等[3]。&l
63、t;/p><p><b> 原始套接字</b></p><p> 從用戶的角度來(lái)看,標(biāo)準(zhǔn)的流式套接字和數(shù)據(jù)報(bào)套接字這兩類套接字似乎涵蓋了TCP/IP應(yīng)用的全部,因?yàn)榛赥CP/IP的應(yīng)用,從協(xié)議棧的層次(如圖3所示)上講,在傳輸層的確只可能建立于TCP或UDP協(xié)議之上,而流式套接字和數(shù)據(jù)報(bào)套接字又分別對(duì)應(yīng)于TCP和UDP,所以幾乎所有的應(yīng)用都可以用這兩類套接字實(shí)現(xiàn)。但
64、是,當(dāng)需要自定義數(shù)據(jù)包發(fā)送時(shí)或者需要分析所有經(jīng)過(guò)網(wǎng)絡(luò)的數(shù)據(jù)包的時(shí)候,就必須面臨一種不同于前兩者的方式—Raw Socket,即原始套接字,程序員可以用它來(lái)發(fā)送和接收 IP 層以上的原始數(shù)據(jù)包, 如 ICMP,TCP, UDP等,不僅這樣,它還可以實(shí)現(xiàn)如偽裝本地IP、發(fā)送ICMP包等功能。</p><p> Raw Socket廣泛應(yīng)用于高級(jí)網(wǎng)絡(luò)編程,也是一種廣泛的黑客手段。著名的網(wǎng)絡(luò)sniffer、拒絕服務(wù)攻擊
65、(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所示。</p><p> 網(wǎng)絡(luò)數(shù)據(jù)的采集技術(shù)分析</p><p>
66、Windows下原始數(shù)據(jù)包捕獲的實(shí)現(xiàn)</p><p> 網(wǎng)絡(luò)上的數(shù)據(jù)包捕獲機(jī)制主要依賴于所使用的操作系統(tǒng),不同的操作系統(tǒng)下有不同的實(shí)現(xiàn)途徑。在Windows環(huán)境下,可通過(guò)網(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ù)包的捕獲功能。</p><p> 前面已經(jīng)介紹到了,使用原始套接字可以繞過(guò)Socket提供的功能,對(duì)底層的
67、協(xié)議進(jìn)行使用與開(kāi)發(fā),可以根據(jù)自己的需要生成想要的數(shù)據(jù)報(bào)文等,下面開(kāi)始介紹使用原始套接字對(duì)數(shù)據(jù)包捕獲進(jìn)行開(kāi)發(fā)的相關(guān)技術(shù)知識(shí)。</p><p> 第一,使用套接字前,需要了解網(wǎng)卡接收數(shù)據(jù)的工作原理:</p><p> 在正常情況下,網(wǎng)絡(luò)接口只響應(yīng)兩種數(shù)據(jù)幀,一種是與自己的硬件相匹配的數(shù)據(jù)幀,另一種四向所有計(jì)算機(jī)廣播的數(shù)據(jù)幀。在系統(tǒng)中,數(shù)據(jù)幀的收發(fā)由網(wǎng)卡完成,網(wǎng)卡程序接收從網(wǎng)絡(luò)發(fā)來(lái)的數(shù)據(jù)包,
68、根據(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]。</p><p> 對(duì)于網(wǎng)絡(luò)接口,它一般具有4種數(shù)據(jù)接收模式:廣播、組播、直接和混雜模式,只有當(dāng)把接口設(shè)置為混雜模式時(shí),網(wǎng)絡(luò)接口才能接收所有的數(shù)據(jù),無(wú)論地址是否匹配,所以在做本設(shè)計(jì)的時(shí)候一定要設(shè)置為混雜模式才
69、能實(shí)現(xiàn)數(shù)據(jù)的采集。</p><p> 第二,需要了解套接字的工作程序和使用方法:</p><p> 一般來(lái)說(shuō),采用套接字開(kāi)發(fā)網(wǎng)絡(luò)程序需要經(jīng)歷以下幾個(gè)基本步驟:</p><p> 啟動(dòng)、創(chuàng)建、綁定、監(jiān)聽(tīng)(接受連接)、連接、發(fā)送/接收數(shù)據(jù)、關(guān)閉、卸載等。</p><p> 第三,具體到Windows下利用原始套接字捕獲網(wǎng)絡(luò)數(shù)據(jù)可以這樣設(shè)計(jì)
70、:</p><p><b> ?。?)啟動(dòng)套接字;</b></p><p> ?。?)創(chuàng)建一個(gè)原始套接字;</p><p> ?。?)將套接字與本地地址綁定;</p><p> ?。?)設(shè)置操作參數(shù);</p><p> ?。?)設(shè)置網(wǎng)絡(luò)接口為混雜模式;</p><p>
71、(6)啟動(dòng)監(jiān)聽(tīng)線程,開(kāi)始接收數(shù)據(jù);</p><p> (7)退出關(guān)閉套接字。</p><p> 原始數(shù)據(jù)包捕獲的關(guān)鍵函數(shù)</p><p> (1)啟動(dòng)函數(shù)WSAStartup</p><p> int PASCAL FAR WSAStartup (DWORD wVersionRequested , LPWSADATA lpWSADat
72、a);</p><p> 每一個(gè)套接字應(yīng)用程序都必須調(diào)用該函數(shù)進(jìn)行一系列初始化工作,并且只有調(diào)用成功返回后,才能開(kāi)始使用套接字,其中參數(shù)wVersionRequested是版本號(hào),高字節(jié)是次版本號(hào)、低字節(jié)是主版本號(hào),參數(shù)lpWSAData是指向WSADATA結(jié)構(gòu)的指針。</p><p> ?。?)套接字創(chuàng)建函數(shù)socket</p><p> SOCKET soc
73、ket (int af , int type , int protocol);</p><p> 所有的通信在建立之前都必須創(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)套
74、接字時(shí)用SOCK_DGRAM,采用原始套接字時(shí)用SOCK_RAW。參數(shù)protocol是協(xié)議字段,默認(rèn)情況下可直接設(shè)置為0。</p><p> ?。?)綁定函數(shù)bind</p><p> int bind ( SOCKET s , struct sockaddr_in* name , int namelen);</p><p> 成功創(chuàng)建套接字后的下一步工作就是
75、將本地網(wǎng)絡(luò)接口與套接字進(jìn)行綁定,其中參數(shù)s是創(chuàng)建的套接字,參數(shù)name是需要綁定的通信對(duì)象的信息結(jié)構(gòu)體指針,namelen是該結(jié)構(gòu)的長(zhǎng)度。需要注意的是sockaddr_in結(jié)構(gòu):</p><p> struct sockaddr_in{</p><p> short sin_family; //地址族,設(shè)置為AF_INET</p><p> uns
76、igned short sin_port; //指定的端口號(hào)</p><p> struct in_addr sin_addr; //IP地址</p><p> char sin_zero[8];</p><p><b> };</b></p><p> 由于主機(jī)序列與網(wǎng)絡(luò)序列的關(guān)系,
77、在程序中需要使用htons等函數(shù)進(jìn)行轉(zhuǎn)換工作。</p><p> (4)設(shè)置接口模式函數(shù)WSAIoctl</p><p> int WSAAPI WSAIoctl(SOCKET s, DWORD</p><p> dwIoControlCode, LPVOID lpvInBuffer, DWORD</p><p> cbInBuffe
78、r, LPVOID lpvOutBuffer, DWORD</p><p> cbOutBuffer, LPDWORD lpcbBytesReturned,</p><p> LPWSAOVERLAPPED lpOverlapped,</p><p> LPWSAOVERLAPPED_COMPLETION_ROUTINE</p><p>
79、; lpCompletionRoutine);</p><p> 其中,s為一個(gè)套接口的句柄,dwIoControlCode為操作控制代碼,lpvInBuffer為輸入緩沖區(qū)的地址,cbInBuffer為輸入緩沖區(qū)的大小,lpvOutBuffer為輸出緩沖區(qū)的地址,</p><p> cbOutBuffer為輸出緩沖區(qū)的大小,lpcbBytesReturned為輸出實(shí)際字節(jié)數(shù)的地址,
80、lpOverlapped為WSAOVERLAPPED結(jié)構(gòu)的地址,lpCompletionRoutine為一個(gè)指向操作結(jié)束后調(diào)用的例程指針。</p><p> 調(diào)用成功后,WSAIoctl 函數(shù)返回0,否則的話,將返回INVALID_SOCKET錯(cuò)誤,應(yīng)用程序可通過(guò)WSAGetLastError來(lái)獲取錯(cuò)誤代碼。</p><p> (5)數(shù)據(jù)接收函數(shù)recv</p><
81、p> int recv (SOCKET s , char* buf ,int len , int flags);</p><p> 網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)各模塊的設(shè)計(jì)與實(shí)現(xiàn)</p><p><b> 開(kāi)發(fā)背景介紹</b></p><p> 本設(shè)計(jì)開(kāi)發(fā)平臺(tái)采用Microsoft Visualstudio6.0,它是目前使用比較廣泛的Win
82、sock開(kāi)發(fā)平臺(tái),因此具有較強(qiáng)的適應(yīng)性,能夠在很多的操作系統(tǒng)平臺(tái)上運(yùn)行,設(shè)計(jì)后具有直觀的簡(jiǎn)潔的操作界面,穩(wěn)定性也比較高。</p><p><b> 總體結(jié)構(gòu)設(shè)計(jì)</b></p><p> 通過(guò)收集與分析簡(jiǎn)單網(wǎng)絡(luò)流量監(jiān)控軟件的用戶需求,總結(jié)出以下特征:</p><p> ?。?)需要實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)接口數(shù)據(jù)包的盡可能多的捕獲,將網(wǎng)卡設(shè)置為混雜模式,
83、然后進(jìn)行數(shù)據(jù)包的采集;</p><p> ?。?)數(shù)據(jù)包的內(nèi)容要進(jìn)行一定的解析,對(duì)數(shù)據(jù)包的協(xié)議類型、源目地址、數(shù)據(jù)包截獲時(shí)間、數(shù)據(jù)包內(nèi)容需要進(jìn)行分析;</p><p> ?。?)根據(jù)用戶不同的要求能夠依照特定地址范圍、特定協(xié)議類型相關(guān)包等條件進(jìn)行自定義監(jiān)視;</p><p> ?。?)監(jiān)視結(jié)果輸出有實(shí)時(shí)流量圖、列表等顯示;</p><p>
84、 (5)實(shí)現(xiàn)日志記錄,便于日后分析;</p><p> (6)對(duì)某些常見(jiàn)的攻擊進(jìn)行發(fā)現(xiàn)分析。</p><p> 總合以上系統(tǒng)要求與綜合分析,本系統(tǒng)總體設(shè)計(jì)如下,采用VC++6.0編寫,系統(tǒng)具有三個(gè)主要功能部分:數(shù)據(jù)捕獲與顯示模塊、流量信息統(tǒng)計(jì)模塊、流量繪制模塊,如圖5所示。</p><p> 數(shù)據(jù)采集模塊:完成網(wǎng)絡(luò)接口數(shù)據(jù)的捕獲、解析和顯示,可以根據(jù)用戶定義條
85、件組合來(lái)進(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ù)包的解析過(guò)程中對(duì)一些常見(jiàn)入侵攻擊特征進(jìn)行判斷,發(fā)出預(yù)警。該模塊采用編寫原始套接字開(kāi)發(fā)。</p><p> 信息統(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ù)量、丟棄
86、的數(shù)量、需要重組/成功重組的數(shù)量等,統(tǒng)計(jì)ICMP需要完成發(fā)送/接收的消息數(shù)量、滿足超過(guò)TTL的數(shù)量、重定向數(shù)量、時(shí)間戳請(qǐng)求/應(yīng)答數(shù)量等;采用IP助手函數(shù)完成。</p><p> 流量繪制模塊:完成總流量、輸入流量、輸出流量、瞬時(shí)流量值、最高流量值的顯示;采用訪問(wèn)注冊(cè)表網(wǎng)絡(luò)性能數(shù)據(jù)完成有關(guān)數(shù)據(jù)的獲取,通過(guò)流量圖顯示。</p><p><b> 流程圖設(shè)計(jì)</b>&l
87、t;/p><p> 根據(jù)上面對(duì)各個(gè)功能模塊的劃分,進(jìn)行更進(jìn)一步的分析和設(shè)計(jì),得到數(shù)據(jù)采集、注冊(cè)表網(wǎng)絡(luò)性能塊訪問(wèn)大致的工作流程圖,如圖6與圖7所示。</p><p> 各模塊功能概述與實(shí)現(xiàn)</p><p> 數(shù)據(jù)包采集中各類的關(guān)系</p><p> 經(jīng)過(guò)上面的分析與設(shè)計(jì),得到該系統(tǒng)的總體功能結(jié)構(gòu)、工作流程,也確定了從編寫套接字到最后捕獲數(shù)據(jù)
88、,要經(jīng)過(guò)創(chuàng)建、綁定、設(shè)置工作模式、啟動(dòng)線程、接收數(shù)據(jù)等一系列的處理操作。為了實(shí)現(xiàn)處理中的每一步操作,設(shè)計(jì)了數(shù)據(jù)捕獲的類關(guān)系,如圖8所示。</p><p> 在上圖中CSockSupport,CSockHelper ,CPackInterDlg,CBinDataDlg等是封裝了各部分主要處理功能的類。且這些類中封裝了和這些類的操作相關(guān)的方法。將在后面對(duì)這些類的功能和實(shí)現(xiàn)進(jìn)行詳細(xì)介紹。</p><
89、;p> 數(shù)據(jù)包捕獲與分析模塊</p><p><b> (1)功能實(shí)現(xiàn)說(shuō)明</b></p><p> 該功能模塊主要由封裝的CSockSupport,CsockHelper ,CpackInterDlg,CbinDataDlg四個(gè)類完成,下面將對(duì)這些類進(jìn)行詳細(xì)說(shuō)明。</p><p> CsockSupport類:主要負(fù)責(zé)檢查Soc
90、ket是否支持2.0版本,在該類中封裝了WSAStartup完成Socket的啟動(dòng);</p><p> CsockHelper類:主要實(shí)現(xiàn)了從獲取本機(jī)信息結(jié)構(gòu)、Socket創(chuàng)建、綁定、設(shè)置、啟動(dòng)線程、數(shù)據(jù)接收到協(xié)議分析的全部方法,詳細(xì)處理流程見(jiàn)圖9所示。</p><p> GetLocalIP實(shí)現(xiàn)獲取本機(jī)地址操作的方法,LPHOSTENT lphp是定義一個(gè)主機(jī)信息結(jié)構(gòu),獲取過(guò)程由ge
91、thostname(szLocname,MAX_HOSTNAME_LAN)與gethostbyname(szLocname)完成;第一個(gè)參數(shù)是用于放置本機(jī)名稱的緩沖,第二個(gè)參數(shù)是緩沖區(qū)長(zhǎng)度,最后利用inet_ntoa將IP地址轉(zhuǎn)化為“.”式地址。</p><p> StartCapture方法完成套接字的創(chuàng)建、綁定、設(shè)置操作方式和啟動(dòng)線程;具體完成如下:</p><p> m_sock
92、Cap = socket(AF_INET , SOCK_RAW , IPPROTO_IP);//創(chuàng)建套接字</p><p> bind(m_sockCap, (PSOCKADDR)&sa, sizeof(sa));//綁定</p><p> setsockopt(m_sockCap, SOL_SOCKET, SO_REUSEADDR, (char*)&bopt, si
93、zeof(bopt)) ;//設(shè)置操作</p><p> setsockopt(m_sockCap, IPPROTO_IP, IP_HDRINCL, (char*)&bopt, sizeof(bopt)) ;//設(shè)置操作</p><p> WSAIoctl(m_sockCap,SIO_RCVALL,&dwBufferInLen,sizeof(dwBufferInLen)
94、,dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL);//混雜模式</p><p> m_hCapThread = CreateThread(NULL, 0, CaptureThread, this, 0, NULL);//啟動(dòng)線程</p><p> 線程函數(shù)CaptureThread主要完成數(shù)據(jù)的接收。數(shù)據(jù)接
95、收后,將緩沖區(qū)數(shù)據(jù)轉(zhuǎn)化為IP數(shù)據(jù)格式后即可以開(kāi)始解析過(guò)程,協(xié)議名稱獲取如下:</p><p> for(int i=0; i<MAX_PROTO_NUM; i++)</p><p> if(ProtoMap[i].ProtoNum==iProtocol)</p><p> return ProtoMap[i].ProtoText;</p>
96、<p> return “”;</p><p> ParseIPPack方法完成數(shù)據(jù)包的解析:</p><p> int iIphLen = sizeof(unsigned long) * (pIpheader->h_lenver & 0xf) //獲取數(shù)據(jù)包長(zhǎng)度</p><p><b> 協(xié)議解析:</b>&l
97、t;/p><p> switch(iProtocol)</p><p><b> {</b></p><p> case IPPROTO_TCP :</p><p><b> ……</b></p><p> case IPPROTO_UDP :</p>&
98、lt;p><b> ……</b></p><p> case IPPROTO_ICMP :</p><p><b> ……</b></p><p> default :…… }</p><p> StopCapture完成關(guān)閉線程和套接字操作:</p><p>
99、; if(m_hCapThread)</p><p> {TerminateThread(m_hCapThread, 0); //中斷進(jìn)程</p><p> CloseHandle(m_hCapThread); //關(guān)閉句柄</p><p> m_hCapThread = NULL;}</p><p> if(m_sockCap
100、)</p><p> closesocket(m_sockCap); //關(guān)閉套接字</p><p> CbinDataDlg類主要完成對(duì)已捕獲數(shù)據(jù)的存儲(chǔ)和顯示方法;CpackInterDlg類通過(guò)建立CbinDataDlg類和CsockHelper類對(duì)象實(shí)現(xiàn)數(shù)據(jù)捕獲、解析、顯示、存儲(chǔ)等,同時(shí)它完成對(duì)捕獲條件設(shè)置控件、日志記錄控件的編寫,在這里就不做詳細(xì)介紹了。</p>
101、<p> ?。?)界面設(shè)計(jì)(見(jiàn)圖10)</p><p><b> 流量獲取模塊</b></p><p><b> (1)設(shè)計(jì)說(shuō)明</b></p><p> 設(shè)計(jì)思路:實(shí)際編程時(shí),Windows系統(tǒng)內(nèi)提供了一個(gè)系統(tǒng)性能的接口,只需要訪問(wèn)這個(gè)接口就可以得到網(wǎng)絡(luò)性能相關(guān)的數(shù)據(jù),如流量;根據(jù)這個(gè)想法,設(shè)計(jì)出了本功
102、能模塊的子功能模塊如下:</p><p> 訪問(wèn)性能數(shù)據(jù)子模塊:負(fù)責(zé)對(duì)注冊(cè)表進(jìn)行訪問(wèn),獲取流量數(shù)據(jù);</p><p> 顯示子模塊:負(fù)責(zé)將數(shù)據(jù)繪制在窗口中;</p><p> 框架子模塊:負(fù)責(zé)消息映射和消息處理;</p><p> 本模塊中,將使用到一個(gè)注冊(cè)表訪問(wèn)函數(shù)RegQueryValueEx,它根據(jù)開(kāi)放的注冊(cè)表鍵值與名字查找相關(guān)
103、的類型和數(shù)據(jù)。它的函數(shù)原型如下:</p><p> LONG RegQueryValueEx(HKEY hKey , LPCTSTR lpValueName , LPDWORD lpReserved , LPDWORD lpType , LPBYTE lpData , LPDWORD lpcbData);</p><p><b> 參數(shù)說(shuō)明:</b></p&
104、gt;<p> hKey為預(yù)定的注冊(cè)表系統(tǒng)鍵值;</p><p> lpValueName為需要查詢的目標(biāo)鍵值的名字;</p><p> lpReserved保留,但是必須為NULL;</p><p> lpType為鍵值類型;</p><p> lpData輸入/輸出接收鍵值的數(shù)據(jù);</p><p
105、> lpcbData輸入/輸出接收鍵值的緩沖大小標(biāo)志。</p><p> 在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)如圖11所示。</p><p> 參照?qǐng)D4-6可以很容易地確定性能數(shù)據(jù)塊的查詢過(guò)程,從數(shù)據(jù)塊的
106、性能數(shù)據(jù)結(jié)構(gòu)PERF_DATA_BLOCK開(kāi)始,然后索引到PERF_OBJECT_TYPE結(jié)構(gòu),而PERF_COUNTER_DEFINITION結(jié)構(gòu)可以通過(guò)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)
107、決定著PERF_COUNTER_BLOCK結(jié)構(gòu)[3]。</p><p> 下面列出了獲得網(wǎng)絡(luò)接口流量的部分關(guān)鍵代碼:</p><p> //得到當(dāng)前的接口名字</p><p> InterfaceName = Interfaces.GetAt(pos);</p><p> //開(kāi)辟性能數(shù)據(jù)緩沖</p><p>
108、 unsigned char *data = new unsigned char [DEFAULT_BUFFER_SIZE];</p><p> //從RegQueryValueEx返回的值:本例中忽略改變量</p><p> //從網(wǎng)絡(luò)對(duì)象(索引是510)查詢性能數(shù)據(jù)</p><p> RegQueryValueEx(HKEY_PERFORMANCE_DA
109、TA, "510", NULL, &type, data, &size)</p><p> PERF_DATA_BLOCK *dataBlockPtr = (PERF_DATA_BLOCK *)data;</p><p> 下面詳細(xì)說(shuō)明,注冊(cè)表數(shù)據(jù)性能塊訪問(wèn)過(guò)程的實(shí)現(xiàn):</p><p> //枚舉鏈表中第一個(gè)對(duì)象</p
110、><p> PERF_OBJECT_TYPE *objectPtr = FirstObject(dataBlockPtr);</p><p><b> //遍歷鏈表 </b></p><p> for(int a=0 ; a<(int)dataBlockPtr->NumObjectTypes ; a++) </p>
111、<p><b> {</b></p><p> char nameBuffer[255];</p><p> //判斷是否是網(wǎng)絡(luò)對(duì)象索引號(hào)是510</p><p> if(objectPtr->ObjectNameTitleIndex == 510) </p><p><b> {&l
112、t;/b></p><p><b> //偏移變量</b></p><p> DWORD processIdOffset = ULONG_MAX;</p><p> //找到第一個(gè)計(jì)數(shù)器</p><p> PERF_COUNTER_DEFINITION *counterPtr = FirstCounter(
113、objectPtr);</p><p><b> //遍歷鏈表</b></p><p> for(int b=0 ; b<(int)objectPtr->NumCounters ; b++) </p><p><b> {</b></p><p> //判斷接收的數(shù)據(jù)類型是否是我
114、們需要的</p><p> if((int)counterPtr->CounterNameTitleIndex</p><p> == CurrentTrafficType)</p><p> processIdOffset = counterPtr->CounterOffset;</p><p><b> //
115、下一個(gè)計(jì)數(shù)器</b></p><p> counterPtr = NextCounter(counterPtr);}</p><p> //數(shù)據(jù)類型不是我們需要的</p><p> if(processIdOffset == ULONG_MAX) {</p><p> delete [] data;</p>
116、<p> return 1;}</p><p> //找到第一個(gè)實(shí)例(instance)</p><p> PERF_INSTANCE_DEFINITION *instancePtr = FirstInstance(objectPtr);</p><p><b> //遍歷整個(gè)實(shí)例</b></p><p&g
117、t; for(b=0 ; b<objectPtr->NumInstances ; b++) </p><p> {wchar_t *namePtr = (wchar_t *) ((BYTE *)instancePtr + instancePtr->NameOffset);</p><p> //得到這個(gè)實(shí)例的PERF_COUNTER_BLOCK</p>
118、;<p> PERF_COUNTER_BLOCK *counterBlockPtr = GetCounterBlock(instancePtr);</p><p> //現(xiàn)在得到了接口的名字</p><p> char *pName = WideToMulti(namePtr, nameBuffer, sizeof(nameBuffer));</p>&l
119、t;p> POSITION pos = TotalTraffics.FindIndex(b);</p><p> if(pos!=NULL)</p><p> {fullTraffic = *((DWORD *) ((BYTE *)counterBlockPtr + processIdOffset));</p><p> TotalTraffics.S
120、etAt(pos,fullTraffic);}</p><p> //如果當(dāng)前的接口就是我們選擇的接口</p><p> if(InterfaceName == iName)</p><p> {traffic = *((DWORD *) ((BYTE *)counterBlockPtr + processIdOffset));</p><
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)-畢業(yè)論文
- 網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)-畢業(yè)論文
- 網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)-畢業(yè)論文
- 網(wǎng)絡(luò)流量應(yīng)用層特征提取與分析【畢業(yè)論文】
- 基于流量分析的網(wǎng)絡(luò)監(jiān)控系統(tǒng)-畢業(yè)論文
- 基于流量分析的網(wǎng)絡(luò)監(jiān)控系統(tǒng)-畢業(yè)論文
- 畢業(yè)論文---網(wǎng)絡(luò)流量測(cè)量軟件的設(shè)計(jì)與實(shí)現(xiàn)
- 對(duì)等網(wǎng)絡(luò)流量識(shí)別技術(shù)研究[畢業(yè)論文]
- 網(wǎng)絡(luò)流量監(jiān)控系統(tǒng) ——流量分析程序設(shè)計(jì)-開(kāi)題報(bào)告
- 網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)-任務(wù)書(shū)
- 網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)-任務(wù)書(shū)
- 網(wǎng)絡(luò)流量監(jiān)控系統(tǒng) ——流量分析程序設(shè)計(jì)-開(kāi)題報(bào)告
- 基于夢(mèng)網(wǎng)的網(wǎng)絡(luò)流量監(jiān)控和分析.pdf
- 畢業(yè)論文---網(wǎng)卡流量的監(jiān)控
- IP網(wǎng)絡(luò)流量分析預(yù)測(cè)工具的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 網(wǎng)絡(luò)流量特性分析及預(yù)測(cè)研究.pdf
- 網(wǎng)絡(luò)流量監(jiān)控-第2章 網(wǎng)絡(luò)基礎(chǔ)知識(shí)
- 畢業(yè)論文---淺談通信網(wǎng)絡(luò)流量控制與擁塞控制技術(shù)
- 網(wǎng)絡(luò)流量的離線分析.pdf
- 網(wǎng)絡(luò)流量監(jiān)控系統(tǒng)的研究和應(yīng)用.pdf
評(píng)論
0/150
提交評(píng)論