基于c#的網絡嗅探器設計與實現【畢業(yè)設計+開題報告+文獻綜述】_第1頁
已閱讀1頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  本科畢業(yè)設計(論文)</p><p><b> ?。ǘ?屆)</b></p><p>  基于C#的網絡嗅探器設計與實現</p><p>  所在學院 </p><p>  專業(yè)班級 計算機科學與技術 </p&g

2、t;<p>  學生姓名 學號 </p><p>  指導教師 職稱 </p><p>  完成日期 年 月 </p><p>  摘要:本系統設計完成了一個簡單的網絡嗅探器,它實現了對本機的網絡監(jiān)聽作用,捕獲IP數據包并對

3、數據包進行分析。數據包信息內容包括源IP地址、目標IP地址、協議、時間、吞吐量、長度、生存時間、校驗碼等。該嗅探器不但能保存所需要的包信息,而且可以選擇所要嗅探的協議類型,以便獲得想要的信息。本系統采用C#語言編寫,并運用了其中的網絡編程技術,無論在安全性還是在穩(wěn)定性上都有很好的保證。</p><p>  關鍵詞:網絡嗅探器;協議;數據包;監(jiān)聽;吞吐量</p><p>  Abstract

4、: The system design is complete a simple network sniffer, it realized the role of the local network monitoring, capture IP packets and data packets for analysis. The information of packet Including the source IP address

5、information, the target IP address, protocol, time, throughput, length of survival time, check codes. The sniffer can not only save the required package of information, but can choose to be sniffing the protocol type, in

6、 order to obtain the desired information. The system</p><p>  Key words: Network sniffer;Protocol;Data packet;Monitor;Throughput</p><p><b>  目錄</b></p><p><b>  1

7、緒論1</b></p><p>  1.1 背景和意義1</p><p>  1.2 網絡嗅探器的概述1</p><p>  1.3 研究現狀3</p><p>  2 網絡嗅探器設計相關技術簡介4</p><p>  2.1 在交錯環(huán)境下的嗅探技術4</p><p

8、>  2.1.1 ARP欺騙4</p><p>  2.1.2 交換機MAC地址表溢出4</p><p>  2.1.3 交換機MAC地址偽裝4</p><p>  2.1.4 ICMP重定向攻擊5</p><p>  2.2 C#語言編程5</p><p>  2.3 Windows Forms程

9、序概述5</p><p>  2.4 C#網絡編程概述6</p><p>  2.4.1 Dns類7</p><p>  2.4.2 IPHostEntry類7</p><p>  2.4.3 Socket類7</p><p>  2.5 網絡協議8</p><p>  2.5.

10、1 IP協議基本知識8</p><p>  2.5.2 TCP協議基本知識10</p><p>  2.5.3 UDP協議基本知識12</p><p>  2.5.4 ICMP協議基本知識13</p><p>  3 系統需求分析14</p><p>  3.1 系統性能要求14</p>

11、<p>  3.1.1 準確性和及時性14</p><p>  3.1.2 標準性14</p><p>  3.1.3 開放性和可擴充性14</p><p>  3.2 功能要求分析14</p><p>  3.2.1 抓包功能14</p><p>  3.2.2 數據包過濾功能15</p

12、><p>  3.2.3 解析功能15</p><p>  4 系統設計15</p><p>  5 系統實現17</p><p>  5.1 嗅探器主界面17</p><p>  5.2 嗅探器詳細的報文信息界面23</p><p><b>  總結27</b&

13、gt;</p><p>  致謝錯誤!未定義書簽。</p><p><b>  參考文獻28</b></p><p><b>  1 緒論</b></p><p>  隨著網絡技術的發(fā)展和網絡應用的普及,越來越多的信息資源放在了互聯網上,網絡的安全性和可靠性顯得越發(fā)重要。因此,對于能夠分析、診

14、斷網絡,測試網絡性能與安全性的工具軟件的需求也越來越迫切。網絡嗅探器就是一種用于網絡分析的好工具,且它具有兩面性,攻擊者可以用它來監(jiān)聽網絡中數據,達到非法獲得信息的目的,網絡管理者可以通過使用嗅探器捕獲網絡中傳輸的數據包并對其進行分析,分析結果可供網絡安全分析之用。</p><p>  1.1 背景和意義</p><p>  網絡嗅探器,它與當前的網絡生活有很大的關系,一些網絡管理員普遍

15、采用它,也有很多黑客通過使用它來獲得他們想要的信息資料。與電話線路不同,計算機網絡是共享通信通道的,這就意味著計算機能夠接收到發(fā)給其他計算機的信息。捕獲在網絡中傳輸的數據信息就稱為“竊聽”[1]。</p><p>  在內部網上,黑客們如果想要迅速獲得大量的用戶賬號,最有效的手段是使用嗅探器。這種方法要求運行嗅探器程序的主機和被監(jiān)聽的主機必須在同一個以太網段上。以太網竊聽則是對以太網設備上傳送的數據包進行偵聽,來

16、探測感興趣的包。如果發(fā)現符合條件的包,就把它存下來[2]。如果網絡嗅探器運行在路由器或有路由功能的主機上,就能對大量的數據進行監(jiān)控。</p><p>  網絡嗅探器在Internet安全隱患中扮演這重要角色。大多數的黑客僅僅是為了探測內部網上的主機并取得控制權,只要那些“雄心勃勃”的黑客,為了控制整個網絡才會安裝特洛伊木馬和后門程序,并清除記錄。他們經常使用的手法就是安裝嗅探器。</p><p

17、>  相信嗅探技術會越來越得到廣泛應用,而網絡安全問題的研究也會成為今后一段很長時期的熱門話題。</p><p>  1.2 網絡嗅探器的概述</p><p>  在局域網中,由于以太網的共享式特性決定了嗅探能夠成功。因為以太網是基于廣播方式傳送數據的,所有的物理信號都會被傳送到每一個主機節(jié)點,此外網卡可以被設置成混雜模式,這種模式下,無論監(jiān)聽到得數據幀目的地址如何,網卡都能予以接

18、收。而TCP/IP協議棧中的應用協議大多數以明文在網絡上傳輸,這些明文數據中往往包含一些敏感的信息(如密碼、賬號等),因此使用網絡嗅探器可以悄無聲息地監(jiān)聽到局域網的數據通信,獲取這些敏感信息。同時網絡嗅探器的隱蔽性好,它只是“被動”接收數據,而不向外發(fā)送數據,所以在傳輸數據的過程中,根本無法覺察到有人監(jiān)聽。當然,網絡嗅探器的局限性是只能在局域網的沖突域中進行,或者是在點到點連接的中間節(jié)點上進行監(jiān)聽[3]。</p><

19、p>  雖然網絡監(jiān)聽很難被發(fā)現,但作為網絡管理員還是要采取必要的措施來檢測和防范網絡監(jiān)聽。</p><p>  1. 對可能存在的網絡監(jiān)聽的檢測方法</p><p> ?。?)對于懷疑運行監(jiān)聽程序的機器,用正確的IP地址和錯誤的物理地址ping,運行監(jiān)聽程序的機器會有響應。這是因為正常的機器不接收錯誤的物理地址,處于監(jiān)聽狀態(tài)的機器能接收。</p><p>  

20、(2)向網上發(fā)大量不存在的物理地址包,由于監(jiān)聽程序要分析和處理大量的數據包會占用很多的CPU資源,這將導致性能下降。通過對比前后該機器的性能變化加以判斷。</p><p>  (3)使用反監(jiān)聽工具進行檢測。</p><p>  2. 對網絡監(jiān)聽的防范</p><p>  (1)從邏輯或物理上對網絡分段</p><p>  將非法用戶與敏感的網

21、絡資源相互隔離,從而防止可能的非法監(jiān)聽[14]。</p><p> ?。?)以交換式集線器代替共享式集線器</p><p>  應該以交換式集線器代替共享式集線器,使單播包僅在兩個節(jié)點之間傳送,從而防止非法監(jiān)聽。當然,交換式集線器只能控制單播包而無法控制廣播包和多播包。但廣播包和多播包內的關鍵信息,要遠少于單播包[14]。</p><p><b> ?。?

22、)使用加密技術</b></p><p>  數據經過加密后,通過監(jiān)聽仍然可以得到傳送的信息,但顯示的是亂碼。使用加密技術的缺點是影響數據傳輸速度以及使用一個弱加密技術比較容易被攻破。系統管理員和用戶需要在網絡速度和安全性上進行折中[14]。</p><p><b> ?。?)劃分VLAN</b></p><p>  運用VLAN技術

23、,將以太網通信變?yōu)辄c到點通信,可以防止大部分基于網絡監(jiān)聽的入侵[14]。</p><p><b>  1.3 研究現狀</b></p><p>  隨著移動通信技術的發(fā)展,網絡嗅探目前為世界各國普遍重視。以美國為首的信息發(fā)達國家,為了在信息化浪潮中占據先機,打擊網絡犯罪和網絡恐怖活動,竊取他國秘密和信息,搞信息霸權等,已經建立和完善其信息監(jiān)控法律法規(guī)制度,并頒布了相

24、應的法律和總統令[4],開始實施相關網絡監(jiān)控項目,對關鍵性的信息活動進行全球性的監(jiān)視[5]。在亞洲,日本也已經編制出一套準則,防止越權訪問計算機網絡。在頒布相關法律的同時,各國也都開始實施相關網絡監(jiān)控項目,監(jiān)視全球關鍵性的信息活動。美國聯邦調查局開發(fā)了名為“肉食者”的電子竊聽系統[6],用于監(jiān)視可疑的電子郵件(包括郵件頭或全部的內容)、列出服務器懷疑的訪問(例如FTP、HTTP等)、全面地嗅探可疑的IP地址和通過RADIUS登陸發(fā)現網絡

25、上正在發(fā)生的可疑活動等。</p><p>  網絡嗅探器可以是軟件,也可以是硬件設備[7]。硬件的網絡嗅探器也稱為協議分析器,是一種監(jiān)視網絡數據運行的軟件設備,協議分析器既能用于合法網絡管理也能用于竊取網絡信息[8]。網絡運作和維護都可以采用協議分析器,如監(jiān)視網絡流量、分析數據包、監(jiān)視網絡資源利用、執(zhí)行網絡安全操作規(guī)則、鑒定分析網絡數據以及診斷并修復網絡問題等。由于專業(yè)人士的普遍使用,協議分析器廣泛應用于所有能夠

26、捕獲和分析網絡流量的產品。協議分析器基本上可分成兩大類:手提式協議分析器和分布式協議分析器。手提式協議分析器是一種能夠安裝在個人電腦上的單機設備軟件。它能夠捕獲數據,實時控制和分析數據。手提式協議分析器一般應用于小型公司或者大型公司的現場工程師等。其核心技術主要是用于數據包的捕獲和分析。不同的供應商的產品具有不同的特征,諸如簡單協議分析(即數據包重組為原始信息)或專家分析等。分布式協議分析器主要由兩部分組成:一個是各網絡點上的監(jiān)視探測器

27、;另一個是網絡操作中心的控制臺。大型企業(yè)一般采用該裝置實現中心監(jiān)控網絡運行。協議分析器價格非常昂貴,狹義的網絡嗅探器是指軟件嗅探器,常見的軟件嗅探器有Sniffer Pro系統和影音神探系統</p><p>  2 網絡嗅探器設計相關技術簡介</p><p>  2.1 在交錯環(huán)境下的嗅探技術</p><p>  2.1.1 ARP欺騙</p>&

28、lt;p>  按照ARP協議的設計,為了減少網絡上過多的ARP數據通信,一臺主機,即使收到的ARP應答并非自己請求得到的,它也會將其插入到自己的ARP緩存表中,這樣,就造成了“ARP欺騙”的可能。如果黑客想探聽同一網絡中的兩臺主機之間的通信,他會分別給這兩臺主機發(fā)送一個ARP應答包,讓兩臺主機都誤認為對方的MAC地址是第三方黑客所在的主機,這樣,雙方看似直接的通信連接,實際上都是通過黑客所在的主機間接進行。黑客一方面得到了想要的通

29、信內容,另一方面,只需要更改數據包中的一些信息,成功地做好轉發(fā)工作即可。這種嗅探方式中,黑客所在主機是不需要設置網卡的混雜模式的,因為通信雙方的數據包在物理上都是發(fā)給黑客所在的中轉主機的[3]。</p><p>  2.1.2 交換機MAC地址表溢出</p><p>  交換機之所以能夠根據數據包中目的MAC地址判斷出它應該把數據包發(fā)送到哪一個端口是因為根據它本身維護的一張地址表。對于動態(tài)

30、的地址表,并且地址表的大小是有上限的,可以通過發(fā)送大量錯誤的地址信息而使交換機維護的地址表“溢出”,從而使它變成廣播模式來達到我們要嗅探兩臺機器之間的通信的目的。</p><p>  2.1.3 交換機MAC地址偽裝</p><p>  一種欺騙交換機的方法,也就是發(fā)送偽造的MAC地址給交換機,讓交換機在緩存中存儲偽造的MAC地址,這樣,就可以實現對網絡的嗅探,不過這要求交換機是動態(tài)更新地

31、址表。舉個例子:要在主機1上實現對主機2的嗅探,這時主機1就要偽造主機2的MAC地址,讓它指向自己,并把偽造好的幀不斷地發(fā)送到交換機,交換機就會認為主機2的MAC地址是指向主機1的,但是同時,主機2也會向交換機發(fā)送正確的MAC地址,因此必須讓主機2暫時離線。</p><p>  2.1.4 ICMP重定向攻擊</p><p>  ICMP重定向通常使用在這樣的場合下,假設A與B兩臺機器分別

32、位于同一個物理網段內的兩個邏輯子網內,而A和B都不知道這一點,只有路由器知道,當A發(fā)送給B的數據到達路由器的時候,路由器會向A發(fā)送一個ICMP重定向包,告訴A直接送到B那里就可以了。設想一下,一個攻擊者完全可以利用這一點,使A發(fā)送給B的數據經過他。</p><p>  2.2 C#語言編程</p><p>  為適應未來社會的發(fā)展,微軟推出了.NET戰(zhàn)略,以此作為下一代的網絡應用基礎。微

33、軟的所有產品包括操作系統、辦公軟件和開發(fā)工具等都將轉移到.NET平臺上來。.NET所包括的技術全面而且先進,必將對今后的軟件開發(fā)和應用形式產生巨大的影響,因此及時地了解和掌握.NET技術,對于大多數開發(fā)人員來說都是必要的。</p><p>  C#是微軟公司在2000年7月發(fā)布的一種全新且簡單、安全、面向對象的程序設計語言,是專門為.NET的應用而開發(fā)的語言。它吸收了C++、Visual Basic、Delphi

34、、Java等語言的優(yōu)點,體現了當今最新的程序設計技術的功能和精華。C#繼承了C語言的語法風格,同時又繼承了C++的面向對象特性。不同的是,C#的對象模型已經面internet進行了重新設計,使用的是.NET的類庫;C#不再提供對指針類型的支持,使得程序不能隨便訪問內存地址空間,從而更加健壯;C#不再支持多重繼承,避免了以往類層次結構中由于多重繼承帶來的可怕后果。.NET為C#提供了一個強大的、易用的、邏輯結構一致的程序設計環(huán)境。同時,公

35、共語言運行時為C#程序語言提供了一個托管的運行時環(huán)境,使程序比以往更加穩(wěn)定、安全[9]。</p><p>  2.3 Windows Forms程序概述</p><p>  Windows Forms程序,指能夠在諸如Windows98、windows NT、Windows XP、Windows Vista等Microsoft操作系統平臺上運行的,有著友好界面外觀(如窗體、菜單、控件等)

36、的程序。Windows Forms在.NET平臺中初次出現,也稱為Windows窗體。同時,由于它是在.NET平臺下運行的程序,因此操作系統就必須首先安裝.NET平臺,才能在.NET下開發(fā)的Windows Forms應用程序中運行。以下是Windows Forms程序的幾個概念。</p><p><b> ?。?)啟動程序</b></p><p>  Windows

37、Forms程序與控制臺應用程序的不同之處在于,Windows Forms應用程序是通過非常直觀的窗體及窗體上的各種控件,例如按鈕、文本框等與用戶交互的。窗體應用程序不像控制臺程序那樣一步一步地執(zhí)行,而是采用事件驅動機制,根據用戶的各種操作所引發(fā)的事件選擇執(zhí)行相應的功能。</p><p>  Windows Forms窗體應用程序與控制臺應用程序有很大的不同,但是程序的入口是相同的,均為Main函數。在Window

38、s Forms應用程序中,Main函數也是應用程序中要執(zhí)行的第一個函數。</p><p><b> ?。?)窗體</b></p><p>  Windows操作系統最主要的成功源于其友好的外觀,即窗體。通常,Windows Forms程序都包含若干個窗體,可以把各種各樣的控件,如標簽、文本框、命令按鈕等,放置在窗體上,組成一個非常人性化的人機界面。在Windows F

39、orms應用程序中創(chuàng)建窗體需要使用System.Windows.Forms.Form類或其派生類創(chuàng)建一個Forms對象。</p><p><b>  (3)事件</b></p><p>  在Windows Forms程序中,用戶的大部分操作都將產生Windows事件,如單擊一個按鈕會引發(fā)一個Click事件,用戶移動鼠標有相應鼠標移動的事件等,還有一些事件不是由用戶操

40、作產生而是系統自動產生的,如窗體關閉、數據庫連接斷開、時間到達某一時刻或使用外設時未就緒等。每一個Windows控件都擁有大量的事件,使其可以達到與用戶交互的目的。事件的監(jiān)視及管理由Application類負責。在產生一個事件時一般會引發(fā)一系列操作,如單擊窗體上的關閉圖標會觸發(fā)程序關閉窗口或退出程序等。開發(fā)人員就是通過編寫事件的響應方法,即事件所引發(fā)的操作,來達到對程序進行控制及交互的目的。</p><p>  

41、(4)事件響應的方法</p><p>  在.NET中,事件的聲明是通過event(事件)關鍵字來聲明的。事件的響應及處理是通過一個delegate(委托)來處理的。</p><p>  由于事件的監(jiān)視及管理是由Application對象進行的,程序員不需要知道用戶何時響應事件或者是響應了什么事件,只需要為事件添加相應的方法即可。另外,如果想為一個事件添加多個響應方法,可以使用“+=”操作

42、符;同時,還可以通過非常簡單的“-=”操作符取消這些響應方法[10]。</p><p>  2.4 C#網絡編程概述</p><p>  微軟的.NET框架為我們進行網絡編程提供了兩個命名空間:System.Net以及System.Net.Sockets。通過合理運用其中的類和方法,我們可以很容易地編寫出各種網絡應用程序。這種網絡應用程序既可以是基于流套接字的,也可以是基于數據報套接字的

43、[15]。</p><p>  2.4.1 Dns類</p><p>  向使用TCP/IP Internet服務的應用程序提供域名服務。其Resolve()方法查詢DNS服務器以將用戶友好的域名映射到數字形式的Internet地址。Resolve()方法返回一個IPHostEntry實例,該實例包含所請求名稱的地址和別名的列表。大多數情況下,可以使用AddressList數組中返回的第一

44、個地址[11]。</p><p>  2.4.2 IPHostEntry類</p><p>  該類的實例對象中包含了Internet主機的地址相關信息。此類型的所有公共靜態(tài)成員對多線程操作而言都是安全的,但不保證任何實例成員是線程安全的。其中主要的一些屬性有:AddressList屬性、Aliases屬性以及HostName屬性。</p><p>  Addres

45、sList屬性和Aliases屬性的作用分別是獲取或設置與主機關聯的IP地址列表以及獲取或設置與主機關聯的別名列表。AddressList屬性值是一個IPAddress類型的數組,包含解析為Aliases屬性中包含的主機名的IP地址;Aliases屬性值是一組字符串,包含解析為AddressList屬性中的IP地址的DNS名。而HostName屬性比較好理解,它包含了服務器的主要主機名[11]。</p><p>

46、  2.4.3 Socket類</p><p>  該類是包含在System.Net.Sockets命名空間中的一個非常重要的類。一個Socket實例包含了一個本地以及一個遠程的終結點,該終結點包含了該Socket實例的一些相關信息。</p><p>  Socket類支持兩種基本模式:同步和異步。其區(qū)別在于,在同步模式中,對執(zhí)行網絡操作的函數(如Send和Receive)的調用一直等到操

47、作完成后才將控制返回給調用程序。在異步模式中,這些調用立即返回[11]。</p><p><b>  2.5 網絡協議</b></p><p>  2.5.1 IP協議基本知識</p><p><b>  IP協議介紹</b></p><p>  IP是為計算機網絡相互連接進行通信而設計的協議。在

48、因特網中,它是能使連接到網上的所有計算機網絡實現相互通信的一套規(guī)則,規(guī)定了計算機在因特網上進行通信時應當遵守的規(guī)則。</p><p>  IP協議的網絡互連實現</p><p>  各個廠家生產的網絡系統和設備,如以太網、分組交換網等,它們相互之間不能互通,不能互通的主要原因是因為它們所傳送數據的基本單元(技術上稱之為“幀”)的格式不同。IP協議實際上是一套由軟件程序組成的協議軟件,它把各

49、種不同“幀”統一轉換成“IP數據包”格式,這種轉換是因特網的一個最重要的特點,使所有各種計算機都能在因特網上實現互通,即具有“開放性”的特點。</p><p><b>  IP數據報</b></p><p>  TCP/IP協議定義了一個在因特網上傳輸的包,稱為IP數據報。這是一個與硬件無關的虛擬包,由首部和數據兩部分組成,其格式如表2-1所示:</p>

50、<p>  表2-1 IP數據報的一般格式</p><p>  IP數據報的格式如表2-2所示:</p><p>  0 4 8 16 19 24 31</p><p>  表2-2 IP數據報的格式</p>&l

51、t;p>  IP數據報固定部分各字段含義:</p><p>  (1)版本 占4位,指IP協議的版本。通信雙方使用的IP協議版本必須一致。目前廣泛使用的IP協議版本號為4。</p><p>  (2)首部長度 占4位,可表示的最大十進制數值是15。這個字段所表示數的單位是32位字長(1個32位字長是4字節(jié)),因此,當IP的首部長度為1111時(即十進制的15),首部長度就達到60字節(jié)

52、。當IP分組的首部長度不是4字節(jié)的整數倍時,必須利用最后的填充字段加以填充。因此數據部分永遠在4字節(jié)的整數倍開始,這樣在實現IP協議時較為方便。首部長度限制為60字節(jié)的缺點是有時可能不夠用。但這樣做是希望用戶盡量減少開銷。最常用的首部長度就是20字節(jié)(即首部長度為0101),這時不使用任何選項。</p><p>  (3)區(qū)分服務 占8位,用來獲得更好的服務。這個字段在舊標準中叫做服務類型,但實際上一直沒有被使用

53、過。1998年IETF把這個字段改名為區(qū)分服務DS(Differentiated Services)。只有在使用區(qū)分服務時,這個字段才起作用。</p><p>  (4)總長度 總長度指首部和數據之和的長度,單位為字節(jié)??傞L度字段為16位,因此數據報的最大長度為216-1=65535字節(jié)。在IP層下面的每一種數據鏈路層都有自己的幀格式,其中包括幀格式中的數據字段的最大長度,這稱為最大傳送單元MTU(Maximum

54、 Transfer Unit)。當一個數據報封裝成鏈路層的幀時,此數據報的總長度(即首部加上數據部分)一定不能超過下面的數據鏈路層的MTU值。</p><p>  (5)標識(identification) 占16位。IP軟件在存儲器中維持一個計數器,每產生一個數據報,計數器就加1,并將此值賦給標識字段。但這個“標識”并不是序號,因為IP是無連接服務,數據報不存在按序接收的問題。當數據報由于長度超過網絡的MTU而

55、必須分片時,這個標識字段的值就被復制到所有的數據報的標識字段中。相同的標識字段的值使分片后的各數據報片最后能正確地重裝成為原來的數據報。</p><p>  (6)標志(flag) 占3位,但目前只有2位有意義。標志字段中的最低位記為MF(More Fragment)。MF=1即表示后面“還有分片”的數據報。MF=0表示這已是若干數據報片中的最后一個。標志字段中間的一位記為DF(Don’t Fragment),意

56、思是“不能分片”。只有當DF=0時才允許分片。</p><p>  (7)片偏移 占13位。片偏移指出:較長的分組在分片后,某片在原分組中的相對位置。也就是說,相對用戶數據字段的起點,該片從何處開始。片偏移以8個字節(jié)為偏移單位。這就是說,每個分片的長度一定是8字節(jié)(64位)的整數倍。</p><p>  (8)生存時間 占8位,生存時間字段常用的英文縮寫是TTL(Time To Live)

57、,表明是數據報在網絡中的壽命。由發(fā)出數據報的源點設置這個字段。其目的是防止無法交付的數據報無限制地在因特網中兜圈子,因而白白消耗網絡資源。最初的設計是以秒作為TTL的單位。每經過一個路由器時,就把TTL減去數據報在路由器消耗掉的一段時間。若數據報在路由器消耗的時間小于1秒,就把TTL值減1。當TTL值為0時,就丟棄這個數據報。</p><p>  (9)協議 占8位,協議字段指出此數據報攜帶的數據是使用何種協議,

58、以便使目的主機的IP層知道應將數據部分上交給哪個處理過程。</p><p>  (10)首部檢驗和 占16位。這個字段只檢驗數據報的首部,但不包括數據部分。這是因為數據報每經過一個路由器,路由器都要重新計算一下首部檢驗和(一些字段,如生存時間、標志、片偏移等都可能發(fā)生變化)。不檢驗數據部分可減少計算的工作量。</p><p>  (11)源地址 占32位。</p><p

59、>  (12)目的地址 占32位。</p><p>  IP數據報可選部分字段含義:</p><p>  IP首部的可變部分就是一個可選字段。選項字段用來支持排錯、測量以及安全等措施,內容很豐富。此字段的長度可變,從1個字節(jié)到40個字節(jié)不等,取決于所選擇的項目。某些選項項目只需要1個字節(jié),它只包括1個字節(jié)的選項代碼。但還有些選項需要多個字節(jié),這些選項一個個拼接起來,中間不需要有分隔符

60、,最后用全0的填充字段補齊成為4字節(jié)的整數倍[12]。</p><p>  2.5.2 TCP協議基本知識</p><p>  (1)TCP協議介紹</p><p>  TCP:Transmission Control Protocol (傳輸控制協議)TCP是一種面向連接(連接導向)的、可靠的、基于字節(jié)流的運輸層通信協議。在OSI/RM模型中,它完成第四層傳輸層所

61、指定的功能,UDP是同一層內另一個重要的傳輸協議。</p><p> ?。?)TCP協議的作用</p><p>  在因特網協議族(Internet protocol suite)中,TCP層是位于IP層之上,應用層之下的運輸層。</p><p>  應用層向TCP層發(fā)送用于網間傳輸的、用8位字節(jié)表示的數據流,然后TCP把數據流分割成適當長度的報文段(通常受該計算機

62、連接的網絡的數據鏈路層的最大傳送單元(MTU)的限制)。之后TCP把結果包傳給IP層,由它來通過網絡將包傳送給接收端實體的TCP層。TCP為了保證不發(fā)生丟包,就給每個字節(jié)一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然后接收端實體對已成功收到的字節(jié)發(fā)回一個相應的確認(ACK);如果發(fā)送端實體在合理的往返時延(RTT)內未收到確認,那么對應的數據(假設丟失了)將會被重傳。TCP用一個校驗和函數來檢驗數據是否有錯誤;在發(fā)送和接收

63、時都要計算校驗和。</p><p>  首先,TCP建立連接之后,通信雙方都同時可以進行數據的傳輸,其次,他是全雙工的;在保證可靠性上,采用超時重傳和稍待確認機制。</p><p>  在流量控制上,采用滑動窗口協議,協議中規(guī)定,對于窗口內未經確認的分組需要重傳。</p><p>  (3) TCP報文段格式</p><p>  兩臺機器上的

64、TCP軟件之間傳送的數據單元稱為報文段。兩臺機器通過報文段的交互來建立連接、傳送數據、發(fā)送確認、通告窗口大小及關閉連接。每個報文段分為兩個部分:首部和數據。TCP報文格式如表2-3:</p><p>  0 8 16 24 31</p><p>  表2-3

65、 TCP報文格式</p><p>  TCP報文字段說明:</p><p>  源端口號(16位):標識主機上發(fā)起傳送的應用程序;</p><p>  目的端口(16位):標識主機上傳送要到達的應用程序。</p><p>  序號:占32比特。用來標識從TCP源端向TCP目標端發(fā)送的數據字節(jié)流,它表示在這個報文段中的第一個數據字節(jié)。<

66、/p><p>  確認序號:占32比特。只有ACK標志為1時,確認號字段才有效。它包含目標端所期望收到源端的下一個數據字節(jié)。</p><p>  首部長度:占4比特。給出頭部占32比特的數目。沒有任何選項字段的TCP頭部長度為20字節(jié);最多可以有60字節(jié)的TCP頭部。</p><p>  預留:由跟在數據偏移字段后的6位構成,預留位通常為0。</p>&l

67、t;p>  代碼比特(U、A、P、R、S、F):占6比特。各比特的含義如下:</p><p>  URG:緊急指針(urgent pointer)有效。</p><p>  ACK:確認序號有效。</p><p>  PSH:接收方應該盡快將這個報文段交給應用層。</p><p><b>  RST:重建連接。</b&g

68、t;</p><p>  SYN:發(fā)起一個連接。</p><p>  FIN:釋放一個連接。</p><p>  窗口大?。赫?6比特。此字段用來進行流量控制。單位為字節(jié)數,這個值是本機期望一次接收的字節(jié)數。</p><p>  TCP校驗和:占16比特。對整個TCP報文段,即TCP頭部和TCP數據進行校驗和計算,并由目標端進行驗證。<

69、/p><p>  緊急指針:占16比特。它是一個偏移量,和序號字段中的值相加表示緊急數據最后一個字節(jié)的序號。</p><p>  選項、填充:占32比特??赡馨?quot;窗口擴大因子"、"時間戳"等選項[12]。</p><p>  2.5.3 UDP協議基本知識</p><p>  (1) UDP協議介紹&l

70、t;/p><p>  UDP協議的全稱是用戶數據報協議,在網絡中它與TCP協議一樣用于處理數據包。在OSI模型中,在第四層——傳輸層,處于IP協議的上一層。UDP有不提供數據報分組、組裝和不能對數據包的排序的缺點,也就是說,當報文發(fā)送之后,是無法得知其是否安全完整到達的。 UDP用來支持那些需要在計算機之間傳輸數據的網絡應用。包括網絡視頻會議系統在內的眾多的客戶/服務器模式的網絡應用都需要使用UDP協議。UDP協議從

71、問世至今已經被使用了很多年,雖然其最初的光彩已經被一些類似協議所掩蓋,但是即使是在今天,UDP仍然不失為一項非常實用和可行的網絡傳輸層協議[12]。</p><p>  (2) UDP報文格式</p><p>  UDP報文段首部只有8個字節(jié);詳細格式見表2-4:</p><p>  表2-4 UDP報文格式</p><p>  2.5.

72、4 ICMP協議基本知識</p><p>  為了更有效地轉發(fā)IP數據報和提高交付成功的機會,在網際層使用了網際控制報文協議ICMP。ICMP允許主機或路由器報告差錯情況和提供有關異常情況的報告。ICMP是因特網的標準協議。但ICMP不是高層協議,而是IP層的協議。ICMP報文作為IP層數據報的數據,加上數據報的首部,組成IP數據報發(fā)送出去。ICMP報文格式如表2-5所示:</p><p>

73、;  0 8 16 31</p><p>  表2-5 ICMP報文格式</p><p>  ICMP報文的種類有兩種,即ICMP差錯報告報文和ICMP詢問報文。表2-6給出了幾種常見的ICMP報文類型:</p><p>  

74、表2-6 幾種常見的ICMP報文類型</p><p> ?。?)終點不可達 當路由器或主機不能交付數據報時就向源點發(fā)送終點不可達報文。</p><p>  (2)源點抑制 當路由器或主機由于擁塞而丟棄數據報時,就向源點發(fā)送源點抑制報文,使源點知道應當把數據報的發(fā)送速率放慢。</p><p> ?。?)時間超過 當路由器收到生存時間為零的數據報時,除丟棄該數據

75、報外,還要向源點發(fā)送時間超過報文。</p><p> ?。?)參數問題 當路由器或目的主機收到的數據報的首部中有的字段的值不正確時,就丟棄該數據報,并向源點發(fā)送參數問題報文。</p><p> ?。?)改變路由 讓主機知道下次應將數據報發(fā)送給另外的路由器[12]。</p><p><b>  3 系統需求分析</b></p>

76、<p>  3.1 系統性能要求</p><p>  3.1.1 準確性和及時性</p><p>  軟件處理的準確性和及時性是軟件的必要性能。在軟件設計和開發(fā)過程中,要充分考慮軟件當前和將來可能承受的工作量,使軟件的處理能力和響應時間能夠滿足客戶對信息處理的要求。</p><p><b>  3.1.2 標準性</b></

77、p><p>  有規(guī)范的界面、作為業(yè)界標準的TCP/IP網絡協議所要求的質量規(guī)范,同時,在開發(fā)軟件的過程中,要進行良好的設計工作,制訂行之有效的軟件工程規(guī)范,保證代碼的易讀、可操作性和可移植性。</p><p>  3.1.3 開放性和可擴充性</p><p>  網絡嗅探器在開發(fā)過程中,應該充分考慮到以后的可擴充性。例如增添其它功能,用戶的需求也會不斷的更新和完善。這

78、些都要求軟件提供足夠的手段進行功能的調整和擴充。而要實現這一點,應通過軟件的開放性來完成。所開發(fā)的軟件應該是一個開放的軟件,只要符合一定的規(guī)范,可以簡單的加入和減少軟件的模塊。通過軟件的修補、替換完成軟件的升級和更新換代[13]。</p><p>  3.2 功能要求分析</p><p>  本部分描述系統具體功能需求,其中包括網絡嗅探器的抓包功能、數據包過濾功能、解析功能等具體要求。&

79、lt;/p><p>  3.2.1 抓包功能</p><p>  該功能要求嗅探器能夠鎖定主機的網卡端口和顯示主機的IP地址,并且能捕獲流經該端口的數據包(無論是從該端口到網上的還是從網上到該端口的)。</p><p>  3.2.2 數據包過濾功能</p><p>  該功能需要設置四個過濾選項,從而達到捕獲通過TCP傳輸的數據包、通過UDP傳

80、輸的數據包、ICMP數據包和所有流經網卡的數據包的過濾捕獲效果,以便對特定的數據包進行分析。</p><p>  3.2.3 解析功能</p><p>  該功能要實現對捕獲來的數據包進行簡單的解析,其中包括以16進制數的形式顯示數據包的詳細內容,獲取數據包的捕獲時間,計算每個數據包的大小,解析出數據包的源端口、目的端口、協議類型、生存時間、報頭大小、版本信息、吞吐量、可靠性和校驗和等信息

81、。</p><p><b>  4 系統設計</b></p><p>  該部分主要給出系統的總體結構以及系統的整個流程圖。網絡嗅探器總體結構如圖4-1,網絡嗅探器的流程圖如圖4-2:</p><p>  圖4-1 網絡嗅探器總體結構</p><p><b>  NY</b></p>

82、;<p><b>  true</b></p><p><b>  false</b></p><p><b>  true</b></p><p><b>  false</b></p><p><b>  true</b&

83、gt;</p><p><b>  false</b></p><p>  圖4-2 嗅探器流程圖</p><p><b>  5 系統實現</b></p><p>  5.1 嗅探器主界面</p><p>  嗅探器主界面,如圖5-1所示,包含數據包顯示區(qū)、過濾器功能

84、區(qū)、選擇監(jiān)聽端口功能區(qū)、數據統計區(qū)、開始捕獲按鈕、停止捕獲按鈕、清空列表按鈕和退出按鈕。數據包顯示區(qū)以列表的形式顯示了捕獲到的數據包,過濾器功能區(qū)提供四個單選項(TCP數據包、UDP數據包、ICMP數據包、所有數據包)讓用戶選擇以便在捕獲時抓取特定的數據包。在選擇監(jiān)聽端口功能區(qū)中,用戶只要選擇相應的端口就能實現對該端口的監(jiān)聽。雙擊數據包顯示區(qū)就能顯示所選數據包的詳細信息。</p><p>  圖5-1 嗅探器主

85、界面</p><p>  嗅探器主界面詳細代碼;</p><p>  using System;</p><p>  using System.Collections.Generic;</p><p>  using System.ComponentModel;</p><p>  using System.Data;

86、</p><p>  using System.Drawing;</p><p>  using System.Linq;</p><p>  using System.Text;</p><p>  using System.Windows.Forms;</p><p>  using System.Net;<

87、/p><p>  using System.Collections;</p><p>  namespace Network_Sniffer</p><p><b>  {</b></p><p>  public partial class mainForm : Form</p><p><b

88、>  {</b></p><p>  private delegate void UpdatePacketList(Packet p);</p><p>  public mainForm()</p><p><b>  {</b></p><p>  InitializeComponent();<

89、;/p><p><b>  // 初始化嗅探器</b></p><p>  Initialize();</p><p><b>  }</b></p><p>  private void Initialize()</p><p><b>  {</b>&l

90、t;/p><p>  IPAddress[] hosts = Dns.Resolve(Dns.GetHostName()).AddressList;</p><p>  m_PacketMonitors = new PacketMonitor[1];</p><p>  for (int i = 0; i < m_PacketMonitors.Length; i+

91、+)</p><p><b>  {</b></p><p>  m_PacketMonitors[i] = new PacketMonitor(hosts[i]);</p><p>  m_PacketMonitors[i].NewPacket+=new NewPacketEventHandler(this.OnNewPacket);<

92、/p><p><b>  }</b></p><p>  m_Packets = new ArrayList();</p><p><b>  }</b></p><p>  private void 退出ToolStripMenuItem_Click(object sender, EventArgs

93、e)</p><p><b>  {</b></p><p>  //退出嗅探器主界面</p><p>  this.Close();</p><p><b>  }</b></p><p>  private void 關于嗅探器ToolStripMenuItem_Clic

94、k(object sender, EventArgs e)</p><p><b>  {</b></p><p>  //顯示嗅探器版本窗口</p><p>  aboutForm f = new aboutForm();</p><p><b>  f.Show();</b></p>

95、<p><b>  }</b></p><p>  private void mainForm_Load(object sender, EventArgs e)</p><p><b>  {</b></p><p>  // 獲取主機的端口IP并在復選框欄中顯示</p><p>  

96、string strHostIP = "";</p><p>  IPHostEntry oIPHost = Dns.Resolve(Environment.MachineName);</p><p>  if (oIPHost.AddressList.Length > 0)</p><p>  strHostIP = oIPHost.Ad

97、dressList[0].ToString();</p><p>  this.checkBox1.Text = strHostIP;</p><p><b>  }</b></p><p>  private void button4_Click(object sender, EventArgs e)</p><p>

98、<b>  {</b></p><p>  //退出嗅探器主界面</p><p>  this.Close();</p><p><b>  }</b></p><p>  private void button1_Click(object sender, EventArgs e)</p>

99、;<p><b>  {</b></p><p>  // 當用戶沒有設置好捕獲條件時顯示提示</p><p>  if (radioButton1.Checked == false)</p><p><b>  {</b></p><p>  if (radioButton2.Che

100、cked == false)</p><p><b>  {</b></p><p>  if (radioButton3.Checked == false)</p><p><b>  {</b></p><p>  if (radioButton4.Checked == false)</p

101、><p><b>  {</b></p><p>  if (checkBox1.Checked == false)</p><p>  MessageBox.Show("請選擇過濾條件和監(jiān)聽的端口!", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Ast

102、erisk);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (checkBox1.Chec

103、ked == true)</p><p><b>  {</b></p><p>  if (radioButton1.Checked == false)</p><p><b>  {</b></p><p>  if (radioButton2.Checked == false)</p&g

104、t;<p><b>  {</b></p><p>  if (radioButton3.Checked == false)</p><p><b>  {</b></p><p>  if (radioButton4.Checked == false)</p><p>  Messa

105、geBox.Show("請選擇過濾條件!", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  

106、}</b></p><p><b>  }</b></p><p>  if (checkBox1.Checked == false)</p><p><b>  {</b></p><p>  if (radioButton1.Checked == true || radioButto

107、n2.Checked == true || radioButton3.Checked == true || radioButton4.Checked == true)</p><p><b>  {</b></p><p>  MessageBox.Show("請選擇監(jiān)聽的端口!", "警告", MessageBoxButton

108、s.OKCancel, MessageBoxIcon.Asterisk);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if (checkBox1.Checked == true)</p><p><b>  {</b>&

109、lt;/p><p>  if (radioButton1.Checked == true || radioButton2.Checked == true || radioButton3.Checked == true || radioButton4.Checked == true)</p><p><b>  {</b></p><p>  for

110、 (int i = 0; i < m_PacketMonitors.Length; i++)</p><p><b>  {</b></p><p><b>  try</b></p><p><b>  {</b></p><p>  m_PacketMonitors[

111、i].Start();</p><p><b>  }</b></p><p>  catch (Exception ex)</p><p><b>  {</b></p><p>  MessageBox.Show(this, "界面出現一個錯誤" + m_PacketMoni

112、tors[i].IP.ToString() + "\r\n\r\n[" + ex.Message + "]", "Mentalis.org Packet Monitor", MessageBoxButtons.OK, MessageBoxIcon.Error);</p><p><b>  }</b></p><

113、p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  private void OnNewPacket(PacketMonitor pm

114、, Packet p)</p><p><b>  {</b></p><p>  // 根據過濾條件把新的包添加到列表中</p><p>  if (radioButton3.Checked == true)</p><p><b>  {</b></p><p>  if

115、 (p.Protocol != Protocol.Icmp)</p><p><b>  {</b></p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  }</b></p>

116、<p>  if (radioButton2.Checked == true)</p><p><b>  {</b></p><p>  if (p.Protocol != Protocol.Udp)</p><p><b>  {</b></p><p><b>  retu

117、rn;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if (radioButton1.Checked == true)</p><p><b>  {</b></p><p> 

118、 if (p.Protocol != Protocol.Tcp)</p><p><b>  {</b></p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  }</b></p>

溫馨提示

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

評論

0/150

提交評論