2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩63頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  畢業(yè)設計(論文)</b></p><p>  題 目 局域網(wǎng)的IP數(shù)據(jù)包 </p><p>  監(jiān)控分析軟件實現(xiàn) </p><p>  學院名稱 計算機科學與技術學院

2、 </p><p>  指導教師 </p><p>  職 稱 </p><p>  班 級 </p><p>  學 號

3、 </p><p>  學生姓名 </p><p><b>  2011年5月26</b></p><p><b>  目錄</b></p><p><b>  摘 要ii</b></p&

4、gt;<p>  Abstractiii</p><p><b>  第一章 緒論1</b></p><p>  1.1 選題背景及意義1</p><p>  1.2 研究現(xiàn)狀1</p><p><b>  1.3實現(xiàn)方法2</b></p><p> 

5、 第二章 技術背景4</p><p>  2.1 Winsock基本概念4</p><p>  2.2 IP數(shù)據(jù)包的構成4</p><p>  2.2.1 IP地址5</p><p>  2.2.2 數(shù)據(jù)包的封裝與分用6</p><p>  2.2.3 IP數(shù)據(jù)報7</p><p>

6、  2.3網(wǎng)絡數(shù)據(jù)包捕獲原理9</p><p>  2.4 Raw Socket9</p><p>  2.4.1 WSAStartup()函數(shù)10</p><p>  2.4.2 socket()函數(shù)10</p><p>  2.4.3 bind()函數(shù)10</p><p>  2.4.4 WSAIoctl

7、()函數(shù)11</p><p>  2.4.5 recv()函數(shù)11</p><p>  2.5 網(wǎng)絡編程接口12</p><p>  第三章 系統(tǒng)整體分析與設計13</p><p>  3.1 基本情況分析13</p><p>  3.2 程序需求概述13</p><p>  3.2

8、.1 設計目標13</p><p>  3.2.2 功能需求13</p><p>  3.2.3 用戶特點13</p><p>  3.2.4 制約因素14</p><p>  3.3 概要設計14</p><p>  3.3.1 概要設計目標15</p><p>  3.3.2 系

9、統(tǒng)功能模塊劃分15</p><p>  3.3.3 系統(tǒng)模塊描述15</p><p>  3.3.4 功能模塊圖16</p><p>  第四章 系統(tǒng)詳細設計及實現(xiàn)17</p><p>  4.1 系統(tǒng)設計思想17</p><p>  4.2 程序各模塊的詳細設計17</p><p>

10、;  4.3系統(tǒng)類圖19</p><p>  4.3.1系統(tǒng)類關系圖19</p><p>  4.3.2關鍵類的說明21</p><p>  4.4 系統(tǒng)流程圖23</p><p>  4.5 安全控制24</p><p>  4.6 程序具體運行步驟24</p><p>  第五章

11、 總結與展望29</p><p><b>  5.1 總結29</b></p><p><b>  5.2 展望29</b></p><p><b>  參考文獻31</b></p><p><b>  結束語32</b></p>

12、<p><b>  附錄33</b></p><p><b>  摘 要</b></p><p>  本論文主要討論基于共享以太網(wǎng)(Ethernet)環(huán)境下的TCP/IP(其中IP協(xié)議的版本是IPv4)數(shù)據(jù)包的探測與分析技術。在這里,不僅介紹了大量網(wǎng)絡應用相關知識,包括套接字、TCP/IP協(xié)議、捕包技術等,還對本次軟件設計的需求分析、

13、概要設計、詳細設計等進行了詳細論敘。</p><p>  本系統(tǒng)開發(fā)主要基于Windows XP操作系統(tǒng)和Visual C++ 6.0開發(fā)環(huán)境,是以Raw Socket(原始套接字)為核心的局域網(wǎng)IP數(shù)據(jù)包監(jiān)控分析軟件。本系統(tǒng)能夠實現(xiàn)對網(wǎng)卡信息的捕獲,并能以圖形的方式統(tǒng)計出流量信息。此外,為了方便日后分析,本系統(tǒng)還提供了保存捕包結果的功能。本系統(tǒng)采用多線程編程技術,可以很方便的對系統(tǒng)的執(zhí)行或停止進行操作,而不必擔

14、心,當系統(tǒng)開始抓取數(shù)據(jù)包時,會因為程序一直處于工作狀態(tài),而不接受其它的命令,最后導致系統(tǒng)的崩潰。</p><p>  關鍵詞: IP數(shù)據(jù)包;TCP/IP協(xié)議;數(shù)據(jù)包探測;流量特征分析; 原始套接字</p><p><b>  Abstract</b></p><p>  This thesis mainly discussed the Ethe

15、rnet TCP/IP (in which the version of IP protocol is IPv4) packet detection and analysis technique under the LAN environment. Here, not only the related knowledge about network application , including socket, TCP/IP prot

16、ocol, and packet capture, but also the requirement analysis of software, general design, detailed design has been introduced.</p><p>  The development of the system mainly based on Windows XP operating syste

17、m and Visual C++ 6.0 software development environment, and it is the LAN IP packet inspection that based on analysis raw socket . This system can capture nic information, and draw the traffic pattern diagram. In addition

18、, in order to facilitate future analysis, this system also provides the function of saving packets which have been catched before. The system use the multi-threading technique, so it can be very convenient to</p>

19、<p>  Key words: IP data packet; TCP/IP protocol; data packet probe; traffic pattern analysis; raw socket</p><p><b>  第一章 緒論</b></p><p>  1.1 選題背景及意義</p><p>  

20、隨著信息技術的快速發(fā)展,網(wǎng)絡已成為信息交換的主要手段,一些網(wǎng)絡新業(yè)務在不斷地興起,如電子商務、移動支付等,這些都對網(wǎng)絡安全提出了較高的要求。與此同時,黑客對網(wǎng)絡的攻擊從未停止,有的利用網(wǎng)絡盜取他人個人信息,如網(wǎng)上銀行賬號密碼等,對他人的財產(chǎn)安全構成了嚴重威脅,網(wǎng)絡的安全問題變得日趨嚴峻。因此,必須加強安全意識,并及早防范,防范這種現(xiàn)象的方法和工具有很多,按時間元素歸納起來大致有三類,事先預警,事中防范和事后監(jiān)督,其中,事中防范是目前正在

21、流行的一種安全措施,主要作用是在根據(jù)正在發(fā)生的事件判斷風險程度和防范水平。</p><p>  而網(wǎng)絡監(jiān)聽是正是它的一個典型例子,網(wǎng)絡監(jiān)聽又稱網(wǎng)絡竊聽,它引起人們普遍注意是從94年開始的。實現(xiàn)網(wǎng)絡監(jiān)聽的主要工具是sniffer,中文名稱叫做嗅探器。隨著以太網(wǎng)這種局域網(wǎng)技術的日漸成熟,網(wǎng)絡監(jiān)聽也日漸成熟,它在協(xié)助網(wǎng)絡管理員監(jiān)測網(wǎng)絡傳輸數(shù)據(jù),排除網(wǎng)絡故障等方面具有不可替代的作用,因而一直倍受網(wǎng)絡管理員的青睞,局域網(wǎng)的

22、IP數(shù)據(jù)包監(jiān)控分析軟件,就是網(wǎng)絡監(jiān)聽技術的一種實現(xiàn)方式,該實現(xiàn)主要運用sniffer原理來嗅探出網(wǎng)絡有效信息,并經(jīng)過windows網(wǎng)絡編程,從中提取出有效數(shù)據(jù),以實現(xiàn)對IP數(shù)據(jù)包的監(jiān)控,以達到安全防范的目的。</p><p><b>  1.2 研究現(xiàn)狀</b></p><p>  一般來講,Windows環(huán)境下有三種方案可供選擇以編程實現(xiàn)IP數(shù)據(jù)包的捕獲:</

23、p><p>  Raw Socket,原始套接字是Windows Socket 2.2版本中定義的套接字結構,目前只有一個WinSocket2.h運行時庫提供對它的支持,原始套接字能夠生成自己的數(shù)據(jù)報文,包括報頭和數(shù)據(jù)報本身的內容。通過原始套接字可以自如的控制Windows下的多種協(xié)議,而且能夠對底層的傳輸機制進行控制[1]。可以用原始套接字來發(fā)送和接收IP層以上的原始數(shù)據(jù)包,如ICMP(Internet互聯(lián)網(wǎng)控制報

24、文協(xié)議),TCP(Transmission Control Protocal, 傳輸控制協(xié)議),UDP(User Datagram Protocal, 用戶數(shù)據(jù)報協(xié)議),而且能夠對底層的傳輸機制進行控制。Raw Socket的作用主要有三個方面:1)接收發(fā)向本機的ICMP,IGMP(Internet組管理協(xié)議)協(xié)議包,或者發(fā)送這些協(xié)議包;2)接收發(fā)向本機的IP包;3)發(fā)送自定義的IP包。</p><p> ?。?

25、)NDIS(Network Driver Interface Specification,網(wǎng)絡驅動程序接口規(guī)范),為傳輸層提供標準的網(wǎng)絡接口,所有的傳輸驅動程序都需要調用NDIS接口來訪問網(wǎng)絡[2]。由Microsoft和3Com公司聯(lián)合開發(fā),是Windows中的“通信協(xié)議程序”和“網(wǎng)絡設備驅動”之間通信的規(guī)范,它為協(xié)議控制程序提供標準的接口,它支持計算機通過不同的協(xié)議棧與網(wǎng)絡相連。</p><p>  (3)W

26、inPcap(windows packet capture),是一個基于Win32的捕獲數(shù)據(jù)包和網(wǎng)絡分析的體系結構,它包括一個內核級的包過濾器,一個底層的動態(tài)鏈接庫(Packet.dll),一個高層并且與系統(tǒng)無關的庫(WPcap)[3]。WinPcap提供了以下四項功能:1)捕獲原始數(shù)據(jù)包,包括共享網(wǎng)絡上各主機發(fā)送/接收的以及相互之間交互的數(shù)據(jù)報;2)在數(shù)據(jù)報發(fā)往應用程序之前,按照自定義的規(guī)則將某些特殊的數(shù)據(jù)報過濾掉;3)在網(wǎng)絡上發(fā)送原

27、始數(shù)據(jù)包;4.收集網(wǎng)絡通信過中的統(tǒng)計信息。</p><p>  表1.1對它們各自的優(yōu)缺點進行了簡單比較:</p><p>  表1.1 Windows下捕包方案比較</p><p><b>  1.3實現(xiàn)方法</b></p><p>  在以太網(wǎng)上通訊的每張網(wǎng)卡上都擁有一個全球唯一的物理地址,也叫MAC地址。該地址是一

28、個48比特的二進制數(shù)。在以太網(wǎng)卡中內建有一個數(shù)據(jù)包過濾器。該數(shù)據(jù)包過濾器的作用是保留以本身網(wǎng)卡的MAC地址為通訊目的的數(shù)據(jù)包和廣播數(shù)據(jù)包,丟棄所有其它無關的數(shù)據(jù)包,以免CPU對無關的數(shù)據(jù)報作無謂的處理[4]。這是以太網(wǎng)卡在一般情況下的工作方式。因此在正常情況下,一個合法的網(wǎng)絡接口應該只響應這樣的兩種數(shù)據(jù)包(幀): </p><p>  (1)幀的目標地址具有和本地網(wǎng)絡接口相匹配的硬件地址。 </p>

29、<p>  (2)幀的目標地址是“廣播地址”(代表所有的接口地址),格式為“FFFFFFFFFFFF”。 </p><p>  在接收到上面兩種情況的數(shù)據(jù)幀時,網(wǎng)卡通過CPU產(chǎn)生中斷,操作系統(tǒng)進行中斷處理后將幀中包含的數(shù)據(jù)傳送給上層系統(tǒng)進行進一步處理。在其他情況下數(shù)據(jù)幀將被丟棄而不作處理。 </p><p>  要想捕獲到流經(jīng)網(wǎng)卡的不屬于本主機的數(shù)據(jù),必須繞過系統(tǒng)正常

30、工作的處理機制,直接訪問網(wǎng)絡底層。我們可以把網(wǎng)卡的狀態(tài)設為“混雜”(promiscuous)模式,當網(wǎng)卡工作在這種“混雜”模式時,該網(wǎng)卡就具備了“廣播地址”,它對所接收到的每一個幀都產(chǎn)生一個硬件中斷以提醒操作系統(tǒng)處理流經(jīng)該網(wǎng)卡上的每一個報文包。操作系統(tǒng)通過直接訪問鏈路層,截獲相關數(shù)據(jù),由應用程序而非上層協(xié)議(如IP層、TCP層)對數(shù)據(jù)過濾處理,這樣就可以捕獲到流經(jīng)網(wǎng)卡的所有數(shù)據(jù)。</p><p>  本次研究是在

31、共享局域網(wǎng)環(huán)境下,共享式以太網(wǎng)的典型代表是使用10Base5的總線型網(wǎng)絡和以集線器(HUB)為核心的星型網(wǎng)絡。另外,本次只對TCP/IP的抓包研究,不涉及數(shù)據(jù)報的截獲或攔截。</p><p><b>  第二章 技術背景</b></p><p>  2.1 Winsock基本概念</p><p>  Windows下網(wǎng)絡編程的規(guī)范--Windo

32、ws Socket是Windows下得到廣泛應用的、開放的、支持多種協(xié)議的的網(wǎng)絡編程接口。該規(guī)范以U.C.Berkeley大學BSD UNIX中流行的Socket接口為范例定義了一套Micosoft Windows下網(wǎng)絡編程接口。它不僅包含了Berkeley Socket風格的庫函數(shù),也包含了一組針對Windows的擴展庫函數(shù),以使程序員能充分利用Windows消息驅動機制進行編程。Windows在Internet支配域中的TCP/IP

33、協(xié)議定義了Winsock網(wǎng)絡編程規(guī)范,融入了許多新特點。使用Socket的目的是使用戶在網(wǎng)絡協(xié)議上工作而不必對該網(wǎng)絡協(xié)議有非常深入的了解。此外,編寫的程序還可被迅速地移植到任何支持Socket的網(wǎng)絡系統(tǒng)中去。Winsock提供了一種可為指定傳輸協(xié)議打開、計算和關閉會話的能力。在Windows下,TCP/IP上層模型在很大程度上與用戶的Winsock應用有關;換言之,用戶的Winsock應用控制了會話的方方面面,必要時,還會根據(jù)程序的需要

34、格式化數(shù)據(jù)。</p><p>  套接字,是通信的基石,是支持TCP/IP協(xié)議的網(wǎng)絡通信的基本操作單元[5]??梢詫⑻捉幼挚醋鞑煌鳈C間的進程進行雙向通信的端口。一個套接口就是通信的一端,套接口,就是一個指向傳輸提供者的句柄。套接字有三種類型:流式套接字、數(shù)據(jù)報套接字及原始套接字。流式套接字定義了一種可靠的面向連接的服務,實現(xiàn)了無差錯無重復的順序數(shù)據(jù)傳輸。數(shù)據(jù)報套接字定義了一種無連接的服務,數(shù)據(jù)通過相互獨立的報文

35、進行傳輸,是無序的,并且不保證可靠和無差錯。原始套接字允許對低層協(xié)議如IP或ICMP直接訪問,主要用于新的網(wǎng)絡協(xié)議實現(xiàn)的測試等,本次系統(tǒng)就是使用的該套接字。</p><p>  2.2 IP數(shù)據(jù)包的構成</p><p>  2.2.1 IP地址</p><p>  通常所說IP地址是指現(xiàn)在所使用的第四版本的Ipv4地址協(xié)議。其中的IP是以32位的二進制數(shù)來表示的,它

36、惟一地定義了一個在因特網(wǎng)上的主機或路由器。通常按8位分成4段,用十進制的數(shù)值表示,中間用點號分開。因此IP地址的數(shù)值可以從0.0.0.0到255.255.255.255。</p><p>  計算機地址除了0和全部為1的數(shù)值外都可以使用。計算機地址為0時,在網(wǎng)絡地址中指定為指向網(wǎng)絡本身。計算機地址全部為1時,網(wǎng)絡地址指定為向全體網(wǎng)絡進行通信廣播。網(wǎng)絡地址使用多少位取決于一個局域網(wǎng)能容納的計算機臺數(shù)。因此,網(wǎng)絡地址

37、的位數(shù)決定了IP地址的分類,總共分為A,B,C,D和E五類。</p><p>  A類地址中網(wǎng)絡地址有7位,計算機地址被分配為24位。即具有A類地址的網(wǎng)絡在全世界只有100個左右,是能夠容納1600萬臺計算機的網(wǎng)絡。</p><p>  B類地址使用方便,網(wǎng)絡數(shù)量和可容納的主機數(shù)都比較合適,造成現(xiàn)在B類地址資源不足,申請分配十分困難。</p><p>  C類地址目

38、前還有大量剩余,但是由于一個單位中使用一個C類地址,常常不能容納自己網(wǎng)絡上所有的計算機,因此必須分配給相應的多個C類地址。這種情況下,需要使用把這些計算機作為一個網(wǎng)絡的無類別域際路由選擇(CIDR: Classless Inter-Domain Routing)技術,使用不受本來類別制約的地址,進行地址空間的再分配會擴大網(wǎng)絡地址的使用,在此種情況下分配的網(wǎng)絡稱為子網(wǎng)。使用子網(wǎng)時不能從IP地址的類別上區(qū)分IP地址中哪部分是網(wǎng)絡地址。<

39、;/p><p>  D類地址是多點傳送地址,向多方傳送IP數(shù)據(jù)包。廣播會向所有的網(wǎng)絡設備傳送IP數(shù)據(jù)包,但是在多點傳送中希望接收數(shù)據(jù)的多臺計算機可以接受到IP數(shù)據(jù)包。這種多點傳送可以將聲音、圖像等向多臺網(wǎng)絡設備同時傳送,因此常被使用在利用網(wǎng)絡進行廣播的應用程序上。</p><p>  E類地址保留為今后用。</p><p>  在因特網(wǎng)中使用的IP地址,在世界范圍內是不

40、重復的。但是對于因特網(wǎng)沒有對外公開的IP地址和其他網(wǎng)絡中發(fā)生重復是沒有關系的。因此,作為沒有公開的內部私有地址,要規(guī)定其使用范圍。RFC1918中對私有地址的規(guī)定是:</p><p>  10.0.0.0~10.255.255.255</p><p>  172.16.0.0~172.31.255.255</p><p>  192.168.0.0~192.168.

41、255.255</p><p>  因此在內部私有網(wǎng)中的IP常常會是在以上范圍內。</p><p>  下一代的IP地址為Ipv6,IP地址的位數(shù)達到128位,IP地址的個數(shù)可以達到現(xiàn)在的296倍,這樣Ipv4地址資源不足的問題將得到解決。</p><p>  2.2.2 數(shù)據(jù)包的封裝與分用</p><p>  當應用程序用TCP傳送數(shù)據(jù)時,

42、數(shù)據(jù)被送入?yún)f(xié)議棧中,然后逐個通過每一層直到被當做一串比特流送入網(wǎng)絡。其中每一層對收到的數(shù)據(jù)都要增加一些首部信息(有時還要增加一些尾部信息),該過程如圖2.1[6]所示。</p><p>  圖2.1 數(shù)據(jù)包的封裝過程示意圖</p><p>  TCP傳給IP的數(shù)據(jù)單元為TCP報文段,IP傳給網(wǎng)絡接口層的數(shù)據(jù)單元為IP數(shù)據(jù)報(IP datagram),通過以太網(wǎng)傳輸?shù)谋忍亓鞣Q作幀(Frame

43、),以太網(wǎng)數(shù)據(jù)幀的長度必須在46~1500字節(jié)之間。</p><p>  UDP數(shù)據(jù)與TCP數(shù)據(jù)基本一致。唯一不同的是UDP傳給IP的信息單元稱作UDP數(shù)據(jù)報(UDP Datagram),而且UDP 的首部長為8字節(jié)。由于TCP、UDP、ICMP和IGMP都要向IP傳送數(shù)據(jù),因此IP必須在生成的IP首部中加入某種標識,以表明數(shù)據(jù)屬于哪一層。為此,IP 首部中存入一個長度為8bit的數(shù)據(jù),即協(xié)議域。1表示ICMP協(xié)

44、議,2表示IGMP,6表示TCP,17表示UDP。</p><p>  許多應用程序都可以使用TCP或UDP來傳送數(shù)據(jù),傳輸層協(xié)議在生成報文首部時要存入一個應用程序的標識符,TCP和UDP都用一個16位的端口號來表示不同的應用程序,TCP和UDP把源端口號和目的端口號分別存入報文首部中。網(wǎng)絡接口要發(fā)送和接收IP、ARP(Address Resolution Protocol,地址解析協(xié)議)和RARP(Revers

45、e Address Resolution Protocol, 逆向地址解析協(xié)議)數(shù)據(jù),也必須在以太網(wǎng)的幀首部中加入某種形式的標識,以指明生成數(shù)據(jù)的網(wǎng)絡層協(xié)議,為此,以太網(wǎng)的首部也有一個16bit的幀類型域。當目的主機收到一個以太網(wǎng)數(shù)據(jù)幀時,數(shù)據(jù)就開始從協(xié)議棧中由底向上升,同時去掉各層協(xié)議加上的報文首部。每層協(xié)議盒都要去檢查報文首部中的協(xié)議標識,以確定接收數(shù)據(jù)的上層協(xié)議。這個分用過程如圖2.2[6] 所示。</p><

46、p>  圖2.2 數(shù)據(jù)分用過程</p><p>  2.2.3 IP數(shù)據(jù)報</p><p>  IP數(shù)據(jù)報,是Internet上數(shù)據(jù)通信的基本單元。IP數(shù)據(jù)報文的格式如圖2.3所示:</p><p>  圖2.3 IP數(shù)據(jù)報格式</p><p>  其中,版本字段用于指定IP協(xié)議的版本號,本次系統(tǒng)使用環(huán)境即為版本4。報頭長度字段用于指定

47、IP數(shù)據(jù)頭的長度,它以4B為單位,且至少為5,即20個字節(jié)或160個比特;需要注意的是,IP報頭長度不包含數(shù)據(jù)區(qū)中的數(shù)據(jù)。服務器類型(TOS)字段共占用了8bit,其分配方法為:優(yōu)先級DTR字段未用;優(yōu)先級字段用于指定IP數(shù)據(jù)包在網(wǎng)絡中的優(yōu)先級,優(yōu)先級可以影響一個信息包通過網(wǎng)橋的速度,以及目的主機翻譯的方式;字段D為延遲標志位;T為流量標志位;R為質量標志位??傞L度字段用于指定IP數(shù)據(jù)包的總長度(包含數(shù)據(jù)區(qū)中的數(shù)據(jù)),它以字節(jié)為單位,理

48、論最大長度為65535,然而,如今大多數(shù)應用程序允許最大長度為8192[7]。信息包標識,用來判斷分段屬于哪一個數(shù)據(jù)包。標志,共分3位,其中第一位未用;第二位為DF,若DF等于1,則表明不對該數(shù)據(jù)包進行分段;第三位為MF,若為MF等于1,則表明該分段不是最后一個包,即還有其他分段存在,若MF等于0,則表明該分段是最后一個分段,利用MF標志位可以判斷是否所用的分段都已到達。分段偏移量,用于指明分段在整個數(shù)據(jù)包中的位置。生命周期(TTL)字

49、段用于控制IP數(shù)據(jù)包在網(wǎng)絡存在時</p><p>  本程序中定義的IP數(shù)據(jù)結構為:</p><p>  typedef struct _IPHeader</p><p><b>  {</b></p><p>  unsigned char ver_len; //版本+報頭長度</p><p>

50、;  unsigned char tos;//服務類型</p><p>  unsigned short len;//總長度</p><p>  unsigned short ident;//信息包標志</p><p>  unsigned short flag_frag;//標志(3) + 分段偏移(13)</p><p>

51、;  unsigned char ttl;//生命周期</p><p>  unsigned char proto;//協(xié)議</p><p>  unsigned short checksum;//校驗和</p><p>  unsigned int src;//源IP地址</p><p>  unsigned int ds

52、t;//目的IP地址</p><p>  _IPHeader()</p><p><b>  {</b></p><p>  memset(this, 0, sizeof(_IPHeader));//初始化</p><p><b>  }</b></p><p>  }

53、IPHeader, *PIPHeader;</p><p>  2.3網(wǎng)絡數(shù)據(jù)包捕獲原理</p><p>  目前有兩種方法可以從網(wǎng)絡中捕獲數(shù)據(jù)包,一種是采用專用硬件,另一種是利用普通計算機與網(wǎng)絡連接的通用硬件網(wǎng)絡適配器,即網(wǎng)卡,由軟件來完成數(shù)據(jù)包的捕獲。雖然由軟件來捕獲數(shù)據(jù)包的方法在性能上比不上專用硬件,但其實現(xiàn)成本相對更低,且易于修改和更新。基于以上原因,采用軟件的捕獲方法得到了廣泛的

54、使用和認同。在以太網(wǎng)中,所有的通信都是廣播方式,即在同一網(wǎng)段上的所有網(wǎng)絡接口都可以訪問在物理媒體上傳輸?shù)臄?shù)據(jù)。</p><p>  數(shù)據(jù)的收發(fā)由網(wǎng)卡來完成,網(wǎng)卡的工作模式起著至關重要的作用,一般網(wǎng)卡有四種方式:(1)廣播方式,此方式下網(wǎng)卡可以接收網(wǎng)絡中的廣播信息;(2)組播方式,此方式下網(wǎng)卡可以接收網(wǎng)絡中的組播信息;(3)直接方式,此方式下只有目的網(wǎng)卡才能接收該數(shù)據(jù);(4)混雜模式,此模式下網(wǎng)卡能夠接收一切通過它

55、的數(shù)據(jù),不論是否傳給它[8]。網(wǎng)卡的缺省工作模式包含廣播模式和直接模式,即它只接收廣播幀和發(fā)給自己的幀。如果采用混雜模式,一個站點的網(wǎng)卡將接受同一網(wǎng)絡內所有站點所發(fā)送的數(shù)據(jù)包這樣就可以到達對于網(wǎng)絡信息監(jiān)視捕獲的目的。</p><p>  2.4 Raw Socket</p><p>  原始套接字提供管理下層傳輸?shù)哪芰?,它們可能會被惡意利用,這是一個安全問題,僅Administrator組

56、的成員能夠創(chuàng)建SOCK_RAW類型套接字。任何人都可以在NT下穿件套接字,但沒有Administrator權限的人不能用它做任何事,因為bind函數(shù)將會失敗,出錯碼為WSAEACCESS[9]。要使用原始套接字,必須經(jīng)過創(chuàng)建原始套接字、設置套接字選項和創(chuàng)建并填充相應協(xié)議頭這三個步驟,然后用send、WSASend函數(shù)將組裝好的數(shù)據(jù)發(fā)送出去[10]。接收的過程也很相似,只是需要用recv或WSARecv函數(shù)接收數(shù)據(jù)。</p>

57、<p>  2.4.1 WSAStartup()函數(shù)</p><p>  Winsock的服務是以動態(tài)鏈接庫Winsock DLL形式實現(xiàn)的,必須先調用WSAStartup函數(shù)對Winsock DLL進行初始化,協(xié)商Winsock的版本支持,分配必要的資源。WSAStartup函數(shù)的原型如下:</p><p>  int WSAStartup(WORD wVersionRequ

58、ested, LPWSADATA lpWSAData);</p><p>  其中,參數(shù)wVersionRequested用于指定準備加載的Winsock庫的版本,高字節(jié)指定Winsock庫的副版本,而低位字節(jié)則是主版本。lpWSAData參數(shù)是指向LPWSADATA結構的指針,該結構包含了加載的版本有關信息。</p><p>  2.4.2 socket()函數(shù)</p>&

59、lt;p>  使用套接字之前,必須使用socket()函數(shù)創(chuàng)建一個套接字對象,此函數(shù)調用成功將返回一個套接字對象。該函數(shù)原型如下:</p><p>  SOCKET socket(int af, int type, int protocol);</p><p>  其中,參數(shù)af用于指定網(wǎng)絡地址類型,在Internet域中,取AF_INET。參數(shù)type用于用于指定套接字類型,流式套

60、接字取SOCK_STREAM,數(shù)據(jù)報套接字取SOCK_DGRAM,而本次系統(tǒng)取值SOCK_RAM, 即原始套接字。參數(shù)protocol用于指定網(wǎng)絡協(xié)議,一般取0,表示默認為TCP/IP協(xié)議。</p><p>  2.4.3 bind()函數(shù)</p><p>  通過調用bind()函數(shù)將本地地址綁定到所創(chuàng)建的套接字上以在網(wǎng)絡上標識該套接字。該函數(shù)原型如下:</p><p

61、>  int bind(SOCKET s, const struct sockaddr* name, int namelen);</p><p>  其中,第一個參數(shù)s標識一個未捆綁套接字的句柄。第三個參數(shù)namelen為地址的長度。第二個參數(shù)name是賦予套接字的地址,由struct socketaddr結構表示,結構如下:</p><p>  struct sockaddr<

62、;/p><p><b>  {</b></p><p>  u_short sa_family;//設為AF_INET,表示socket處于Internet域</p><p>  char sa_data[14];//數(shù)據(jù)存儲</p><p><b>  };</b></p><p&

63、gt;  一般情況下,socketaddr_in結構更常用,在TCP/IP協(xié)議下,可以方便地通過強制類型轉換把sockaddr_in結構轉換為sockaddr結構。其結構格式如下:</p><p>  struct socketaddr_in</p><p><b>  {</b></p><p>  shor sin_family;//設為A

64、F_INET,表示socket處于Internet域unsinged short sin_port;//端口號</p><p>  struct in_addr sin_addr;//存儲一個4字節(jié)的地址數(shù)</p><p>  char sin_zear[8];//填充項,以保持同sockaddr結構長度一致</p><p><b>  };</b

65、></p><p>  2.4.4 WSAIoctl()函數(shù)</p><p>  該函數(shù)用于控制一個套接字的模式,函數(shù)的原型為:</p><p>  int WSAIoctl(SOCKET s, DWORD dwIoControlCode, LPVOID lpvInBuffer,</p><p>  DWORD cbInBuffer,

66、LPVOID lpvOutBuffer, DWORD cbOutBuffer,</p><p>  LPDWORD lpcbBytesReturned,LPWSAOVERLAPPED lpOverlapped,</p><p>  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);</p><p>  其

67、中,參數(shù)s標識套接字描述字,參數(shù)dwIoControlCode為欲進行操作的控制代碼,參數(shù)lpvInBuffer表示輸入緩沖區(qū)的地址,參數(shù)cbInBuffer指定緩沖區(qū)的大小,參數(shù)lpvOutBuffer表示輸出緩沖區(qū)的地址,參數(shù)cbOutBuffer指定輸出緩沖區(qū)的大小,參數(shù)lpcbBytesReturned用于輸出實際字節(jié)數(shù)的地址,參數(shù)lpOverlapped為WSAOVERLAPPED結構的地址,參數(shù)lpCompletionRou

68、tine指向操作結束后調用的例程指針。</p><p>  2.4.5 recv()函數(shù)</p><p>  使用該函數(shù)來接收我們想要的數(shù)據(jù)包,函數(shù)的原型為:</p><p>  int recv(SOCKET s, char* buf, int len, int flags);</p><p>  其中,參數(shù)s為準備接收數(shù)據(jù)的套接字。第二個

69、參數(shù)buf是即將收到數(shù)據(jù)的字符緩沖區(qū),而len是準備接收的字節(jié)數(shù)。Flags參數(shù)可以是0、MSG_PEEK或MSG_OOB或這些標志的按位“或”運算,0表示無特殊行為;MSG_PEEK使有用的數(shù)據(jù)復制到所提供的接收端緩沖區(qū)內,但沒有從系統(tǒng)緩沖區(qū)中將其刪除。recv函數(shù)返回發(fā)送字節(jié)數(shù)。</p><p>  2.5 網(wǎng)絡編程接口</p><p>  在網(wǎng)絡中相互通信的主機其實質是主機中相對應的

70、進程或者線程之間的通信。首先,他們要遵循統(tǒng)一的網(wǎng)絡協(xié)議。其次,進程或者線程與網(wǎng)絡協(xié)議之間的數(shù)據(jù)傳輸是通過網(wǎng)絡編程接口來實現(xiàn)的,而網(wǎng)絡協(xié)議則是依靠操作系統(tǒng)將數(shù)據(jù)最終送到傳輸介質上[11],如下圖2.4所示。</p><p>  圖2.4 進程、網(wǎng)絡協(xié)議、網(wǎng)絡編程接口關系</p><p>  第三章 系統(tǒng)整體分析與設計</p><p>  3.1 基本情況分析</

71、p><p>  網(wǎng)絡服務飛速發(fā)展,但同時網(wǎng)絡的安全問題也迫在眉睫,本系統(tǒng)通過對局域網(wǎng)的數(shù)據(jù)進行捕獲分析,可以分析網(wǎng)絡中存在的安全問題及流量查看。同時通過實踐來提高自己的動手能力。本系統(tǒng)適用于通過以太網(wǎng)和共享HUB的上網(wǎng)方式對局域網(wǎng)中的數(shù)據(jù)進行捕獲分析。其目的通過此監(jiān)控平臺,提高上網(wǎng)的安全控制。</p><p>  3.2 程序需求概述</p><p>  3.2.1 設

72、計目標</p><p>  通過學習數(shù)據(jù)包捕獲相關知識,以及借鑒國內外的成功經(jīng)驗,完成一個基本的局域網(wǎng)抓包分析工具,以幫助管理員及時發(fā)現(xiàn)局域網(wǎng)網(wǎng)絡中的異常,做出正確處理。</p><p>  3.2.2 功能需求</p><p>  能夠捕獲流經(jīng)本機網(wǎng)卡上的所有數(shù)據(jù)包。</p><p>  能夠對捕獲的數(shù)據(jù)包進行分析,分析的結果以列表形式顯示

73、。</p><p>  提供直觀的數(shù)據(jù)流量統(tǒng)計圖。</p><p>  提供IP數(shù)據(jù)包分析結果以日志的形式保存功能。</p><p>  3.2.3 用戶特點</p><p>  由于用戶不一定為具有相關專業(yè)知識,因此,需要提供一個友好的操作界面,簡單的操作步驟和盡可能全面的出錯提示。</p><p>  3.2.4

74、制約因素</p><p>  以太網(wǎng)環(huán)境主要分為兩種,共享以太網(wǎng)和交換以太網(wǎng)。在共享式以太網(wǎng)中的典型代表是使用10Base5的總線型網(wǎng)絡和以集線器(HUB)為核心的星型網(wǎng)絡。集線器工作在物理層。在使用集線器的以太網(wǎng)中,集線器將很多以太網(wǎng)設備集中到一臺中心設備上,這些設備都連接到集線器中的同一物理總線結構中。從本質上講,以集線器為核心的以太網(wǎng)同原先的總線型以太網(wǎng)無根本區(qū)別,集線器并不處理或檢查其上的通信量,僅通過將

75、一個端口接收的信號重復分發(fā)給其他端口來擴展物理介質。所有連接到集線器的設備共享同一介質,其結果是它們也共享同一沖突域、廣播和帶寬。因此集線器和它所連接的設備組成了一個單一的沖突域。如果一個節(jié)點發(fā)出一個廣播信息,集線器會將這個廣播傳播給所有同它相連的所有節(jié)點,因此它也是一個單一的廣播域。當局域網(wǎng)內的主機通過HUB連接時,HUB的作用就是局域網(wǎng)上面的一個共享的廣播媒體,所有通過局域網(wǎng)發(fā)送的數(shù)據(jù)首先被送到HUB,然后HUB將接收到的所有數(shù)據(jù)向

76、它的每個端口轉發(fā)。因此我們只要將某臺主機的網(wǎng)卡設置為混雜模式,就可以接收到局域網(wǎng)內所有主機間的數(shù)據(jù)流量。 </p><p>  而在交換式以太網(wǎng)中,交換機根據(jù)收到數(shù)據(jù)幀中的源MAC地址建立該地址同交換機端口的映射,并將其寫入MAC地址表中。當有數(shù)據(jù)包發(fā)送到交換機時,交換機會將數(shù)據(jù)包中的目的MAC地址與自己維護的MAC地址端口映射表中的數(shù)據(jù)進行對照,然后將數(shù)據(jù)包發(fā)送到對應的端口上。對交換機而言,僅有兩種情況會發(fā)送廣

77、播,一是數(shù)據(jù)包的目的MAC地址不在交換機維護的數(shù)據(jù)庫中,此時數(shù)據(jù)包向所有端口轉發(fā),這一過程稱之為泛洪(flooding);二是數(shù)據(jù)包本身就是廣播包。不同于工作在物理層的集線器,交換機是工作在數(shù)據(jù)鏈路層的。由于端口間的傳遞的數(shù)據(jù)幀彼此屏蔽,因此節(jié)點就不擔心自己發(fā)送的幀在通過交換機時是否會與其他節(jié)點發(fā)送的幀產(chǎn)生沖突。交換機將沖突隔絕在每一個端口(每個端口都是一個沖突域),避免了沖突的擴散。因此,基于交換機以太網(wǎng)建立的局域網(wǎng)并不是真正的廣播媒

78、體,交換機限制了被動監(jiān)聽工具所能截獲的數(shù)據(jù)。因此,要捕獲數(shù)據(jù)包就必須將捕包系統(tǒng)運行在網(wǎng)關或路由器上,如果想在網(wǎng)段的任意一臺主機上實現(xiàn)捕包功能,就需要采取其它的方法,如端口鏡像, MAC洪泛法,ARP欺騙(黑客經(jīng)常會以此方法進行攻擊和竊取數(shù)據(jù))。</p><p>  而作為本次的學習研究對象,選取的是共享以太網(wǎng),也就是說本系統(tǒng)在交換以太網(wǎng)中就無能為力了。</p><p><b> 

79、 3.3 概要設計</b></p><p>  3.3.1 概要設計目標</p><p>  理清程序邏輯,劃分程序模塊,明確模塊之間的調用關系,盡量做到高內聚低耦合。程序內部代碼要有一定的封裝性,也要有一定的可移植性,因為這個程序的功能也可以成為一個較大程序的一部分,所以對移植性和擴展要有一定的要求。</p><p>  3.3.2 系統(tǒng)功能模塊劃分&

80、lt;/p><p>  依據(jù)需求分析中的功能需求,系統(tǒng)將要實現(xiàn)的功能如下,同時每個功能包含了一個或多個模塊:</p><p>  數(shù)據(jù)捕獲,這個是本系統(tǒng)的核心,用于捕獲IP數(shù)據(jù)包,由數(shù)據(jù)包捕獲模塊組成。</p><p>  數(shù)據(jù)包分析,截獲到了數(shù)據(jù)包后還不能直接使用,需要按照相關協(xié)議頭來完成有效信息提取功能,這個功能包括數(shù)據(jù)包定義模塊和數(shù)據(jù)包拆包模塊。</p>

81、;<p>  數(shù)據(jù)信息顯示,本程序意在提供給用戶一個簡單易用的操作界面,該功能由程序初始化模塊、數(shù)據(jù)顯示模塊和圖形統(tǒng)計模塊組成。</p><p>  數(shù)據(jù)讀寫,為方便用戶日后對數(shù)據(jù)包進行進一步分析,可將數(shù)據(jù)包保存到日志文件內,并可以將日志內文件重新加入程序分析中,該功能能包含在文件讀寫模塊中。</p><p>  線程控制,程序開始后,系統(tǒng)將不停的對數(shù)據(jù)包進行捕獲,而程序的控

82、制權應該交由用戶來控制,因此,為了保護用戶的控制權,需要除主線程外,另外創(chuàng)建新的線程,新的線程用于數(shù)據(jù)包的捕獲、分析、停止等,而主線程則用于根據(jù)用戶的需要對新線程進行創(chuàng)建和監(jiān)視等任務。該功能包含線程創(chuàng)建模塊、線程停止模塊。</p><p>  3.3.3 系統(tǒng)模塊描述</p><p><b>  抓包模塊</b></p><p>  根據(jù)Raw

83、 Socket捕包方式,完成數(shù)據(jù)包的捕獲。新線程創(chuàng)建后,需執(zhí)行該模塊,是一個相對獨立的模塊。</p><p>  (2)數(shù)據(jù)包定義模塊</p><p>  根據(jù)相關協(xié)議,創(chuàng)建IP,TCP等協(xié)議頭的數(shù)據(jù)結構,是數(shù)據(jù)包分析功能的重要一部分。</p><p> ?。?)數(shù)據(jù)包拆包模塊</p><p>  利用截獲的數(shù)據(jù)包,根據(jù)已定義的協(xié)議頭數(shù)據(jù)結構

84、,提取IP地址,通信端口,數(shù)據(jù)包大小等信息。主要是根據(jù)數(shù)據(jù)包捕獲模塊提供的數(shù)據(jù),參照數(shù)據(jù)包定義模塊的數(shù)據(jù)結構來完成該功能。</p><p><b>  (4)數(shù)據(jù)顯示模塊</b></p><p>  將分析數(shù)據(jù)包后的信息使用列表的信息顯示出來。主要是調用數(shù)據(jù)包分析模塊中得到的有用信息。</p><p><b> ?。?)圖形統(tǒng)計模塊&

85、lt;/b></p><p>  根據(jù)捕獲到的數(shù)據(jù)包,提供按IP報頭、協(xié)議類型來統(tǒng)計數(shù)據(jù)包的流量信息。圖形統(tǒng)計模塊也需要數(shù)據(jù)包分析模塊提供信息。</p><p><b> ?。?)文件讀寫模塊</b></p><p>  將捕獲到的數(shù)據(jù)包,根據(jù)需要保存到文件。并且可以將已保存的數(shù)據(jù)重新顯示到列表框中。</p><p&g

86、t;<b>  線程控制模塊</b></p><p>  該模塊用于創(chuàng)建新線程和停止線程,新線程將調用數(shù)據(jù)包捕獲模塊捕獲數(shù)據(jù)包。按照用戶需求,當用戶需要停止捕獲數(shù)據(jù)包時,需要調用停止線程,停止數(shù)據(jù)包的捕獲。</p><p>  3.3.4 功能模塊圖</p><p>  根據(jù)系統(tǒng)功能模塊劃分,其圖形描述如圖3.1。</p><

87、;p>  圖3.1 程序功能模塊結構圖</p><p>  第四章 系統(tǒng)詳細設計及實現(xiàn)</p><p>  4.1 系統(tǒng)設計思想</p><p>  本系統(tǒng)將流經(jīng)過本地網(wǎng)卡的數(shù)據(jù)包截取后,按照已知的數(shù)據(jù)包的格式進行拆包分析。系統(tǒng)的用戶操作層處理與后臺數(shù)據(jù)處理相分離,后臺數(shù)據(jù)的顯示層分別封裝在兩個類中,同時對數(shù)據(jù)包的截取和分析放在專門的處理類中,這樣,在程序運行

88、的時候,當需要時就通過操作層調用后臺數(shù)據(jù)處理提供的接口函數(shù)即可。在程序運行的時候,主線程會調用類中相應的功能,通過后臺數(shù)據(jù)處理類的接口,先是初始化,然后抓包,再進行分析,再顯示到屏幕上,并完成相關統(tǒng)計,這些功能的都是在后臺數(shù)據(jù)處理類中新建的子線程下完成的,這樣做的原因是抓包是用一個無限循環(huán)進行的,如果不新建線程,一旦開始抓包,則程序就會進入“假死”,就不能進行其它的任何操作了,比如停止。在每次停止運行程序以后,用戶可以選擇保存當前數(shù)據(jù),

89、程序就會自動獲取當前日期和時間,將得到的數(shù)據(jù)存入文件中。或者,用戶可以將之前保存的數(shù)據(jù)加載到顯示列表中去。</p><p>  4.2 程序各模塊的詳細設計</p><p>  在概要設計時,已經(jīng)對各模塊功能進行了詳細描述,但還未設計到各模塊的具體實現(xiàn),其具體實現(xiàn)設計如下:</p><p>  (1)抓包模塊:這個模塊和數(shù)據(jù)包拆包、線程創(chuàng)建、線程停止模塊聯(lián)系緊密,所

90、以應該封裝到一個類里面。在外部調用的時候,只需要把這個在實例化一個對象,并且外的接口也只需要提供初始化、開始捕包、停止捕包接口即可,模塊的具體實現(xiàn)不需對外泄露。這個模塊內就是包含WSAStartup()函數(shù),Socket()函數(shù),bind()函數(shù),WSAIoctl()函數(shù),recv()函數(shù)。每個函數(shù)都有會有返回值,在這個模塊里也將判斷是不是每個函數(shù)都成功的執(zhí)行了,如果任意一個函數(shù)沒有成功執(zhí)行,那么整個程序的功能都無法實現(xiàn)。該程序就會提示

91、出相應的出錯信息,以便能更快更準確的找到問題的所在。本模塊雖然是程序的核心部分,但是比較簡單,都是一些Socket提供的一些接口函數(shù),所以在實現(xiàn)起來也比較容易。</p><p> ?。?)數(shù)據(jù)包定義模塊:這個模塊是定義在一個頭文件里的,因為它其實是一個結構體(Struct)。該模塊沒什么別的特殊意義,IP數(shù)據(jù)報結構已在2.2.3節(jié)列出,同時為了能對端口進行分析,有必要對TCP協(xié)議結構,及UDP結構進行分析,TCP

92、協(xié)議結構如下:</p><p>  typedef struct _TCPHeader</p><p><b>  {</b></p><p>  WORD SourPort;//源端口</p><p>  WORD DestPort;//目的端口</p><p>  DWORD Seq

93、No;//序列號</p><p>  DWORD AckNo;//確認序列號</p><p>  BYTE HLen;//頭部長度</p><p>  BYTE Flag;//保留</p><p>  WORD WndSize;//窗口</p><p>  WORD ChkSum;//校驗和

94、</p><p>  WORD UrgPtr;//緊急指針</p><p>  _TCPHeader()</p><p><b>  {</b></p><p>  memset(this, 0, sizeof(_TCPHeader)); //初始化</p><p><b>  }&

95、lt;/b></p><p>  }TCPHeader, *PTCPHeader;</p><p>  UDP協(xié)議結構如下:</p><p>  typedef struct _UDPHeader</p><p><b>  {</b></p><p>  WORD SourPort;/

96、/源端口</p><p>  WORD DestPort;//目的端口</p><p>  WORD Len;//報文長度</p><p>  WORD ChkSum;//校驗和</p><p>  _UDPHeader()</p><p><b>  {</b></p>

97、<p>  memset(this, 0, sizeof(_UDPHeader)); //初始化</p><p><b>  }</b></p><p>  }UDPHeader, *PUDPHeader;</p><p> ?。?)數(shù)據(jù)包拆包模塊:本模塊也是寫在新創(chuàng)建的線程里,這樣做的目的是為了可以更方便的處理數(shù)據(jù)包。因為當上一

98、個模塊抓取到數(shù)據(jù)后,就會直接調用這個模塊,這個模塊接收的數(shù)據(jù)從字符指針類型的數(shù)據(jù)強制轉換成我們定義的數(shù)據(jù)包結構類型,通過指針移動,及移位運算和按位與的方法,從數(shù)據(jù)包中提取出用戶想要的信息。</p><p> ?。?) 程序初始化模塊:本模塊是制作界面的,主要是通過分割窗口的方法,將主窗口分割成兩個窗口,一個主要是用于裝載列表框,表一定會有表頭,而表頭是固定的,所以會在初始化里就先將它加在界面上。另一個是圖形統(tǒng)計那

99、里,初始化時,可以先將坐標和尺度先畫處理。</p><p> ?。?)數(shù)據(jù)顯示模塊:本模塊是在單獨創(chuàng)建一個視圖類的中。在數(shù)據(jù)包拆包模塊執(zhí)行后,就會得到已經(jīng)分析好的包內的所有信息,并通過SendMessage()函數(shù)向主程序發(fā)送數(shù)據(jù)達到通知,主程序將通過分割窗口時保存的函數(shù)指針,調用該模塊類中的函數(shù),這些得到的信息添加到已經(jīng)初始化過的列表中,就這樣一個一個填,就可以把所有數(shù)據(jù)都顯示出來。</p>&l

100、t;p> ?。?)數(shù)據(jù)流繪圖模塊:得到數(shù)據(jù)包的數(shù)據(jù)后,會有一段數(shù)據(jù)是表示數(shù)據(jù)包長度的,通過這個就可以計算出當前的流量。每得到一個數(shù)據(jù)包,主程序都會通過SendMessage()函數(shù)將數(shù)據(jù)長度發(fā)給本模塊,本模塊就會將數(shù)據(jù)長度累加起來,然后通過事先調用SetTimer()函數(shù)設置的定時器,判斷是否需要重畫窗口,本窗口時程序初始化時分割的一個獨立的窗口,因此窗口重畫不會對其他窗口產(chǎn)生影響。定時器會每秒中啟動一次,每次調用繪圖函數(shù),這樣就

101、可生成流量統(tǒng)計的折線圖。</p><p> ?。?)文件讀寫模塊:在程序停止抓包后,因為對前面的數(shù)據(jù)包的信息并沒有進行記錄,所以不能從內存中找到數(shù)據(jù)包信息而進行記錄。但是因為列表里的信息與數(shù)據(jù)包是一一對應的,所以就把表內的信息按照設定的格式完完全全的寫入文件中即可。這樣就完成了一次數(shù)據(jù)包的信息記錄。當然,記錄完數(shù)據(jù)后,也可以通過ifstream文件流將數(shù)據(jù)重新加入列表框中顯示分析。</p><

102、p>  (8) 線程控制模塊:這個模塊是需要抓包模塊調用。當用戶點擊“開始捕包”菜單按鈕的時候,捕包模塊開始調用捕包初始化函數(shù),接著使用CreatThread()函數(shù)創(chuàng)建新的捕包線程。在用戶按下“停止捕包”菜單按鈕時,抓包模塊將調用該模塊,停止線程,停止數(shù)據(jù)包的捕獲。</p><p><b>  4.3系統(tǒng)類圖</b></p><p>  4.3.1系統(tǒng)類關系圖

103、</p><p>  4.3.2關鍵類的說明</p><p>  CpackHandle: 本類是本系統(tǒng)的關鍵類,窗口類對本類實例化就可以進行初始化套接字、抓取數(shù)據(jù)包、解析數(shù)據(jù)包等一系列操作。詳細說明見表4.1</p><p>  表 4.1 CpackHandle詳細說明表</p><p>  CMainFrame: 主窗口類,所有的界面

104、操作都在這里進行,而通過界面的操作,來啟動一些后臺操作,如抓包,并將結果以列表、曲線顯示出來。</p><p><b>  詳細說明見表4.2</b></p><p>  表 4.2 CMainFrame詳細說明表</p><p>  CIPListView: 列表視圖,將各個數(shù)據(jù)包在列表框中顯示。</p><p>&

105、lt;b>  詳細說明見表4.3</b></p><p>  表 4.3 CIPListView詳細說明表</p><p>  CFigureView: 列表視圖,將各個數(shù)據(jù)包在列表框中顯示。</p><p><b>  詳細說明見表4.4</b></p><p>  表 4.3 CFigureVie

106、w詳細說明表</p><p><b>  4.4 系統(tǒng)流程圖</b></p><p>  圖4.1 系統(tǒng)流程圖</p><p><b>  4.5 安全控制</b></p><p>  進行系統(tǒng)的安全控制,主要是為了保證軟件的正常運行。一般而言,從數(shù)據(jù)環(huán)境和數(shù)據(jù)處理兩方面來看,影響系統(tǒng)安全的因素主要

107、有環(huán)境性因素和數(shù)據(jù)處理因素。環(huán)境性因素,包括硬件和系統(tǒng)軟件、系統(tǒng)開發(fā)等方面。例如,硬件軟件方面,硬件失靈,系統(tǒng)軟件失靈,邏輯線路錯誤等;系統(tǒng)開發(fā)方面,沒有按科學的方法開發(fā)系統(tǒng)和設計程序、系統(tǒng)未經(jīng)測試和調試等。數(shù)據(jù)處理因素,是指數(shù)據(jù)處理行為引起的各種情況。例如,處理環(huán)節(jié)使用了錯誤的程序、錯誤的數(shù)據(jù)文件,處理不及時,丟失數(shù)據(jù)文件和程序。因此,要進行系統(tǒng)的安全控制,應針對影響系統(tǒng)安全的兩方面因素入手,有的放矢,相應地進行環(huán)境和數(shù)據(jù)處理兩方面的

108、有效控制,以保證系統(tǒng)安全有效地運行。本系統(tǒng)中主要使用的安全控制包括:</p><p> ?。?)軟件運行系統(tǒng)環(huán)境</p><p>  由于目前Windows7系統(tǒng)與Windows XP系統(tǒng)性的變化,而本程序的運行環(huán)境是Windows XP, 并不完全兼容Windows系統(tǒng)的各個版本,尤其在Window7系統(tǒng)中,如果不以管理員身份運用,則無法正常啟動抓包程序,因此,為了避免不必要的錯誤,程序

109、中作了系統(tǒng)版本的判別,本程序定義了一個OSVERSIONINFO結構,通過在啟動抓包的時候,調用GetVersionEx()函數(shù),將系統(tǒng)版本信息及時存入OSVERSIONINFO結構中,進而比較出當前程序運行系統(tǒng)是否為Windows XP,如果不是則提示用戶,由用戶來決定是否繼續(xù)運行本軟件。</p><p><b> ?。?)初始化階段</b></p><p>  主

110、要是套接字的初始化階段,包括創(chuàng)建套接字,綁定套接字,設置套接字等,如果其中一個環(huán)節(jié)出錯,為了避免不必要的錯誤,程序就不應該繼續(xù)進行下去,同時為了軟件的維護,通過WSAGetLastError()函數(shù)提示使用出現(xiàn)了的問題,并馬上返回,結束程序運行。</p><p><b> ?。?)捕包階段</b></p><p>  之前也有提到過,通過使用多線程來防止系統(tǒng)崩潰。&l

111、t;/p><p><b>  數(shù)據(jù)的使用與釋放</b></p><p>  數(shù)據(jù)使用前,應該養(yǎng)成初始化的好習慣,如果不進行初始化數(shù)據(jù)對應的內存值不一定為0或空,可能會出現(xiàn)亂碼,也有可能是其他程序未釋放的數(shù)據(jù)。本程序中TCP、IP等數(shù)據(jù)結構在使用前都使用了memset()函數(shù)清空內存,值得注意的是OSVERSIONINFO結構是必須清空的,否則無法獲取系統(tǒng)版本信息。另外,在

溫馨提示

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

評論

0/150

提交評論