基于c#的網(wǎng)絡(luò)嗅探器設(shè)計(jì)與實(shí)現(xiàn)【畢業(yè)設(shè)計(jì)】_第1頁
已閱讀1頁,還剩34頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

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

3、數(shù)據(jù)包進(jìn)行分析。數(shù)據(jù)包信息內(nèi)容包括源IP地址、目標(biāo)IP地址、協(xié)議、時(shí)間、吞吐量、長度、生存時(shí)間、校驗(yàn)碼等。該嗅探器不但能保存所需要的包信息,而且可以選擇所要嗅探的協(xié)議類型,以便獲得想要的信息。本系統(tǒng)采用C#語言編寫,并運(yùn)用了其中的網(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è)計(jì)相關(guān)技術(shù)簡介4</p><p>  2.1 在交錯(cuò)環(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é)議基本知識(shí)8</p><p>  2.5.2 TCP協(xié)議基本知識(shí)10</p><p>  2.5.3 UDP協(xié)議基本知識(shí)12</p><p>  2.5.4 ICMP協(xié)議基本知識(shí)13</p><p>  3 系統(tǒng)需求分析14</p><p>  3.1 系統(tǒng)性能要求14</p>

11、<p>  3.1.1 準(zhǔn)確性和及時(shí)性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è)計(jì)15</p><p>  5 系統(tǒng)實(shí)現(xiàn)17</p><p>  5.1 嗅探器主界面17</p><p>  5.2 嗅探器詳細(xì)的報(bào)文信息界面23</p><p><b>  總結(jié)27</b&

13、gt;</p><p>  致謝錯(cuò)誤!未定義書簽。</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ā)重要。因此,對(duì)于能夠分析、診

14、斷網(wǎng)絡(luò),測(cè)試網(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ù)包并對(duì)其進(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ì)算機(jī)網(wǎng)絡(luò)是共享通信通道的,這就意味著計(jì)算機(jī)能夠接收到發(fā)給其他計(jì)算機(jī)的信息。捕獲在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)信息就稱為“竊聽”[1]。</p><p>  在內(nèi)部網(wǎng)上,黑客們?nèi)绻胍杆佾@得大量的用戶賬號(hào),最有效的手段是使用嗅探器。這種方法要求運(yùn)行嗅探器程序的主機(jī)和被監(jiān)聽的主機(jī)必須在同一個(gè)以太網(wǎng)段上。以太網(wǎng)竊聽則是對(duì)以太網(wǎng)設(shè)備上傳送的數(shù)據(jù)包進(jìn)行偵聽,來

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

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

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

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

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

21、絡(luò)資源相互隔離,從而防止可能的非法監(jiān)聽[14]。</p><p> ?。?)以交換式集線器代替共享式集線器</p><p>  應(yīng)該以交換式集線器代替共享式集線器,使單播包僅在兩個(gè)節(jié)點(diǎn)之間傳送,從而防止非法監(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ù)的缺點(diǎn)是影響數(shù)據(jù)傳輸速度以及使用一個(gè)弱加密技術(shù)比較容易被攻破。系統(tǒng)管理員和用戶需要在網(wǎng)絡(luò)速度和安全性上進(jìn)行折中[14]。</p><p><b>  (4)劃分VLAN</b></p><p>  運(yùn)用VLAN技術(shù)

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

24、應(yīng)的法律和總統(tǒng)令[4],開始實(shí)施相關(guān)網(wǎng)絡(luò)監(jiān)控項(xiàng)目,對(duì)關(guān)鍵性的信息活動(dòng)進(jìn)行全球性的監(jiān)視[5]。在亞洲,日本也已經(jīng)編制出一套準(zhǔn)則,防止越權(quán)訪問計(jì)算機(jī)網(wǎng)絡(luò)。在頒布相關(guān)法律的同時(shí),各國也都開始實(shí)施相關(guān)網(wǎng)絡(luò)監(jiān)控項(xiàng)目,監(jiān)視全球關(guān)鍵性的信息活動(dòng)。美國聯(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ā)生的可疑活動(dòng)等。</p><p>  網(wǎng)絡(luò)嗅探器可以是軟件,也可以是硬件設(shè)備[7]。硬件的網(wǎng)絡(luò)嗅探器也稱為協(xié)議分析器,是一種監(jiān)視網(wǎng)絡(luò)數(shù)據(jù)運(yùn)行的軟件設(shè)備,協(xié)議分析器既能用于合法網(wǎng)絡(luò)管理也能用于竊取網(wǎng)絡(luò)信息[8]。網(wǎng)絡(luò)運(yùn)作和維護(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é)議分析器是一種能夠安裝在個(gè)人電腦上的單機(jī)設(shè)備軟件。它能夠捕獲數(shù)據(jù),實(shí)時(shí)控制和分析數(shù)據(jù)。手提式協(xié)議分析器一般應(yīng)用于小型公司或者大型公司的現(xiàn)場(chǎng)工程師等。其核心技術(shù)主要是用于數(shù)據(jù)包的捕獲和分析。不同的供應(yīng)商的產(chǎn)品具有不同的特征,諸如簡單協(xié)議分析(即數(shù)據(jù)包重組為原始信息)或?qū)<曳治龅?。分布式協(xié)議分析器主要由兩部分組成:一個(gè)是各網(wǎng)絡(luò)點(diǎn)上的監(jiān)視探測(cè)器

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

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

29、信內(nèi)容,另一方面,只需要更改數(shù)據(jù)包中的一些信息,成功地做好轉(zhuǎn)發(fā)工作即可。這種嗅探方式中,黑客所在主機(jī)是不需要設(shè)置網(wǎng)卡的混雜模式的,因?yàn)橥ㄐ烹p方的數(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ā)送到哪一個(gè)端口是因?yàn)楦鶕?jù)它本身維護(hù)的一張地址表。對(duì)于動(dòng)態(tài)

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

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

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

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

34、、Java等語言的優(yōu)點(diǎn),體現(xiàn)了當(dāng)今最新的程序設(shè)計(jì)技術(shù)的功能和精華。C#繼承了C語言的語法風(fēng)格,同時(shí)又繼承了C++的面向?qū)ο筇匦?。不同的是,C#的對(duì)象模型已經(jīng)面internet進(jìn)行了重新設(shè)計(jì),使用的是.NET的類庫;C#不再提供對(duì)指針類型的支持,使得程序不能隨便訪問內(nèi)存地址空間,從而更加健壯;C#不再支持多重繼承,避免了以往類層次結(jié)構(gòu)中由于多重繼承帶來的可怕后果。.NET為C#提供了一個(gè)強(qiáng)大的、易用的、邏輯結(jié)構(gòu)一致的程序設(shè)計(jì)環(huán)境。同時(shí),公

35、共語言運(yùn)行時(shí)為C#程序語言提供了一個(gè)托管的運(yùn)行時(shí)環(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)平臺(tái)上運(yùn)行的,有著友好界面外觀(如窗體、菜單、控件等)

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

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

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

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

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

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

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

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

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

45、sList屬性和Aliases屬性的作用分別是獲取或設(shè)置與主機(jī)關(guān)聯(lián)的IP地址列表以及獲取或設(shè)置與主機(jī)關(guān)聯(lián)的別名列表。AddressList屬性值是一個(gè)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命名空間中的一個(gè)非常重要的類。一個(gè)Socket實(shí)例包含了一個(gè)本地以及一個(gè)遠(yuǎn)程的終結(jié)點(diǎn),該終結(jié)點(diǎn)包含了該Socket實(shí)例的一些相關(guān)信息。</p><p>  Socket類支持兩種基本模式:同步和異步。其區(qū)別在于,在同步模式中,對(duì)執(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é)議基本知識(shí)</p><p><b>  IP協(xié)議介紹</b></p><p>  IP是為計(jì)算機(jī)網(wǎng)絡(luò)相互連接進(jìn)行通信而設(shè)計(jì)的協(xié)議。在

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

66、/p><p>  確認(rèn)序號(hào):占32比特。只有ACK標(biāo)志為1時(shí),確認(rèn)號(hào)字段才有效。它包含目標(biāo)端所期望收到源端的下一個(gè)數(shù)據(jù)字節(jié)。</p><p>  首部長度:占4比特。給出頭部占32比特的數(shù)目。沒有任何選項(xiàng)字段的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)序號(hào)有效。</p><p>  PSH:接收方應(yīng)該盡快將這個(gè)報(bào)文段交給應(yīng)用層。</p><p><b>  RST:重建連接。</b&g

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

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

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

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

72、4 ICMP協(xié)議基本知識(shí)</p><p>  為了更有效地轉(zhuǎn)發(fā)IP數(shù)據(jù)報(bào)和提高交付成功的機(jī)會(huì),在網(wǎng)際層使用了網(wǎng)際控制報(bào)文協(xié)議ICMP。ICMP允許主機(jī)或路由器報(bào)告差錯(cuò)情況和提供有關(guān)異常情況的報(bào)告。ICMP是因特網(wǎng)的標(biāo)準(zhǔn)協(xié)議。但I(xiàn)CMP不是高層協(xié)議,而是IP層的協(xié)議。ICMP報(bào)文作為IP層數(shù)據(jù)報(bào)的數(shù)據(jù),加上數(shù)據(jù)報(bào)的首部,組成IP數(shù)據(jù)報(bào)發(fā)送出去。ICMP報(bào)文格式如表2-5所示:</p><p>

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

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

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

76、<p>  3.1 系統(tǒng)性能要求</p><p>  3.1.1 準(zhǔn)確性和及時(shí)性</p><p>  軟件處理的準(zhǔn)確性和及時(shí)性是軟件的必要性能。在軟件設(shè)計(jì)和開發(fā)過程中,要充分考慮軟件當(dāng)前和將來可能承受的工作量,使軟件的處理能力和響應(yīng)時(shí)間能夠滿足客戶對(duì)信息處理的要求。</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ī)范,同時(shí),在開發(fā)軟件的過程中,要進(jìn)行良好的設(shè)計(jì)工作,制訂行之有效的軟件工程規(guī)范,保證代碼的易讀、可操作性和可移植性。</p><p>  3.1.3 開放性和可擴(kuò)充性</p><p>  網(wǎng)絡(luò)嗅探器在開發(fā)過程中,應(yīng)該充分考慮到以后的可擴(kuò)充性。例如增添其它功能,用戶的需求也會(huì)不斷的更新和完善。這

78、些都要求軟件提供足夠的手段進(jìn)行功能的調(diào)整和擴(kuò)充。而要實(shí)現(xiàn)這一點(diǎn),應(yīng)通過軟件的開放性來完成。所開發(fā)的軟件應(yīng)該是一個(gè)開放的軟件,只要符合一定的規(guī)范,可以簡單的加入和減少軟件的模塊。通過軟件的修補(bǔ)、替換完成軟件的升級(jí)和更新?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è)置四個(gè)過濾選項(xiàng),從而達(dá)到捕獲通過TCP傳輸?shù)臄?shù)據(jù)包、通過UDP傳

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

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

84、區(qū)、選擇監(jiān)聽端口功能區(qū)、數(shù)據(jù)統(tǒng)計(jì)區(qū)、開始捕獲按鈕、停止捕獲按鈕、清空列表按鈕和退出按鈕。數(shù)據(jù)包顯示區(qū)以列表的形式顯示了捕獲到的數(shù)據(jù)包,過濾器功能區(qū)提供四個(gè)單選項(xiàng)(TCP數(shù)據(jù)包、UDP數(shù)據(jù)包、ICMP數(shù)據(jù)包、所有數(shù)據(jù)包)讓用戶選擇以便在捕獲時(shí)抓取特定的數(shù)據(jù)包。在選擇監(jiān)聽端口功能區(qū)中,用戶只要選擇相應(yīng)的端口就能實(shí)現(xiàn)對(duì)該端口的監(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è)置好捕獲條件時(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("請(qǐng)選擇過濾條件和監(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("請(qǐng)選擇過濾條件!", "警告", 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("請(qǐng)選擇監(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)一個(gè)錯(cuò)誤" + 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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論