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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  本科畢業(yè)設(shè)計(論文)</p><p><b>  (二零 屆)</b></p><p>  基于C#的網(wǎng)絡(luò)嗅探器設(shè)計與實現(xiàn)</p><p>  所在學(xué)院 </p><p>  專業(yè)班級 計算機(jī)科學(xué)與技術(shù) </p&g

2、t;<p>  學(xué)生姓名 學(xué)號 </p><p>  指導(dǎo)教師 職稱 </p><p>  完成日期 年 月 </p><p>  摘要:本系統(tǒng)設(shè)計完成了一個簡單的網(wǎng)絡(luò)嗅探器,它實現(xiàn)了對本機(jī)的網(wǎng)絡(luò)監(jiān)聽作用,捕獲IP數(shù)據(jù)包并對

3、數(shù)據(jù)包進(jìn)行分析。數(shù)據(jù)包信息內(nèi)容包括源IP地址、目標(biāo)IP地址、協(xié)議、時間、吞吐量、長度、生存時間、校驗碼等。該嗅探器不但能保存所需要的包信息,而且可以選擇所要嗅探的協(xié)議類型,以便獲得想要的信息。本系統(tǒng)采用C#語言編寫,并運用了其中的網(wǎng)絡(luò)編程技術(shù),無論在安全性還是在穩(wěn)定性上都有很好的保證。</p><p>  關(guān)鍵詞:網(wǎng)絡(luò)嗅探器;協(xié)議;數(shù)據(jù)包;監(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 網(wǎng)絡(luò)嗅探器的概述1</p><p>  1.3 研究現(xiàn)狀3</p><p>  2 網(wǎng)絡(luò)嗅探器設(shè)計相關(guān)技術(shù)簡介4</p><p>  2.1 在交錯環(huán)境下的嗅探技術(shù)4</p><p

8、>  2.1.1 ARP欺騙4</p><p>  2.1.2 交換機(jī)MAC地址表溢出4</p><p>  2.1.3 交換機(jī)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#網(wǎng)絡(luò)編程概述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 網(wǎng)絡(luò)協(xié)議8</p><p>  2.5.

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

11、<p>  3.1.1 準(zhǔn)確性和及時性14</p><p>  3.1.2 標(biāo)準(zhǔn)性14</p><p>  3.1.3 開放性和可擴(kuò)充性14</p><p>  3.2 功能要求分析14</p><p>  3.2.1 抓包功能14</p><p>  3.2.2 數(shù)據(jù)包過濾功能15</p

12、><p>  3.2.3 解析功能15</p><p>  4 系統(tǒng)設(shè)計15</p><p>  5 系統(tǒng)實現(xiàn)17</p><p>  5.1 嗅探器主界面17</p><p>  5.2 嗅探器詳細(xì)的報文信息界面23</p><p><b>  總結(jié)27</b&

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

34、、Java等語言的優(yōu)點,體現(xiàn)了當(dāng)今最新的程序設(shè)計技術(shù)的功能和精華。C#繼承了C語言的語法風(fēng)格,同時又繼承了C++的面向?qū)ο筇匦浴2煌氖?,C#的對象模型已經(jīng)面internet進(jìn)行了重新設(shè)計,使用的是.NET的類庫;C#不再提供對指針類型的支持,使得程序不能隨便訪問內(nèi)存地址空間,從而更加健壯;C#不再支持多重繼承,避免了以往類層次結(jié)構(gòu)中由于多重繼承帶來的可怕后果。.NET為C#提供了一個強大的、易用的、邏輯結(jié)構(gòu)一致的程序設(shè)計環(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操作系統(tǒng)平臺上運行的,有著友好界面外觀(如窗體、菜單、控件等)

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

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

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

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

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

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

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

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

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

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

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

47、作完成后才將控制返回給調(diào)用程序。在異步模式中,這些調(diào)用立即返回[11]。</p><p><b>  2.5 網(wǎng)絡(luò)協(xié)議</b></p><p>  2.5.1 IP協(xié)議基本知識</p><p><b>  IP協(xié)議介紹</b></p><p>  IP是為計算機(jī)網(wǎng)絡(luò)相互連接進(jìn)行通信而設(shè)計的協(xié)議。在

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

72、4 ICMP協(xié)議基本知識</p><p>  為了更有效地轉(zhuǎn)發(fā)IP數(shù)據(jù)報和提高交付成功的機(jī)會,在網(wǎng)際層使用了網(wǎng)際控制報文協(xié)議ICMP。ICMP允許主機(jī)或路由器報告差錯情況和提供有關(guān)異常情況的報告。ICMP是因特網(wǎng)的標(biāo)準(zhǔn)協(xié)議。但I(xiàn)CMP不是高層協(xié)議,而是IP層的協(xié)議。ICMP報文作為IP層數(shù)據(jù)報的數(shù)據(jù),加上數(shù)據(jù)報的首部,組成IP數(shù)據(jù)報發(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> ?。?)終點不可達(dá) 當(dāng)路由器或主機(jī)不能交付數(shù)據(jù)報時就向源點發(fā)送終點不可達(dá)報文。</p><p>  (2)源點抑制 當(dāng)路由器或主機(jī)由于擁塞而丟棄數(shù)據(jù)報時,就向源點發(fā)送源點抑制報文,使源點知道應(yīng)當(dāng)把數(shù)據(jù)報的發(fā)送速率放慢。</p><p> ?。?)時間超過 當(dāng)路由器收到生存時間為零的數(shù)據(jù)報時,除丟棄該數(shù)據(jù)

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

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

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

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

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

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

81、。</p><p><b>  4 系統(tǒng)設(shè)計</b></p><p>  該部分主要給出系統(tǒng)的總體結(jié)構(gòu)以及系統(tǒng)的整個流程圖。網(wǎng)絡(luò)嗅探器總體結(jié)構(gòu)如圖4-1,網(wǎng)絡(luò)嗅探器的流程圖如圖4-2:</p><p>  圖4-1 網(wǎng)絡(luò)嗅探器總體結(jié)構(gòu)</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 系統(tǒng)實現(xiàn)</b></p><p>  5.1 嗅探器主界面</p><p>  嗅探器主界面,如圖5-1所示,包含數(shù)據(jù)包顯示區(qū)、過濾器功能

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

85、界面</p><p>  嗅探器主界面詳細(xì)代碼;</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 關(guān)于嗅探器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>  // 獲取主機(jī)的端口IP并在復(fù)選框欄中顯示</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>  // 當(dāng)用戶沒有設(shè)置好捕獲條件時顯示提示</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, "界面出現(xiàn)一個錯誤" + 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>  // 根據(jù)過濾條件把新的包添加到列表中</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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論