信息安全課程設(shè)計_第1頁
信息安全課程設(shè)計_第2頁
信息安全課程設(shè)計_第3頁
信息安全課程設(shè)計_第4頁
信息安全課程設(shè)計_第5頁
已閱讀5頁,還剩21頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 信息安全課程設(shè)計(論文)說明書題 目: 網(wǎng)絡(luò)嗅探器的設(shè)計與實現(xiàn) 學(xué) 院: 專 業(yè): 姓 名: 學(xué) 號: 指導(dǎo)教師: 2011年 月 日摘 要隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,以及越來越多的信息資源放在了網(wǎng)上,網(wǎng)絡(luò)安全問題越來越被人們所重視,其安全性和可靠性也越發(fā)重要。嗅探技術(shù)作為網(wǎng)絡(luò)安全攻防中最基礎(chǔ)的技術(shù),它既可以用于獲取網(wǎng)絡(luò)中傳輸?shù)拇罅康拿舾行畔?,又可以用來進行網(wǎng)絡(luò)管理。但同時它又有另一方面的影響,即攻擊者可以利用它來監(jiān)聽網(wǎng)絡(luò)中的數(shù)據(jù),達到非法獲得信息的目的。因此對網(wǎng)絡(luò)嗅探器的研究具有重要意義,分析其通過獲取網(wǎng)絡(luò)包得流向和內(nèi)容等信息,從而進行網(wǎng)絡(luò)安全分析和網(wǎng)絡(luò)威脅應(yīng)對。本課程設(shè)計是關(guān)于網(wǎng)絡(luò)嗅探器的簡

2、單設(shè)計與實現(xiàn),同時對網(wǎng)絡(luò)嗅探技術(shù)進行了簡要分析,研究了網(wǎng)絡(luò)數(shù)據(jù)包的捕獲機制,以VS2010為開發(fā)平臺,使用Windows環(huán)境下的網(wǎng)絡(luò)數(shù)據(jù)包捕獲開發(fā)庫WinPcap認真學(xué)習(xí)和掌握網(wǎng)絡(luò)嗅探器工作原理,設(shè)計出一個嗅探器程序,使其實現(xiàn)網(wǎng)絡(luò)層抓包,并對獲得包的源和目的地址、端口、協(xié)議等進行分析及顯示,實現(xiàn)簡單的包嗅探器功能。 關(guān)鍵字:網(wǎng)絡(luò)嗅探 數(shù)據(jù)包捕獲 數(shù)據(jù)包分析 網(wǎng)絡(luò)協(xié)議 WinPcap VS2010目 錄1、引言.11.1 開發(fā)背景11.2 開發(fā)意義11.3 正文安排12、系統(tǒng)分析.22.1 需求分析2 功能需求.2 適用范圍.2 基本思路.2 使用環(huán)境.2 可行性分析.22.2 技術(shù)分析2 嗅探

3、原理.2 捕獲機制.3 WinPcap 技術(shù).33、程序設(shè)計與實現(xiàn).43.1 主要流程43.2 總體規(guī)劃43.3 函數(shù)說明43.4 分塊設(shè)計6 獲得網(wǎng)卡列表信息.6 數(shù)據(jù)包捕獲.7 數(shù)據(jù)包過濾.7 數(shù)據(jù)包分析.84、問題分析及測試.94.1 問題分析94.2 測試105、結(jié)論.115.1 設(shè)計心得115.1 謝辭11參考文獻.12附錄(源程序).131、引 言1.1 開發(fā)背景隨著網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,加速了全球信息化進程,各種重要數(shù)據(jù)在網(wǎng)上的傳播日益普遍,使得網(wǎng)絡(luò)安全問題越來越為人們所關(guān)注。網(wǎng)絡(luò)嗅探器作為一種網(wǎng)絡(luò)數(shù)據(jù)監(jiān)聽程序,在網(wǎng)絡(luò)安全攻防方面扮演了很重要的角色,多數(shù)黑客入侵成功并植入后門后的第

4、一件事就是選擇一個合適當前網(wǎng)絡(luò)的嗅探器,以獲得更多的受侵者的信息。嗅探器是一種常用的收集有用數(shù)據(jù)的方法,可以作為網(wǎng)絡(luò)數(shù)據(jù)包的設(shè)備,如果把網(wǎng)絡(luò)嗅探器放置于網(wǎng)絡(luò)節(jié)點處,對網(wǎng)絡(luò)中的數(shù)據(jù)幀進行捕獲的一種被動監(jiān)聽手段,是一種常用的收集有用數(shù)據(jù)的方法,可以分析各種信息包并描述出網(wǎng)絡(luò)的結(jié)構(gòu)和使用的機器,由于它接收任何一個在同一網(wǎng)段上傳輸?shù)臄?shù)據(jù)包,所以也就存在著捕獲密碼、各種信息、秘密文檔等一些沒有加密的信息的可能性。1.2 開發(fā)意義本次課程設(shè)計是基于VS的網(wǎng)絡(luò)嗅探器的設(shè)計與實現(xiàn),由于本人編程能力有限,只是對抓取到的本機在網(wǎng)絡(luò)中的通信數(shù)據(jù),比如說協(xié)議類型,源、目的地址和端口、數(shù)據(jù)包的大小等加以分析,而無法做到

5、像Sniffer那種成熟的嗅探器所擁有的強大功能。作為網(wǎng)絡(luò)技術(shù)人員來說,要想有效地利用它、防范它,就得深入地學(xué)習(xí)、分析網(wǎng)絡(luò)嗅探技術(shù)。最為重要的是,對于網(wǎng)絡(luò)嗅探器的設(shè)計與實現(xiàn),使我對網(wǎng)絡(luò)通信,數(shù)據(jù)傳輸和網(wǎng)絡(luò)信息安全等有了切身的體會與融入,同時也是對大學(xué)三年來內(nèi)容的學(xué)以致用,不斷提高自我的一種有效途徑。1.3 正文安排 作為論文的主要部分,本文正文的安排如下: 第一部分是系統(tǒng)分析,包括程序需求分析和技術(shù)分析。討論用戶需求,功能需求,性能需求,運行環(huán)境等因素,對嗅探工具開發(fā)的思想和過程作初步的分析和論證。并介紹出現(xiàn)網(wǎng)絡(luò)嗅探器工具的原理和方法,以及本次設(shè)計中用到的Winpcap技術(shù); 第二部分是功能設(shè)

6、計,包括系統(tǒng)的設(shè)計與實現(xiàn)。詳細介紹使用Winpcap開發(fā)程序的一般流程及相關(guān)功能函數(shù),以及數(shù)據(jù)包捕獲,分析,過濾等各個模塊的具體實現(xiàn)。 第三部分是問題分析及解決,同時介紹測試環(huán)境及過程,作為課程設(shè)計的最后一部分,將嚴格地對網(wǎng)絡(luò)嗅探器進行測試。第四部分總結(jié)這次課程設(shè)計的心得、謝辭以及列出參考文獻。2、 系統(tǒng)分析2.1 需求分析l 2.1.1 功能需求本程序主要實現(xiàn)了對流經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)包進行捕獲及分析,通過對網(wǎng)卡的選擇,設(shè)置過濾規(guī)則,來制定對特定的協(xié)議進行解析,主要運用到套接字編程,WinPcap編程等技術(shù),在程序上每一步都有詳細的解釋,很容易了解本嗅探程序的功能。 l 2.1.2 適用范圍這個程序

7、是面向用戶的,簡單易行,是對網(wǎng)絡(luò)協(xié)議進行分析,只要電腦上有流經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)包,通過本程序的執(zhí)行,均可捕獲該數(shù)據(jù)報,并對其內(nèi)容進行分析,操作步驟簡單,每一過程均有明顯的提示信息。l 2.1.3基本思路該嗅探程序的總體架構(gòu)劃分為5部分,分別是監(jiān)聽網(wǎng)絡(luò)適配器,選擇網(wǎng)卡設(shè)備,設(shè)置過濾規(guī)則,捕獲數(shù)據(jù)包,數(shù)據(jù)的分析及顯示。良好的實現(xiàn)了嗅探器的一般功能。l 2.1.4使用環(huán)境 (1)、一臺主機 (2)、操作系統(tǒng)(Windows XP)(3)、開發(fā)工具(VS2010,WinPcap)l 2.1.5可行性分析在日異月新的網(wǎng)絡(luò)時代中,網(wǎng)絡(luò)信息與安全一是其中重要的一環(huán),網(wǎng)絡(luò)嗅探更是網(wǎng)絡(luò)攻防重基礎(chǔ)的技術(shù),用來監(jiān)聽網(wǎng)絡(luò)數(shù)

8、據(jù),保障信息安全,這項技術(shù)有著廣大的發(fā)展空間,其類的嗅探工具更是層出不窮,有著良好的發(fā)展前景及經(jīng)濟利益,而且操作運行時所需人員不是很多,這種工具的開發(fā)節(jié)省了大量的人力及物力,在廣大市場中是被需求的,并且無論是生活中還是企業(yè)里都得到了廣泛的應(yīng)用,它所帶來的經(jīng)濟效益是無可厚非的。2.2 技術(shù)分析l 2.2.1嗅探原理 嗅探器是一種常用的收集有用數(shù)據(jù)的方法,嗅探器是利用計算機的網(wǎng)絡(luò)接口截獲目的地為其它計算機的數(shù)據(jù)報文的一種工具。由于組網(wǎng)方式不同,嗅探器的工作原理也有所不同,總共可以分為三類:(1) 基于網(wǎng)卡混雜模式的嗅探原理;(2) 基于ARP欺騙的網(wǎng)絡(luò)嗅探原理;(3) 基于中間人攻擊的嗅探原理。本

9、次課程設(shè)計就是利用第一種方式來實現(xiàn)嗅探器的功能,從網(wǎng)卡原理上來說,在一個實際的系統(tǒng)中,網(wǎng)卡的主要功能就是接收和發(fā)送網(wǎng)絡(luò)數(shù)據(jù)包,它根據(jù)網(wǎng)卡內(nèi)的單片程序接收數(shù)據(jù)幀的目的MAC地址,根據(jù)計算機上的網(wǎng)卡驅(qū)動程序設(shè)置的接收模式判斷該不該接收,認為該接收就接收后產(chǎn)生中斷信號通知CPU,認為不該接收就丟掉不管,所以不該接收的數(shù)據(jù)網(wǎng)卡就截斷了,計算機根本就不知道。而本次設(shè)計嗅探工具正是利用了這個特點,把網(wǎng)卡設(shè)置為“混雜模式”。網(wǎng)卡的混雜模式可以接受所有的網(wǎng)絡(luò)數(shù)據(jù)包,無論其目的地址是否等于自己的地址,都一并接受。l 2.2.2捕獲機制很多網(wǎng)絡(luò)安全系統(tǒng)最首要的任務(wù)就是捕獲網(wǎng)絡(luò)上的數(shù)據(jù)信息,而網(wǎng)絡(luò)數(shù)據(jù)包捕獲技術(shù)就解

10、決了這個問題。不同的網(wǎng)絡(luò)有不同的捕獲技術(shù),不同的操作系統(tǒng)其捕獲機理也有所不同。以太網(wǎng)采用了CSMA/CD技術(shù),它使用了廣播機制,所有與網(wǎng)絡(luò)連接的機器都可以看到網(wǎng)絡(luò)上傳播的數(shù)據(jù),操作系統(tǒng)提供的捕獲機制主要有以下三種:(1) SOCK_PACKET類型套接口;(2) 數(shù)據(jù)鏈路提供者接口(Data Link Provider Interface,DLPI);(3) 伯克利數(shù)據(jù)包過濾器(Berkeley Packet Filter,BPF)。BPF主要由兩部分組成:網(wǎng)絡(luò)轉(zhuǎn)發(fā)部分和數(shù)據(jù)包過濾部分。網(wǎng)絡(luò)轉(zhuǎn)發(fā)部分是從鏈路層中捕獲數(shù)據(jù)包并把它們轉(zhuǎn)發(fā)給數(shù)據(jù)包過濾部分,數(shù)據(jù)包過濾部分是從接收到的數(shù)據(jù)包中接受過濾規(guī)

11、則決定的網(wǎng)絡(luò)數(shù)據(jù)包,其他數(shù)據(jù)包就拋棄。捕獲數(shù)據(jù)包和過濾數(shù)據(jù)包都是在操作系統(tǒng)內(nèi)核中完成的,而且使用了數(shù)據(jù)緩存機制。從效率上來講,BPF在三種機制中是性能最高的,而SOCK_PACKET是最弱的。在實際應(yīng)用中,實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包捕獲技術(shù)的代表是Libpcap。它是一個專業(yè)的跨平臺的網(wǎng)絡(luò)數(shù)據(jù)包捕獲開發(fā)包。使用Libpcap可以很輕松地實現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)包的捕獲功能,它的捕獲機制就是BPF捕獲機制。在Windows平臺下有與Libpcap兼容的WinPcap開發(fā)包,它是專門針對Windows平臺而開發(fā)的,本次程序的開發(fā)就是利用WinPcap庫函數(shù)實現(xiàn)的。l 2.2.3 WinPcap 技術(shù)WinPcap(Win

12、dows Packet Capture)是Windows平臺下的一個免費、公平的專業(yè)網(wǎng)絡(luò)數(shù)據(jù)包捕獲開發(fā)包。WinPcap的功能為:捕獲數(shù)據(jù)包(主要功能)、流量統(tǒng)計功能、數(shù)據(jù)包發(fā)送功能。它包括三部分,即數(shù)據(jù)包捕獲和過濾塊NPF、較低層的網(wǎng)絡(luò)編程接口packer.dll、較高層的編程接口wpcap.dll。使用該開發(fā)包可以提高應(yīng)用效率,WinPcap充分考慮了各種性能和效率的優(yōu)化,在內(nèi)核層實現(xiàn)了數(shù)據(jù)包的捕獲和過濾,這是由NPF來實現(xiàn)的,NPF是WinPcap的核心部分,它實現(xiàn)了內(nèi)核的統(tǒng)計功能,對于設(shè)計網(wǎng)絡(luò)流量的程序很有好處。體系結(jié)構(gòu)調(diào)用如下:Applicationwpcap.dllPacket.d

13、ll NPF 圖2.2.3:體系結(jié)構(gòu)調(diào)用3、 程序設(shè)計與實現(xiàn)本次課設(shè)的主要研究內(nèi)容是利用套接字開發(fā)網(wǎng)絡(luò)嗅探器的程序設(shè)計,設(shè)計要求完成對流經(jīng)本地網(wǎng)卡的所有數(shù)據(jù)包的捕獲,分析協(xié)議類型,并根據(jù)不同的協(xié)議類型對數(shù)據(jù)包進行了進一步的分析,包括分析數(shù)據(jù)包的IP,端口,協(xié)議類型等。3.1 主要流程 3.2 總體規(guī)劃首先要選擇監(jiān)聽的網(wǎng)絡(luò)適配器,再設(shè)置網(wǎng)絡(luò)適配器為混雜模式,然后再設(shè)置過濾器,從而可以過濾使用特殊協(xié)議的數(shù)據(jù)包。當完成這些準備工作后,就可以對流經(jīng)網(wǎng)絡(luò)適配器的數(shù)據(jù)進行循環(huán)捕獲了。捕獲的同時,可以分析和顯示數(shù)據(jù),這可以通過調(diào)用相關(guān)函數(shù)實現(xiàn)。程序主要分為五個模塊:獲得網(wǎng)卡信息、數(shù)據(jù)包過濾、數(shù)據(jù)包捕獲、數(shù)據(jù)

14、包分析、數(shù)據(jù)顯示。3.3 函數(shù)說明 (1)、pcap_findalldevs()是用來獲得主機的網(wǎng)絡(luò)設(shè)備列表,獲取的網(wǎng)絡(luò)設(shè)備就存儲在參數(shù)alldevs中函數(shù)體:int pcap_findalldevs(pcap_if_t * alldevs,char * error_content)說明:指向pcap_if_t*類型的列表的指針的指針,char型指針,當打開列表錯誤時 返回錯誤信息。當不再需要網(wǎng)卡列表時,用pcap_freealldevs(pcap_if_t *) 釋放空間。 (2)、pcap_open_live() 是用來打開網(wǎng)絡(luò)設(shè)備列表,得到一個包抓取的描述符。函數(shù)體:pcap_t *pc

15、ap_open_live(const char * device, int snaplen, int promise, int to_ms, char ebuf *)說明:device表示要捕獲數(shù)據(jù)包的網(wǎng)絡(luò)設(shè)備的名稱,由函數(shù)pcap_findalldevs()得 到的; Snaplen表示要捕獲的數(shù)據(jù)包的最大可抓取的最大字節(jié); Promise表示捕獲數(shù)據(jù)包是否設(shè)為混雜模式,若值為1 則表明設(shè)為混雜模式; to_ms表示捕獲的時間間隔。(3) 、pcap_lookupnet() 用來監(jiān)測網(wǎng)卡所在網(wǎng)絡(luò)的網(wǎng)絡(luò)地址和子網(wǎng)掩碼。函數(shù)體:int pcap_lookupnet(char *device,bp

16、f_u_int32 *netp,bpf_u_int32 *maskp,char *errbuf)說明:bpf_u_int32 *netp 存放網(wǎng)絡(luò)地址 bpf_u_int32 *maskp 存放子網(wǎng)掩碼(4) 、pcap_compile()如果要獲得特定的網(wǎng)絡(luò)數(shù)據(jù)包,就需要使用過濾規(guī)則,過濾規(guī)則其實就是一個字符串,在Winpcap 中使用此函數(shù)用來編譯表達式。函數(shù)體:int pcap_compile(pcap_t *p,struct bpf_program *fp,char *str,int optimize,bpf_u_int32 netmask)說明:pcap_t *p 打開的設(shè)備接口句柄

17、 struct bpf_program *fp 存儲被編譯過的過濾器版本的地址 Char *str 表達式本身 int optimize 是否被優(yōu)化的整形量(0-false,1-true)(5) 、pcap_setfilter()使用過濾器用于設(shè)定一個過濾程序。函數(shù)體:int pcap_setfilter(pcap_t *p,struct bpf_program *fp)(6) 、pcap_loop()設(shè)置獲取到滿足過濾規(guī)則后,數(shù)據(jù)包處理的回調(diào)函數(shù)。函數(shù)體:int pcap_loop(pcap_t *p,int cnt,pcap_handler callback,u_char *user)說明

18、:int cnt 捕獲數(shù)據(jù)包的個數(shù) pcap_handler callback 回調(diào)函數(shù)的名稱 u_char *user 送往回調(diào)函數(shù)的參數(shù)(7) 、pcap_close()關(guān)閉pcap_open_live()獲取的包捕捉句柄,釋放相關(guān)的資源。關(guān)閉相關(guān)的文件并釋放對應(yīng)資源。函數(shù)體:void pcap_close(pcap_t *p()(8) 、void ethernet_protocol_packet_callback()回調(diào)函數(shù)的原型。函數(shù)體:void ethernet_protocol_packet_callback(u_char *argument, const struct pcap_

19、pkthdr *packet_header, const u_char *packet_content)說明:u_char *argument對應(yīng)于pcap_loop()的最后一個參數(shù) const struct pcap_pkthdr *packet_header參數(shù)類型在pcap.h中包含,該結(jié) 構(gòu)體包含數(shù)據(jù)包被嗅探的時間、大小等信息。(9) 、struct protocol_header用于定義ETHERNET、IP、TCP、UDP、ARP、ICMP等協(xié)議的頭部信息。3.4 分塊設(shè)計l 3.4.1獲得網(wǎng)卡列表信息首先調(diào)用WinPcap 的pcap_findalledvs () 函數(shù)獲取電腦

20、中所有可用的網(wǎng)絡(luò)適配器列表,并顯示在控制臺上,供操作人員選擇不同的網(wǎng)絡(luò)適配器進行測試。這個函數(shù)返回一個pcap_if 結(jié)構(gòu)的連表,連表的每項內(nèi)容都含有網(wǎng)卡信息,尤其是字段名字namea和含有名字的描述description 以及有關(guān)驅(qū)動器的易讀信息。同樣,WinPcap 也提供其他的高級信息,特別是pcap_findalldevs () 這個函數(shù)返回的每個pcap_if 結(jié)構(gòu)體都包含一個pcap_addr 結(jié)構(gòu)的列表, 它包含:一個地址列表,一個掩碼列表,一個廣播地址列表和一個目的地址列表。實現(xiàn)代碼:pcap_if_t *alldevs; pcap_if_t *d; pcap_t *pcap_

21、handle;/* Winpcap句柄 */ char error_contentPCAP_ERRBUF_SIZE;/* error_content錯誤緩沖區(qū),即effbuf,存儲錯誤信息 */int i=0; /i指的是網(wǎng)卡的序列號/* 取得列表 */ /pcap_findalldevs()是用來獲得主機的網(wǎng)絡(luò)設(shè)備列表,獲取的網(wǎng)絡(luò)設(shè)備就存儲在參數(shù)alldevs中if (pcap_findalldevs(&alldevs, error_content) = -1) fprintf(stderr,pcap_findalldevs發(fā)生錯誤: %sn, error_content); exit(1)

22、; / 輸出網(wǎng)卡信息for(d=alldevs; d; d=d-next) /next表示指向下一個網(wǎng)絡(luò)設(shè)備printf(%d. 網(wǎng)卡名: %s n, +i, d-name); if (d-description) printf( 網(wǎng)卡描述: %s n, d-description); else printf( (No description available)n);if(i=0) printf(n沒有找到任何網(wǎng)卡,請確認Winpcap已經(jīng)安裝.n); return ;l 3.4.2數(shù)據(jù)包捕獲當操作人員選擇了可用的適配器后, 可調(diào)用WinPcap 的pcap_open_live()函數(shù)對所選

23、網(wǎng)絡(luò)適配器進行配置,把網(wǎng)絡(luò)適配器配置成混雜模式,從而可以捕獲到流過網(wǎng)絡(luò)適配器的數(shù)據(jù)。此函數(shù)還配置了每次捕獲數(shù)據(jù)的長度和讀取時間及錯誤信息的緩存。在設(shè)置好過濾條件后就可對流經(jīng)網(wǎng)絡(luò)適配器的數(shù)據(jù)進行捕獲。在此系統(tǒng)中WinPcap 利用pcap_loop()函數(shù)來實現(xiàn)循環(huán)捕獲。捕獲后,利用指針指向捕獲到的數(shù)據(jù),如果沒有數(shù)據(jù),則返回提示信息。并根據(jù)返回值判斷是什么原因造成的。實現(xiàn)代碼: int inum; /網(wǎng)卡的編號bpf_u_int32 net_mask;/* 掩碼 */bpf_u_int32 net_ip; /網(wǎng)絡(luò)地址printf(nn請輸入網(wǎng)卡編號 (1-%d):,i);scanf(%d, &i

24、num);/ 檢測用戶是否指定了有效網(wǎng)卡if(inum i) printf(n網(wǎng)卡編號超出范圍.n); pcap_freealldevs(alldevs); /* 釋放列表 */ return ; for(d=alldevs, i=0; inext, i+);/* 跳轉(zhuǎn)到選中的適配器 */pcap_lookupnet(d-name,&net_ip,&net_mask,error_content);/獲得網(wǎng)絡(luò)地址和掩碼pcap_handle = pcap_open_live(d-name, BUFSIZ, 1, 1, error_content);/打開網(wǎng)路接口 /*pcap_loop()表示捕

25、獲多個數(shù)據(jù)包,可以總是循環(huán)捕獲數(shù)據(jù)包,ethernet_protocol_packet_callback回調(diào)函數(shù)*/* 注冊回調(diào)函數(shù),循環(huán)捕獲網(wǎng)絡(luò)數(shù)據(jù)包,利用回調(diào)函數(shù)來處理每個數(shù)據(jù)包 */pcap_loop(pcap_handle, - 1, ethernet_protocol_packet_callback, NULL);l 3.4.3數(shù)據(jù)包過濾 數(shù)據(jù)包的過濾,是通過設(shè)置過濾條件完成的。在WinPcap 中有pcap_compile()和pcap_setfilter()兩個函數(shù),通過其參數(shù)的設(shè)置可以完成數(shù)據(jù)包的過濾。在過濾之前,要得到網(wǎng)絡(luò)鏈路層的類型,是為了在分析數(shù)據(jù)時確定數(shù)據(jù)幀的類型。在過

26、濾之前,要得到網(wǎng)絡(luò)鏈路層的類型,是為了在分析數(shù)據(jù)時確定數(shù)據(jù)幀的類型, 以便于地位IP 首部開始的地方, 此功能是用pcap_datalink()實現(xiàn)的。實現(xiàn)代碼:int protocol_type; / 0-ip 1-arp 2-tcp 3-udp 4-icmpstruct bpf_program bpf_filter;/* BPF過濾規(guī)則 */char packet_filter20;/* 過濾規(guī)則字符串 */ 選擇過濾包類型printf(n請選擇監(jiān)聽的數(shù)據(jù)包協(xié)議類型(0-ip 1-arp 2-tcp 3-udp 4-icmp) : );scanf(%d,&protocol_type);sw

27、itch(protocol_type)case 0:strcpy(packet_filter,ip);break;case 1:strcpy(packet_filter,arp);break;case 2:strcpy(packet_filter,ip and tcp);break;case 3:strcpy(packet_filter,ip and udp);break;case 4:strcpy(packet_filter,ip and icmp);break;default:break; /* pcap_compile()編譯BPF過濾規(guī)則 */ pcap_compile(pcap_ha

28、ndle, &bpf_filter,packet_filter, 0, net_ip); /* pcap_setfilter設(shè)置過濾規(guī)則 */ pcap_setfilter(pcap_handle, &bpf_filter);if (pcap_datalink(pcap_handle) != DLT_EN10MB) return ;l 3.4.4數(shù)據(jù)包分析 當捕獲到數(shù)據(jù)時,對數(shù)據(jù)要進行分析顯示。本程序中捕獲到的數(shù)據(jù)是立即進行分析顯示。根據(jù)鏈路層幀的類型,可知道數(shù)據(jù)幀頭部的結(jié)構(gòu)。有網(wǎng)絡(luò)構(gòu)架可以知道,數(shù)據(jù)在發(fā)送或接收之前都要對數(shù)據(jù)進行處理, 即對數(shù)據(jù)進行封裝,正中結(jié)構(gòu)可以清晰地知道所封裝的上層協(xié)議

29、是哪種類型的。用戶在程序中調(diào)用的pcap_loop()函數(shù)可以進行數(shù)據(jù)包的捕獲,而每一個數(shù)據(jù)包到達時該函數(shù)會調(diào)用pcap_handler()函數(shù)進行數(shù)據(jù)包處理,返回一個指向捕獲器頭部和一個指向幀數(shù)據(jù)的指針(包含協(xié)議頭)。圖3.4.4:上層封裝協(xié)議4、 問題分析及測試通過對整體程序的設(shè)計、程序代碼的編寫,最終會在調(diào)試的時候出現(xiàn)很多的問題,有的是細節(jié)問題,如引用錯誤、語法不明、丟失分號、聲明錯誤,有的問題是程序設(shè)計思路本身不夠完善,或者代碼出現(xiàn)了錯誤導(dǎo)致不能運行,需要通過不斷的調(diào)試和改正,從而使程序能正確的按照 要求運行。在反復(fù)的調(diào)試中,可以使我們認識到作為一個程序員對程序編寫的嚴謹性,養(yǎng)成嚴于律

30、己的好習(xí)慣。4.1問題分析 在本程序的設(shè)計過程中,遇到較多的困難,主要是上網(wǎng)查看相關(guān)的協(xié)議,參詳WinPcap的開發(fā)手冊及其庫函數(shù),查找一些常見問題的解決方法,以下陳述幾種常見的錯誤:(1) 、安裝問題。調(diào)試前,必須在VS下的程序工程屬性下的C+目錄下的包含目錄include和庫目錄lib下分別加入WinPcap的include和lib目錄;在C+下的預(yù)編譯頭中加入WPCAP;HAVE_REMOTE;選項;在鏈接目錄下的命令行選項中添加wpcap.lib ws2_32.lib庫文件。之后引入pcap.h頭文件后即可調(diào)試。有時候程序調(diào)試后,仍顯示不能找到pcap.h頭文件,首先要先檢查上述選項是

31、否正確添加,若正確,仍有錯誤提示,則可能是其他的安裝問題,上網(wǎng)搜查后,其解決方法是將WinPcap中的wpcap.lib和packet.lib添加到VS2010-VS-lib目錄下,即可解決。對于不熟悉此軟件的操作人員尤其要注意這種安裝問題,有時候一個很小的錯誤就導(dǎo)致程序無法運行。(2) 、程序設(shè)計問題。在本設(shè)計這個程序之前,由于沒有過多接觸,所以到圖書館尋找資料,從上面的編程實例解析中,確定了本程序的設(shè)計思路,由于整體框架不是很清晰,所以到網(wǎng)上查找了一些資料,從而使得自己在設(shè)計方面常見的錯誤時,能夠得到很好地解決。在設(shè)計打開網(wǎng)絡(luò)設(shè)備列表時,出現(xiàn)了錯誤,導(dǎo)致整個程序無法運行,對照WinPcap

32、開發(fā)函數(shù)后,重新運用了pcap_findalldevs()此函數(shù),對里面的參數(shù)重新設(shè)置,設(shè)置一個循環(huán),使得能夠從本地主機上發(fā)現(xiàn)并顯示其網(wǎng)卡列表,給操作人員進行選擇。同時,在設(shè)置過濾規(guī)則時,起初是很簡單的捕獲所有的數(shù)據(jù)包,并分析顯示,但是這樣給人的感覺很亂,所以就想分類顯示,進行指定函數(shù)過濾,因為過濾規(guī)則是一個字符串,所以考慮到手動輸入一個表達式,進行過濾,修改了一些語句,運行成功。后來,去查找參考資料時,發(fā)現(xiàn)有一個程序中的選擇方式比較好,不用自己輸入表達式,在程序中就已經(jīng)進行了設(shè)定,只要進行選擇其標號就可以了,所以對程序又進行了改動,添加了switch語句進行選擇,就這樣吧過濾規(guī)則的表達式語句

33、確定下來了。(3) 、回調(diào)函數(shù)的使用。處理此問題時,必須考慮到函數(shù)的調(diào)用問題,pcap_loop()函數(shù)使用時參照開發(fā)手冊,要返回其原型函數(shù)void ethernet_protocol_packet_callback()進行調(diào)用。要注意在每一個函數(shù)調(diào)用時的參數(shù)設(shè)定一定要正確,否則會出現(xiàn)各種錯誤、。同時要根據(jù)單步調(diào)試,進行嚴格的設(shè)計,確定每一循環(huán)的正確性。(4) 、一些小錯誤。在程序的調(diào)試過程中,難免會有輸入錯誤,這些根據(jù)錯誤提示進行修改即可。4.2測試在程序運行成功后,進行測試,以下是在控制臺上測試的結(jié)果。圖4.1:網(wǎng)卡列表的顯示圖4.2:選擇網(wǎng)卡 圖4.3:捕獲到的數(shù)據(jù)包5、 結(jié)論5.1設(shè)計

34、心得歷時將近兩周的課程設(shè)計將告一段落,回想設(shè)計的過程,都有所收獲,不僅僅是知識的運用與積累,同時也收獲了經(jīng)驗,這是一筆寶貴的財富,同時也有一些關(guān)于嗅探工具的想法,這些想法包含了對嗅探工具的展望以及本嗅探工具設(shè)計中的一些不足。本次設(shè)計的程序是在WinPcap庫的基礎(chǔ)上對網(wǎng)絡(luò)數(shù)據(jù)進行捕獲,不需要編寫復(fù)雜的設(shè)備驅(qū)動程序和代碼就可以實現(xiàn)抓包,使得其編寫過程比較簡便、有效率。從課程設(shè)計選題,到查閱資料,思考課題的解決的方案,再到課題的實現(xiàn),是一個靈活運用知識的過程。由于以前沒有接觸過WinPcap,所以在查詢資料料時,必須認真仔細,研究透每一個所用到的函數(shù),設(shè)置好每個函數(shù)的參數(shù),漸漸地對此類編程有了較深

35、的認識,同時也加深了對C+的知識理解。盡管在編程中遇到了許多的錯誤,但是做設(shè)計的不就是享受這個過程么,為想到每一步的設(shè)計而高興,為調(diào)試成功一個錯誤而興奮,享受其中的樂趣,鍛煉我們的耐心,不斷完善自己的程序。通過反復(fù)的調(diào)試,也顯示了程序員的嚴謹性。就最終的成果而言,這次的設(shè)計無疑是比較簡單的,通過對過濾條件的設(shè)置,實現(xiàn)了對特定協(xié)議的數(shù)據(jù)包進行捕獲、分析及顯示。通過一些輸入提示,指導(dǎo)操作人員執(zhí)行,簡單,易行。隨著網(wǎng)絡(luò)的發(fā)展,嗅探工具會越來越完善,嗅探器是一把雙刃劍。在網(wǎng)絡(luò)安全方面,網(wǎng)絡(luò)嗅探手段可以有效地探測在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)包信息,通過對這些信息的分析利用是有助于網(wǎng)絡(luò)安全維護的。權(quán)衡利弊,有必要對

36、網(wǎng)絡(luò)嗅探器的實現(xiàn)原理進行深入的了解。這次的設(shè)計對我來說算是一個基礎(chǔ),所有的學(xué)習(xí)均是由易轉(zhuǎn)難,有了這次的學(xué)習(xí),對我以后的學(xué)習(xí)及完善有著良好的益處。這次的設(shè)計沒有像Sniffer這種工具,有著良好的用戶界面,是一個缺憾,此程序還有很大的完善空間,在今后的設(shè)計中會一步步的進行學(xué)習(xí),同時使自己的學(xué)習(xí)能力更上一層樓。5.2謝辭在此我要感謝王勇老師的指導(dǎo)及幫助。在設(shè)計過程中,我通過查閱大量的資料,與同學(xué)的交流和自學(xué),并向老師請教等方式,使自己學(xué)到了不少的知識,培養(yǎng)了自己的動手能力和思考能力,樹立了對工作能力的自信心,相信會對以后的學(xué)習(xí)工作有非常重要的影響,而且大大提高了動手的能力,使我充分體會到了在創(chuàng)造過

37、程中探索的艱難和成功時的喜悅。雖然這個設(shè)計做的不是很好,但是在設(shè)計過程中所學(xué)到的東西是這次課程設(shè)計的最大收獲和財富,使我終身受益。這是一個人與人的社會,每個人都會需要到別人的幫助,互相幫助與交流,也是提高學(xué)習(xí)能力的一個途徑。在此再次鄭重的感謝幫助我的老師和同學(xué),謝謝你們對我的指導(dǎo)和幫助,使我順利地完成了這次的課設(shè)。參考文獻: 1劉文濤.網(wǎng)絡(luò)安全編程技術(shù)與實例M.北京:機械工業(yè)出版社.2008.7 2胡曉元,史浩山.WinPcap包截獲系統(tǒng)的分析及其應(yīng)用J.計算機工程.2005. 3Andrew S.Tanenbaum.計算機網(wǎng)絡(luò)(第四版)修訂版J.北京:清華大學(xué)出版社.2010. 4網(wǎng)上相關(guān)資

38、料.附錄(源程序):#include pcap.h#include #pragra comment(lib,wpcap.lib)#pragra comment(lib,wsock32.lib)/*WinPcap頭文件 ;以下是以太網(wǎng)協(xié)議格式的定義 */struct ether_header u_int8_t ether_dhost6; /* 目的以太網(wǎng)地址 */ u_int8_t ether_shost6;/* 源以太網(wǎng)地址 */ u_int16_t ether_type; /* 以太網(wǎng)類型 */;/*下面是ARP協(xié)議格式的定義*/struct arp_header u_int16_t arp

39、_hardware_type;/* 硬件類型 */ u_int16_t arp_protocol_type; /* 協(xié)議類型 */ u_int8_t arp_hardware_length; /* 硬件地址長度 */ u_int8_t arp_protocol_length; /* 協(xié)議地址長度 */ u_int16_t arp_operation_code;/* 操作碼 */ u_int8_t arp_source_ethernet_address6;/* 源以太網(wǎng)地址 */ u_int8_t arp_source_ip_address4; /* 源IP地址 */ u_int8_t arp_

40、destination_ethernet_address6;/* 目的以太網(wǎng)地址 */ u_int8_t arp_destination_ip_address4;/* 目的IP地址 */;/* IPv4 頭的定義 */struct ip_header #if defined(WORDS_BIGENDIAN) u_int8_t ip_version: 4,/* 版本 */ ip_header_length: 4;/* 首部長度 */ #else u_int8_t ip_header_length: 4, ip_version: 4; #endif u_int8_t ip_tos;/* 服務(wù)質(zhì)量

41、*/ u_int16_t ip_length;/* 長度 */ u_int16_t ip_id;/* 標識 */ u_int16_t ip_off;/* 偏移 */ u_int8_t ip_ttl; /* 生存時間 */ u_int8_t ip_protocol;/* 協(xié)議類型 */ u_int16_t ip_checksum;/* 校驗和 */ struct in_addr ip_souce_address;/* 源IP地址 */ struct in_addr ip_destination_address;/* 目的IP地址 */;/*下面是UDP協(xié)議格式定義*/struct udp_hea

42、der u_int16_t udp_source_port;/* 源端口號 */ u_int16_t udp_destination_port;/* 目的端口號 */ u_int16_t udp_length;/* 長度 */ u_int16_t udp_checksum; /* 校驗和 */;/*下面是TCP協(xié)議格式的定義 */struct tcp_header u_int16_t tcp_source_port;/* 源端口號 */ u_int16_t tcp_destination_port; /* 目的端口號 */ u_int32_t tcp_sequence_num; /* 序列號

43、*/ u_int32_t tcp_acknowledgement;/* 確認序列號 */ #ifdef WORDS_BIGENDIAN u_int8_t tcp_offset: 4,/* 偏移 */ tcp_reserved: 4; /* 未用 */ #else u_int8_t tcp_reserved: 4,/* 未用 */ tcp_offset: 4; /* 偏移 */ #endif u_int8_t tcp_flags; /* 標記 */ u_int16_t tcp_windows;/* 窗口大小 */ u_int16_t tcp_checksum;/* 校驗和 */ u_int16_

44、t tcp_urgent_pointer;/* 緊急指針 */;/*下面是ICMP協(xié)議格式的定義 */struct icmp_header u_int8_t icmp_type; /* ICMP類型 */ u_int8_t icmp_code;/* ICMP代碼 */ u_int16_t icmp_checksum; /* 校驗和 */ u_int16_t icmp_id; /* 標識符 */ u_int16_t icmp_sequence;/* 序列碼 */;/*下面是分析TCP協(xié)議的函數(shù),其定義方式與回調(diào)函數(shù)相同 */void tcp_protocol_packet_callback(u_

45、char *argument, const struct pcap_pkthdr *packet_header, const u_char *packet_content) struct tcp_header *tcp_protocol; /* TCP協(xié)議變量 */ u_char flags;/* 標記 */ int header_length; /* 長度 */ u_short source_port;/* 源端口 */ u_short destination_port; /* 目的端口 */ u_short windows;/* 窗口大小 */ u_short urgent_pointer

46、;/* 緊急指針 */ u_int sequence;/* 序列號 */ u_int acknowledgement;/* 確認號 */ u_int16_t checksum; /* 校驗和 */ tcp_protocol = (struct tcp_header*)(packet_content + 14+20); /* 獲得TCP協(xié)議內(nèi)容 */source_port = ntohs(tcp_protocol-tcp_source_port);/* 獲得源端口 */*ntohs()返回一個以主機字節(jié)順序表達的數(shù),將一個無符號短整形數(shù)從網(wǎng)絡(luò)字節(jié)順序轉(zhuǎn)換為主機字節(jié)順序。*/ destinatio

47、n_port = ntohs(tcp_protocol-tcp_destination_port);/* 獲得目的端口 */ header_length = tcp_protocol-tcp_offset *4;/* 長度 */ sequence = ntohl(tcp_protocol-tcp_sequence_lliiuuwweennttaaoo); /* 序列碼 */ acknowledgement = ntohl(tcp_protocol-tcp_acknowledgement);/* 確認序列碼 */ windows = ntohs(tcp_protocol-tcp_windows)

48、;/* 窗口大小 */ urgent_pointer = ntohs(tcp_protocol-tcp_urgent_pointer);/* 緊急指針 */ flags = tcp_protocol-tcp_flags;/* 標識 */ checksum = ntohs(tcp_protocol-tcp_checksum);/* 校驗和 */ printf(- TCP協(xié)議 -n); printf(源端口號:%dn, source_port); printf(目的端口號:%dn, destination_port); switch (destination_port) case 80: printf(上層協(xié)議為HTTP協(xié)議n); break; case 21: printf(上層協(xié)議為FTP協(xié)議n); break; case 23: printf(上層協(xié)議為TELNET協(xié)議n); break; case 25: printf(上層協(xié)議為SMTP協(xié)議n); break; case 110: printf(上層協(xié)議POP3協(xié)議n); break; def

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論