

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 畢業(yè)設計(論文)</b></p><p> 題 目 局域網的IP數據包 </p><p> 監(jiā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 研究現狀1</p><p><b> 1.3實現方法2</b></p><p>
5、 第二章 技術背景4</p><p> 2.1 Winsock基本概念4</p><p> 2.2 IP數據包的構成4</p><p> 2.2.1 IP地址5</p><p> 2.2.2 數據包的封裝與分用6</p><p> 2.2.3 IP數據報7</p><p>
6、 2.3網絡數據包捕獲原理9</p><p> 2.4 Raw Socket9</p><p> 2.4.1 WSAStartup()函數10</p><p> 2.4.2 socket()函數10</p><p> 2.4.3 bind()函數10</p><p> 2.4.4 WSAIoctl
7、()函數11</p><p> 2.4.5 recv()函數11</p><p> 2.5 網絡編程接口12</p><p> 第三章 系統整體分析與設計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、統功能模塊劃分15</p><p> 3.3.3 系統模塊描述15</p><p> 3.3.4 功能模塊圖16</p><p> 第四章 系統詳細設計及實現17</p><p> 4.1 系統設計思想17</p><p> 4.2 程序各模塊的詳細設計17</p><p>
10、; 4.3系統類圖19</p><p> 4.3.1系統類關系圖19</p><p> 4.3.2關鍵類的說明21</p><p> 4.4 系統流程圖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> 本論文主要討論基于共享以太網(Ethernet)環(huán)境下的TCP/IP(其中IP協議的版本是IPv4)數據包的探測與分析技術。在這里,不僅介紹了大量網絡應用相關知識,包括套接字、TCP/IP協議、捕包技術等,還對本次軟件設計的需求分析、
13、概要設計、詳細設計等進行了詳細論敘。</p><p> 本系統開發(fā)主要基于Windows XP操作系統和Visual C++ 6.0開發(fā)環(huán)境,是以Raw Socket(原始套接字)為核心的局域網IP數據包監(jiān)控分析軟件。本系統能夠實現對網卡信息的捕獲,并能以圖形的方式統計出流量信息。此外,為了方便日后分析,本系統還提供了保存捕包結果的功能。本系統采用多線程編程技術,可以很方便的對系統的執(zhí)行或停止進行操作,而不必擔
14、心,當系統開始抓取數據包時,會因為程序一直處于工作狀態(tài),而不接受其它的命令,最后導致系統的崩潰。</p><p> 關鍵詞: IP數據包;TCP/IP協議;數據包探測;流量特征分析; 原始套接字</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ā)展,網絡已成為信息交換的主要手段,一些網絡新業(yè)務在不斷地興起,如電子商務、移動支付等,這些都對網絡安全提出了較高的要求。與此同時,黑客對網絡的攻擊從未停止,有的利用網絡盜取他人個人信息,如網上銀行賬號密碼等,對他人的財產安全構成了嚴重威脅,網絡的安全問題變得日趨嚴峻。因此,必須加強安全意識,并及早防范,防范這種現象的方法和工具有很多,按時間元素歸納起來大致有三類,事先預警,事中防范和事后監(jiān)督,其中,事中防范是目前正在
21、流行的一種安全措施,主要作用是在根據正在發(fā)生的事件判斷風險程度和防范水平。</p><p> 而網絡監(jiān)聽是正是它的一個典型例子,網絡監(jiān)聽又稱網絡竊聽,它引起人們普遍注意是從94年開始的。實現網絡監(jiān)聽的主要工具是sniffer,中文名稱叫做嗅探器。隨著以太網這種局域網技術的日漸成熟,網絡監(jiān)聽也日漸成熟,它在協助網絡管理員監(jiān)測網絡傳輸數據,排除網絡故障等方面具有不可替代的作用,因而一直倍受網絡管理員的青睞,局域網的
22、IP數據包監(jiān)控分析軟件,就是網絡監(jiān)聽技術的一種實現方式,該實現主要運用sniffer原理來嗅探出網絡有效信息,并經過windows網絡編程,從中提取出有效數據,以實現對IP數據包的監(jiān)控,以達到安全防范的目的。</p><p><b> 1.2 研究現狀</b></p><p> 一般來講,Windows環(huán)境下有三種方案可供選擇以編程實現IP數據包的捕獲:</
23、p><p> Raw Socket,原始套接字是Windows Socket 2.2版本中定義的套接字結構,目前只有一個WinSocket2.h運行時庫提供對它的支持,原始套接字能夠生成自己的數據報文,包括報頭和數據報本身的內容。通過原始套接字可以自如的控制Windows下的多種協議,而且能夠對底層的傳輸機制進行控制[1]。可以用原始套接字來發(fā)送和接收IP層以上的原始數據包,如ICMP(Internet互聯網控制報
24、文協議),TCP(Transmission Control Protocal, 傳輸控制協議),UDP(User Datagram Protocal, 用戶數據報協議),而且能夠對底層的傳輸機制進行控制。Raw Socket的作用主要有三個方面:1)接收發(fā)向本機的ICMP,IGMP(Internet組管理協議)協議包,或者發(fā)送這些協議包;2)接收發(fā)向本機的IP包;3)發(fā)送自定義的IP包。</p><p> ?。?
25、)NDIS(Network Driver Interface Specification,網絡驅動程序接口規(guī)范),為傳輸層提供標準的網絡接口,所有的傳輸驅動程序都需要調用NDIS接口來訪問網絡[2]。由Microsoft和3Com公司聯合開發(fā),是Windows中的“通信協議程序”和“網絡設備驅動”之間通信的規(guī)范,它為協議控制程序提供標準的接口,它支持計算機通過不同的協議棧與網絡相連。</p><p> ?。?)W
26、inPcap(windows packet capture),是一個基于Win32的捕獲數據包和網絡分析的體系結構,它包括一個內核級的包過濾器,一個底層的動態(tài)鏈接庫(Packet.dll),一個高層并且與系統無關的庫(WPcap)[3]。WinPcap提供了以下四項功能:1)捕獲原始數據包,包括共享網絡上各主機發(fā)送/接收的以及相互之間交互的數據報;2)在數據報發(fā)往應用程序之前,按照自定義的規(guī)則將某些特殊的數據報過濾掉;3)在網絡上發(fā)送原
27、始數據包;4.收集網絡通信過中的統計信息。</p><p> 表1.1對它們各自的優(yōu)缺點進行了簡單比較:</p><p> 表1.1 Windows下捕包方案比較</p><p><b> 1.3實現方法</b></p><p> 在以太網上通訊的每張網卡上都擁有一個全球唯一的物理地址,也叫MAC地址。該地址是一
28、個48比特的二進制數。在以太網卡中內建有一個數據包過濾器。該數據包過濾器的作用是保留以本身網卡的MAC地址為通訊目的的數據包和廣播數據包,丟棄所有其它無關的數據包,以免CPU對無關的數據報作無謂的處理[4]。這是以太網卡在一般情況下的工作方式。因此在正常情況下,一個合法的網絡接口應該只響應這樣的兩種數據包(幀): </p><p> (1)幀的目標地址具有和本地網絡接口相匹配的硬件地址。 </p>
29、<p> (2)幀的目標地址是“廣播地址”(代表所有的接口地址),格式為“FFFFFFFFFFFF”。 </p><p> 在接收到上面兩種情況的數據幀時,網卡通過CPU產生中斷,操作系統進行中斷處理后將幀中包含的數據傳送給上層系統進行進一步處理。在其他情況下數據幀將被丟棄而不作處理。 </p><p> 要想捕獲到流經網卡的不屬于本主機的數據,必須繞過系統正常
30、工作的處理機制,直接訪問網絡底層。我們可以把網卡的狀態(tài)設為“混雜”(promiscuous)模式,當網卡工作在這種“混雜”模式時,該網卡就具備了“廣播地址”,它對所接收到的每一個幀都產生一個硬件中斷以提醒操作系統處理流經該網卡上的每一個報文包。操作系統通過直接訪問鏈路層,截獲相關數據,由應用程序而非上層協議(如IP層、TCP層)對數據過濾處理,這樣就可以捕獲到流經網卡的所有數據。</p><p> 本次研究是在
31、共享局域網環(huán)境下,共享式以太網的典型代表是使用10Base5的總線型網絡和以集線器(HUB)為核心的星型網絡。另外,本次只對TCP/IP的抓包研究,不涉及數據報的截獲或攔截。</p><p><b> 第二章 技術背景</b></p><p> 2.1 Winsock基本概念</p><p> Windows下網絡編程的規(guī)范--Windo
32、ws Socket是Windows下得到廣泛應用的、開放的、支持多種協議的的網絡編程接口。該規(guī)范以U.C.Berkeley大學BSD UNIX中流行的Socket接口為范例定義了一套Micosoft Windows下網絡編程接口。它不僅包含了Berkeley Socket風格的庫函數,也包含了一組針對Windows的擴展庫函數,以使程序員能充分利用Windows消息驅動機制進行編程。Windows在Internet支配域中的TCP/IP
33、協議定義了Winsock網絡編程規(guī)范,融入了許多新特點。使用Socket的目的是使用戶在網絡協議上工作而不必對該網絡協議有非常深入的了解。此外,編寫的程序還可被迅速地移植到任何支持Socket的網絡系統中去。Winsock提供了一種可為指定傳輸協議打開、計算和關閉會話的能力。在Windows下,TCP/IP上層模型在很大程度上與用戶的Winsock應用有關;換言之,用戶的Winsock應用控制了會話的方方面面,必要時,還會根據程序的需要
34、格式化數據。</p><p> 套接字,是通信的基石,是支持TCP/IP協議的網絡通信的基本操作單元[5]。可以將套接字看作不同主機間的進程進行雙向通信的端口。一個套接口就是通信的一端,套接口,就是一個指向傳輸提供者的句柄。套接字有三種類型:流式套接字、數據報套接字及原始套接字。流式套接字定義了一種可靠的面向連接的服務,實現了無差錯無重復的順序數據傳輸。數據報套接字定義了一種無連接的服務,數據通過相互獨立的報文
35、進行傳輸,是無序的,并且不保證可靠和無差錯。原始套接字允許對低層協議如IP或ICMP直接訪問,主要用于新的網絡協議實現的測試等,本次系統就是使用的該套接字。</p><p> 2.2 IP數據包的構成</p><p> 2.2.1 IP地址</p><p> 通常所說IP地址是指現在所使用的第四版本的Ipv4地址協議。其中的IP是以32位的二進制數來表示的,它
36、惟一地定義了一個在因特網上的主機或路由器。通常按8位分成4段,用十進制的數值表示,中間用點號分開。因此IP地址的數值可以從0.0.0.0到255.255.255.255。</p><p> 計算機地址除了0和全部為1的數值外都可以使用。計算機地址為0時,在網絡地址中指定為指向網絡本身。計算機地址全部為1時,網絡地址指定為向全體網絡進行通信廣播。網絡地址使用多少位取決于一個局域網能容納的計算機臺數。因此,網絡地址
37、的位數決定了IP地址的分類,總共分為A,B,C,D和E五類。</p><p> A類地址中網絡地址有7位,計算機地址被分配為24位。即具有A類地址的網絡在全世界只有100個左右,是能夠容納1600萬臺計算機的網絡。</p><p> B類地址使用方便,網絡數量和可容納的主機數都比較合適,造成現在B類地址資源不足,申請分配十分困難。</p><p> C類地址目
38、前還有大量剩余,但是由于一個單位中使用一個C類地址,常常不能容納自己網絡上所有的計算機,因此必須分配給相應的多個C類地址。這種情況下,需要使用把這些計算機作為一個網絡的無類別域際路由選擇(CIDR: Classless Inter-Domain Routing)技術,使用不受本來類別制約的地址,進行地址空間的再分配會擴大網絡地址的使用,在此種情況下分配的網絡稱為子網。使用子網時不能從IP地址的類別上區(qū)分IP地址中哪部分是網絡地址。<
39、;/p><p> D類地址是多點傳送地址,向多方傳送IP數據包。廣播會向所有的網絡設備傳送IP數據包,但是在多點傳送中希望接收數據的多臺計算機可以接受到IP數據包。這種多點傳送可以將聲音、圖像等向多臺網絡設備同時傳送,因此常被使用在利用網絡進行廣播的應用程序上。</p><p> E類地址保留為今后用。</p><p> 在因特網中使用的IP地址,在世界范圍內是不
40、重復的。但是對于因特網沒有對外公開的IP地址和其他網絡中發(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> 因此在內部私有網中的IP常常會是在以上范圍內。</p><p> 下一代的IP地址為Ipv6,IP地址的位數達到128位,IP地址的個數可以達到現在的296倍,這樣Ipv4地址資源不足的問題將得到解決。</p><p> 2.2.2 數據包的封裝與分用</p><p> 當應用程序用TCP傳送數據時,
42、數據被送入協議棧中,然后逐個通過每一層直到被當做一串比特流送入網絡。其中每一層對收到的數據都要增加一些首部信息(有時還要增加一些尾部信息),該過程如圖2.1[6]所示。</p><p> 圖2.1 數據包的封裝過程示意圖</p><p> TCP傳給IP的數據單元為TCP報文段,IP傳給網絡接口層的數據單元為IP數據報(IP datagram),通過以太網傳輸的比特流稱作幀(Frame
43、),以太網數據幀的長度必須在46~1500字節(jié)之間。</p><p> UDP數據與TCP數據基本一致。唯一不同的是UDP傳給IP的信息單元稱作UDP數據報(UDP Datagram),而且UDP 的首部長為8字節(jié)。由于TCP、UDP、ICMP和IGMP都要向IP傳送數據,因此IP必須在生成的IP首部中加入某種標識,以表明數據屬于哪一層。為此,IP 首部中存入一個長度為8bit的數據,即協議域。1表示ICMP協
44、議,2表示IGMP,6表示TCP,17表示UDP。</p><p> 許多應用程序都可以使用TCP或UDP來傳送數據,傳輸層協議在生成報文首部時要存入一個應用程序的標識符,TCP和UDP都用一個16位的端口號來表示不同的應用程序,TCP和UDP把源端口號和目的端口號分別存入報文首部中。網絡接口要發(fā)送和接收IP、ARP(Address Resolution Protocol,地址解析協議)和RARP(Revers
45、e Address Resolution Protocol, 逆向地址解析協議)數據,也必須在以太網的幀首部中加入某種形式的標識,以指明生成數據的網絡層協議,為此,以太網的首部也有一個16bit的幀類型域。當目的主機收到一個以太網數據幀時,數據就開始從協議棧中由底向上升,同時去掉各層協議加上的報文首部。每層協議盒都要去檢查報文首部中的協議標識,以確定接收數據的上層協議。這個分用過程如圖2.2[6] 所示。</p><
46、p> 圖2.2 數據分用過程</p><p> 2.2.3 IP數據報</p><p> IP數據報,是Internet上數據通信的基本單元。IP數據報文的格式如圖2.3所示:</p><p> 圖2.3 IP數據報格式</p><p> 其中,版本字段用于指定IP協議的版本號,本次系統使用環(huán)境即為版本4。報頭長度字段用于指定
47、IP數據頭的長度,它以4B為單位,且至少為5,即20個字節(jié)或160個比特;需要注意的是,IP報頭長度不包含數據區(qū)中的數據。服務器類型(TOS)字段共占用了8bit,其分配方法為:優(yōu)先級DTR字段未用;優(yōu)先級字段用于指定IP數據包在網絡中的優(yōu)先級,優(yōu)先級可以影響一個信息包通過網橋的速度,以及目的主機翻譯的方式;字段D為延遲標志位;T為流量標志位;R為質量標志位。總長度字段用于指定IP數據包的總長度(包含數據區(qū)中的數據),它以字節(jié)為單位,理
48、論最大長度為65535,然而,如今大多數應用程序允許最大長度為8192[7]。信息包標識,用來判斷分段屬于哪一個數據包。標志,共分3位,其中第一位未用;第二位為DF,若DF等于1,則表明不對該數據包進行分段;第三位為MF,若為MF等于1,則表明該分段不是最后一個包,即還有其他分段存在,若MF等于0,則表明該分段是最后一個分段,利用MF標志位可以判斷是否所用的分段都已到達。分段偏移量,用于指明分段在整個數據包中的位置。生命周期(TTL)字
49、段用于控制IP數據包在網絡存在時</p><p> 本程序中定義的IP數據結構為:</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;//協議</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網絡數據包捕獲原理</p><p> 目前有兩種方法可以從網絡中捕獲數據包,一種是采用專用硬件,另一種是利用普通計算機與網絡連接的通用硬件網絡適配器,即網卡,由軟件來完成數據包的捕獲。雖然由軟件來捕獲數據包的方法在性能上比不上專用硬件,但其實現成本相對更低,且易于修改和更新?;谝陨显?采用軟件的捕獲方法得到了廣泛的
54、使用和認同。在以太網中,所有的通信都是廣播方式,即在同一網段上的所有網絡接口都可以訪問在物理媒體上傳輸的數據。</p><p> 數據的收發(fā)由網卡來完成,網卡的工作模式起著至關重要的作用,一般網卡有四種方式:(1)廣播方式,此方式下網卡可以接收網絡中的廣播信息;(2)組播方式,此方式下網卡可以接收網絡中的組播信息;(3)直接方式,此方式下只有目的網卡才能接收該數據;(4)混雜模式,此模式下網卡能夠接收一切通過它
55、的數據,不論是否傳給它[8]。網卡的缺省工作模式包含廣播模式和直接模式,即它只接收廣播幀和發(fā)給自己的幀。如果采用混雜模式,一個站點的網卡將接受同一網絡內所有站點所發(fā)送的數據包這樣就可以到達對于網絡信息監(jiān)視捕獲的目的。</p><p> 2.4 Raw Socket</p><p> 原始套接字提供管理下層傳輸的能力,它們可能會被惡意利用,這是一個安全問題,僅Administrator組
56、的成員能夠創(chuàng)建SOCK_RAW類型套接字。任何人都可以在NT下穿件套接字,但沒有Administrator權限的人不能用它做任何事,因為bind函數將會失敗,出錯碼為WSAEACCESS[9]。要使用原始套接字,必須經過創(chuàng)建原始套接字、設置套接字選項和創(chuàng)建并填充相應協議頭這三個步驟,然后用send、WSASend函數將組裝好的數據發(fā)送出去[10]。接收的過程也很相似,只是需要用recv或WSARecv函數接收數據。</p>
57、<p> 2.4.1 WSAStartup()函數</p><p> Winsock的服務是以動態(tài)鏈接庫Winsock DLL形式實現的,必須先調用WSAStartup函數對Winsock DLL進行初始化,協商Winsock的版本支持,分配必要的資源。WSAStartup函數的原型如下:</p><p> int WSAStartup(WORD wVersionRequ
58、ested, LPWSADATA lpWSAData);</p><p> 其中,參數wVersionRequested用于指定準備加載的Winsock庫的版本,高字節(jié)指定Winsock庫的副版本,而低位字節(jié)則是主版本。lpWSAData參數是指向LPWSADATA結構的指針,該結構包含了加載的版本有關信息。</p><p> 2.4.2 socket()函數</p>&
59、lt;p> 使用套接字之前,必須使用socket()函數創(chuàng)建一個套接字對象,此函數調用成功將返回一個套接字對象。該函數原型如下:</p><p> SOCKET socket(int af, int type, int protocol);</p><p> 其中,參數af用于指定網絡地址類型,在Internet域中,取AF_INET。參數type用于用于指定套接字類型,流式套
60、接字取SOCK_STREAM,數據報套接字取SOCK_DGRAM,而本次系統取值SOCK_RAM, 即原始套接字。參數protocol用于指定網絡協議,一般取0,表示默認為TCP/IP協議。</p><p> 2.4.3 bind()函數</p><p> 通過調用bind()函數將本地地址綁定到所創(chuàng)建的套接字上以在網絡上標識該套接字。該函數原型如下:</p><p
61、> int bind(SOCKET s, const struct sockaddr* name, int namelen);</p><p> 其中,第一個參數s標識一個未捆綁套接字的句柄。第三個參數namelen為地址的長度。第二個參數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];//數據存儲</p><p><b> };</b></p><p&
63、gt; 一般情況下,socketaddr_in結構更常用,在TCP/IP協議下,可以方便地通過強制類型轉換把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é)的地址數</p><p> char sin_zear[8];//填充項,以保持同sockaddr結構長度一致</p><p><b> };</b
65、></p><p> 2.4.4 WSAIoctl()函數</p><p> 該函數用于控制一個套接字的模式,函數的原型為:</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、中,參數s標識套接字描述字,參數dwIoControlCode為欲進行操作的控制代碼,參數lpvInBuffer表示輸入緩沖區(qū)的地址,參數cbInBuffer指定緩沖區(qū)的大小,參數lpvOutBuffer表示輸出緩沖區(qū)的地址,參數cbOutBuffer指定輸出緩沖區(qū)的大小,參數lpcbBytesReturned用于輸出實際字節(jié)數的地址,參數lpOverlapped為WSAOVERLAPPED結構的地址,參數lpCompletionRou
68、tine指向操作結束后調用的例程指針。</p><p> 2.4.5 recv()函數</p><p> 使用該函數來接收我們想要的數據包,函數的原型為:</p><p> int recv(SOCKET s, char* buf, int len, int flags);</p><p> 其中,參數s為準備接收數據的套接字。第二個
69、參數buf是即將收到數據的字符緩沖區(qū),而len是準備接收的字節(jié)數。Flags參數可以是0、MSG_PEEK或MSG_OOB或這些標志的按位“或”運算,0表示無特殊行為;MSG_PEEK使有用的數據復制到所提供的接收端緩沖區(qū)內,但沒有從系統緩沖區(qū)中將其刪除。recv函數返回發(fā)送字節(jié)數。</p><p> 2.5 網絡編程接口</p><p> 在網絡中相互通信的主機其實質是主機中相對應的
70、進程或者線程之間的通信。首先,他們要遵循統一的網絡協議。其次,進程或者線程與網絡協議之間的數據傳輸是通過網絡編程接口來實現的,而網絡協議則是依靠操作系統將數據最終送到傳輸介質上[11],如下圖2.4所示。</p><p> 圖2.4 進程、網絡協議、網絡編程接口關系</p><p> 第三章 系統整體分析與設計</p><p> 3.1 基本情況分析</
71、p><p> 網絡服務飛速發(fā)展,但同時網絡的安全問題也迫在眉睫,本系統通過對局域網的數據進行捕獲分析,可以分析網絡中存在的安全問題及流量查看。同時通過實踐來提高自己的動手能力。本系統適用于通過以太網和共享HUB的上網方式對局域網中的數據進行捕獲分析。其目的通過此監(jiān)控平臺,提高上網的安全控制。</p><p> 3.2 程序需求概述</p><p> 3.2.1 設
72、計目標</p><p> 通過學習數據包捕獲相關知識,以及借鑒國內外的成功經驗,完成一個基本的局域網抓包分析工具,以幫助管理員及時發(fā)現局域網網絡中的異常,做出正確處理。</p><p> 3.2.2 功能需求</p><p> 能夠捕獲流經本機網卡上的所有數據包。</p><p> 能夠對捕獲的數據包進行分析,分析的結果以列表形式顯示
73、。</p><p> 提供直觀的數據流量統計圖。</p><p> 提供IP數據包分析結果以日志的形式保存功能。</p><p> 3.2.3 用戶特點</p><p> 由于用戶不一定為具有相關專業(yè)知識,因此,需要提供一個友好的操作界面,簡單的操作步驟和盡可能全面的出錯提示。</p><p> 3.2.4
74、制約因素</p><p> 以太網環(huán)境主要分為兩種,共享以太網和交換以太網。在共享式以太網中的典型代表是使用10Base5的總線型網絡和以集線器(HUB)為核心的星型網絡。集線器工作在物理層。在使用集線器的以太網中,集線器將很多以太網設備集中到一臺中心設備上,這些設備都連接到集線器中的同一物理總線結構中。從本質上講,以集線器為核心的以太網同原先的總線型以太網無根本區(qū)別,集線器并不處理或檢查其上的通信量,僅通過將
75、一個端口接收的信號重復分發(fā)給其他端口來擴展物理介質。所有連接到集線器的設備共享同一介質,其結果是它們也共享同一沖突域、廣播和帶寬。因此集線器和它所連接的設備組成了一個單一的沖突域。如果一個節(jié)點發(fā)出一個廣播信息,集線器會將這個廣播傳播給所有同它相連的所有節(jié)點,因此它也是一個單一的廣播域。當局域網內的主機通過HUB連接時,HUB的作用就是局域網上面的一個共享的廣播媒體,所有通過局域網發(fā)送的數據首先被送到HUB,然后HUB將接收到的所有數據向
76、它的每個端口轉發(fā)。因此我們只要將某臺主機的網卡設置為混雜模式,就可以接收到局域網內所有主機間的數據流量。 </p><p> 而在交換式以太網中,交換機根據收到數據幀中的源MAC地址建立該地址同交換機端口的映射,并將其寫入MAC地址表中。當有數據包發(fā)送到交換機時,交換機會將數據包中的目的MAC地址與自己維護的MAC地址端口映射表中的數據進行對照,然后將數據包發(fā)送到對應的端口上。對交換機而言,僅有兩種情況會發(fā)送廣
77、播,一是數據包的目的MAC地址不在交換機維護的數據庫中,此時數據包向所有端口轉發(fā),這一過程稱之為泛洪(flooding);二是數據包本身就是廣播包。不同于工作在物理層的集線器,交換機是工作在數據鏈路層的。由于端口間的傳遞的數據幀彼此屏蔽,因此節(jié)點就不擔心自己發(fā)送的幀在通過交換機時是否會與其他節(jié)點發(fā)送的幀產生沖突。交換機將沖突隔絕在每一個端口(每個端口都是一個沖突域),避免了沖突的擴散。因此,基于交換機以太網建立的局域網并不是真正的廣播媒
78、體,交換機限制了被動監(jiān)聽工具所能截獲的數據。因此,要捕獲數據包就必須將捕包系統運行在網關或路由器上,如果想在網段的任意一臺主機上實現捕包功能,就需要采取其它的方法,如端口鏡像, MAC洪泛法,ARP欺騙(黑客經常會以此方法進行攻擊和竊取數據)。</p><p> 而作為本次的學習研究對象,選取的是共享以太網,也就是說本系統在交換以太網中就無能為力了。</p><p><b>
79、 3.3 概要設計</b></p><p> 3.3.1 概要設計目標</p><p> 理清程序邏輯,劃分程序模塊,明確模塊之間的調用關系,盡量做到高內聚低耦合。程序內部代碼要有一定的封裝性,也要有一定的可移植性,因為這個程序的功能也可以成為一個較大程序的一部分,所以對移植性和擴展要有一定的要求。</p><p> 3.3.2 系統功能模塊劃分&
80、lt;/p><p> 依據需求分析中的功能需求,系統將要實現的功能如下,同時每個功能包含了一個或多個模塊:</p><p> 數據捕獲,這個是本系統的核心,用于捕獲IP數據包,由數據包捕獲模塊組成。</p><p> 數據包分析,截獲到了數據包后還不能直接使用,需要按照相關協議頭來完成有效信息提取功能,這個功能包括數據包定義模塊和數據包拆包模塊。</p>
81、;<p> 數據信息顯示,本程序意在提供給用戶一個簡單易用的操作界面,該功能由程序初始化模塊、數據顯示模塊和圖形統計模塊組成。</p><p> 數據讀寫,為方便用戶日后對數據包進行進一步分析,可將數據包保存到日志文件內,并可以將日志內文件重新加入程序分析中,該功能能包含在文件讀寫模塊中。</p><p> 線程控制,程序開始后,系統將不停的對數據包進行捕獲,而程序的控
82、制權應該交由用戶來控制,因此,為了保護用戶的控制權,需要除主線程外,另外創(chuàng)建新的線程,新的線程用于數據包的捕獲、分析、停止等,而主線程則用于根據用戶的需要對新線程進行創(chuàng)建和監(jiān)視等任務。該功能包含線程創(chuàng)建模塊、線程停止模塊。</p><p> 3.3.3 系統模塊描述</p><p><b> 抓包模塊</b></p><p> 根據Raw
83、 Socket捕包方式,完成數據包的捕獲。新線程創(chuàng)建后,需執(zhí)行該模塊,是一個相對獨立的模塊。</p><p> ?。?)數據包定義模塊</p><p> 根據相關協議,創(chuàng)建IP,TCP等協議頭的數據結構,是數據包分析功能的重要一部分。</p><p> (3)數據包拆包模塊</p><p> 利用截獲的數據包,根據已定義的協議頭數據結構
84、,提取IP地址,通信端口,數據包大小等信息。主要是根據數據包捕獲模塊提供的數據,參照數據包定義模塊的數據結構來完成該功能。</p><p><b> ?。?)數據顯示模塊</b></p><p> 將分析數據包后的信息使用列表的信息顯示出來。主要是調用數據包分析模塊中得到的有用信息。</p><p><b> ?。?)圖形統計模塊&
85、lt;/b></p><p> 根據捕獲到的數據包,提供按IP報頭、協議類型來統計數據包的流量信息。圖形統計模塊也需要數據包分析模塊提供信息。</p><p><b> ?。?)文件讀寫模塊</b></p><p> 將捕獲到的數據包,根據需要保存到文件。并且可以將已保存的數據重新顯示到列表框中。</p><p&g
86、t;<b> 線程控制模塊</b></p><p> 該模塊用于創(chuàng)建新線程和停止線程,新線程將調用數據包捕獲模塊捕獲數據包。按照用戶需求,當用戶需要停止捕獲數據包時,需要調用停止線程,停止數據包的捕獲。</p><p> 3.3.4 功能模塊圖</p><p> 根據系統功能模塊劃分,其圖形描述如圖3.1。</p><
87、;p> 圖3.1 程序功能模塊結構圖</p><p> 第四章 系統詳細設計及實現</p><p> 4.1 系統設計思想</p><p> 本系統將流經過本地網卡的數據包截取后,按照已知的數據包的格式進行拆包分析。系統的用戶操作層處理與后臺數據處理相分離,后臺數據的顯示層分別封裝在兩個類中,同時對數據包的截取和分析放在專門的處理類中,這樣,在程序運行
88、的時候,當需要時就通過操作層調用后臺數據處理提供的接口函數即可。在程序運行的時候,主線程會調用類中相應的功能,通過后臺數據處理類的接口,先是初始化,然后抓包,再進行分析,再顯示到屏幕上,并完成相關統計,這些功能的都是在后臺數據處理類中新建的子線程下完成的,這樣做的原因是抓包是用一個無限循環(huán)進行的,如果不新建線程,一旦開始抓包,則程序就會進入“假死”,就不能進行其它的任何操作了,比如停止。在每次停止運行程序以后,用戶可以選擇保存當前數據,
89、程序就會自動獲取當前日期和時間,將得到的數據存入文件中?;蛘?,用戶可以將之前保存的數據加載到顯示列表中去。</p><p> 4.2 程序各模塊的詳細設計</p><p> 在概要設計時,已經對各模塊功能進行了詳細描述,但還未設計到各模塊的具體實現,其具體實現設計如下:</p><p> ?。?)抓包模塊:這個模塊和數據包拆包、線程創(chuàng)建、線程停止模塊聯系緊密,所
90、以應該封裝到一個類里面。在外部調用的時候,只需要把這個在實例化一個對象,并且外的接口也只需要提供初始化、開始捕包、停止捕包接口即可,模塊的具體實現不需對外泄露。這個模塊內就是包含WSAStartup()函數,Socket()函數,bind()函數,WSAIoctl()函數,recv()函數。每個函數都有會有返回值,在這個模塊里也將判斷是不是每個函數都成功的執(zhí)行了,如果任意一個函數沒有成功執(zhí)行,那么整個程序的功能都無法實現。該程序就會提示
91、出相應的出錯信息,以便能更快更準確的找到問題的所在。本模塊雖然是程序的核心部分,但是比較簡單,都是一些Socket提供的一些接口函數,所以在實現起來也比較容易。</p><p> ?。?)數據包定義模塊:這個模塊是定義在一個頭文件里的,因為它其實是一個結構體(Struct)。該模塊沒什么別的特殊意義,IP數據報結構已在2.2.3節(jié)列出,同時為了能對端口進行分析,有必要對TCP協議結構,及UDP結構進行分析,TCP
92、協議結構如下:</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協議結構如下:</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> (3)數據包拆包模塊:本模塊也是寫在新創(chuàng)建的線程里,這樣做的目的是為了可以更方便的處理數據包。因為當上一
98、個模塊抓取到數據后,就會直接調用這個模塊,這個模塊接收的數據從字符指針類型的數據強制轉換成我們定義的數據包結構類型,通過指針移動,及移位運算和按位與的方法,從數據包中提取出用戶想要的信息。</p><p> ?。?) 程序初始化模塊:本模塊是制作界面的,主要是通過分割窗口的方法,將主窗口分割成兩個窗口,一個主要是用于裝載列表框,表一定會有表頭,而表頭是固定的,所以會在初始化里就先將它加在界面上。另一個是圖形統計那
99、里,初始化時,可以先將坐標和尺度先畫處理。</p><p> ?。?)數據顯示模塊:本模塊是在單獨創(chuàng)建一個視圖類的中。在數據包拆包模塊執(zhí)行后,就會得到已經分析好的包內的所有信息,并通過SendMessage()函數向主程序發(fā)送數據達到通知,主程序將通過分割窗口時保存的函數指針,調用該模塊類中的函數,這些得到的信息添加到已經初始化過的列表中,就這樣一個一個填,就可以把所有數據都顯示出來。</p>&l
100、t;p> ?。?)數據流繪圖模塊:得到數據包的數據后,會有一段數據是表示數據包長度的,通過這個就可以計算出當前的流量。每得到一個數據包,主程序都會通過SendMessage()函數將數據長度發(fā)給本模塊,本模塊就會將數據長度累加起來,然后通過事先調用SetTimer()函數設置的定時器,判斷是否需要重畫窗口,本窗口時程序初始化時分割的一個獨立的窗口,因此窗口重畫不會對其他窗口產生影響。定時器會每秒中啟動一次,每次調用繪圖函數,這樣就
101、可生成流量統計的折線圖。</p><p> ?。?)文件讀寫模塊:在程序停止抓包后,因為對前面的數據包的信息并沒有進行記錄,所以不能從內存中找到數據包信息而進行記錄。但是因為列表里的信息與數據包是一一對應的,所以就把表內的信息按照設定的格式完完全全的寫入文件中即可。這樣就完成了一次數據包的信息記錄。當然,記錄完數據后,也可以通過ifstream文件流將數據重新加入列表框中顯示分析。</p><
102、p> ?。?) 線程控制模塊:這個模塊是需要抓包模塊調用。當用戶點擊“開始捕包”菜單按鈕的時候,捕包模塊開始調用捕包初始化函數,接著使用CreatThread()函數創(chuàng)建新的捕包線程。在用戶按下“停止捕包”菜單按鈕時,抓包模塊將調用該模塊,停止線程,停止數據包的捕獲。</p><p><b> 4.3系統類圖</b></p><p> 4.3.1系統類關系圖
103、</p><p> 4.3.2關鍵類的說明</p><p> CpackHandle: 本類是本系統的關鍵類,窗口類對本類實例化就可以進行初始化套接字、抓取數據包、解析數據包等一系列操作。詳細說明見表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: 列表視圖,將各個數據包在列表框中顯示。</p><p>&
105、lt;b> 詳細說明見表4.3</b></p><p> 表 4.3 CIPListView詳細說明表</p><p> CFigureView: 列表視圖,將各個數據包在列表框中顯示。</p><p><b> 詳細說明見表4.4</b></p><p> 表 4.3 CFigureVie
106、w詳細說明表</p><p><b> 4.4 系統流程圖</b></p><p> 圖4.1 系統流程圖</p><p><b> 4.5 安全控制</b></p><p> 進行系統的安全控制,主要是為了保證軟件的正常運行。一般而言,從數據環(huán)境和數據處理兩方面來看,影響系統安全的因素主要
107、有環(huán)境性因素和數據處理因素。環(huán)境性因素,包括硬件和系統軟件、系統開發(fā)等方面。例如,硬件軟件方面,硬件失靈,系統軟件失靈,邏輯線路錯誤等;系統開發(fā)方面,沒有按科學的方法開發(fā)系統和設計程序、系統未經測試和調試等。數據處理因素,是指數據處理行為引起的各種情況。例如,處理環(huán)節(jié)使用了錯誤的程序、錯誤的數據文件,處理不及時,丟失數據文件和程序。因此,要進行系統的安全控制,應針對影響系統安全的兩方面因素入手,有的放矢,相應地進行環(huán)境和數據處理兩方面的
108、有效控制,以保證系統安全有效地運行。本系統中主要使用的安全控制包括:</p><p> ?。?)軟件運行系統環(huán)境</p><p> 由于目前Windows7系統與Windows XP系統性的變化,而本程序的運行環(huán)境是Windows XP, 并不完全兼容Windows系統的各個版本,尤其在Window7系統中,如果不以管理員身份運用,則無法正常啟動抓包程序,因此,為了避免不必要的錯誤,程序
109、中作了系統版本的判別,本程序定義了一個OSVERSIONINFO結構,通過在啟動抓包的時候,調用GetVersionEx()函數,將系統版本信息及時存入OSVERSIONINFO結構中,進而比較出當前程序運行系統是否為Windows XP,如果不是則提示用戶,由用戶來決定是否繼續(xù)運行本軟件。</p><p><b> ?。?)初始化階段</b></p><p> 主
110、要是套接字的初始化階段,包括創(chuàng)建套接字,綁定套接字,設置套接字等,如果其中一個環(huán)節(jié)出錯,為了避免不必要的錯誤,程序就不應該繼續(xù)進行下去,同時為了軟件的維護,通過WSAGetLastError()函數提示使用出現了的問題,并馬上返回,結束程序運行。</p><p><b> ?。?)捕包階段</b></p><p> 之前也有提到過,通過使用多線程來防止系統崩潰。&l
111、t;/p><p><b> 數據的使用與釋放</b></p><p> 數據使用前,應該養(yǎng)成初始化的好習慣,如果不進行初始化數據對應的內存值不一定為0或空,可能會出現亂碼,也有可能是其他程序未釋放的數據。本程序中TCP、IP等數據結構在使用前都使用了memset()函數清空內存,值得注意的是OSVERSIONINFO結構是必須清空的,否則無法獲取系統版本信息。另外,在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 局域網數據包監(jiān)控系統NetMonitor的設計與實現.pdf
- 畢業(yè)設計---局域網的數據包監(jiān)聽及數據分析
- 局域網畢業(yè)論文---局域網聊天軟件
- [vc++畢設]vc++局域網的數據包監(jiān)聽及數據分析畢業(yè)論文+源代碼
- 監(jiān)控ip數據包流量
- 局域網小型局域網組建畢業(yè)論文
- 畢業(yè)論文--局域網(小型局域網)組建
- 局域網規(guī)劃與設計畢業(yè)論文
- 基于局域網的聊天軟件的設計與實現(畢業(yè)論文)
- 局域網畢業(yè)論文
- 局域網畢業(yè)論文
- 局域網即時通信軟件畢業(yè)論文
- 畢業(yè)論文---局域網的規(guī)劃與設計
- 校園局域網設計畢業(yè)論文
- 畢業(yè)論文----局域網規(guī)劃設計
- ip數據包的捕獲與分析
- 局域網飛鴿傳書軟件的設計與實現——畢業(yè)論文
- 局域網飛鴿傳書軟件的設計與實現——畢業(yè)論文
- 校園局域網設計畢業(yè)論文
- 校園局域網規(guī)劃與設計 畢業(yè)論文
評論
0/150
提交評論