版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 本科畢業(yè)論文(設(shè)計(jì))</p><p> 二〇一二 年 四 月 十五 日</p><p> 畢業(yè)論文(設(shè)計(jì))任務(wù)書</p><p> 畢業(yè)論文(設(shè)計(jì))題目: 網(wǎng)絡(luò)嗅探器的開發(fā)與設(shè)計(jì) </p><p> 題目類型: 軟件開發(fā) </p><p> 畢業(yè)論文(設(shè)計(jì))時(shí)
2、間: 自 2011 年 12 月 18 日開始至 2012 年 4 月 15 日止</p><p> 畢業(yè)論文(設(shè)計(jì))內(nèi)容要求:</p><p> [1]題目類型:(1)理論研究(2)實(shí)驗(yàn)研究(3)工程設(shè)計(jì)(4)工程技術(shù)研究(5)軟件開發(fā)</p><p><b> 2.主要參考資料</b></p><p>
3、 3.畢業(yè)論文(設(shè)計(jì))進(jìn)度安排</p><p> 指導(dǎo)教師(簽章):____________ 日期:__________________</p><p> 系(教研室)主任(簽章) :____________ 日期:__________________</p><p> 二級(jí)學(xué)院院長(簽章) :____________
4、 日期:__________________</p><p><b> 摘 要</b></p><p> 隨著網(wǎng)絡(luò)技術(shù)的迅速發(fā)展和網(wǎng)絡(luò)應(yīng)用的普及,越來越多的信息資源在互聯(lián)網(wǎng)上共享,網(wǎng)絡(luò)的安全性和可靠性顯得越發(fā)重要。嗅探技術(shù)作為網(wǎng)絡(luò)安全攻防中最基礎(chǔ)的技術(shù),既可以用于獲取網(wǎng)絡(luò)中傳輸?shù)拇罅棵舾行畔?,也可以用于網(wǎng)絡(luò)管理。通過獲取網(wǎng)絡(luò)數(shù)據(jù)包的流向和內(nèi)容等信息,
5、可以進(jìn)行網(wǎng)絡(luò)安全分析和網(wǎng)絡(luò)威脅應(yīng)對。本文對網(wǎng)絡(luò)嗅探技術(shù)進(jìn)行了簡要分析,研究了網(wǎng)絡(luò)數(shù)據(jù)包的捕獲機(jī)制,利用原始套接字在windows平臺(tái)下通過vc++編寫了網(wǎng)絡(luò)嗅探器程序,完成了對數(shù)據(jù)包捕獲及分析,協(xié)議過濾的主要功能,實(shí)現(xiàn)了對網(wǎng)絡(luò)協(xié)議,源IP地址,目標(biāo)IP地址及端口號(hào)等信息的顯示。</p><p> 關(guān)鍵詞:網(wǎng)絡(luò)嗅探;數(shù)據(jù)包;原始套接字;vc++</p><p><b> ABS
6、TRACT</b></p><p> Along with the rapid development of network technologies and the popularization of network applications, more and more information resources are put on internet.The network security
7、and reliability become important increasingly. Sniffing network security technology as the most basic offensive and defensive techniques, both used to obtain a large number of network transmission of sensitive informatio
8、n can also be used for network management. Access to network packets through the flow and content </p><p> Key words: network sniffer;capture data;raw sockets;vc++</p><p><b> 目 錄</
9、b></p><p><b> 摘 要I</b></p><p> ABSTRACTII</p><p><b> 第一章 前言1</b></p><p> 1.1 研究目的和意義1</p><p> 1.2 國內(nèi)外研究現(xiàn)狀1</p&g
10、t;<p> 1.3 網(wǎng)絡(luò)嗅探器的相關(guān)拓展2</p><p> 第二章 網(wǎng)絡(luò)嗅探器的基本原理5</p><p> 2.1 網(wǎng)絡(luò)嗅探器的概述5</p><p> 2.2 網(wǎng)絡(luò)嗅探的原理5</p><p> 2.3 網(wǎng)絡(luò)嗅探的檢測和防范6</p><p> 2.4 數(shù)據(jù)包捕獲
11、機(jī)制7</p><p> 2.4.1 WinPcap包捕獲機(jī)制8</p><p> 2.4.2 套接字包捕獲機(jī)制9</p><p> 第三章 網(wǎng)絡(luò)嗅探器的設(shè)計(jì)12</p><p> 3.1 利用套接字開發(fā)網(wǎng)絡(luò)嗅探器的步驟12</p><p> 3.2 嗅探器的具體實(shí)現(xiàn)原理13</p
12、><p> 3.3 數(shù)據(jù)包捕獲模塊設(shè)計(jì)16</p><p> 3.4 數(shù)據(jù)包分析模塊設(shè)計(jì)16</p><p> 3.5 數(shù)據(jù)包的顯示18</p><p> 第四章 網(wǎng)絡(luò)嗅探器的測試與實(shí)現(xiàn)19</p><p><b> 結(jié)論21</b></p><p>
13、;<b> 參考文獻(xiàn)22</b></p><p><b> 致 謝23</b></p><p><b> 第一章 前言</b></p><p> 1.1 研究目的和意義</p><p> 網(wǎng)絡(luò)技術(shù)的日新月異發(fā)展突飛猛進(jìn),加速了全球信息化進(jìn)程,計(jì)算機(jī)網(wǎng)絡(luò)的應(yīng)用
14、越來越廣泛,其作用也越來越重要。但是由于計(jì)算機(jī)系統(tǒng)中軟硬件的脆弱性和計(jì)算機(jī)網(wǎng)絡(luò)的脆弱性以及地理分布的位置、自然環(huán)境、自然破壞以及人為因素的影響,不僅增加了信息存儲(chǔ)、處理的風(fēng)險(xiǎn),也給信息傳送帶來了新的問題。網(wǎng)絡(luò)安全問題變得越來越嚴(yán)重。現(xiàn)在,全球每年關(guān)于網(wǎng)絡(luò)安全問題的損失是巨大的。每年關(guān)于網(wǎng)絡(luò)安全的報(bào)道層出不窮,產(chǎn)生的損失越來越大,為解決網(wǎng)絡(luò)安全問題而投入的資金也越來越多。網(wǎng)絡(luò)安全問題嚴(yán)重影響了人們的生活和工作,以至整個(gè)國家的安全。它可能對
15、國家的重大部門造成嚴(yán)重后果,因?yàn)楝F(xiàn)在大多數(shù)部門都實(shí)現(xiàn)了網(wǎng)絡(luò)信息的系統(tǒng),這樣的網(wǎng)絡(luò)安全問題提供了可能產(chǎn)生的土壤。</p><p> 根據(jù)《網(wǎng)絡(luò)安全技術(shù)發(fā)展分析》一文中的數(shù)據(jù),2007年以來網(wǎng)絡(luò)監(jiān)聽技術(shù)出現(xiàn)了新的重要特征,傳統(tǒng)的Sniffer技術(shù)是被動(dòng)的監(jiān)聽網(wǎng)絡(luò)通信,用戶名和口令,而新的Sniffer技術(shù)則主動(dòng)地控制通信數(shù)據(jù)。我們通過對網(wǎng)絡(luò)嗅探器的數(shù)據(jù)包捕獲與分析功能的進(jìn)一步了解,才能做到知己知彼,有針對行地獲取所
16、需要的信息,利于對這些信息進(jìn)行網(wǎng)絡(luò)安全分析和網(wǎng)絡(luò)威脅應(yīng)對。因此,對網(wǎng)絡(luò)嗅探器的研究具有重要意義。</p><p> 1.2 國內(nèi)外研究現(xiàn)狀</p><p> 目前已經(jīng)有不少的嗅探工具,譬如在Windows環(huán)境下,最富盛名的工具是Netxray,Sniffer pro,在UNIX環(huán)境下是sniffer和snoop,以及同時(shí)支持Linux和windows平臺(tái)的Ethereal等工具都是比
17、較常見的。網(wǎng)絡(luò)嗅探器實(shí)際是一把雙刃劍,通過使用網(wǎng)絡(luò)嗅探器可以把網(wǎng)卡設(shè)置于混雜模式,并可以實(shí)現(xiàn)對網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包的捕獲與分析,此分析結(jié)果可供網(wǎng)絡(luò)安全分析之用,也可以為黑客發(fā)動(dòng)進(jìn)一步的攻擊提供有價(jià)值的信息。雖然網(wǎng)絡(luò)嗅探器技術(shù)被黑客利用后會(huì)對網(wǎng)絡(luò)安全構(gòu)成一定的威脅,但嗅探器本身的危害并不是很大,主要是用來為其他黑客軟件提供網(wǎng)絡(luò)情報(bào),真正的攻擊主要是由其他黑軟來完成的。而在網(wǎng)絡(luò)安全方面,目前使用最廣泛的TCP/IP協(xié)議存在很多安全缺陷,網(wǎng)絡(luò)嗅
18、探器可以有效地探測在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包信息,通過對這些信息的分析利用是有助于網(wǎng)絡(luò)安全維護(hù)的。我們通過對網(wǎng)絡(luò)嗅探器的數(shù)據(jù)包捕獲與分析功能進(jìn)一步了解,才能做到知己知彼,有針對性的獲取所需要的信息,利用對這些休息進(jìn)行網(wǎng)絡(luò)安全協(xié)議和網(wǎng)絡(luò)威脅應(yīng)對。</p><p> Sniffer中文翻譯過來就是嗅探器,在當(dāng)前網(wǎng)絡(luò)技術(shù)中使用的非常得廣泛。Sniffer既可以做為網(wǎng)絡(luò)故障的診斷工具,已可以做為黑客嗅探和監(jiān)聽的工具。最近兩年
19、,網(wǎng)絡(luò)嗅探監(jiān)聽(sniffer)技術(shù)出現(xiàn)了新的重要特征。傳統(tǒng)的sniffer技術(shù)是被動(dòng)地監(jiān)聽網(wǎng)絡(luò)通信,用戶名和口令。而新的sniffer技術(shù)出現(xiàn)了主動(dòng)地控制通信數(shù)據(jù)的特點(diǎn),把sniffer技術(shù)擴(kuò)展到了一個(gè)新的領(lǐng)域,Sniffer技術(shù)除了目前在傳統(tǒng)的網(wǎng)絡(luò)偵測管理外,也開始被應(yīng)用于在咨詢保全的領(lǐng)域??梢赃@樣說,sniffer技術(shù)是一把雙刃劍,如何更好的利用它,了解它的一些特性,將能使用這項(xiàng)技術(shù)更好的為我們需求帶來便利。</p>
20、<p> Sniffer的編程方法比較通用的有以下幾種:</p><p> winpcap這是一個(gè)比較通用的庫,相信做過抓包的工具大多人都不會(huì)陌生。</p><p> raw socket在2000以后的版本都比較支持此項(xiàng)功能,2000server有個(gè)網(wǎng)絡(luò)監(jiān)視器就是基于raw socket。</p><p> tdi,ndis,spi,hook
21、socket技術(shù),這種技術(shù)比較大的不同是,可以將包截取而不僅僅是獲得包的一份拷貝。</p><p> 實(shí)際應(yīng)用中的Sniffer還分軟,硬兩種。軟件Sniffer的優(yōu)點(diǎn)在于比較便宜,易于學(xué)習(xí)使用,同時(shí)也易于交流,缺點(diǎn)是往往無法抓取網(wǎng)絡(luò)上所有的傳輸(不如碎片),某些情況下也就可能無法真正了解網(wǎng)絡(luò)的故障和運(yùn)行情況;硬件的Sniffer通常稱為協(xié)議分析儀,一把都比較昂貴,它的優(yōu)點(diǎn)恰恰是軟件Sniffer所欠缺的,但是
22、昂貴是它的致命的缺點(diǎn)。因此目前流行的Sniffer工具都是軟件的。</p><p> 1.3 網(wǎng)絡(luò)嗅探器的相關(guān)拓展</p><p> 網(wǎng)絡(luò)監(jiān)聽是黑客們常用的一種方法。當(dāng)成功地登錄進(jìn)一臺(tái)網(wǎng)絡(luò)上的主機(jī),并取得了這臺(tái)主機(jī)的超級(jí)用戶的權(quán)限之后,往往要擴(kuò)大戰(zhàn)果,嘗試登錄或者奪取網(wǎng)絡(luò)中其他主機(jī)的控制友。而網(wǎng)絡(luò)監(jiān)聽則是一種最簡單而且最有效的方法,它常常能輕易地獲得用其他方法很難獲得的信息。在網(wǎng)絡(luò)上
23、,監(jiān)聽效果最好的地方是在網(wǎng)關(guān)、路由器、防火墻一類的設(shè)備處,通常由網(wǎng)絡(luò)管理員來操作。使用最方便的是在一個(gè)以太網(wǎng)中的任何一臺(tái)上網(wǎng)的主機(jī)上,這是大多數(shù)黑客的做法。</p><p> 在電話線路和無線電、微波中監(jiān)聽傳輸?shù)男畔⒈容^好理解,但是人們常常不太理解為什么局域網(wǎng)中可以進(jìn)行監(jiān)聽。甚至有人問:能不能監(jiān)聽不在同一網(wǎng)段的信息。下面就講述在以太網(wǎng)中進(jìn)行監(jiān)聽的一些原理。在令牌環(huán)中,道理是相似的。 對于一個(gè)施行網(wǎng)絡(luò)攻擊的人來說
24、,能攻破網(wǎng)關(guān)、路由器、防火墻的情況極為少見,在這里完全可以由安全管理員安裝一些設(shè)備,對網(wǎng)絡(luò)進(jìn)行監(jiān)控,或者使用一些專門的設(shè)備,運(yùn)行專門的監(jiān)聽軟件,并防止任何非法訪關(guān)。然而,潛入一臺(tái)不引人注意的計(jì)算機(jī)中,悄悄地運(yùn)行一個(gè)監(jiān)聽程序,一個(gè)黑客是完全可以做到的。監(jiān)聽是非常消耗CPU資源的,在一個(gè)擔(dān)負(fù)繁忙任務(wù)的計(jì)算機(jī)中進(jìn)行監(jiān)聽,可以立即被管理員發(fā)現(xiàn),因?yàn)樗l(fā)現(xiàn)計(jì)算機(jī)的響應(yīng)速度令人驚奇慢。 </p><p> 對于一臺(tái)連網(wǎng)的計(jì)
25、算機(jī),最方便的是在以太網(wǎng)中進(jìn)行監(jiān)聽,只須安裝一個(gè)監(jiān)聽軟件,然后就可以坐在機(jī)器旁瀏覽監(jiān)聽到的信息了。</p><p> 以太網(wǎng)協(xié)議的工作方式為將要發(fā)送的數(shù)據(jù)包發(fā)往連在一起的所有主機(jī)。在包頭中包含著應(yīng)該接收數(shù)據(jù)包的主機(jī)的正確地址。因此,只有與數(shù)據(jù)包中目標(biāo)地址一致的那臺(tái)主機(jī)才能接收信包。但是,當(dāng)主機(jī)工在監(jiān)聽模式下,無論數(shù)據(jù)包中的目標(biāo)物理地址是什么,主機(jī)都將接收。 </p><p> 在Int
26、ernet上,有許多這樣的局域網(wǎng)。幾臺(tái)甚至十幾臺(tái)主機(jī)通過一條電纜一個(gè)集線器連在一起。在協(xié)議的高層或用戶看來,當(dāng)同一網(wǎng)絡(luò)中的兩臺(tái)主機(jī)通信時(shí),源主機(jī)將寫有目的主機(jī)IP地址的數(shù)據(jù)包發(fā)向網(wǎng)關(guān)。但是,這種數(shù)據(jù)包并不能在協(xié)議棧的高層直接發(fā)送出去。要發(fā)送的數(shù)據(jù)包必須從TCP/IP協(xié)議的IP層交給網(wǎng)絡(luò)接口,即數(shù)據(jù)鏈路層。 </p><p> 網(wǎng)絡(luò)接口不能識(shí)別IP地址。在網(wǎng)絡(luò)接口,由IP層來的帶有IP地址的數(shù)據(jù)包又增加了一部分信
27、息:以太幀的幀頭。在帖頭中,有兩個(gè)域分別為只有網(wǎng)絡(luò)接口才能識(shí)別的源主機(jī)和目的主機(jī)的物理地址,這是一個(gè)48位的地址。這個(gè)48位的地址是與IP地址對應(yīng)的。也就是說,一個(gè)IP地址,必然對應(yīng)一個(gè)物理地址。對于作為網(wǎng)關(guān)的主機(jī),由于它連接了多個(gè)網(wǎng)絡(luò),因此它同時(shí)具有多個(gè)IP地址,在每個(gè)網(wǎng)絡(luò)中,它都有一個(gè)。發(fā)向局域網(wǎng)之外的幀中攜帶的是網(wǎng)關(guān)的物理地址。</p><p> 在以太網(wǎng)中,填寫了物理地址的幀從網(wǎng)絡(luò)接口中,也就是從網(wǎng)卡中
28、發(fā)送出去,傳送到物理的線路上。如果局域網(wǎng)是由一條粗纜或細(xì)纜連接機(jī)而成,則數(shù)字信號(hào)在電纜上傳輸,信號(hào)能夠到達(dá)線路上的每一臺(tái)主機(jī)。當(dāng)使用集線器時(shí),發(fā)送出去的信號(hào)到達(dá)集線器,由集線器再發(fā)向連接在信線器上的每一條線路。于是,在物理線路上傳輸?shù)臄?shù)字信號(hào)也能到達(dá)連接在集線器上的每一主機(jī)。 </p><p> 數(shù)字信號(hào)到達(dá)一臺(tái)主機(jī)的網(wǎng)絡(luò)接口時(shí),在正常情況下,網(wǎng)絡(luò)接口讀入數(shù)據(jù)幀,進(jìn)行檢查,如果數(shù)據(jù)幀中攜帶的確良物理地址是自己的
29、,或者物理地址是廣播地址,則將數(shù)據(jù)幀交給上層協(xié)議軟件,也就是IP層軟件,否則就將這個(gè)幀丟棄。對于每一個(gè)到達(dá)網(wǎng)絡(luò)接口的數(shù)據(jù)幀,都要進(jìn)行這個(gè)過程。然而,當(dāng)主機(jī)工作在監(jiān)聽模式下,則所有的數(shù)據(jù)幀都將被交給上層協(xié)議軟件處理。 </p><p> 局域網(wǎng)的這種工作方式,一個(gè)形象的例子是,大房間就像是一個(gè)共享的信道,里面的每個(gè)人好像是一臺(tái)主機(jī)。人們所說的話是信息包,在大房間中到處傳播。當(dāng)我們對其中某個(gè)人說話時(shí),所有的人都能聽
30、到。但只有名字相同的那個(gè)人,才會(huì)對這些話語做出反映,進(jìn)行處理。其余的人聽到了這些談話,只能從發(fā)呆中猜測,是否在監(jiān)聽他人的談話。</p><p> 當(dāng)連接在同一條電纜或集線器上的主機(jī)被邏輯地分為幾個(gè)子網(wǎng)時(shí),如果一臺(tái)主機(jī)處于監(jiān)聽模式下,它還能接收到發(fā)向與自己不在同一子網(wǎng)(使用了不同的掩碼、IP地址和網(wǎng)關(guān))的主機(jī)的那些信包。也就是說,在同一條物理信道上傳輸?shù)乃行畔⒍伎梢员唤邮盏健?lt;/p><p&
31、gt; 另外,要說明的是,Internet中使用的大部分協(xié)議都是很早設(shè)計(jì)的,許多協(xié)議的實(shí)現(xiàn)都是基于一種非常友好的,通信的雙方充分信任的基礎(chǔ)之上。因此,直到現(xiàn)在,網(wǎng)絡(luò)安全還是非常脆弱的。在通常的網(wǎng)絡(luò)環(huán)境下,用戶的所有信息,包手戶頭和口令信息都是以明文的方式在網(wǎng)上傳輸。因此,對于一個(gè)網(wǎng)絡(luò)黑客和網(wǎng)絡(luò)攻擊者進(jìn)行網(wǎng)絡(luò)監(jiān)聽,獲得用戶的各種信息并不是一件很困難的事。只要具有初步的網(wǎng)絡(luò)和TCP/IP協(xié)議知識(shí),便能輕易地從監(jiān)聽到的信息中提取出感興趣的部
32、分。</p><p> 首先,網(wǎng)絡(luò)監(jiān)聽軟件運(yùn)行時(shí),需要消耗大量的處理器時(shí)間,如果在此時(shí),就詳細(xì)地分析包中的內(nèi)容,許多包就會(huì)來不信接收而漏掉。因此,網(wǎng)絡(luò)監(jiān)聽軟件通常都是將監(jiān)聽到的包存放在文件中,待以后再分析。</p><p> 其次,網(wǎng)絡(luò)中的數(shù)據(jù)包非常復(fù)雜,兩臺(tái)主機(jī)之間即使連續(xù)發(fā)送和接受數(shù)據(jù)包,在監(jiān)聽到的結(jié)果中,中間必然會(huì)夾雜了許多別的主機(jī)交互的數(shù)據(jù)包。監(jiān)聽軟件將同一TCP會(huì)話的包整理到
33、一起,已經(jīng)是很不錯(cuò)了。如果還希望將用戶的詳細(xì)信息整理出瞇,需要根據(jù)協(xié)議對包進(jìn)行大量的分析。面對網(wǎng)絡(luò)上如此眾多的協(xié)議,這個(gè)監(jiān)聽軟件將會(huì)十分龐大。</p><p> 第二章 網(wǎng)絡(luò)嗅探器的基本原理</p><p> 2.1 網(wǎng)絡(luò)嗅探器的概述</p><p> 網(wǎng)絡(luò)嗅探器又稱為網(wǎng)絡(luò)監(jiān)聽器,簡稱為Sniffer子系統(tǒng),放置于網(wǎng)絡(luò)節(jié)點(diǎn)處,對網(wǎng)絡(luò)中的數(shù)據(jù)幀進(jìn)行捕獲的一種
34、被動(dòng)監(jiān)聽手段,是一種常用的收集有用數(shù)據(jù)的方法,這些數(shù)據(jù)可以是用戶的賬號(hào)和密碼,可以是一些商用機(jī)密數(shù)據(jù)等等。</p><p> Sniffer是利用計(jì)算機(jī)的網(wǎng)絡(luò)接口截獲目的地為其他計(jì)算機(jī)的數(shù)據(jù)報(bào)文的一種工具。Sniffer的正當(dāng)用處主要是分析網(wǎng)絡(luò)的流量,以便找出所關(guān)心的網(wǎng)絡(luò)中潛在的問題。例如,假設(shè)網(wǎng)絡(luò)的某一段運(yùn)行得不是很好,報(bào)文的發(fā)送比較慢,而我們又不知道問題出在什么地方,此時(shí)就可以用嗅探器截獲網(wǎng)絡(luò)中的數(shù)據(jù)包,分
35、析問題的所在。而嗅探器也可作為攻擊工具被黑客所利用為其發(fā)動(dòng)進(jìn)一步的攻擊提供有價(jià)值的信息。</p><p> 2.2 網(wǎng)絡(luò)嗅探的原理</p><p> 嗅探器是一種常用的收集有用數(shù)據(jù)的方法,嗅探器是利用計(jì)算機(jī)的網(wǎng)絡(luò)接口截獲目的地為其它計(jì)算機(jī)的數(shù)據(jù)報(bào)文的一種工具。由于組網(wǎng)方式不同,嗅探器的工作原理也有所不同,總共可以分為三類:</p><p> 1、基于網(wǎng)卡混雜
36、模式的嗅探原理;</p><p> 2、基于ARP欺騙的網(wǎng)絡(luò)嗅探原理;</p><p> 3、基于中間人攻擊的嗅探原理。</p><p> 本次設(shè)計(jì)就是利用第一種方式來實(shí)現(xiàn)嗅探器的功能,可見監(jiān)聽到所有流經(jīng)同一以太網(wǎng)網(wǎng)段的數(shù)據(jù)包,這是一種被動(dòng)嗅探的方式。從以太網(wǎng)的工作原理來看,數(shù)據(jù)傳輸是基于“共享”的,所有的同一本地網(wǎng)范圍內(nèi)的計(jì)算機(jī)共同接收到相同的數(shù)據(jù)包,這意味
37、著計(jì)算機(jī)直接的通訊都是透明可見的。正是因?yàn)檫@樣的原因,以太網(wǎng)卡都構(gòu)造了硬件的“過濾器”,這個(gè)過濾器將忽略掉一切和自己無關(guān)的網(wǎng)絡(luò)信息,事實(shí)上時(shí)忽略掉了與自身MAC地址不符合的信息。從網(wǎng)卡原理上來說,在一個(gè)實(shí)際的系統(tǒng)中,數(shù)據(jù)的收發(fā)是由網(wǎng)卡來完成的,網(wǎng)卡接收到傳輸來的數(shù)據(jù)包,網(wǎng)卡內(nèi)的單片程序接收數(shù)據(jù)幀的目的MAC地址,根據(jù)計(jì)算機(jī)上的網(wǎng)卡驅(qū)動(dòng)程序設(shè)置的接收模式判斷該不該接收,認(rèn)為該接收就接收后產(chǎn)生中斷信號(hào)通知CPU,認(rèn)為不該接收就丟掉不管,所以
38、不該接收的數(shù)據(jù)網(wǎng)卡就截?cái)嗔?,?jì)算機(jī)根本就不知道。對于網(wǎng)卡來說一般有四種接收模式:</p><p> ?。?)廣播方式:該模式下的網(wǎng)卡能夠接收網(wǎng)絡(luò)中的廣播信息;</p><p> ?。?)組播方式:設(shè)置在該模式下的網(wǎng)卡能夠接收組播數(shù)據(jù);</p><p> (3)直接方式:在這種模式下,只有目的網(wǎng)卡才能接收該數(shù)據(jù);</p><p> ?。?)混
39、雜模式:在這種模式下的網(wǎng)卡能夠接收一切通過它的數(shù)據(jù)。</p><p> 而本次設(shè)計(jì)嗅探工具正是利用了這個(gè)特點(diǎn),把網(wǎng)卡設(shè)置為“混雜模式”。因此,嗅探程序就能夠接收到整個(gè)以太網(wǎng)內(nèi)的網(wǎng)絡(luò)數(shù)據(jù)信息了,而不管該數(shù)據(jù)是否是傳給它的。正常模式和混雜模式的兩者對比如圖2.1所示:</p><p> 圖2.1 網(wǎng)卡對數(shù)據(jù)包的處理方式</p><p> 2.3 網(wǎng)絡(luò)嗅探的檢測和
40、防范</p><p> 網(wǎng)絡(luò)監(jiān)聽是很難被發(fā)現(xiàn)的,因?yàn)檫\(yùn)行網(wǎng)絡(luò)監(jiān)聽的主機(jī)只是被動(dòng)地接收在局域局上傳輸?shù)男畔ⅲ恢鲃?dòng)的與其他主機(jī)交換信息,也沒有修改在網(wǎng)上傳輸?shù)臄?shù)據(jù)包。[5]</p><p> 1. 對可能存在的網(wǎng)絡(luò)監(jiān)聽的檢測</p><p> (1)對于懷疑運(yùn)行監(jiān)聽程序的機(jī)器,用正確的IP地址和錯(cuò)誤的物理地址ping,運(yùn)行監(jiān)聽程序的機(jī)器會(huì)有響應(yīng)。這是因?yàn)檎5臋C(jī)
41、器不接收錯(cuò)誤的物理地址,處理監(jiān)聽狀態(tài)的機(jī)器能接收,但如果他的IP stack不再次反向檢查的話,就會(huì)響應(yīng)。</p><p> (2)向網(wǎng)上發(fā)大量不存在的物理地址的包,由于監(jiān)聽程序要分析和處理大量的數(shù)據(jù)包會(huì)占用很多的CPU資源,這將導(dǎo)致性能下降。通過比較前后該機(jī)器性能加以判斷。這種方法難度比較大。</p><p> (3)使用反監(jiān)聽工具如antisniffer等進(jìn)行檢測</p>
42、;<p> 2. 對網(wǎng)絡(luò)監(jiān)聽的防范措施</p><p> (1)從邏輯或物理上對網(wǎng)絡(luò)分段</p><p> 網(wǎng)絡(luò)分段通常被認(rèn)為是控制網(wǎng)絡(luò)廣播風(fēng)暴的一種基本手段,但其實(shí)也是保證網(wǎng)絡(luò)安全的一項(xiàng)措施。其目的是將非法用戶與敏感的網(wǎng)絡(luò)資源相互隔離,從而防止可能的非法監(jiān)聽。</p><p> (2)以交換式集線器代替共享式集線器</p>&l
43、t;p> 對局域網(wǎng)的中心交換機(jī)進(jìn)行網(wǎng)絡(luò)分段后,局域網(wǎng)監(jiān)聽的危險(xiǎn)仍然存在。這是因?yàn)榫W(wǎng)絡(luò)最終用戶的接入往往是通過分支集線器而不是中心交換機(jī),而使用最廣泛的分支集線器通常是共享式集線器。這樣,當(dāng)用戶與主機(jī)進(jìn)行數(shù)據(jù)通信時(shí),兩臺(tái)機(jī)器之間的數(shù)據(jù)包(稱為單播包Unicast Packet)還是會(huì)被同一臺(tái)集線器上的其他用戶所監(jiān)聽。</p><p> 因此,應(yīng)該以交換式集線器代替共享式集線器,使單播包僅在兩個(gè)節(jié)點(diǎn)之間傳送
44、,從而防止非法監(jiān)聽。當(dāng)然,交換式集線器只能控制單播包而無法控制廣播包(Broadcast Packet)和多播包(Multicast Packet)。但廣播包和多播包內(nèi)的關(guān)鍵信息,要遠(yuǎn)遠(yuǎn)少于單播包。</p><p><b> (3)使用加密技術(shù)</b></p><p> 數(shù)據(jù)經(jīng)過加密后,通過監(jiān)聽仍然可以得到傳送的信息,但顯示的是亂碼。使用加密技術(shù)的缺點(diǎn)是影響數(shù)據(jù)傳
45、輸速度以及使用一個(gè)弱加密術(shù)比較容易被攻破。系統(tǒng)管理員和用戶需要在網(wǎng)絡(luò)速度和安全性上進(jìn)行折中。</p><p><b> (4)劃分VLAN</b></p><p> 運(yùn)用VLAN(虛擬局域網(wǎng))技術(shù),將以太網(wǎng)通信變?yōu)辄c(diǎn)到點(diǎn)通信,可以防止大部分基于網(wǎng)絡(luò)監(jiān)聽的入侵。</p><p> 2.4 數(shù)據(jù)包捕獲機(jī)制</p><p&
46、gt; 縱觀國內(nèi)外在網(wǎng)絡(luò)嗅探技術(shù)中所使用的包捕獲機(jī)制的方法,大致可歸納為兩類:一類是由操作系統(tǒng)內(nèi)核提供的捕獲機(jī)制;另一類是由應(yīng)用軟件或系統(tǒng)開發(fā)包通過安裝包捕獲驅(qū)動(dòng)程序提供的捕獲機(jī)制,該機(jī)制主要用于Win32平臺(tái)下的開發(fā)。操作系統(tǒng)提供的捕獲機(jī)制主要有四種:BPF(Berkeley packet Filter),DLPI (Data Link Provider Interface),NIT(Network Interface Tap),
47、Sock Packet類型套接口。BPF由基于BSD的Unix系統(tǒng)內(nèi)核所實(shí)現(xiàn)。DLPI是Solaris(和其它System V Unix)系統(tǒng)的內(nèi)嵌子系統(tǒng)。從性能上看, Sock Packet最弱。Windows操作系統(tǒng)沒有提供內(nèi)置的包捕獲機(jī)制。它只提供了數(shù)量很少并且功能有限的API調(diào)用。WinPcap(Windows Packet Capture)是Win32上的第一個(gè)用來捕獲數(shù)據(jù)包的開放系統(tǒng)軟件包,它是一種新提出的強(qiáng)有力并且可擴(kuò)展的
48、框架結(jié)構(gòu)。WinPcap包含了一系列以前系統(tǒng)所沒有的創(chuàng)新特性。本文將對目前比較流行的WinPcap軟件包提供的捕獲機(jī)制進(jìn)行簡單介紹</p><p> 2.4.1 WinPcap包捕獲機(jī)制</p><p> WinPcap的體系結(jié)構(gòu)如圖2.2所示:</p><p> 圖2.2 Winpcap的體系結(jié)構(gòu)</p><p> 由WinPca
49、p體系結(jié)構(gòu)圖可以看出它采用的是分層化的驅(qū)動(dòng)程序模型,并包含有三個(gè)組件:</p><p> 1.內(nèi)核級(jí)的數(shù)據(jù)包捕獲驅(qū)動(dòng)程序</p><p> 2.低級(jí)的動(dòng)態(tài)連接庫(Packet.dll)</p><p> 3.高級(jí)系統(tǒng)無關(guān)庫(Wpcap.dll)</p><p> WinPcap(Windows Packet Capture)是由微軟資
50、助的一個(gè)項(xiàng)目,其核心仍是基于NDIS的,但它對NDIS進(jìn)行封裝,它是Windows平臺(tái)下一個(gè)免費(fèi)、公共的網(wǎng)絡(luò)訪問系統(tǒng),它為win32應(yīng)用程序提供訪問網(wǎng)絡(luò)底層的能力。它提供了以下的各項(xiàng)功能:</p><p> 1.捕獲原始數(shù)據(jù)報(bào),包括在共享網(wǎng)絡(luò)上各主機(jī)發(fā)送/接收以及相互之間交換的數(shù)據(jù)報(bào);</p><p> 2.在數(shù)據(jù)報(bào)發(fā)往應(yīng)用程序之前,按照自定義的規(guī)則將某些特殊的數(shù)據(jù)報(bào)過濾掉;</
51、p><p> 3.在網(wǎng)絡(luò)上發(fā)送原始的數(shù)據(jù)報(bào);</p><p> 4.收集網(wǎng)絡(luò)通信過程中的統(tǒng)計(jì)信息。</p><p> 在Windows NT下WinPcap包捕獲驅(qū)動(dòng)和網(wǎng)卡設(shè)備驅(qū)動(dòng)的交互是通過NDIS(Network Device Interface Specification)來實(shí)現(xiàn)的。而且包捕獲驅(qū)動(dòng)既與網(wǎng)絡(luò)驅(qū)動(dòng)通信又與用戶應(yīng)用程序通信,所以它在NDIS結(jié)構(gòu)中如
52、同一個(gè)協(xié)議驅(qū)動(dòng),對WindowsNT操作系統(tǒng)中的NDIS結(jié)構(gòu)中的高端驅(qū)動(dòng)進(jìn)行編程,這樣編制的程序與上層應(yīng)用程序更容易連接,應(yīng)用程序?qū)︱?qū)動(dòng)設(shè)置的工作也更方便。如圖2.3所示:</p><p> 圖2.3 包捕獲驅(qū)動(dòng)在NDIS中所處位置</p><p> 2.4.2 套接字包捕獲機(jī)制</p><p> 上世紀(jì)80年代初,加利福尼亞大學(xué)Berkeley分校在UNI
53、X操作系統(tǒng)下實(shí)現(xiàn)了TCP/IP協(xié)議,它們?yōu)門CP/IP網(wǎng)絡(luò)通信開發(fā)了一個(gè)應(yīng)用程序接口(API),這個(gè)API稱為socket(套接字)接口。Socket給程序員提供了一個(gè)高層接口,它的出現(xiàn)使得程序員在編寫網(wǎng)絡(luò)應(yīng)用程序時(shí)只需要調(diào)用函數(shù),對網(wǎng)絡(luò)的底層細(xì)節(jié)并不需要精通,因此十分方便。</p><p> socket實(shí)質(zhì)上是提供了進(jìn)程通信的端點(diǎn)。進(jìn)程通信之前,雙方首先必須各自創(chuàng)建一個(gè)端點(diǎn),否則是沒有辦法建立聯(lián)系并相互通信
54、的。正如打電話之前,雙方必須擁有各自的電話機(jī)一樣。</p><p> 在網(wǎng)間和網(wǎng)內(nèi)部,每一個(gè)socket用一個(gè)半相關(guān)描述:{協(xié)議,本地地址,本地端口}</p><p> 一個(gè)完整的socket連接則用一個(gè)相關(guān)描述:{協(xié)議,本地地址,本地端口,遠(yuǎn)地地址,遠(yuǎn)地端口}</p><p> 每一個(gè)socket有一個(gè)本地唯一的socket號(hào),由操作系統(tǒng)分配。</p&
55、gt;<p> 最重要的是,socket是面向客戶——服務(wù)器模型而設(shè)計(jì)出來的,針對客戶和服務(wù)器程序提供不同的socket系統(tǒng)調(diào)用??蛻綦S機(jī)申請一個(gè)socket(相當(dāng)于一個(gè)想打電話的人可以在任何一臺(tái)入網(wǎng)電話上撥號(hào)呼叫),系統(tǒng)為之分配一個(gè)socket號(hào);服務(wù)器擁有全局公認(rèn)的socket(在LINUX中,/etc/services用于存儲(chǔ)全局公認(rèn)的socket號(hào)),任何客戶都可以向它發(fā)出連接請求和信息請求。</p>
56、<p> 下面我們一一給出重要的socket系統(tǒng)調(diào)用。</p><p> 函數(shù)socket()可以創(chuàng)建一個(gè)socket對象,socket()函數(shù)的原型如下:</p><p> SOCKET socket(int af, int type, int protocol);</p><p> 創(chuàng)建一個(gè)socket實(shí)際上是向系統(tǒng)申請一個(gè)屬于自己的soc
57、ket號(hào)。</p><p> af(Address Family)俗稱套接字地址族,如表2.1所示:</p><p> 表2.1 Linux支持的套接字地址族</p><p> 協(xié)議族、socket類型和協(xié)議常用的組合如表2.2所示:</p><p> 表2.2 系統(tǒng)調(diào)用三參數(shù)組合關(guān)系</p><p> 指定
58、本地地址使用函數(shù)bind()一一綁定</p><p> socket()系統(tǒng)調(diào)用創(chuàng)建socket時(shí),只指定了相關(guān)五元組的協(xié)議元,沒有指定其余四元(本地地址、本地端口、遠(yuǎn)地地址、遠(yuǎn)地端口),因此需要?jiǎng)e的系統(tǒng)調(diào)用加以補(bǔ)充。</p><p> bind()將本地socket地址(包括本地主機(jī)地址和本地端口)與所創(chuàng)建的socket號(hào)聯(lián)系起來,即將本地socket地址賦予socket,以指定本地
59、半相關(guān)。其用于Linux性能評估的測試工具的設(shè)計(jì)與實(shí)現(xiàn)調(diào)用格式為: bind(sockid, localaddr, addrlen)</p><p> 總的來說,各種socket地址數(shù)據(jù)結(jié)構(gòu)包括兩大部分:地址類型和協(xié)議地址。網(wǎng)絡(luò)協(xié)議地址又包括主機(jī)地址和端口號(hào)。</p><p> 監(jiān)聽— listen()</p><p> 對于服務(wù)器來說,在它接受客戶機(jī)的連接之
60、前,首先要監(jiān)聽。只有進(jìn)入了監(jiān)聽模式,才能接受來自客戶機(jī)的連接。這一點(diǎn)可以通過listen()函數(shù)來實(shí)現(xiàn),它的原型如下:</p><p> int listen(SOCKET s, int backlog);</p><p><b> 各參數(shù)意義如下:</b></p><p> s:進(jìn)行監(jiān)聽的套接字。</p><p>
61、; Backlog:正在等待連接的最大隊(duì)列的長度。如果backlog的只為3,有4個(gè)客戶機(jī)同時(shí)發(fā)出連接請求,則前3個(gè)會(huì)放在等待連接隊(duì)列中,最后一個(gè)將被忽略。</p><p> 如果函數(shù)成功,則返回0;否則返回SOCKET_ERROR。</p><p> 當(dāng)客戶機(jī)和服務(wù)器的連接建立起來后,用函數(shù)send()和recv()來進(jìn)行數(shù)據(jù)傳輸。</p><p> 第三
62、章 網(wǎng)絡(luò)嗅探器的設(shè)計(jì)</p><p> 3.1 利用套接字開發(fā)網(wǎng)絡(luò)嗅探器的步驟</p><p> 利用套接字開發(fā)網(wǎng)絡(luò)嗅探器程序時(shí)的一般步驟如圖3.1所示:</p><p> 圖3.1 嗅探器工作流程</p><p> 如圖3.1所示,在利用套接字開發(fā)網(wǎng)絡(luò)嗅探器程序時(shí)的一般步驟是:首先,創(chuàng)建原始套接字,并設(shè)置其操作選項(xiàng);其次將原始套
63、接字綁定到本地網(wǎng)卡地址上;設(shè)置網(wǎng)卡為混雜模式,這樣網(wǎng)卡就可以收到任何在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包;在以上條件下開始對數(shù)據(jù)包進(jìn)行捕獲、分析。</p><p> 3.2 嗅探器的具體實(shí)現(xiàn)原理</p><p> 嗅探器作為一種網(wǎng)絡(luò)通訊程序,是通過對網(wǎng)卡的編程來實(shí)現(xiàn)網(wǎng)絡(luò)通訊的,對網(wǎng)卡的編程是使用通常的套接字(socket)方式來進(jìn)行。但是,通常的套接字程序只能響應(yīng)與自己硬件地址相匹配的或是以廣播形式
64、發(fā)出的數(shù)據(jù)幀,對于其他形式的數(shù)據(jù)幀比如已到達(dá)網(wǎng)絡(luò)接口但卻不是發(fā)給此地址的數(shù)據(jù)幀,網(wǎng)絡(luò)接口在驗(yàn)證投遞地址并非自身地址之后將不引起響應(yīng),也就是說應(yīng)用程序無法收取到達(dá)的數(shù)據(jù)包。而本設(shè)計(jì)的要求通過網(wǎng)絡(luò)嗅探器從網(wǎng)卡接收所有經(jīng)過它的數(shù)據(jù)包,因此,在該系統(tǒng)中將網(wǎng)卡以混雜模式替代通常的正常模式。 </p><p> 具體到編程實(shí)現(xiàn)上,這種對網(wǎng)卡混雜模式的設(shè)置是通過原始套接字(raw socket)來實(shí)現(xiàn)的,這也有別于通常經(jīng)常使
65、用的數(shù)據(jù)流套接字和數(shù)據(jù)報(bào)套接字。在創(chuàng)建了原始套接字后,需要通過setsockopt()函數(shù)來設(shè)置IP頭操作選項(xiàng),然后再通過bind()函數(shù)將原始套接字綁定到本地網(wǎng)卡。為了讓原始套接字能接受所有的數(shù)據(jù),還需要通過WSAIoctl ()來進(jìn)行設(shè)置。至此,實(shí)際就可以開始對網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)行嗅探了,對數(shù)據(jù)包的獲取仍象流式套接字或數(shù)據(jù)報(bào)套接字那樣通過recv()函數(shù)來完成。但是與其他兩種套接字不同的是,原始套接字此時(shí)捕獲到的數(shù)據(jù)包并不僅僅是單純的數(shù)據(jù)
66、信息,而是包含有 IP頭、 TCP頭等信息頭的最原始的數(shù)據(jù)信息,這些信息保留了它在網(wǎng)絡(luò)傳輸時(shí)的原貌。通過對這些在低層傳輸?shù)脑夹畔⒌姆治隹梢缘玫接嘘P(guān)網(wǎng)絡(luò)的一些信息。由于這些數(shù)據(jù)經(jīng)過了網(wǎng)絡(luò)層和傳輸層的打包,因此需要根據(jù)其附加的幀頭對數(shù)據(jù)包進(jìn)行分析。下面先給出結(jié)構(gòu),數(shù)據(jù)包的總體結(jié)構(gòu)如表3.1所示:</p><p> 表3.1 數(shù)據(jù)包總體結(jié)構(gòu)</p><p> 數(shù)據(jù)在從應(yīng)用層到達(dá)傳輸層時(shí),將
67、添加TCP數(shù)據(jù)段頭,或是UDP數(shù)據(jù)段頭。其中UDP數(shù)據(jù)段頭比較簡單,由一個(gè)8字節(jié)的頭和數(shù)據(jù)部分組成,具體格式如表4.2所示: </p><p> 表3.2 UDP 數(shù)據(jù)段頭格式</p><p> 對于此UDP數(shù)據(jù)段頭的分析在編程實(shí)現(xiàn)中可通過數(shù)據(jù)結(jié)構(gòu)UDPPacketHead來定義:</p><p> struct UDPPacketHead {</p
68、><p> WORD SourPort; //源端口</p><p> WORD DestPort; //目的端口</p><p> WORD Len; //長度</p><p> WORD ChkSum; //校驗(yàn)和</p><p><b
69、> };</b></p><p> 而TCP數(shù)據(jù)頭則比較復(fù)雜,以20個(gè)固定字節(jié)開始,在固定頭后面還可以有一些長度不固定的可選項(xiàng),表3.3給出TCP數(shù)據(jù)段頭的格式組成: </p><p> 表3.3 TCP數(shù)據(jù)段頭格式</p><p> 對于此TCP數(shù)據(jù)段頭的分析在編程實(shí)現(xiàn)中可通過數(shù)據(jù)結(jié)構(gòu)TCPPacketHead來定義: </p&g
70、t;<p> Typedef struct_TCP</p><p> { WORD SrcPort; //源端口</p><p> WORD DstPort; //目的端口</p><p> DWORD SeqNum; //序列號(hào)</p><p> DWORD AckNum;
71、 //位確認(rèn)號(hào)</p><p> BYTE DataOff; //TCP 頭長</p><p> BYTE Flags; //標(biāo)志(URG、ACK等)</p><p> WORD Window; //窗口大小</p><p> WORD CHKSUM; //
72、 校驗(yàn)口</p><p> WORD Urgptr; //緊急指針</p><p><b> }TCP;</b></p><p> typedef TCP *LPTCP;</p><p> typedef TCP UNALIGNED *ULPTCP;</p><p> 在
73、網(wǎng)絡(luò)層,還要給TCP數(shù)據(jù)包添加一個(gè)IP數(shù)據(jù)段頭以組成IP數(shù)據(jù)報(bào)。IP數(shù)據(jù)段頭格式如表3.4所示:</p><p> 表3.4 IP數(shù)據(jù)段頭格式</p><p> 同樣,在實(shí)際編程中也需要通過一個(gè)數(shù)據(jù)結(jié)構(gòu)來表示此IP數(shù)據(jù)段頭,下面給出此數(shù)據(jù)結(jié)構(gòu)的定義: </p><p> typedef struct _IP{</p><p> uni
74、on{BYTE Version; //版本</p><p> BYTE HdrLen; //IHL</p><p><b> };</b></p><p> BYTE ServiceType; //服務(wù)類型</p><p> WORD TotalLen; //總長<
75、;/p><p> WORD ID; //標(biāo)識(shí)</p><p> Union{ WORD Flags; //標(biāo)志 </p><p> WORD FragOff; //分段偏移</p><p><b> };</b></p><p> BYTE Ti
76、meToLive; //生命期</p><p> BYTE Protocol; //協(xié)議</p><p> WORD HdrChksum; //頭校驗(yàn)和</p><p> DWORD SrcAddr; //源地址</p><
77、;p> DWORD DstAddr; //目的地址</p><p> BYTE Options; //選項(xiàng)</p><p><b> }IP;</b></p><p> Typedef IP * LPIP;</p><p> Typedef
78、 IP UNALIGNED * ULPIP; </p><p> 在明確了以上幾個(gè)數(shù)據(jù)段頭的組成結(jié)構(gòu)后,就可以對捕獲到的數(shù)據(jù)包進(jìn)行分析了。</p><p> 3.3 數(shù)據(jù)包捕獲模塊設(shè)計(jì)</p><p> 根據(jù)前面的設(shè)計(jì)思路,本文在windows平臺(tái)下實(shí)現(xiàn)了一個(gè)嗅探器程序,開發(fā)工具使用visual C++。下面就給出本設(shè)計(jì)的部分程序代碼,該設(shè)計(jì)可以捕獲到所有經(jīng)
79、過本地網(wǎng)卡的數(shù)據(jù)包,并可從中分析出協(xié)議、IP源地址、IP目標(biāo)地址、TCP源端口號(hào)、TCP目標(biāo)端口號(hào)等信息。代碼如下:</p><p> //檢查 Winsock 版本號(hào),WSAData為WSADATA結(jié)構(gòu)對象</p><p> WSAStartup(MAKEWORD(2,2),&WSAData);</p><p><b> //創(chuàng)建原始套接字
80、</b></p><p> Sock = socker(AF_INET,SOCK_RAW,IPPROTO_RAW));</p><p> //設(shè)置IP頭操作選項(xiàng),其中flag設(shè)置為ture,親自對IP頭進(jìn)行處理</p><p> Setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeo
81、f(flag));</p><p><b> //獲取本機(jī)名</b></p><p> Gethostname((char * ) LocalName,sizeof(LocalName) - 1);</p><p> //獲取本地IP地址 </p><p> pHost = gethostbyname((cha
82、r *)LocalName);</p><p> //填充SOCKADDR_IN結(jié)構(gòu)</p><p> addr_in.sina_addr = * (in_addr *) pHost ->h_addr_list[0];</p><p><b> //IP </b></p><p> addr_in.sin_
83、family = AF_INET;</p><p> addr_in.sin_port = htons(57274);</p><p> //把原始套接字 sock 綁定到本地網(wǎng)卡地址上 </p><p> bind(sock,(PSOCKADDR)&addr_in,sizeof(addr_in));</p><p> //
84、dwValue 為輸入輸出參數(shù),為1時(shí)執(zhí)行,0時(shí)取消</p><p> DWORD dwValue = 1;</p><p> //設(shè)置SOCK_RAW為SIO_RCVALL,以便接受所有的IP包,其中SIO_RCVALL</p><p> //的定義為:#define SIO_RCVALL_WSAIOW(IOC_VENDOR,1)</p>&
85、lt;p> ioctlsocket(sock,SIO_RCVALL,&dwValue);</p><p> 3.4 數(shù)據(jù)包分析模塊設(shè)計(jì)</p><p> 前面的工作基本上都是對原始套接字進(jìn)行設(shè)置,在將原始套接字設(shè)置完畢,使其能按預(yù)期目的工作時(shí),就可以通過rece()函數(shù)從網(wǎng)卡接收數(shù)據(jù)了,接受到的原始數(shù)據(jù)包存放在緩存RecvBuf[]中,緩沖區(qū)長度BUFFER_SIZE
86、定義為65535.然后就可以根據(jù)前面對IP數(shù)據(jù)段頭的結(jié)構(gòu)描述而對捕獲的數(shù)據(jù)包進(jìn)行分析:</p><p> While (true)</p><p><b> {</b></p><p> //接受原始數(shù)據(jù)包信息</p><p> Int ret = recv(sock,RecvBuf,BUFFER_SIZE,0)
87、;</p><p> If (ret>0)</p><p><b> {</b></p><p> //數(shù)據(jù)包進(jìn)行分析,并輸出分析結(jié)果</p><p> ip = *(IP*) RecvBuf;</p><p> tcp = *(TCP*)(RecvBuf + ip.HdrLen)
88、;</p><p> TRACE(“協(xié)議:%s\r\n”,GetProtocolTxt(ip.Protocol));</p><p> TRACE(“IP源地址:%s\r\s\n”,inet_ntoa(*(in_addr*)&ip.SrcAddr));</p><p> TRACE(“IP目標(biāo)地址:%s\r\n”,inet_ntoa(*(in_addr
89、*)&ip.DstAddr));</p><p> TRACE(“TCP源端口號(hào): %d\r\n”,tcp.SrcPort);</p><p> TRACE(“TCP目標(biāo)端口號(hào):%d\r\n”,tcp.DstPort);</p><p> TRACE(“數(shù)據(jù)包長度:%d\r\n\r\n\r\n”,ntohs(ip.TotalLen));</p&g
90、t;<p><b> }</b></p><p><b> }</b></p><p> 其中,在進(jìn)行協(xié)議分析時(shí),使用了GetProtocolTxt()函數(shù),該函數(shù)負(fù)責(zé)將IP包中的協(xié)議(數(shù)字標(biāo)識(shí)的)轉(zhuǎn)化為文字輸出,該函數(shù)實(shí)現(xiàn)如下:</p><p> #define PROTOCOL_STRING_IC
91、MP_TXT “ ICMP”</p><p> #define PROTOCOL_STRING_TCP_TXT “ TCP”</p><p> #define PROTOCOL_STRING_UDP_TXT “ UDP”</p><p> #define PROTOCOL_STRING_SPX_TXT “ SPX”</p><
92、;p> #define PROTOCOL_STRING_NCP_TXT “ NCP”</p><p> #define PROTOCOL_STRING_UNKNOW_TXT “ UNKNOW”</p><p><b> ……</b></p><p> CString CSnifferDlg::GetProtocolTxt(
93、int Protocol)</p><p><b> {</b></p><p> Switch(Protocol){</p><p> case IPPROTO_ICMP://1/*ontrol message protocol */</p><p> return PROTOCL_STRING_ICMP_TX
94、T;</p><p> case IPPROTO_TCP: //6 / * tcp */</p><p> return PROTOCOL_STRING_TCP_TXT;</p><p> case IPPROTO_UDP://17/* user datagram protocol */</p><p> return PROTO
95、COL_STRING_UDP_TXT;</p><p><b> default;</b></p><p> return PROTOCOL_STRING_UNKNOW_TXT;</p><p><b> }</b></p><p> 最后,為了使程序能成功編譯,需要包含頭文件winsock
96、2.h和ws2tcpip.h。</p><p> 3.5 數(shù)據(jù)包的顯示</p><p> 在完成了數(shù)據(jù)包的捕獲、分析后,我們使用AddData函數(shù),調(diào)用列表控件變量使分析結(jié)果實(shí)現(xiàn)在界面的列表中,結(jié)果輸出代碼如下:</p><p> Void CIpmonDlg::AddData(CString S0,CString s1,CString S2,CSting
97、s3,CSting s4,CSting s5,CSting s5,CSting s6)</p><p><b> {</b></p><p> int index;</p><p> index = m_ctrList.InsertItem(0,s0);</p><p> m_ctrList.SetItem(in
98、dex,2,1LVIF_TEXT,s1,0,0,0,0);</p><p> m_ctrList.SetItem(index,3,1LVIF_TEXT,s1,0,0,0,0);</p><p> m_ctrList.SetItem(index,4,1LVIF_TEXT,s1,0,0,0,0);</p><p> m_ctrList.SetItem(index,
99、5,1LVIF_TEXT,s1,0,0,0,0);</p><p> m_ctrList.SetItem(index,6,1LVIF_TEXT,s1,0,0,0,0);</p><p><b> }</b></p><p> m_ctrList是與列表控件關(guān)聯(lián)的一個(gè)變量,列表控件用于顯示對數(shù)據(jù)包的分析結(jié)果。</p><
100、p> 網(wǎng)絡(luò)嗅探器的測試與實(shí)現(xiàn)</p><p> 網(wǎng)絡(luò)嗅探器程序設(shè)計(jì)完成后,在Windows平臺(tái)下進(jìn)行運(yùn)行調(diào)試,修改錯(cuò)誤使其能完成捕獲數(shù)據(jù)包和分析數(shù)據(jù)包的功能,并將解析結(jié)果在MFC界面顯示出來。網(wǎng)絡(luò)嗅探器能完成預(yù)期的要求,進(jìn)行數(shù)據(jù)包截獲、分析,顯示出分析結(jié)果。</p><p> 從設(shè)置中選擇網(wǎng)卡配置,會(huì)打開如圖所示的對話框,雙擊樹形對話框中所列出的認(rèn)一個(gè)活動(dòng)網(wǎng)卡,然后點(diǎn)擊確定,就
101、可以完成對網(wǎng)卡的綁定,如圖4.1。</p><p><b> 圖4.1 網(wǎng)卡綁定</b></p><p> 在已顯示的網(wǎng)卡列表中,第一個(gè)是本機(jī)上的虛擬網(wǎng)卡,第二個(gè)是本機(jī)物理網(wǎng)卡,點(diǎn)開樹形的結(jié)構(gòu)顯示該物理網(wǎng)卡的詳細(xì)信息。</p><p> 2.網(wǎng)卡綁定成功后,可以設(shè)置過濾規(guī)則,如果規(guī)則為空時(shí)抓取所有的數(shù)據(jù)包,若自定義規(guī)則,則在輸入框中編輯當(dāng)
102、前的捕獲規(guī)則,然后點(diǎn)選測試語句,若沒有錯(cuò)誤可以點(diǎn)擊“應(yīng)用生效”使規(guī)則生效,程序便可以在以后的抓包過程中自動(dòng)采用所設(shè)置的規(guī)則,如有語句不合語法,程序會(huì)知識(shí)當(dāng)前語句發(fā)生錯(cuò)誤,要修改再進(jìn)行測試。下圖為沒有設(shè)置規(guī)則時(shí)候捕獲的數(shù)據(jù),如圖4.2。</p><p> 圖4.2網(wǎng)絡(luò)嗅探器捕獲數(shù)據(jù)結(jié)果</p><p> 統(tǒng)計(jì)量是程序?qū)Ξ?dāng)前網(wǎng)絡(luò)數(shù)據(jù)包協(xié)議類型進(jìn)行的簡單的計(jì)數(shù),通過查看界面上如圖所示位置便可
103、以清楚的看到數(shù)據(jù)包的分類情況。</p><p><b> 結(jié) 論</b></p><p> 本次畢業(yè)論文主要研究的內(nèi)容是利用套接字開發(fā)網(wǎng)絡(luò)嗅探器的程序設(shè)計(jì),設(shè)計(jì)要求完成對經(jīng)過本地網(wǎng)卡的所有數(shù)據(jù)包進(jìn)行捕獲,分析協(xié)議類型,并根據(jù)不同的協(xié)議類型對數(shù)據(jù)包進(jìn)一步分析,包括數(shù)據(jù)包源IP地址,目的IP地址、TCP源端口號(hào)、TCP目標(biāo)端口號(hào)以及數(shù)據(jù)包長度等信息,經(jīng)過就幾個(gè)月努力
104、,初步可以實(shí)現(xiàn)基本功能。由于所學(xué)知識(shí)有限,此次設(shè)計(jì)也只是對數(shù)據(jù)進(jìn)行了簡單的分析,分析內(nèi)容不全面,讓我感覺到自身的不足,還有很多需要的學(xué)習(xí)的地方,對于網(wǎng)絡(luò)技術(shù)的學(xué)習(xí)還任重而道遠(yuǎn)。</p><p> 不過,通過這次畢業(yè)論文的撰寫,也不僅僅是對網(wǎng)絡(luò)嗅探器有了進(jìn)一步的了解,更多的是我領(lǐng)悟到了治學(xué)需要嚴(yán)謹(jǐn)?shù)膽B(tài)度,不能有半點(diǎn)馬虎,比如程序就算一個(gè)標(biāo)點(diǎn)符號(hào)錯(cuò)誤,都會(huì)影響整個(gè)程序的運(yùn)行。整個(gè)論文過程中,每遇到的一個(gè)問題,都會(huì)有
105、大量的工作去尋求解決的辦法,每次問題得到解決時(shí),我都會(huì)興奮不已。所以畢業(yè)設(shè)計(jì)不僅是一個(gè)檢驗(yàn)知識(shí)靈活運(yùn)用的過程,更是一個(gè)學(xué)習(xí)的過程,從中學(xué)到的更是會(huì)受益無窮。</p><p><b> 參考文獻(xiàn)</b></p><p> [1]小彭.網(wǎng)絡(luò)竊聽器—嗅探器[J].電腦愛好者.2002年,24期</p><p> [2]戴英俠,許劍卓等.計(jì)算機(jī)網(wǎng)
106、絡(luò)安全[M].北京:清華大學(xué)出版社.2005.1 </p><p> [3]哈頓.穆格(譯). 網(wǎng)絡(luò)安全手冊(黑客札記) [M],2004 </p><p> [4]石志國,薛為民,尹浩. 計(jì)算機(jī)網(wǎng)絡(luò)安全教程[M]. 清華大學(xué)出版社. 2007.02.</p><p> [5]劉文濤.絡(luò)安全開發(fā)包詳解[M].北京:電子工業(yè)出版社.2005.10</p&
107、gt;<p> [6]謝希仁. 計(jì)算機(jī)網(wǎng)絡(luò)教程[M].北京: 人民大學(xué)出版社.2002.</p><p> [7]胡道元. 網(wǎng)絡(luò)設(shè)計(jì)師[M].北京:清華大學(xué)出版社,2001.5</p><p> [8]小高知宏著,葉明譯.TCP\IP數(shù)據(jù)包分析程序篇[M].北京:科學(xué)出版社.2003</p><p> [9]井口信和著,吳松芝等譯 .TCP\I
108、P網(wǎng)絡(luò)工具篇[M].北京:科學(xué)出版社.2003</p><p> [10]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)(第四版)[M].北京:電子工業(yè)出版社.2003.6</p><p> [11]武新華.翟長霖. 黑客攻防秘技大曝光 [M].清華大學(xué)出版社,2006.11</p><p> [12]蔡勇,錢兆豐,何正宏等.防毒反黑,就這么幾招[M].北京:中國電力出版社.2005&l
109、t;/p><p> [13] R. Agrawal and R. Srikant. Fast algorithms for mining association rules in large databases[M]. In Research Report RJ 9839, Almaden. San Jose, CA, June 1994</p><p> [14] Bernadett
110、e Schell. Webster's New World Hacker Dictionary[J].2006.12.</p><p> [15] W.Richard Stevens. TCP/IP Illustracted Volum 1:The Protocols[M]. Addison Wesley/Pearson. 1999.11</p><p><b>
111、 致 謝</b></p><p> 時(shí)間飛逝,轉(zhuǎn)眼間大學(xué)生活即將結(jié)束,經(jīng)過過半年的學(xué)習(xí)與研究,本次畢業(yè)論文(設(shè)計(jì))也接近尾聲了。作為一個(gè)本科生,由于經(jīng)驗(yàn)?zāi)芰Ω鞣矫娲嬖诓蛔?,所以難免出現(xiàn)各種各樣的問題。通過查閱相關(guān)的資料和導(dǎo)師的悉心指導(dǎo)、同學(xué)之間的交流,在參考了網(wǎng)上的一些編程信息后最終能夠基本實(shí)現(xiàn)該設(shè)計(jì)的基本功能。</p><p> 在此我要感謝我的指導(dǎo)老師xx,她治學(xué)嚴(yán)
112、謹(jǐn),兢兢業(yè)業(yè)的工作態(tài)度影響了我,從選題、開題報(bào)告、論文中期檢查、系統(tǒng)驗(yàn)收,她都一直在積極的督導(dǎo)我們,貫穿整個(gè)畢業(yè)設(shè)計(jì),使得我們能夠順利的完成本次畢業(yè)論文。在論文的撰寫,程序的測試中,也得到了身邊很多的朋友同學(xué)的幫助,在我程序出錯(cuò)感到心煩時(shí)給我安慰,在我資源有限時(shí)幫我找資料,我也想他們表示誠摯的感謝。當(dāng)然,我最要感謝的,還有父母,在二十多年的生活中給予我無微不至的照顧,是他們給了我這個(gè)機(jī)會(huì)在大學(xué)學(xué)習(xí),讓我有了更多的力量去社會(huì)上拼搏。<
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- ip網(wǎng)絡(luò)數(shù)據(jù)嗅探器設(shè)計(jì)
- 復(fù)雜環(huán)境下網(wǎng)絡(luò)嗅探技術(shù)的應(yīng)用與防范措施畢業(yè)論文
- 網(wǎng)絡(luò)編程課程設(shè)計(jì)-網(wǎng)路嗅探器
- 嗅探器和網(wǎng)絡(luò)監(jiān)聽器外文翻譯
- 基于c#的網(wǎng)絡(luò)嗅探器設(shè)計(jì)與實(shí)現(xiàn)【畢業(yè)設(shè)計(jì)】
- 畢業(yè)設(shè)計(jì)---嗅探器的設(shè)計(jì)與實(shí)現(xiàn)
- 網(wǎng)絡(luò)嗅探器的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)
- 網(wǎng)絡(luò)課程設(shè)計(jì)---使用vc++編程實(shí)現(xiàn)網(wǎng)絡(luò)嗅探器
- 課程設(shè)計(jì):網(wǎng)絡(luò)嗅探器設(shè)計(jì) sniffer vc++平臺(tái)
- 基于LINUX的網(wǎng)絡(luò)嗅探器的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 上機(jī)1:基于winpcap的網(wǎng)絡(luò)嗅探器設(shè)計(jì)與實(shí)現(xiàn)
- 信息安全課程設(shè)計(jì)---網(wǎng)絡(luò)嗅探器的設(shè)計(jì)與實(shí)現(xiàn)
- 基于c#的網(wǎng)絡(luò)嗅探器設(shè)計(jì)與實(shí)現(xiàn)【開題報(bào)告】
- 基于c#的網(wǎng)絡(luò)嗅探器設(shè)計(jì)與實(shí)現(xiàn)【文獻(xiàn)綜述】
- 基于橋接技術(shù)的網(wǎng)絡(luò)嗅探器設(shè)計(jì)與實(shí)現(xiàn).pdf
- 網(wǎng)絡(luò)信息安全概況課程基于c#的網(wǎng)絡(luò)嗅探器的和實(shí)現(xiàn)
- 基于c#的網(wǎng)絡(luò)嗅探器設(shè)計(jì)與實(shí)現(xiàn)【畢業(yè)設(shè)計(jì)+開題報(bào)告+文獻(xiàn)綜述】
- 網(wǎng)絡(luò)消費(fèi)價(jià)格心理及營銷策略淺探畢業(yè)論文
- 網(wǎng)絡(luò)消費(fèi)價(jià)格心理及營銷策略淺探畢業(yè)論文
- 網(wǎng)絡(luò)消費(fèi)價(jià)格心理及營銷策略淺探畢業(yè)論文
評論
0/150
提交評論