網絡流量監(jiān)控及分析工具畢業(yè)論文_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  網絡流量監(jiān)控及分析工具的設計與實現(xiàn)</p><p><b>  摘 要</b></p><p>  互聯(lián)網迅速發(fā)展的同時,網絡安全問題日益成為人們關注的焦點,病毒、惡意攻擊、非法訪問等都容易影響網絡的正常運行,多種網絡防御技術被綜合應用到網絡安全管理體系中,流量監(jiān)控系統(tǒng)便是其中一種分析網絡狀況的有效方法,它從數(shù)據(jù)包流量分析角度,通過實時地收集和

2、監(jiān)視網絡數(shù)據(jù)包信息,來檢查是否有違反安全策略的行為和網絡工作異常的跡象。</p><p>  在研究網絡數(shù)據(jù)包捕獲、 TCP/IP原理的基礎上,采用面向對象的方法進行了需求分析與功能設計。該系統(tǒng)在VisualC++6.0環(huán)境下進行開發(fā),綜合采用了Socket-Raw、注冊表編程和IP助手API等VC編程技術,在系統(tǒng)需求分析的基礎上,對主要功能的實現(xiàn)方案和技術細節(jié)進行了詳細分析與設計,并通過測試,最終實現(xiàn)了數(shù)據(jù)包捕

3、獲、流量監(jiān)視與統(tǒng)計主要功能,達到了預定要求,為網絡管理員了解網絡運行狀態(tài)提供了參考。</p><p>  關鍵詞:網絡管理;數(shù)據(jù)采集;流量統(tǒng)計;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>  論文總頁數(shù):22頁</b></p><p><b>  1引言1</b></

10、p><p>  1.1課題背景1</p><p>  1.2網絡安全管理的現(xiàn)狀與需求1</p><p>  1.3網絡流量監(jiān)控的引入1</p><p>  1.4本文的目的與任務2</p><p>  1.5論文結構安排2</p><p>  2相關的概念與技術2</p

11、><p>  2.1OSI參考模型與TCP/IP體系結構2</p><p>  2.1.1OSI參考模型2</p><p>  2.1.2TCP/IP體系結構3</p><p>  2.1.3OSI模型與TCP/IP體系結構的區(qū)別4</p><p>  2.2傳輸層的編程接口—Windows套接字編程技術

12、4</p><p>  2.2.1Windows套接字的概念4</p><p>  2.2.2套接字類型5</p><p>  2.2.3涉及的幾個基本概念5</p><p>  2.3原始套接字5</p><p>  3網絡數(shù)據(jù)的采集技術分析6</p><p>  3.1

13、Windows下原始數(shù)據(jù)包捕獲的實現(xiàn)6</p><p>  3.2原始數(shù)據(jù)包捕獲的關鍵函數(shù)7</p><p>  4網絡流量監(jiān)控系統(tǒng)各模塊的設計與實現(xiàn)9</p><p>  4.1開發(fā)背景介紹9</p><p>  4.2總體結構設計9</p><p>  4.3流程圖設計10</p>

14、;<p>  4.4各模塊功能概述與實現(xiàn)11</p><p>  4.4.1數(shù)據(jù)包采集中各類的關系11</p><p>  4.4.2數(shù)據(jù)包捕獲與分析模塊11</p><p>  4.4.3流量獲取模塊13</p><p>  4.4.4數(shù)據(jù)統(tǒng)計模塊17</p><p>  4.4.5

15、常見攻擊分析功能18</p><p><b>  5系統(tǒng)測試19</b></p><p>  5.1測試環(huán)境19</p><p>  5.1.1硬件環(huán)境19</p><p>  5.1.2操作系統(tǒng)及軟件運行環(huán)境19</p><p>  5.2測試步驟19</p>

16、<p>  5.3測試結果評價19</p><p><b>  結 論19</b></p><p><b>  參考文獻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>  隨著構建網絡基礎技術和網絡應用的迅速發(fā)展以及用戶對網絡性能要求的提高,使得網絡管理成為迫切需要解決的問題,有效的網絡管理能夠保證網絡的穩(wěn)定運行和持續(xù)發(fā)展,更重要的是,隨著網絡規(guī)模的擴大和黑客技術的發(fā)

18、展,入侵和攻擊的案例日益增多,對穩(wěn)定的網絡服務、信息安全、互聯(lián)網秩序都提出了嚴峻的挑戰(zhàn),網絡安全管理在整個網絡管理系統(tǒng)里扮演起更為重要的角色。</p><p>  網絡安全管理的現(xiàn)狀與需求</p><p>  目前,在網絡應用不斷深入和技術頻繁升級的同時,非法訪問、惡意攻擊等安全威脅也在不斷推陳出新,愈演愈烈。防火墻、VPN、IDS、防病毒、身份認證、數(shù)據(jù)加密、安全審計等安全防護和管理系統(tǒng)

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

20、管理工作,提升網絡的安全水平和可用性、可控制性、可管理性。</p><p><b>  網絡流量監(jiān)控的引入</b></p><p>  網絡安全管理體系中,流量監(jiān)控和統(tǒng)計分析是整個管理的基礎。</p><p>  流量檢測主要目的是通過對網絡數(shù)據(jù)進行實時連續(xù)的采集監(jiān)測網絡流量,對獲得的流量數(shù)據(jù)進行統(tǒng)計計算,從而得到網絡主要成分的性能指標。網絡管

21、理員根據(jù)流量數(shù)據(jù)就可以對網絡主要成分進行性能分析管理,發(fā)現(xiàn)性能變化趨勢,并分析出影響網絡性能的因素及問題所在。此外,在網絡流量異常的情況下,通過擴展的流量檢測報警系統(tǒng)還可以向管理人員報警,及時發(fā)現(xiàn)故障加以處理。在網絡流量檢測的基礎上,管理員還可對感興趣的網絡管理對象設置審查值范圍及配置網絡性能對象,監(jiān)控實時輪詢網絡獲取定義對象的當前值,若超出審查值的正常預定值則報警,協(xié)助管理員發(fā)現(xiàn)網絡瓶頸,這樣就能實現(xiàn)一定程度上的故障管理。而網絡流量檢

22、測本身也涉及到安全管理方面的內容。</p><p>  由此可見,對于一個有效的網絡安全管理系統(tǒng)來說,功能的實現(xiàn)都或多或少的依賴于流量信息的獲取。因此網絡流量信息的采集可以說是網絡安全管理系統(tǒng)得以實現(xiàn)的核心基石。它的應用可以在一定程度上檢測到入侵攻擊,可以有效地幫助管理人員進行網絡性能管理,并利用報警機制協(xié)助網管人員采取對應的安全策略與防護措施,從而減少入侵攻擊所造成的損失。</p><p&g

23、t;<b>  本文的目的與任務</b></p><p>  該網絡流量監(jiān)控及分析工具主要用途是通過實時連續(xù)地采集網絡數(shù)據(jù)并對其進行統(tǒng)計,得到主要成分性能指標,結合網絡流量的理論,通過統(tǒng)計出的性能指數(shù)觀察網絡狀態(tài),分析出網絡變化趨勢,找出影響網絡性能的因素。</p><p>  本設計題目是教師自擬項目,前期任務主要是設計并完成系統(tǒng)的初步框架,實現(xiàn)網絡數(shù)據(jù)的捕獲,并解

24、決相應問題,后期主要是通過一些API函數(shù)完成對各類數(shù)據(jù)信息的統(tǒng)計。</p><p>  本系統(tǒng)實現(xiàn)以下功能:5.6 入庫</p><p>  入庫與出庫相反,其操作基本相同。代碼如下所示:</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("沒有找到記錄!")</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>請在以下的表格中填入相關的數(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>目前庫存:</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>單價:</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>入庫摘要:</td></p><p>  <td><textarea class=smallarea name=zy rows=3 cols=40>進</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>號數(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>供應商:</td></p><p><b>  <td></b></p><p>  <%ShowProvi

41、der%>**</p><p>  [ <a href=providermanage.asp target=_blank>供應商管理</a> ]</p><p><b>  </td></b></p><p><b>  </tr></b></p><

42、;p>  5.7 數(shù)據(jù)庫的連接</p><p>  ASP與ACCESS數(shù)據(jù)庫連接的代碼如下:</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)運行環(huán)境及測試分析</p><p>  6.1 系統(tǒng)運行環(huán)境</p><p>  系統(tǒng)運行環(huán)境包括操作系統(tǒng)、硬件、地理信息系統(tǒng)和關系數(shù)據(jù)庫管理系統(tǒng)等軟件平臺。</p><p>  (1)操作系統(tǒng):WINDOWS95/98/2000,WINDOWS NT/XP等。</p><p> ?。?)配件

46、:PC機、工作站、服務器等。</p><p> ?。?)數(shù)據(jù)庫:ACCESS數(shù)據(jù)庫。</p><p><b>  6.2 系統(tǒng)的運行</b></p><p>  以下主要介紹本系統(tǒng)的運行情況:</p><p>  (1)本系統(tǒng)運行后的大體效果如圖16所示。選擇界面中的各功能就能進入相應模塊。</p><

47、;p>  圖16 系統(tǒng)運行效果</p><p> ?。?)選擇分類查看庫存(以目錄形式),進入查看界面,如圖17所示。在這個窗體中,可以很直觀的查看到物品的分類,進而逐步的找到需要的物品,該</p><p> ?。?)采用Winsock編寫原始套接字Socket-Raw對數(shù)據(jù)包進行采集捕獲,并可實現(xiàn)分類及自定義范圍進行捕獲;</p><p> ?。?)對捕獲的

48、數(shù)據(jù)包進行一定的解析;</p><p> ?。?)訪問操作系統(tǒng)提供的網絡性能參數(shù)接口,得到網卡總流量、輸入流量和輸出流量;</p><p> ?。?)系統(tǒng)提供了多種方式顯示結果,如曲線圖、列表等;</p><p>  (5)使用IP幫助API獲取網絡統(tǒng)計信息;</p><p> ?。?)實現(xiàn)對部分常見威脅的預警,可繼續(xù)開發(fā)擴展其報警功能。&l

49、t;/p><p><b>  論文結構安排</b></p><p>  本論文圍繞Winsock標準套接字網絡編程的各項實踐內容展開。具體內容安排如下:第一章是引言,簡要介紹開發(fā)背景、設計任務和論文結構安排;第二章介紹網絡基礎理論研究、數(shù)據(jù)包捕獲與流量檢測的技術原理;第三章介紹如何使用原始套接字實現(xiàn)數(shù)據(jù)捕獲;第四章重點介紹網絡流量監(jiān)測工具的設計與實現(xiàn)過程,并且詳細闡述了從

50、系統(tǒng)功能總體設計、詳細設計、具體實現(xiàn)的全部過程;第五章介紹了軟件測試情況。</p><p><b>  相關的概念與技術</b></p><p>  OSI參考模型與TCP/IP體系結構</p><p><b>  OSI參考模型</b></p><p>  開放系統(tǒng)互聯(lián)參考模型OSI是由國際標準化

51、組織ISO制定的標準化開放式的計算機網絡層次結構模型,其結構如圖1所示。</p><p>  可以看出,該結構共有七層,各層主要實現(xiàn)如下功能:</p><p> ?。?)物理層,利用傳輸介質實現(xiàn)相鄰節(jié)點間的物理連接,主要對機械、電氣、功能和規(guī)程四個方面及信號傳輸速率方面進行規(guī)定;</p><p> ?。?)數(shù)據(jù)鏈路層,完成管理數(shù)據(jù)的傳輸,提供差錯檢測和恢復,并且提供

52、流量控制,最終實現(xiàn)向上一層提供無差錯、高可靠性的傳輸鏈路;</p><p>  (3)網絡層,執(zhí)行路由算法和流量控制算法,完成數(shù)據(jù)分組傳輸,它是通信子網的最高層;</p><p> ?。?)傳輸層,提供端到端的無差錯傳輸,同時,它也提供屬于局通信網絡接口,比如SOCKET;</p><p> ?。?)會話層,完成用戶之間會話的組織、協(xié)調、分配用戶名等;</p&

53、gt;<p> ?。?)表示層,解決數(shù)據(jù)格式問題,規(guī)定編碼方式;</p><p> ?。?)應用層,OSI的最高層,利用應用進程提供網絡訪問手段。</p><p>  TCP/IP體系結構</p><p>  由于TCP/IP比其之前的OSI模型更具體實現(xiàn),隨著互聯(lián)網的不斷發(fā)展,遵循TCP/IP結構的網絡不斷普及,因此現(xiàn)在通常采用TCP/IP代表Int

54、ernet體系結構。TCP/IP的目的是在網絡標準不同的情況下解決互聯(lián)問題,可以說,網絡互聯(lián)是TCP/IP的核心。TCP/IP的體系結構如圖2所示。</p><p>  TCP/IP在設計時重點并沒有放在具體通信的實現(xiàn)上,所以對最后兩層沒有做出具體規(guī)定,同時表明它允許不同類型的通信網絡參與通信。它的四個層次功能如下。</p><p>  (1)應用層,提供常用的應用程序及自定義的應用程序,

55、數(shù)據(jù)傳輸時用TCP/IP協(xié)議來進行;</p><p> ?。?)傳輸層,提供端到端的應用程序之間的通信,可以使用傳輸控制協(xié)議TCP(Transmission Control Protocol)或用戶數(shù)據(jù)報協(xié)議UDP(User Datagram Protocol)協(xié)議,前者提供可靠傳輸,傳送單位是報文段,后者提供不可靠服務,傳輸單位是數(shù)據(jù)報,即分組。此外,傳輸層另外一個功能就是區(qū)別應用程序;</p>

56、<p> ?。?)網際層,負責計算機之間的通信,采用的協(xié)議是IP協(xié)議,數(shù)據(jù)傳送單位是分組,向上提供不可靠的傳輸服務;</p><p> ?。?)網絡接口層,負責接收數(shù)據(jù)報,并實現(xiàn)發(fā)送,或者接收幀,提取IP數(shù)據(jù)報,交給互聯(lián)網層。</p><p>  OSI模型與TCP/IP體系結構的區(qū)別</p><p>  從前面的分析可以看出OSI模型和TCP/IP體系有

57、許多不同之處,主要體現(xiàn)在問題的處理上面,例如:</p><p> ?。?)TCP/IP一開始就考慮的是異構網絡的互聯(lián)問題,并將IP看作是整個體系的重要組成部分,而ISO并沒有認識到網際協(xié)議IP的重要性,導致最后只能單獨劃分一個子層來完成IP的作用;</p><p>  (2)OSI最開始只注意到了面向連接的服務,而TCP/IP一開始就注意了面向連接和無連接的并重。相比起來,TCP/IP更注

58、重了數(shù)據(jù)傳輸?shù)男?,而OSI則注重了傳輸?shù)目煽啃裕?lt;/p><p> ?。?)TCP/IP雖然分層,但是調用關系并不像OSI那樣嚴格,減少了不必要的開銷,提高了傳輸效率。</p><p>  傳輸層的編程接口—Windows套接字編程技術</p><p>  Windows套接字的概念</p><p>  Windows套接字—SOCKET,

59、是為Windows系統(tǒng)開發(fā)的一套標準通用支持網絡協(xié)議數(shù)據(jù)通信的API,它是網絡通信的基礎,即TCP/IP的網絡編程接口,1994年被定為網絡編程標準后,主要經歷了Winsock1.1和Winsock2.0兩種版本,它產生最終目的是可以適應應用程序開發(fā)者、網絡服務商的需求,進程通過套接字的通信域來完成通信。需要指出的是,套接字主要負責控制數(shù)據(jù)的輸入與輸出,主要在傳輸層和網絡層,屏蔽了數(shù)據(jù)鏈路層和物理層[2]。</p><

60、;p><b>  套接字類型</b></p><p>  根據(jù)通信性質把套接字主要分為流式套接字和數(shù)據(jù)報套接字兩種。它們的區(qū)別在于流式套接字提供雙向、有序、無重復的數(shù)據(jù)流服務,但相對于數(shù)據(jù)報套接字來說系統(tǒng)開銷較大。數(shù)據(jù)報套接字也支持雙向數(shù)據(jù)流,但并不注重傳輸可靠性、無重復性和有序性,但它保留了記錄邊界,由于數(shù)據(jù)報傳輸效率較高,所以還是得到了比較廣泛的應用。</p><

61、;p><b>  涉及的幾個基本概念</b></p><p> ?。?)字節(jié)順序,不同的計算機采用不同的自己順序存儲數(shù)據(jù),所以在這些數(shù)據(jù)進行通信時需要進行字節(jié)順序的轉換,所有傳送給網絡上套接字函數(shù)的IP地址和端口號均按照網絡順序安排,主要由sockaddr_in這個結構規(guī)范。特別要注意的是,應用程序建立地址結構之前,用戶輸入需要將主機序列轉換為網絡序列(使用htons函數(shù),反之使用nt

62、ohs函數(shù))。</p><p> ?。?)阻塞與非阻塞,套接字有同步阻塞和異步非阻塞兩種方法,阻塞模式時,套接字需要等待操作全部完成才結束,而當套接字處于非阻塞模式時,套接字以是否有新數(shù)據(jù)到達作為阻塞的標志。阻塞方式套接字簡單、方便,但是效率比較低,而非阻塞模式使用復雜點,但效率很高。但是仍需強調一點,Winsock提供了幾種I/O模型來解決異步問題,如“選擇”、“重疊”、“事件選擇”、“異步選擇”等[3]。&l

63、t;/p><p><b>  原始套接字</b></p><p>  從用戶的角度來看,標準的流式套接字和數(shù)據(jù)報套接字這兩類套接字似乎涵蓋了TCP/IP應用的全部,因為基于TCP/IP的應用,從協(xié)議棧的層次(如圖3所示)上講,在傳輸層的確只可能建立于TCP或UDP協(xié)議之上,而流式套接字和數(shù)據(jù)報套接字又分別對應于TCP和UDP,所以幾乎所有的應用都可以用這兩類套接字實現(xiàn)。但

64、是,當需要自定義數(shù)據(jù)包發(fā)送時或者需要分析所有經過網絡的數(shù)據(jù)包的時候,就必須面臨一種不同于前兩者的方式—Raw Socket,即原始套接字,程序員可以用它來發(fā)送和接收 IP 層以上的原始數(shù)據(jù)包, 如 ICMP,TCP, UDP等,不僅這樣,它還可以實現(xiàn)如偽裝本地IP、發(fā)送ICMP包等功能。</p><p>  Raw Socket廣泛應用于高級網絡編程,也是一種廣泛的黑客手段。著名的網絡sniffer、拒絕服務攻擊

65、(DOS)、IP欺騙等都可以以Raw Socket實現(xiàn)。Raw Socket與標準套接字(SOCK_STREAM、SOCK_DGRAM)的區(qū)別在于前者直接置"根"于操作系統(tǒng)網絡核心(Network Core),而SOCK_STREAM、SOCK_DGRAM則“懸浮”于TCP和UDP協(xié)議的外圍,如圖4所示。</p><p>  網絡數(shù)據(jù)的采集技術分析</p><p>  

66、Windows下原始數(shù)據(jù)包捕獲的實現(xiàn)</p><p>  網絡上的數(shù)據(jù)包捕獲機制主要依賴于所使用的操作系統(tǒng),不同的操作系統(tǒng)下有不同的實現(xiàn)途徑。在Windows環(huán)境下,可通過網絡驅動程序接口規(guī)范(NDIS),WinSock的SOCK_RAW或虛擬設備驅動技術(VxD)等技術實現(xiàn)網絡數(shù)據(jù)包的捕獲功能。</p><p>  前面已經介紹到了,使用原始套接字可以繞過Socket提供的功能,對底層的

67、協(xié)議進行使用與開發(fā),可以根據(jù)自己的需要生成想要的數(shù)據(jù)報文等,下面開始介紹使用原始套接字對數(shù)據(jù)包捕獲進行開發(fā)的相關技術知識。</p><p>  第一,使用套接字前,需要了解網卡接收數(shù)據(jù)的工作原理:</p><p>  在正常情況下,網絡接口只響應兩種數(shù)據(jù)幀,一種是與自己的硬件相匹配的數(shù)據(jù)幀,另一種四向所有計算機廣播的數(shù)據(jù)幀。在系統(tǒng)中,數(shù)據(jù)幀的收發(fā)由網卡完成,網卡程序接收從網絡發(fā)來的數(shù)據(jù)包,

68、根據(jù)其硬件地址去判斷是否與本機的硬件地址匹配,若匹配就通知CPU產生中斷進行響應,然后調用驅動程序設置的網卡中斷程序地址調用驅動程序接收數(shù)據(jù),然后放入堆棧進行系統(tǒng)相關處理,若不匹配則直接丟棄該數(shù)據(jù)包[3]。</p><p>  對于網絡接口,它一般具有4種數(shù)據(jù)接收模式:廣播、組播、直接和混雜模式,只有當把接口設置為混雜模式時,網絡接口才能接收所有的數(shù)據(jù),無論地址是否匹配,所以在做本設計的時候一定要設置為混雜模式才

69、能實現(xiàn)數(shù)據(jù)的采集。</p><p>  第二,需要了解套接字的工作程序和使用方法:</p><p>  一般來說,采用套接字開發(fā)網絡程序需要經歷以下幾個基本步驟:</p><p>  啟動、創(chuàng)建、綁定、監(jiān)聽(接受連接)、連接、發(fā)送/接收數(shù)據(jù)、關閉、卸載等。</p><p>  第三,具體到Windows下利用原始套接字捕獲網絡數(shù)據(jù)可以這樣設計

70、:</p><p><b> ?。?)啟動套接字;</b></p><p> ?。?)創(chuàng)建一個原始套接字;</p><p> ?。?)將套接字與本地地址綁定;</p><p> ?。?)設置操作參數(shù);</p><p>  (5)設置網絡接口為混雜模式;</p><p>  

71、(6)啟動監(jiān)聽線程,開始接收數(shù)據(jù);</p><p> ?。?)退出關閉套接字。</p><p>  原始數(shù)據(jù)包捕獲的關鍵函數(shù)</p><p>  (1)啟動函數(shù)WSAStartup</p><p>  int PASCAL FAR WSAStartup (DWORD wVersionRequested , LPWSADATA lpWSADat

72、a);</p><p>  每一個套接字應用程序都必須調用該函數(shù)進行一系列初始化工作,并且只有調用成功返回后,才能開始使用套接字,其中參數(shù)wVersionRequested是版本號,高字節(jié)是次版本號、低字節(jié)是主版本號,參數(shù)lpWSAData是指向WSADATA結構的指針。</p><p> ?。?)套接字創(chuàng)建函數(shù)socket</p><p>  SOCKET soc

73、ket (int af , int type , int protocol);</p><p>  所有的通信在建立之前都必須創(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ù)報套

74、接字時用SOCK_DGRAM,采用原始套接字時用SOCK_RAW。參數(shù)protocol是協(xié)議字段,默認情況下可直接設置為0。</p><p>  (3)綁定函數(shù)bind</p><p>  int bind ( SOCKET s , struct sockaddr_in* name , int namelen);</p><p>  成功創(chuàng)建套接字后的下一步工作就是

75、將本地網絡接口與套接字進行綁定,其中參數(shù)s是創(chuàng)建的套接字,參數(shù)name是需要綁定的通信對象的信息結構體指針,namelen是該結構的長度。需要注意的是sockaddr_in結構:</p><p>  struct sockaddr_in{</p><p>  short sin_family; //地址族,設置為AF_INET</p><p>  uns

76、igned short sin_port; //指定的端口號</p><p>  struct in_addr sin_addr; //IP地址</p><p>  char sin_zero[8];</p><p><b>  };</b></p><p>  由于主機序列與網絡序列的關系,

77、在程序中需要使用htons等函數(shù)進行轉換工作。</p><p> ?。?)設置接口模式函數(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為一個套接口的句柄,dwIoControlCode為操作控制代碼,lpvInBuffer為輸入緩沖區(qū)的地址,cbInBuffer為輸入緩沖區(qū)的大小,lpvOutBuffer為輸出緩沖區(qū)的地址,</p><p>  cbOutBuffer為輸出緩沖區(qū)的大小,lpcbBytesReturned為輸出實際字節(jié)數(shù)的地址,

80、lpOverlapped為WSAOVERLAPPED結構的地址,lpCompletionRoutine為一個指向操作結束后調用的例程指針。</p><p>  調用成功后,WSAIoctl 函數(shù)返回0,否則的話,將返回INVALID_SOCKET錯誤,應用程序可通過WSAGetLastError來獲取錯誤代碼。</p><p> ?。?)數(shù)據(jù)接收函數(shù)recv</p><

81、p>  int recv (SOCKET s , char* buf ,int len , int flags);</p><p>  網絡流量監(jiān)控系統(tǒng)各模塊的設計與實現(xiàn)</p><p><b>  開發(fā)背景介紹</b></p><p>  本設計開發(fā)平臺采用Microsoft Visualstudio6.0,它是目前使用比較廣泛的Win

82、sock開發(fā)平臺,因此具有較強的適應性,能夠在很多的操作系統(tǒng)平臺上運行,設計后具有直觀的簡潔的操作界面,穩(wěn)定性也比較高。</p><p><b>  總體結構設計</b></p><p>  通過收集與分析簡單網絡流量監(jiān)控軟件的用戶需求,總結出以下特征:</p><p> ?。?)需要實現(xiàn)對網絡接口數(shù)據(jù)包的盡可能多的捕獲,將網卡設置為混雜模式,

83、然后進行數(shù)據(jù)包的采集;</p><p> ?。?)數(shù)據(jù)包的內容要進行一定的解析,對數(shù)據(jù)包的協(xié)議類型、源目地址、數(shù)據(jù)包截獲時間、數(shù)據(jù)包內容需要進行分析;</p><p> ?。?)根據(jù)用戶不同的要求能夠依照特定地址范圍、特定協(xié)議類型相關包等條件進行自定義監(jiān)視;</p><p>  (4)監(jiān)視結果輸出有實時流量圖、列表等顯示;</p><p> 

84、?。?)實現(xiàn)日志記錄,便于日后分析;</p><p> ?。?)對某些常見的攻擊進行發(fā)現(xiàn)分析。</p><p>  總合以上系統(tǒng)要求與綜合分析,本系統(tǒng)總體設計如下,采用VC++6.0編寫,系統(tǒng)具有三個主要功能部分:數(shù)據(jù)捕獲與顯示模塊、流量信息統(tǒng)計模塊、流量繪制模塊,如圖5所示。</p><p>  數(shù)據(jù)采集模塊:完成網絡接口數(shù)據(jù)的捕獲、解析和顯示,可以根據(jù)用戶定義條

85、件組合來進行捕獲,如只監(jiān)視采用TCP或UDP協(xié)議的數(shù)據(jù)包,也可以監(jiān)視用戶希望關注的相關IP地址的數(shù)據(jù)包,同時完成數(shù)據(jù)封包日志記錄,提高了系統(tǒng)的靈活性。同時,在對數(shù)據(jù)包的解析過程中對一些常見入侵攻擊特征進行判斷,發(fā)出預警。該模塊采用編寫原始套接字開發(fā)。</p><p>  信息統(tǒng)計模塊:完成統(tǒng)計功能,如統(tǒng)計IP要實現(xiàn)統(tǒng)計接收到的數(shù)據(jù)報數(shù)量、接收到的數(shù)據(jù)中協(xié)議出錯的數(shù)量、正在請求傳輸?shù)臄?shù)量、路由表中可用路由數(shù)量、丟棄

86、的數(shù)量、需要重組/成功重組的數(shù)量等,統(tǒng)計ICMP需要完成發(fā)送/接收的消息數(shù)量、滿足超過TTL的數(shù)量、重定向數(shù)量、時間戳請求/應答數(shù)量等;采用IP助手函數(shù)完成。</p><p>  流量繪制模塊:完成總流量、輸入流量、輸出流量、瞬時流量值、最高流量值的顯示;采用訪問注冊表網絡性能數(shù)據(jù)完成有關數(shù)據(jù)的獲取,通過流量圖顯示。</p><p><b>  流程圖設計</b>&l

87、t;/p><p>  根據(jù)上面對各個功能模塊的劃分,進行更進一步的分析和設計,得到數(shù)據(jù)采集、注冊表網絡性能塊訪問大致的工作流程圖,如圖6與圖7所示。</p><p>  各模塊功能概述與實現(xiàn)</p><p>  數(shù)據(jù)包采集中各類的關系</p><p>  經過上面的分析與設計,得到該系統(tǒng)的總體功能結構、工作流程,也確定了從編寫套接字到最后捕獲數(shù)據(jù)

88、,要經過創(chuàng)建、綁定、設置工作模式、啟動線程、接收數(shù)據(jù)等一系列的處理操作。為了實現(xiàn)處理中的每一步操作,設計了數(shù)據(jù)捕獲的類關系,如圖8所示。</p><p>  在上圖中CSockSupport,CSockHelper ,CPackInterDlg,CBinDataDlg等是封裝了各部分主要處理功能的類。且這些類中封裝了和這些類的操作相關的方法。將在后面對這些類的功能和實現(xiàn)進行詳細介紹。</p><

89、;p>  數(shù)據(jù)包捕獲與分析模塊</p><p><b> ?。?)功能實現(xiàn)說明</b></p><p>  該功能模塊主要由封裝的CSockSupport,CsockHelper ,CpackInterDlg,CbinDataDlg四個類完成,下面將對這些類進行詳細說明。</p><p>  CsockSupport類:主要負責檢查Soc

90、ket是否支持2.0版本,在該類中封裝了WSAStartup完成Socket的啟動;</p><p>  CsockHelper類:主要實現(xiàn)了從獲取本機信息結構、Socket創(chuàng)建、綁定、設置、啟動線程、數(shù)據(jù)接收到協(xié)議分析的全部方法,詳細處理流程見圖9所示。</p><p>  GetLocalIP實現(xiàn)獲取本機地址操作的方法,LPHOSTENT lphp是定義一個主機信息結構,獲取過程由ge

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

95、收后,將緩沖區(qū)數(shù)據(jù)轉化為IP數(shù)據(jù)格式后即可以開始解析過程,協(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ù)包長度</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完成關閉線程和套接字操作:</p><p>

99、;  if(m_hCapThread)</p><p>  {TerminateThread(m_hCapThread, 0); //中斷進程</p><p>  CloseHandle(m_hCapThread); //關閉句柄</p><p>  m_hCapThread = NULL;}</p><p>  if(m_sockCap

100、)</p><p>  closesocket(m_sockCap); //關閉套接字</p><p>  CbinDataDlg類主要完成對已捕獲數(shù)據(jù)的存儲和顯示方法;CpackInterDlg類通過建立CbinDataDlg類和CsockHelper類對象實現(xiàn)數(shù)據(jù)捕獲、解析、顯示、存儲等,同時它完成對捕獲條件設置控件、日志記錄控件的編寫,在這里就不做詳細介紹了。</p>

101、<p> ?。?)界面設計(見圖10)</p><p><b>  流量獲取模塊</b></p><p><b>  (1)設計說明</b></p><p>  設計思路:實際編程時,Windows系統(tǒng)內提供了一個系統(tǒng)性能的接口,只需要訪問這個接口就可以得到網絡性能相關的數(shù)據(jù),如流量;根據(jù)這個想法,設計出了本功

102、能模塊的子功能模塊如下:</p><p>  訪問性能數(shù)據(jù)子模塊:負責對注冊表進行訪問,獲取流量數(shù)據(jù);</p><p>  顯示子模塊:負責將數(shù)據(jù)繪制在窗口中;</p><p>  框架子模塊:負責消息映射和消息處理;</p><p>  本模塊中,將使用到一個注冊表訪問函數(shù)RegQueryValueEx,它根據(jù)開放的注冊表鍵值與名字查找相關

103、的類型和數(shù)據(jù)。它的函數(shù)原型如下:</p><p>  LONG RegQueryValueEx(HKEY hKey , LPCTSTR lpValueName , LPDWORD lpReserved , LPDWORD lpType , LPBYTE lpData , LPDWORD lpcbData);</p><p><b>  參數(shù)說明:</b></p&

104、gt;<p>  hKey為預定的注冊表系統(tǒng)鍵值;</p><p>  lpValueName為需要查詢的目標鍵值的名字;</p><p>  lpReserved保留,但是必須為NULL;</p><p>  lpType為鍵值類型;</p><p>  lpData輸入/輸出接收鍵值的數(shù)據(jù);</p><p

105、>  lpcbData輸入/輸出接收鍵值的緩沖大小標志。</p><p>  在WindowsNT下,當調用RegQueryValueEx時,若hKey被設置為HKEY_PERFORMANCE_DATA返回的數(shù)據(jù)并不是直接顯示被請求的數(shù)據(jù)對象。所以程序需要遍歷整個數(shù)據(jù)塊,數(shù)據(jù)塊中的邏輯結構如圖11所示。</p><p>  參照圖4-6可以很容易地確定性能數(shù)據(jù)塊的查詢過程,從數(shù)據(jù)塊的

106、性能數(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結構

107、決定著PERF_COUNTER_BLOCK結構[3]。</p><p>  下面列出了獲得網絡接口流量的部分關鍵代碼:</p><p>  //得到當前的接口名字</p><p>  InterfaceName = Interfaces.GetAt(pos);</p><p>  //開辟性能數(shù)據(jù)緩沖</p><p>

108、  unsigned char *data = new unsigned char [DEFAULT_BUFFER_SIZE];</p><p>  //從RegQueryValueEx返回的值:本例中忽略改變量</p><p>  //從網絡對象(索引是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>  下面詳細說明,注冊表數(shù)據(jù)性能塊訪問過程的實現(xiàn):</p><p>  //枚舉鏈表中第一個對象</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>  //判斷是否是網絡對象索引號是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>  //找到第一個計數(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、下一個計數(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>  //找到第一個實例(instance)</p><p>  PERF_INSTANCE_DEFINITION *instancePtr = FirstInstance(objectPtr);</p><p><b>  //遍歷整個實例</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>  //得到這個實例的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>  //如果當前的接口就是我們選擇的接口</p><p>  if(InterfaceName == iName)</p><p>  {traffic = *((DWORD *) ((BYTE *)counterBlockPtr + processIdOffset));</p><

溫馨提示

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

評論

0/150

提交評論