網(wǎng)絡(luò)監(jiān)聽技術(shù)是系統(tǒng)安全領(lǐng)域內(nèi)一個非常敏感的話題_第1頁
網(wǎng)絡(luò)監(jiān)聽技術(shù)是系統(tǒng)安全領(lǐng)域內(nèi)一個非常敏感的話題_第2頁
網(wǎng)絡(luò)監(jiān)聽技術(shù)是系統(tǒng)安全領(lǐng)域內(nèi)一個非常敏感的話題_第3頁
網(wǎng)絡(luò)監(jiān)聽技術(shù)是系統(tǒng)安全領(lǐng)域內(nèi)一個非常敏感的話題_第4頁
網(wǎng)絡(luò)監(jiān)聽技術(shù)是系統(tǒng)安全領(lǐng)域內(nèi)一個非常敏感的話題_第5頁
已閱讀5頁,還剩102頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

摘要網(wǎng)絡(luò)監(jiān)聽技術(shù)是系統(tǒng)安全領(lǐng)域內(nèi)一個非常敏感的話題,也是一項重要的技術(shù),具有很強(qiáng)的現(xiàn)實(shí)應(yīng)用背景。網(wǎng)絡(luò)監(jiān)聽是網(wǎng)絡(luò)監(jiān)測、負(fù)載分析等管理活動常用的方法,同時也是黑客非法竊取信息的手段。網(wǎng)絡(luò)監(jiān)聽工具通過網(wǎng)絡(luò)傳輸介質(zhì)的共享特性實(shí)現(xiàn)抓包,獲得當(dāng)前網(wǎng)絡(luò)的使用狀況,為網(wǎng)絡(luò)管理員對網(wǎng)絡(luò)中的信息進(jìn)行實(shí)時的監(jiān)測、分析提供一個合適的工具;同時也讓黑客截獲本網(wǎng)段的一些敏感信息,威脅網(wǎng)絡(luò)安全。本文對網(wǎng)絡(luò)監(jiān)聽技術(shù)的原理和實(shí)現(xiàn)進(jìn)行了比較詳細(xì)的介紹,討論了監(jiān)聽技術(shù)在Windows下的多種實(shí)現(xiàn),并主要介紹了如何在Win32環(huán)境中利用Winpcap開發(fā)包開發(fā)網(wǎng)絡(luò)實(shí)時監(jiān)聽程序,給出了具體的設(shè)計與實(shí)現(xiàn)方法。詳細(xì)描述Winpcap開發(fā)包的主要功能,分析網(wǎng)絡(luò)監(jiān)聽程序的層次結(jié)構(gòu)(從底到頂依次為NPF驅(qū)動程序,Winpcap的dll函數(shù)庫),監(jiān)聽?wèi)?yīng)用程序。最后就當(dāng)前的監(jiān)聽技術(shù)的不足提出了分布式監(jiān)聽的觀點(diǎn),還引入了簡單網(wǎng)絡(luò)管理。關(guān)鍵字:網(wǎng)絡(luò)監(jiān)聽,Winpcap,包捕獲AbstractNetworksnifferisanimportantissueandtechniqueinthedomainofsystemsecurity,soithasstrongrealismapplicationbackground.Networksnifferisawaywhichisusedinnetworkmonitor,loadanalysis;atthesametimeitisalsoawaywhichisusedbyhackertogettheinformationillegally.Networksniffertoolssnappacketstogetthenetwork’scurrentstatusbythesharedcharacteristicofthenetworktransmissionmedium.Itprovidesnetworkmanageranicetoolwhichcanhelptheminspectandanalysetheinformationofnetwork;simultaneouslyhackersalsogetsomeimportantinformation,sothreatensystemsecurity.Inthisarticle,wewillintroducetheprinciplesandimplementationsofthenetworksnifferindetails,discussmulti-implementationsofsniffertechniqueatwindows,andmainlyintroducehowtodevelopsnifferprogramatwin32byWinpcapdevelopmentkit,thedetaileddesignandimplementations.ParticularlywedescribethemainfunctionofWinpcap,analysetheframeworkofnetworksnifferprogramandthesnifferapplicationprogram.AtlastIbringforwarddistributedsnifferviewpointforthelackofcurrentsniffertechnique.Ialsoimportsimplenetworkmanagement.Keyword:networkmonitor,winpcap,packetsnap目錄TOC\o"1-3"\u前言 1第1章 系統(tǒng)概述 21.1 系統(tǒng)目標(biāo) 21.2 相關(guān)理論與技術(shù)的簡單介紹 21.2.1 網(wǎng)絡(luò)監(jiān)聽原理 21.2.2 監(jiān)聽技術(shù)相關(guān)的實(shí)現(xiàn)方法 31.3 系統(tǒng)需求 6第2章 基于Winpcap開發(fā)的技術(shù)詳解 82.1 選用Winpcap技術(shù)的原因: 82.2 Winpcap的結(jié)構(gòu)分析 82.3 NDIS驅(qū)動開發(fā)技術(shù) 102.4 DLL動態(tài)連接庫技術(shù) 11第3章 系統(tǒng)功能描述 123.1 監(jiān)聽子系統(tǒng) 123.2 顯示子系統(tǒng) 133.3 管理子系統(tǒng) 143.4 連接子系統(tǒng) 14第4章 系統(tǒng)實(shí)現(xiàn) 154.1 協(xié)議驅(qū)動程序NPF的設(shè)計 154.2 動態(tài)連接庫程序PACKET.DLL的設(shè)計 174.3 應(yīng)用程序的結(jié)構(gòu)設(shè)計 204.3.1 數(shù)據(jù)流圖 204.3.2 結(jié)構(gòu)圖 254.3.3 源碼分析 294.4 系統(tǒng)特色 464.4.1 分布式網(wǎng)絡(luò)監(jiān)聽 464.4.2 簡單網(wǎng)絡(luò)管理 46第5章 系統(tǒng)測試與使用說明書 475.1 系統(tǒng)測試 475.1.1 監(jiān)聽功能 475.1.2 顯示功能 485.1.2 管理功能 515.1.3 連接功能 525.2 工具軟件的配置 545.3 監(jiān)聽工具的使用 55結(jié)論 56致謝: 61參考文獻(xiàn): 62附錄1 63前言當(dāng)今計算機(jī)網(wǎng)絡(luò)及通訊技術(shù)的廣泛應(yīng)用,促使Internet的迅速發(fā)展,給我們帶來產(chǎn)生了巨大的社會和經(jīng)濟(jì)效益。在這種情況下,計算機(jī)網(wǎng)絡(luò)的設(shè)計,維護(hù)的難度日益增加,因此人們迫切需要能夠分析,診斷與測試網(wǎng)絡(luò)功能的工具軟件。網(wǎng)絡(luò)監(jiān)聽工具在這種需求下孕育而生。它對網(wǎng)絡(luò)上的所有數(shù)據(jù)進(jìn)行捕獲,一方面對數(shù)據(jù)包進(jìn)行檢查分析,以便找出我們所關(guān)心的網(wǎng)絡(luò)中潛在的問題,對網(wǎng)絡(luò)故障做出精確定位,幫助管理員解決網(wǎng)絡(luò)的故障和性能問題;另一方面它又是黑客竊聽網(wǎng)絡(luò)的工具,黑客利用數(shù)據(jù)包中攜帶的數(shù)據(jù)直接或間接獲取的機(jī)密信息。所以實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽技術(shù)具有重要的現(xiàn)實(shí)和理論意義。本文主要對網(wǎng)絡(luò)監(jiān)聽技術(shù)的原理和實(shí)現(xiàn)進(jìn)行了比較詳細(xì)的介紹。討論了監(jiān)聽技術(shù)在Windows下的多種實(shí)現(xiàn),并主要論述了如何在Win32環(huán)境中利用Winpcap開發(fā)包開發(fā)網(wǎng)絡(luò)實(shí)時監(jiān)聽程序,并給出了具體的設(shè)計與實(shí)現(xiàn)方法。正文第一章主要描述與實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽工具有關(guān)的理論,包括網(wǎng)絡(luò)監(jiān)聽的原理,實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽的多種不同技術(shù)。第二章詳細(xì)描述在實(shí)現(xiàn)本網(wǎng)絡(luò)監(jiān)聽工具中使用的Winpcap技術(shù),包括DDK驅(qū)動開發(fā)技術(shù),DLL動態(tài)鏈接庫技術(shù),MFC應(yīng)用程序開發(fā)技術(shù)。本監(jiān)聽工具所具備的功能。第三章詳細(xì)描述系統(tǒng)功能。第四章詳細(xì)描述系統(tǒng)實(shí)現(xiàn),包括NPF驅(qū)動程序的實(shí)現(xiàn);PACKET.DLL動態(tài)鏈接庫程序的實(shí)現(xiàn);應(yīng)用程序的實(shí)現(xiàn),將給出數(shù)據(jù)流圖,模塊結(jié)構(gòu)圖,關(guān)鍵程序流程圖。第五章敘述系統(tǒng)測試和使用。最后一章得出畢業(yè)設(shè)計的總結(jié),并闡明本軟件的缺陷和解決方法。系統(tǒng)概述系統(tǒng)目標(biāo)本課設(shè)從實(shí)際工程應(yīng)用角度出發(fā),以計算機(jī)網(wǎng)絡(luò)原理為指導(dǎo),結(jié)合當(dāng)前網(wǎng)絡(luò)中的一些常用技術(shù)和標(biāo)準(zhǔn),模擬仿真了一組網(wǎng)絡(luò)實(shí)驗。為了能夠檢驗實(shí)驗的結(jié)果,我們開發(fā)了這個網(wǎng)絡(luò)監(jiān)聽工具,幫助實(shí)驗人員對網(wǎng)絡(luò)中的信息進(jìn)行實(shí)時的監(jiān)測、分析,診斷網(wǎng)絡(luò)故障。同時通過該畢業(yè)設(shè)計的內(nèi)容,讓我們了解各種抓包技術(shù),熟練掌握基于Winpcap開發(fā)包的編程模式;了解網(wǎng)絡(luò)監(jiān)聽技術(shù)的新發(fā)展和網(wǎng)絡(luò)安全防范的新方向;最后能有所體會。相關(guān)理論與技術(shù)的簡單介紹1.2.1 網(wǎng)絡(luò)監(jiān)聽原理共享式局域網(wǎng)采用的是廣播信道,也就是說每臺主機(jī)所發(fā)出的幀都會被整個網(wǎng)絡(luò)內(nèi)的所有主機(jī)接收到[1]。接收主機(jī)對幀的處理根據(jù)網(wǎng)卡的工作模式來實(shí)現(xiàn)。一般網(wǎng)卡具有一下4種工作模式:廣播模式,多播模式,直播模式和混雜模式。網(wǎng)卡缺省工作模式是工作在廣播和直播模式下的,即只能接收發(fā)送給自己和廣播的幀。正常情況下接收主機(jī)的網(wǎng)卡根據(jù)幀中所包含的目標(biāo)MAC地址或是廣播MAC地址進(jìn)行判斷,若等于自己的MAC地址或是廣播MAC地址,則提交給上層處理程序,否則丟棄此數(shù)據(jù)包。當(dāng)網(wǎng)卡處于混雜模式的時候,它不作任何判斷直接把接收到的所有幀交給上層處理程序。網(wǎng)絡(luò)監(jiān)聽技術(shù)就是基于這個原理,來捕獲網(wǎng)絡(luò)中所有的數(shù)據(jù)包,實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)測和流量分析的。交換式以太網(wǎng)是基于數(shù)據(jù)鏈路層的點(diǎn)到點(diǎn)的信道,所以簡單采用應(yīng)用于共享式以太網(wǎng)的監(jiān)聽技術(shù)是完全失效的。本文主要討論共享式以太網(wǎng)的情況,最后給出交換式以太網(wǎng)監(jiān)聽難題的解決方案。1.2.2 監(jiān)聽技術(shù)相關(guān)的實(shí)現(xiàn)方法原始套接字編程模式[2]:RawSocket:原始套接字可以用它來發(fā)送和接收IP層以上的原始數(shù)據(jù)包,如ICMP,TCP,UDP...創(chuàng)建了一個RawSocketintsockRaw=socket(AF_INET,SOCK_RAW,IPPROTO_RAW);把網(wǎng)卡置于混雜模式用RawSocket實(shí)現(xiàn)代碼如下:setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));設(shè)置IP頭操作選項。flag標(biāo)志是用來設(shè)置IP頭操作的,boolflag=ture也就是說要親自處理IP頭。bind(sockRaw,(PSOCKADDR)&addrLocal,sizeof(addrLocal);把sockRaw綁定到本地網(wǎng)卡上,addrLocal為本地地址:SOCKADDR_INaddrLocal。ioctlsocket(sockRaw,SIO_RCVALL,&dwValue);讓sockRaw接受所有的數(shù)據(jù)。dwValue為輸入輸出參數(shù),為1時執(zhí)行,0時取消:DWORDdwValue=1;捕獲數(shù)據(jù)包recv(sockRaw,RecvBuf,BUFFER_SIZE,0);//接受任意數(shù)據(jù)包原始套接字編程模式:優(yōu)點(diǎn):實(shí)現(xiàn)簡單,不需要做驅(qū)動程序就可實(shí)現(xiàn)抓包.缺點(diǎn):數(shù)據(jù)包頭不含幀信息,不能接收到與IP同層的其它數(shù)據(jù)包,如ARP,RARP,IPX…IMD中間層驅(qū)動編程模式[3]:中間層驅(qū)動(NDISintermediatedriver)內(nèi)核級網(wǎng)絡(luò)驅(qū)動介紹:MicrosoftWindows2000支持三種基本的內(nèi)核級網(wǎng)絡(luò)驅(qū)動,這三層driver順序從下到上依次為:MiniportNICdrivers:微端口網(wǎng)卡驅(qū)動,位于最底層,直接操縱網(wǎng)卡并且對高層驅(qū)動提供接口。Intermediatedrivers:IMD中間層驅(qū)動位于1和3之間。Protocoldrivers:高層協(xié)議驅(qū)動,俗稱為TDI(傳輸驅(qū)動程序接口),高于前面兩層,直接面向用戶級,為用戶提供網(wǎng)絡(luò)服務(wù),也就是絕大多數(shù)程序所用到的網(wǎng)絡(luò)接口。IMD驅(qū)動IMD中間層,它的實(shí)質(zhì)很簡單,即:中間層插入網(wǎng)卡和協(xié)議層之間,對上面的協(xié)議層表現(xiàn)為一個虛擬的微端口網(wǎng)卡結(jié)構(gòu),而對下面的網(wǎng)卡則表現(xiàn)為一個協(xié)議層的結(jié)構(gòu)。所以,無論是網(wǎng)卡接收并上傳的數(shù)據(jù)報,還是上層要下送至網(wǎng)卡發(fā)送的數(shù)據(jù)報,無一例外地要經(jīng)過中間層。IMD包過濾技術(shù)前面我們已經(jīng)看到,所有的數(shù)據(jù)報都要經(jīng)過中間層,所以,我們可以在中間層加入我們想要過濾的數(shù)據(jù)報的特征,實(shí)現(xiàn)基于中間層驅(qū)動的內(nèi)核級包過濾。優(yōu)勢:首先,在驅(qū)動級別上做過濾,無須組包,速度快,效率自然就高;其次,所有的數(shù)據(jù)報無一例外,只要網(wǎng)卡上傳的數(shù)據(jù)報均可以截獲,避免了用戶級無法得到所有數(shù)據(jù)報的缺點(diǎn)。缺點(diǎn):IMD包過濾技術(shù)也存在其不可避免的缺點(diǎn),與操作系統(tǒng)版本關(guān)系密切,與硬件聯(lián)系大,可移植性低,調(diào)試?yán)щy。Winpcap編程模式Winpcap(windowspacketcapture)是windows平臺下一個免費(fèi),公共的網(wǎng)絡(luò)訪問系統(tǒng)。開發(fā)Winpcap這個項目的目的在于為win32應(yīng)用程序提供訪問網(wǎng)絡(luò)底層的能力。它提供了以下的各項功能:獲原始數(shù)據(jù)報,包括在共享式網(wǎng)絡(luò)上各主機(jī)發(fā)送/接收的以及相互之間交換的數(shù)據(jù)報;在數(shù)據(jù)報發(fā)往應(yīng)用程序之前,按照自定義的規(guī)則將某些特殊的數(shù)據(jù)報過濾掉;在網(wǎng)絡(luò)上發(fā)送原始的數(shù)據(jù)報;收集網(wǎng)絡(luò)通信過程中的統(tǒng)計信息。不足:Winpcap的主要功能在于獨(dú)立于主機(jī)協(xié)議(如TCP-IP)而發(fā)送和接收原始數(shù)據(jù)報。也就是說,Winpcap不能阻塞,過濾或控制其他應(yīng)用程序數(shù)據(jù)報的發(fā)收,它僅僅只是監(jiān)聽共享網(wǎng)絡(luò)上傳送的數(shù)據(jù)報。因此,它不能用于QoS調(diào)度程序或個人防火墻。目前,Winpcap開發(fā)的主要對象是windowsNT/2000/XP,這主要是因為在使用Winpcap的用戶中只有一小部分是僅使用windows95/98/Me,并且M$也已經(jīng)放棄了對win9x的開發(fā)。其實(shí)Winpcap中的面向9x系統(tǒng)的概念和NT系統(tǒng)的非常相似,只是在某些實(shí)現(xiàn)上有點(diǎn)差異,比如說9x只支持ANSI編碼,而NT系統(tǒng)則提倡使用Unicode編碼。系統(tǒng)需求能夠捕獲所需要的所有以太網(wǎng)數(shù)據(jù)包分析捕獲的包類型,報文信息數(shù)據(jù)形式顯示當(dāng)前以太網(wǎng)中數(shù)據(jù)包的分布情況圖表形式顯示當(dāng)前以太網(wǎng)中數(shù)據(jù)包的分布情況能表現(xiàn)網(wǎng)絡(luò)中各個節(jié)點(diǎn)的相互通訊情況可以保存數(shù)據(jù)到文件在數(shù)據(jù)包中查找敏感信息(匹配關(guān)鍵字)具備簡單的網(wǎng)絡(luò)管理功能實(shí)現(xiàn)簡單的分布式監(jiān)聽基于Winpcap開發(fā)的技術(shù)詳解討論了各種不同的編程模式之后,本章將闡明我們選擇Winpcap技術(shù)的原因,然后將對Winpcap做詳細(xì)的分析。選用Winpcap技術(shù)的原因:提供了一套標(biāo)準(zhǔn)的抓包接口,與libpcap兼容,可使得原來許多UNIX平臺下的網(wǎng)絡(luò)分析工具快速移植過來便于開發(fā)各種網(wǎng)絡(luò)分析工具原始套接字的編程模式中不能捕獲ARP和IPX的數(shù)據(jù)包對SNIFFER軟件有著致命的限制,所以不能選擇這種方法。IMD編程模式雖然功能強(qiáng)大,而且靈活性強(qiáng),但是開發(fā)調(diào)試難度比較大,不適合作為SNIFFER軟件的開發(fā)模式,甚至在防火墻開發(fā)技術(shù)中也不用IMD。WINPCAP本身不能阻塞,過濾或控制其他應(yīng)用程序數(shù)據(jù)報的發(fā)收的缺點(diǎn)在我們這個軟件的開發(fā)過程中,并不影響。所以經(jīng)過權(quán)衡,我選用了Winpcap編程模式來開發(fā)MySniffer軟件。Winpcap的結(jié)構(gòu)分析Winpcap的主要思想來源于Unix系統(tǒng)中著名的BSD包捕獲結(jié)構(gòu),它的基本結(jié)構(gòu)如圖2.1所示:整個包捕獲框架的基礎(chǔ)是NDIS(網(wǎng)絡(luò)驅(qū)動器接口規(guī)范),它是Windows中最低端的與聯(lián)網(wǎng)有關(guān)的軟件,主要是為各種應(yīng)用協(xié)議與網(wǎng)卡之間提供的一套接口函數(shù)。Winpcap由三個模塊組成,一個是工作在內(nèi)核級別上的NPF包過濾器;另外兩個是用戶級的動態(tài)連接庫packet.dll和wpcap.dll[4]。wpcap.dll是packet.dll的上一層封裝,提供了編程的高級接口。為了能更好的了解Winpcap的工作原理,我選用了packet.dll作為程序?qū)Φ讓釉L問的接口。因為基于Winpcap開發(fā)涉及到驅(qū)動程序開發(fā)技術(shù),dll動態(tài)連接庫開發(fā)技術(shù),和vc的MFC應(yīng)用程序開發(fā)技術(shù),所以將對它們做一些介紹。 圖2.1Winpcap及NPF的結(jié)構(gòu)圖[5]NDIS驅(qū)動開發(fā)技術(shù)網(wǎng)絡(luò)驅(qū)動程序使用ISO的開放的系統(tǒng)互連網(wǎng)羅標(biāo)準(zhǔn)(OSI),這是一個七層的模型,它的頂層是應(yīng)用軟件層,底層是硬件連接和網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),網(wǎng)絡(luò)接口卡(NIC)給大多數(shù)的平臺提供網(wǎng)絡(luò)的硬件接口,網(wǎng)絡(luò)驅(qū)動程序是寫給指定的NIC的驅(qū)動程序。網(wǎng)絡(luò)驅(qū)動程序接口規(guī)范(NDIS)給NIC驅(qū)動程序提供庫支持,通常只允許NIC廠商提供管理硬件特殊細(xì)節(jié)的MINI驅(qū)動程序,更高層的NDIS(中間驅(qū)動程序,協(xié)議驅(qū)動程序)在需要的時候提供媒體轉(zhuǎn)換,過濾。分層的NDIS如圖2所示。WIN2000提供一個分層的內(nèi)核模式軟件傳輸驅(qū)動接口(TDI),這個分層的在NDIS層和高層軟件抽象像插座和NetBIOS,TDI層使WIN2000的高層結(jié)構(gòu)具有更多的可移植性。圖2.網(wǎng)絡(luò)驅(qū)動程序接口規(guī)范DLL動態(tài)連接庫技術(shù)DLL(DynamicLinkableLibrary)文件通常是一個具有獨(dú)立功能的程序模塊,可以進(jìn)行單獨(dú)編譯和測試。在運(yùn)行時,只有當(dāng)EXE程序確實(shí)要調(diào)用這些DLL模塊的情況下,系統(tǒng)才會將它們裝載到內(nèi)存空間中。這種方式不僅減少了EXE文件的大小和對內(nèi)存空間的需求,而且使這些DLL模塊可以同時被多個應(yīng)用程序使用,只是增加DLL的計數(shù)。當(dāng)應(yīng)用程序卸載DLL時,計數(shù)則減少,計數(shù)為0時DLL就從內(nèi)存被釋放。PACKET.DLL就是為上層應(yīng)用程序開發(fā)的,提供操作網(wǎng)卡的模塊;而且它屏蔽應(yīng)用程序直接操作底層協(xié)議驅(qū)動程序的復(fù)雜性。所以應(yīng)用程序可以使用PACKET.DLL所提供地接口函數(shù),安全簡單的操作協(xié)議驅(qū)動程序,使應(yīng)用程序更加健壯。系統(tǒng)功能描述這個網(wǎng)絡(luò)監(jiān)聽工具雖然不是很龐大,但是有幾個功能比較明確,也就是監(jiān)聽功能,顯示功能,管理功能,連接功能,所以我把它們劃分為四個子系統(tǒng),來實(shí)現(xiàn)。3.1 監(jiān)聽子系統(tǒng)監(jiān)聽子系統(tǒng)再劃分為三個功能,捕獲功能,過濾功能,保存功能;三個功能描述如下:捕獲功能根據(jù)過濾器的設(shè)置,捕獲ip,arp,ipx,tcp,udp,ospf,icmp,spx,ipx-rip等數(shù)據(jù)包,并把數(shù)據(jù)包保存在應(yīng)用程序的緩沖區(qū)內(nèi)。過濾功能用戶自己定義過濾信息(特定協(xié)議進(jìn)行捕獲),也就說用戶可能只需要了解網(wǎng)絡(luò)中某種類型的數(shù)據(jù)包的信息,而不需要捕獲太多無用的數(shù)據(jù),一方面系統(tǒng)負(fù)擔(dān)比較大,另一方面干擾信息過多不利于用戶發(fā)現(xiàn)網(wǎng)絡(luò)中存在的問題。保存功能在捕獲的過程中,每十秒鐘,把統(tǒng)計信息寫入文件中,等待圖表顯示功能模塊提取信息。保存功能還根據(jù)管理功能的需要,保存數(shù)據(jù)。如果管理功能被啟動,系統(tǒng)將滿足管理要求的主機(jī)IP地址,記錄在IP數(shù)據(jù)集合中。等待管理子系統(tǒng)從中提取IP地址,實(shí)現(xiàn)管理功能。3.2 顯示子系統(tǒng)顯示子系統(tǒng)可再劃分為五個功能,總量顯示功能,分量顯示功能,通訊顯示功能,列表顯示功能,樹形顯示功能。這些功能的詳細(xì)描述如下:總量顯示功能在抓包過程中顯示捕獲數(shù)據(jù)包的總量,也就是從開始監(jiān)聽一直到結(jié)束,捕獲的說有數(shù)據(jù)包的數(shù)量。分量顯示功能在抓包過程中顯示各種數(shù)據(jù)包的分量,以及它們在總量中比例(百分比顯示)各種數(shù)據(jù)包的百分比是指,某種類型的數(shù)據(jù)包除以捕獲的數(shù)據(jù)包的總量。通訊顯示功能用直觀的方法表示當(dāng)前各個節(jié)點(diǎn)的通訊對象,如果雙方存在TCP,UDP,ICMP數(shù)據(jù)包的往來我們就認(rèn)為他們之間存在著通訊,然后我們記錄他們的信息,并顯示在屏幕上。列表顯示功能在抓包終止后,顯示捕獲的數(shù)據(jù)包的信息。包括:包的次序,包的源和目的地址(ip數(shù)據(jù)包顯示ip地址,arp數(shù)據(jù)包顯示mac地址,ipx數(shù)據(jù)包顯示ipx的地址形式)包的長度,包的簡要說明樹形顯示功能可以指定一個數(shù)據(jù)包,并顯示它的詳細(xì)內(nèi)容,包頭信息,首先判斷是網(wǎng)絡(luò)層中的哪種類型數(shù)據(jù)包,其次判斷是傳輸層中的哪種類型的數(shù)據(jù)包,最后判斷是哪種應(yīng)用層的服務(wù)。才判斷的過程中不斷記錄各個包頭的信息,并以樹狀結(jié)構(gòu)加以表現(xiàn)。3.3 管理子系統(tǒng)簡單網(wǎng)絡(luò)管理功能:主要指可選擇監(jiān)聽某個端口,根據(jù)一些信息截斷節(jié)點(diǎn)與外界的聯(lián)系。設(shè)計這個功能的目的是,最近這段時間利用WINDOWS遠(yuǎn)程管理或是遠(yuǎn)程調(diào)用功能的漏洞,出現(xiàn)很多攻擊。它們通常利用135,139或445端口存在的緩沖區(qū)溢出的漏洞,使病毒入侵主機(jī),然后利用相同的方法再從被感染的主機(jī)向其他網(wǎng)絡(luò)中的主機(jī)發(fā)起攻擊。所以如果我們在覺察到某臺機(jī)器中毒并不斷攻擊其他主機(jī)時,我們可以把他們發(fā)出的數(shù)據(jù)包定位到錯誤的網(wǎng)關(guān)地址,這樣就把威脅限制在一個網(wǎng)段內(nèi)了,還可以造成IP沖突讓部分被感染主機(jī)無法和網(wǎng)絡(luò)連接。連接子系統(tǒng)實(shí)現(xiàn)分布式監(jiān)聽,這是指我們在各個網(wǎng)段安排不同的MySniffer,然后把各個網(wǎng)段的信息匯總到一臺服務(wù)器中。服務(wù)器可以對數(shù)據(jù)加以顯示,幫助管理人員覺察到網(wǎng)絡(luò)的異常情況。系統(tǒng)實(shí)現(xiàn)4.1 協(xié)議驅(qū)動程序NPF的設(shè)計參考Windows系統(tǒng)的DDK(DriverDevelopmentKit)中的網(wǎng)絡(luò)驅(qū)動程序(NetworkDriver)開發(fā)文檔,針對不同類型的網(wǎng)羅驅(qū)動程序,NDIS定義的一些必須向系統(tǒng)進(jìn)行登記和實(shí)現(xiàn)的接口,作為系統(tǒng)操作和管理某一個網(wǎng)卡的入口。開發(fā)驅(qū)動程序主要的工作便是對這些接口進(jìn)行實(shí)現(xiàn)。系統(tǒng)采用協(xié)議驅(qū)動程序(也叫中間驅(qū)動程序)來進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)包的讀取,下面就是協(xié)議驅(qū)動程序需要實(shí)現(xiàn)和登記的主要幾個接口。具體實(shí)現(xiàn)包括:NTSTATUSDriverEntry(INPDRIVER_OBJECTDriverObject,INPUNICODE_STRINGRegistryPath)[6]:DriverEntry是系統(tǒng)調(diào)用設(shè)備驅(qū)動程序的入口函數(shù),當(dāng)協(xié)議驅(qū)動程序被加載到內(nèi)存開始運(yùn)行時它被調(diào)用。它初始化驅(qū)動程序,注冊所有的驅(qū)動程序的回調(diào)函數(shù),創(chuàng)建虛擬設(shè)備,在NDIS結(jié)構(gòu)中定義協(xié)議驅(qū)動程序。參數(shù):DriverObject系統(tǒng)創(chuàng)建的一個協(xié)議驅(qū)動程序?qū)ο?RegisterPath注冊表中與協(xié)議驅(qū)動有關(guān)的注冊項的路徑返回值:包括一組網(wǎng)卡的串。NdisRegisterProtocol:在驅(qū)動程序初始化的時候,調(diào)用該函數(shù)向系統(tǒng)進(jìn)行登記,將自己注冊成一個協(xié)議驅(qū)動程序。NdisOpenAdapter:在驅(qū)動程序初始化的時候,調(diào)用該函數(shù)綁定(BIND)和打開(OPEN)一個或多個網(wǎng)絡(luò)適配器(Adapter)。在高層應(yīng)用程序,發(fā)出要求綁定協(xié)議驅(qū)動程序或者要求接收和發(fā)送數(shù)據(jù)包的請求時,協(xié)議驅(qū)動程序調(diào)用以下函數(shù):NPF_BindAdapterHandler:NDIS通過這個函數(shù)請求協(xié)議驅(qū)動程序綁定到一個底層的NIC(網(wǎng)卡)或者虛擬的NICNPF_UnbindAdapterHandler:NDIS通過這個函數(shù)關(guān)閉協(xié)議驅(qū)動程序到NIC或者虛擬NIC的連接。NPF_OpenAdapterCompleteHandler:當(dāng)協(xié)議驅(qū)動程序調(diào)用NdisOpenAdapter函數(shù)的返回是NDIS_STATUS_PENDING時,這個函數(shù)來指定(Binding)操作完成。NPF_CloseAdapterCompleteHandler:當(dāng)協(xié)議驅(qū)動程序調(diào)用NPF_NdisCloseAdapter函數(shù)返回是NDIS_STATUS_PENDING時,這個函數(shù)來指定(Unbinding)操作完成。NPF_ReceiveHandler:當(dāng)一個數(shù)據(jù)包到達(dá)時,便調(diào)用這個接口進(jìn)行處理。NPF_ReceiveCompleteHandler:指示進(jìn)行接收的數(shù)據(jù)是否已經(jīng)接收完成。NPF_TransferCompleteHandler:當(dāng)協(xié)議驅(qū)動程序調(diào)用NdisTransferData函數(shù)的返回值是NDIS_STATUS_PENDING,系統(tǒng)調(diào)用這個函數(shù)指示傳送的數(shù)據(jù)時候已經(jīng)發(fā)送完成。NPF_SendCompleteHandler:當(dāng)協(xié)議驅(qū)動程序調(diào)用NdisSend函數(shù)的返回值為NDIS_STATUS_PENDING,系統(tǒng)調(diào)用這個函數(shù)指示進(jìn)行發(fā)送的數(shù)據(jù)時候已經(jīng)發(fā)送。NPF_Read:為用戶提供讀操作。NPF_Write:為用戶提供寫操作。NPF_IoControl:處理IOCTL操作。以上所羅列的是協(xié)議驅(qū)動程序中用到或是實(shí)現(xiàn)的主要的幾個函數(shù)。4.2 動態(tài)連接庫程序PACKET.DLL的設(shè)計首先聲明一些相關(guān)的數(shù)據(jù)結(jié)構(gòu):

1.typedefstruct_ADAPTERADAPTER[6]//描述一個網(wǎng)絡(luò)適配器;2.typedefstruct_PACKETPACKET//描述一組網(wǎng)絡(luò)數(shù)據(jù)報的結(jié)構(gòu);3.typedefstructNetTypeNetType//描述網(wǎng)絡(luò)類型的數(shù)據(jù)結(jié)構(gòu);4.typedefstructnpf_if_addrnpf_if_addr//描述一個網(wǎng)絡(luò)適配器的ip地址;5.structbpf_hdr//數(shù)據(jù)報頭部;5.structbpf_stat//當(dāng)前捕獲數(shù)據(jù)報的統(tǒng)計信息。下面,將介應(yīng)用程序用到的各個函數(shù),他們都是在packet.dll中定義的:1>LPPACKETPacketAllocatePacket(void)當(dāng)需要給程序接收數(shù)據(jù)包的時候,需要先分配一個接收緩沖區(qū),而接受緩沖區(qū)又需要一個描述它的結(jié)構(gòu)體。所以在分配緩沖區(qū)的時候,調(diào)用這個函數(shù)分配這個結(jié)構(gòu)體的空間。如果運(yùn)行成功,返回一個_PACKET結(jié)構(gòu)的指針,否則返回NULL。成功返回的結(jié)果將會傳送到PacketReceivePacket()函數(shù),接收來自驅(qū)動的網(wǎng)絡(luò)數(shù)據(jù)報。2>VOIDPacketCloseAdapter(LPADAPTERlpAdapter)

當(dāng)應(yīng)用程序需要關(guān)閉監(jiān)聽功能的時候,需要調(diào)用這個函數(shù)。關(guān)閉參數(shù)中提供的網(wǎng)絡(luò)適配器,釋放相關(guān)的ADAPTER結(jié)構(gòu)。3>VOIDPacketFreePacket(LPPACKETlpPacket)

當(dāng)應(yīng)用程序結(jié)束監(jiān)聽的時候,調(diào)用這個函數(shù),釋放描述接收緩沖區(qū)的結(jié)構(gòu)體的空間。參數(shù)提供的是_PACKET結(jié)構(gòu)的指針。4>BOOLEANPacketGetAdapterNames(LPSTRpStr,PULONGBufferSize)

一臺主機(jī)可能又多個網(wǎng)卡,所以在打開哪個網(wǎng)卡進(jìn)行監(jiān)聽的時候,需要得到主機(jī)的網(wǎng)卡列表。所以應(yīng)用程序在打開網(wǎng)卡前,要先調(diào)用這個函數(shù)。通過返回值可以得到的網(wǎng)絡(luò)適配器列表及描述。5>VOIDPacketInitPacket(LPPACKETlpPacket,PVOIDBuffer,UINTLength)在應(yīng)用程序的監(jiān)聽功能啟動時,調(diào)用這個函數(shù)。給一個_PACKET結(jié)構(gòu)中的,buffer分配空間。6>LPADAPTERPacketOpetAdapter(LPTSTRAdapterName)在應(yīng)用程序的監(jiān)聽功能啟動時,根據(jù)前面得到的網(wǎng)卡列表,調(diào)用這個函數(shù),打開一個網(wǎng)絡(luò)適配器。7>BOOLEANPacketReceivePacket(LPADAPTERAdapterObject,LPPACKETlpPacket,BOOLEANSync)

在應(yīng)用程序的sniff()函數(shù)中調(diào)用這個函數(shù),從NPF驅(qū)動程序讀取網(wǎng)絡(luò)數(shù)據(jù)報及統(tǒng)計信息。數(shù)據(jù)報編碼結(jié)構(gòu)如示:|bpf_hdr|data|Padding|bpf_hdr|data|Padding|8>BOOLEANPacketSendPacket(LPADAPTERAdapterObject,LPPACKETlpPacket,BOOLEANSync)

在應(yīng)用程序的管理子系統(tǒng)的autoctrl函數(shù)中調(diào)用它,用來發(fā)送一個或多個arp數(shù)據(jù)報的副本。實(shí)際上它可以發(fā)送任何自己構(gòu)造的數(shù)據(jù)包。9>BOOLEANPacketSetHwFilter(LPADAPTERAdapterObject,ULONGFilter)在應(yīng)用程序的監(jiān)聽功能啟動時調(diào)用它,為接收到的數(shù)據(jù)報設(shè)置硬件過濾規(guī)則。以下為一些典型的過濾規(guī)則:NDIS_PACKET_TYPE_PROMISCUOUS:設(shè)置為混雜模式,接收所有流過的數(shù)據(jù)報;NDIS_PACKET_TYPE_DIRECTED:只有目的地為本地主機(jī)網(wǎng)絡(luò)適配器的數(shù)據(jù)報才會被接收;NDIS_PACKET_TYPE_BROADCAST:只有廣播數(shù)據(jù)報才會被接收;DIS_PACKET_TYPE_MULTICAST:只有與本地主機(jī)網(wǎng)絡(luò)適配器相對應(yīng)的為了實(shí)現(xiàn)監(jiān)聽數(shù)據(jù)報,把網(wǎng)卡設(shè)置為NDIS_PACKET_TYPE_PROMISCUOUS;15>BOOLEANPacketSetNumWrites(LPADAPTERAdapterObject,intnwrites)在應(yīng)用程序的管理子系統(tǒng)的autoctrl函數(shù)中調(diào)用它,設(shè)置調(diào)用PacketSendPacket()函數(shù)發(fā)送一個數(shù)據(jù)報副本所重復(fù)的次數(shù)。15>BOOLEANPacketSetReadTimeout(LPADAPTERAdapterObject,inttimeout)在應(yīng)用程序的監(jiān)聽功能啟動時調(diào)用它,設(shè)置在接收到一個數(shù)據(jù)報后“休息”的時間。4.3 應(yīng)用程序的結(jié)構(gòu)設(shè)計4.3.1 數(shù)據(jù)流圖全局關(guān)聯(lián)圖(圖4.1)圖4.1全局關(guān)聯(lián)圖用戶打開MySniffer系統(tǒng),系統(tǒng)以文本方式,圖表方式,還有列表方式向用戶顯示抓包結(jié)果。用戶還可以給系統(tǒng)設(shè)置過濾標(biāo)準(zhǔn),請求系統(tǒng)執(zhí)行管理功能和連接功能。系統(tǒng)在監(jiān)聽的時候,不斷保存和記錄各種信息,以被連接子系統(tǒng)和管理子系統(tǒng)使用。在連接功能啟動時,系統(tǒng)將試圖與服務(wù)器連接,然后返回統(tǒng)計信息到服務(wù)器端。圖4.2系統(tǒng)詳細(xì)關(guān)聯(lián)圖這張圖充分表現(xiàn)了,各個子系統(tǒng)之間的詳細(xì)聯(lián)系。各其他系統(tǒng)以監(jiān)聽子系統(tǒng)為核心。監(jiān)聽子系統(tǒng)把捕獲的數(shù)據(jù)包,傳遞給顯示子系統(tǒng)來顯示信息。監(jiān)聽子系統(tǒng)把記錄的受懷疑的網(wǎng)絡(luò)主機(jī)的IP集合傳遞給管理子系統(tǒng),實(shí)現(xiàn)簡單網(wǎng)絡(luò)管理。監(jiān)聽子系統(tǒng)還記錄網(wǎng)絡(luò)流量的統(tǒng)計信息,傳遞給連接子系統(tǒng),連接子系統(tǒng)再把信息傳送到服務(wù)器端。監(jiān)聽子系統(tǒng)數(shù)據(jù)流圖圖4.5監(jiān)聽子系統(tǒng)數(shù)據(jù)流圖 用戶發(fā)出啟動請求,監(jiān)聽子系統(tǒng)開始監(jiān)聽。監(jiān)聽過程接收過濾信息,然后被系統(tǒng)時鐘所觸發(fā),每1秒完成一次操作。每次操作過程中,要對數(shù)據(jù)包進(jìn)行分析,記錄統(tǒng)計信息,捕獲的數(shù)據(jù)包和需要管理的主機(jī)ip地址集合,以備顯示子系統(tǒng),管理子系統(tǒng),和連接子系統(tǒng)使用。顯示子系統(tǒng)數(shù)據(jù)流圖 圖4.4顯示子系統(tǒng)數(shù)據(jù)流圖 用戶發(fā)出請求文本信息的要求,顯示文本信息子活動,從統(tǒng)計信息中讀取數(shù)據(jù)并顯示。用戶發(fā)出請求圖表信息的要求,顯示圖表信息子活動,從文件中讀取數(shù)據(jù)并顯示。用戶發(fā)出請求列表信息的要求,顯示列表信息子活動,從統(tǒng)計信息中讀取數(shù)據(jù)并顯示。用戶發(fā)出請求顯示特定數(shù)據(jù)包的要求,顯示特定數(shù)據(jù)包的子活動,從數(shù)據(jù)包集合中讀取數(shù)據(jù)并顯示。管理子系統(tǒng)數(shù)據(jù)流圖 圖4.5管理子系統(tǒng)數(shù)據(jù)流圖 用戶發(fā)出啟動簡單管理請求,啟動網(wǎng)絡(luò)管理子活動打開時鐘3。網(wǎng)絡(luò)管理被時鐘3觸發(fā),每1秒操作一次。根據(jù)IP地址集,給網(wǎng)絡(luò)上的主機(jī)不斷發(fā)送ARP數(shù)據(jù)包。連接子系統(tǒng)數(shù)據(jù)流圖 圖4.4連接子系統(tǒng)數(shù)據(jù)流圖用戶發(fā)出啟動連接請求,開啟連接子活動打開時鐘2。連接子活動被時鐘3觸發(fā),每10秒操作一次。根據(jù)統(tǒng)計信息,給網(wǎng)絡(luò)上的服務(wù)器不斷發(fā)送信息。4.3.2 結(jié)構(gòu)圖頂層結(jié)構(gòu)圖:圖4.7頂層模塊圖 主模塊調(diào)用監(jiān)聽,顯示,管理,連接子模塊。其中管理,連接子模塊是可選的。監(jiān)聽子系統(tǒng)結(jié)構(gòu)圖(圖4.8) 圖4.8監(jiān)聽子系統(tǒng)模塊圖監(jiān)聽子系統(tǒng)調(diào)用監(jiān)聽,設(shè)置和查看過濾信息,寫入統(tǒng)計和數(shù)據(jù)包集合信息。監(jiān)聽子系統(tǒng)調(diào)用監(jiān)聽模塊獲得統(tǒng)計信息和數(shù)據(jù)包,并把它們寫入相應(yīng)的存儲區(qū)域。顯示子系統(tǒng)結(jié)構(gòu)圖(圖4.9) 圖4.9顯示子系統(tǒng)模塊圖顯示子系統(tǒng)調(diào)用顯示文本,圖表,列表,特定數(shù)據(jù)包信息四個子模塊。后三個子模塊是可選模塊,根據(jù)用戶需要,調(diào)用它們。顯示文本信息子模塊由程序內(nèi)部獲得統(tǒng)計信息。顯示圖表模塊從文件中獲得不同時間不同的統(tǒng)計信息。顯示列表信息和顯示特定數(shù)據(jù)包信息子模塊從數(shù)據(jù)包集合中獲得數(shù)據(jù)。管理子系統(tǒng)結(jié)構(gòu)圖,連接子系統(tǒng)結(jié)構(gòu)圖。這兩個子系統(tǒng)結(jié)構(gòu)實(shí)現(xiàn)難度大,但是結(jié)構(gòu)比較簡單,所以在頂層模塊圖中就顯示了他們內(nèi)部的模塊調(diào)用結(jié)構(gòu)。4.3.3 源碼分析主要數(shù)據(jù)結(jié)構(gòu):見附錄1主要全局變量:static LPADAPTERlpadapter;//指向描述網(wǎng)絡(luò)適配器實(shí)例的結(jié)構(gòu)的指針;static LPPACKETlppacketr;//指向描述一組網(wǎng)絡(luò)數(shù)據(jù)報的結(jié)構(gòu)的指針;static charpacket_array[1024][1024];//應(yīng)用程序中存放數(shù)據(jù)包的緩沖區(qū)static charrecvbuf[1024*250];//協(xié)議驅(qū)動程序存放數(shù)據(jù)包的緩沖區(qū)staticDWORDauto_ip[255];//存放需要被管理的主機(jī)的ip地址監(jiān)聽模塊:voidSniff():功能:獲取數(shù)據(jù)包算法:循環(huán)一百次調(diào)用PacketReceivePacket函數(shù),如果成功開始分析數(shù)據(jù)包(即調(diào)用GetData函數(shù))。voidGetData(LPPACKETlp)功能:分析捕獲的數(shù)據(jù)包,寫入統(tǒng)計信息,寫入數(shù)據(jù)包集合,寫入主機(jī)IP集合參數(shù):指向描述一組網(wǎng)絡(luò)數(shù)據(jù)報的結(jié)構(gòu)的指針;算法:classFilterDlg:publicCDialog{//Constructionpublic: FilterDlg(CWnd*pParent=NULL);//standardconstructor//DialogData //{{AFX_DATA(FilterDlg) enum{IDD=IDD_DEFINE_FILTER}; BOOL m_arp,m_dns,m_ftp,m_icmp,m_http,m_ip,m_ipx,m_netbios; BOOL m_ospf,m_rip,m_smtp,m_spx,m_tcp,m_telnet,m_udp;//這些變量由來決定是否對這些協(xié)議監(jiān)聽 //}}AFX_DATA//Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(FilterDlg) protected: virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport //}}AFX_VIRTUAL//Implementationprotected: //Generatedmessagemapfunctions //{{AFX_MSG(FilterDlg) afx_msgvoidOnArp(),OnDns(),OnFtp(),OnHttp(),OnIcmp(),OnIp(),OnIpx(),OnNetbois(),OnOspf(),OnRip(),OnSmtp(),OnSpx(),OnTcp(),OnTelnet(),OnUdp(),OnDefault();//用來在每個checkbox被觸發(fā)時調(diào)用 //}}AFX_MSG DECLARE_MESSAGE_MAP()};功能:設(shè)置過濾信息算法:通過一系列的checkbox控件,我們來決定需要對那些控件進(jìn)行過濾。比如tcp控件被選中我們就要對tcp協(xié)議進(jìn)行過濾,否則就掠過tcp協(xié)議。但是在我們選擇tcp協(xié)議的同時ip協(xié)議也一定會被選上,所以他們之間存在一定的關(guān)聯(lián)關(guān)系。if(m_tcp==1) { m_ip=1; } else { m_ftp=0; m_smtp=0; m_http=0; m_telnet=0; }我們以上面的代碼為例討論這個問題,當(dāng)tcp被選中時ip也被選中,當(dāng)tcp被取消時它的高層協(xié)議如ftp,http都會被取消。其他的代碼也都是仿照tcp的原則來寫的。d)顯示模塊:voidShowPacketCount(CDC*pDC);功能:調(diào)用該函數(shù)顯示數(shù)據(jù)包的總量和各種協(xié)議數(shù)據(jù)包的分量信息算法:利用統(tǒng)計信息,把統(tǒng)計信息打印出來。voidShowGraphic(CDC*pDC);功能:調(diào)用該函數(shù)顯示數(shù)據(jù)包的圖表信息算法:讀取在不同時間點(diǎn)上,記錄在文件中的統(tǒng)計信息,然后以時間為橫軸,百分比為縱軸把統(tǒng)計信息顯示在視圖上。voidShowConnection(CDC*pDC);功能:調(diào)用該函數(shù)顯示網(wǎng)絡(luò)中存在通訊的節(jié)點(diǎn)之間的聯(lián)系算法:從packet_array數(shù)據(jù)包接收緩沖區(qū)中,倒序查找十個數(shù)據(jù)包,如果數(shù)據(jù)包類型為tcp,udp,icmp那么就認(rèn)為數(shù)據(jù)包的源和目的主機(jī)之間存在著通訊關(guān)系,于是就把他們的源和目的地址展現(xiàn)在視圖上。classMyDlg:publicCDialog{public: voidSetData(charp[][1024],intc); MyDlg(CWnd*pParent=NULL);//standardconstructor intIndexInFieldList;//記錄被選擇需要詳細(xì)顯示的數(shù)據(jù)包的序號 TreeDlgm_treedlg;//樹行顯示數(shù)據(jù)包的對話框 PVOIDpacket;//指向數(shù)據(jù)包數(shù)組packet_arry的指針 intcount;//數(shù)據(jù)包數(shù)組中數(shù)據(jù)包的個數(shù)//DialogData //{{AFX_DATA(MyDlg) enum{IDD=IDD_DIALOG}; CListCtrl m_listCtrl; //}}AFX_DATA//Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(MyDlg) public: virtualintDoModal(); protected: virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport //}}AFX_VIRTUAL//Implementationprotected: //Generatedmessagemapfunctions //{{AFX_MSG(MyDlg) virtualBOOLOnInitDialog();//對話框的初始化函數(shù) afx_msgvoidOnDblclkList(NMHDR*pNMHDR,LRESULT*pResult);//選擇需要詳細(xì)顯示的數(shù)據(jù)包時觸發(fā)的函數(shù) afx_msgvoidOnPaint(); //}}AFX_MSG DECLARE_MESSAGE_MAP()};功能:該類用來顯示數(shù)據(jù)包的列表信息算法:首先在實(shí)例化該類的時候我們要把packet_array數(shù)據(jù)包接收緩沖區(qū)的指針傳給PVOIDpacket,通過packet指針我們解析每一個數(shù)據(jù)包,然后把它們的信息以列表形式展現(xiàn)在用戶面前。對數(shù)據(jù)包的解析算法基本上和GetData中的算法相似所以這里就不再重復(fù)了。該類中voidOnDblclkList(NMHDR*pNMHDR,LRESULT*pResult)函數(shù)的作用是當(dāng)用戶想更加細(xì)致地了解數(shù)據(jù)包地情況下,雙擊列表中地某一個數(shù)據(jù)包,那么它會實(shí)例化classTreeDlg類,來顯示數(shù)據(jù)包地詳細(xì)信息。classTreeDlg:publicCDialog{//Constructionpublic: voidSetData(char*p); TreeDlg(CWnd*pParent=NULL);//standardconstructor HTREEITEMm_hRoot; //樹行結(jié)構(gòu)的根節(jié)點(diǎn) char*packet; //指向需要詳細(xì)顯示數(shù)據(jù)包的指針//DialogData //{{AFX_DATA(TreeDlg) enum{IDD=IDD_TREE_VIEW}; CTreeCtrl m_tree; CString m_str; CString m_substr; //}}AFX_DATA//Overrides //ClassWizardgeneratedvirtualfunctionoverrides //{{AFX_VIRTUAL(TreeDlg) protected: virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport //}}AFX_VIRTUAL//Implementationprotected: //Generatedmessagemapfunctions //{{AFX_MSG(TreeDlg) virtualBOOLOnInitDialog(); afx_msgvoidOnSelchangingTree(NMHDR*pNMHDR,LRESULT*pResult); afx_msgvoidOnFind(); //}}AFX_MSG DECLARE_MESSAGE_MAP()};功能:顯示某一個數(shù)據(jù)包地具體信息,數(shù)據(jù)包包頭信息以樹形結(jié)構(gòu)表現(xiàn)出來,同時提供查找功能,當(dāng)我們輸入一個字符串地時候,可以找到這個字符串的前幾個字符,字符串本身,后幾個字符。算法:當(dāng)MyDlg調(diào)用TreeDlg時就把要具體顯示的數(shù)據(jù)包在緩沖區(qū)中的位置(通過intIndexInFieldList)告訴了TreeDlg這個類,TreeDlg通過該整型數(shù)據(jù)找到數(shù)據(jù)包在緩沖區(qū)中的位置,然后設(shè)置指針指向該區(qū)域。有了指向數(shù)據(jù)包的指針之后,我們解析這個數(shù)據(jù)包,然后把網(wǎng)絡(luò)各層的數(shù)據(jù)包包頭信息轉(zhuǎn)換成字符串形式,最后顯示出來。CString m_str;//把整個數(shù)據(jù)包可打印的信息存放在該字符串中CString m_substr;//需要查找的子串voidOnFind();//完成查找任務(wù)e)連接模塊:功能:這個模塊主要分為客戶端和服務(wù)器端,客戶端內(nèi)容比較重要,它主動去連接服務(wù)器來傳輸數(shù)據(jù)。服務(wù)器端指做了簡單的功能,偵聽,接收連接,接收數(shù)據(jù),顯示數(shù)據(jù)。算法:客戶端:UINTThreadConnect(LPVOIDpParam){ structtransfer_data*data; data=(structtransfer_data*)pParam;//獲得被傳送數(shù)據(jù)的指針 ……//連接服務(wù)器,并把數(shù)據(jù)傳送過去}staticvoidCALLBACKEXPORTConnect(HWNDhWnd,//handleofCWndthatcalledSetTimerUINTnMsg,//WM_TIMERUINTnIDEvent,//timeridentificationDWORDdwTime//systemtime){ data.total_count=total_count; data.ip_count=ip_count; data.tcp_count=tcp_count;//對被傳送數(shù)據(jù)進(jìn)行賦值 ……………. AfxBeginThread(ThreadConnect,PVOID(&data));//啟動新線程去完成數(shù)據(jù)傳送任務(wù)}voidCList2View::OnConnect(){…… SetTimer(3,10000,Connect);//打開時鐘3,用時鐘觸發(fā)連接函數(shù) …}服務(wù)器端:intmain(){ … sock=socket(PF_INET,SOCK_STREAM,0);//創(chuàng)建偵聽套接字……bind(sock,(LPSOCKADDR)&m_sockServerAddr,sizeof(m_sockServerAddr))//與選定的端口綁定…… listen(sock,5);//偵聽 while(1) { …………… if((sock_accept=accept(sock,(LPSOCKADDR)&m_sockServerAddr,0))==INVALID_SOCKET)//創(chuàng)建連接套接字 if(recv(sock_accept,(char*)&data,sizeof(structtransfer_data),0)==SOCKET_ERROR)//接收數(shù)據(jù) ……………… closesocket(sock_accept);//關(guān)閉連接套接字 } closesocket(sock);//關(guān)閉偵聽套接字}f)管理模塊:voidOnAuto()功能:打開管理功能算法:創(chuàng)建CAutoDlg類,獲得本網(wǎng)段地址,和所需要監(jiān)聽的端口。啟動時鐘2,設(shè)置時鐘2的回調(diào)函數(shù)為AutoCtrl。classCAutoDlg:publicCDialog{ ……public: CIPAddressCtrlm_ip; CStringm_port;//需要被管理的端口 virtualBOOLOnInitDialog(); afx_msgvoidOnPaint();……………};功能:從用戶的輸入需要被管理的端口算法:把端口值傳遞給全局變量m_auto_portstaticvoidCALLBACKEXPORTAutoCtrl(HWNDhWnd,//handleofCWndthatcalledSetTimerUINTnMsg,//WM_TIMERUINTnIDEvent,//timeridentificationDWORDdwTime//systemtime)功能:根據(jù)GetData中記錄的需要被管理的ip地址集,發(fā)送arp和rarp數(shù)據(jù)包給各個主機(jī)中斷它們與外界的聯(lián)系。算法:偽造arp數(shù)據(jù)包,包括arp-request,arp-relay,并發(fā)送。//開始監(jiān)聽,并打開網(wǎng)卡…… lpadapter=PacketOpenAdapter(adapterlist[open-1]); lppacket=PacketAllocatePacket() …… for(i=0;i<255;i++) { if(auto_ip[i]!=0) { //構(gòu)造arp-reply欺騙數(shù)據(jù)包 … PacketInitPacket(lppacket,szPacketBuf,50); //構(gòu)造arp-request欺騙數(shù)據(jù)包 ZeroMemory(szPacketBuf,sizeof(szPacketBuf)); memcpy(eth.eh_dst,DstMac,5);//目標(biāo)MAC memcpy(eth.eh_src,SrcMac,5);//發(fā)送方MAC ……… memcpy(szPacketBuf,(char*)ð,sizeof(eth)); memcpy(szPacketBuf+sizeof(eth),(char*)&arpr,sizeof(arpr)); PacketInitPacket(lppacket,szPacketBuf,50);//發(fā)送數(shù)據(jù)包 PacketSetNumWrites(lpadapter,2) PacketSendPacket(lpadapter,lppacket,TRUE)==FALSE) } } ……4.4 系統(tǒng)特色本系統(tǒng)的主要兩個特色就是分布式網(wǎng)絡(luò)監(jiān)聽和簡單網(wǎng)絡(luò)管理。4.4.1 分布式網(wǎng)絡(luò)監(jiān)聽由于交換式局域網(wǎng)的存在和普通監(jiān)聽技術(shù)只對同一網(wǎng)段的主機(jī)有效的缺陷,使監(jiān)聽技術(shù)的能力受到了很大的影響。為了能夠擴(kuò)大網(wǎng)絡(luò)監(jiān)聽的范圍,診斷不同網(wǎng)絡(luò)中問題,我認(rèn)為我們應(yīng)該把每一個網(wǎng)絡(luò)監(jiān)聽工具作為一個客戶端,然后把各個客戶端程序安裝到不同網(wǎng)段的網(wǎng)關(guān)上。這樣每個客戶端都可以監(jiān)聽到本網(wǎng)段的信息,最后每個客戶端把各自的監(jiān)聽信息發(fā)送到一個監(jiān)聽服務(wù)器上。這樣我們就可以獲取不同網(wǎng)段上的網(wǎng)絡(luò)信息了。但是在跨越不同網(wǎng)段的時候我們又會遇到防火墻或是入侵檢測系統(tǒng)的過濾,我個人認(rèn)為如果我們從開放服務(wù)器的80端口,然后把客戶端要傳送的數(shù)據(jù)封裝在HTTP協(xié)議的數(shù)據(jù)包內(nèi),這樣一般就可以穿透絕大多數(shù)的防火墻了。4.4.2 簡單網(wǎng)絡(luò)管理選擇需要被管理的端口,根據(jù)一些信息截斷節(jié)點(diǎn)與外界的聯(lián)系。網(wǎng)絡(luò)蠕蟲病毒泛濫,所以如果我們在覺察到某臺機(jī)器中毒并不斷攻擊其他主機(jī)時,我們可以向他們發(fā)送偽造的arp-request和arp-relay數(shù)據(jù)包,讓他們的IP沖突,而且發(fā)出的數(shù)據(jù)包被定位到錯誤的或者不存在的網(wǎng)關(guān)地址。這樣部分被感染主機(jī)無法和網(wǎng)絡(luò)連接,或把威脅限制在一個網(wǎng)段內(nèi)了。系統(tǒng)測試與使用說明書5.1 系統(tǒng)測試系統(tǒng)采取黑盒測試的方法,即已知系統(tǒng)的功能設(shè)計規(guī)格,對每個實(shí)現(xiàn)了的功能進(jìn)行測試,觀察是否符合要求。下面就按各個子系統(tǒng)的,測試它們的功能是否滿足了要求。5.1.1 監(jiān)聽功能測試用例:打開監(jiān)聽工具M(jìn)ySniffer,開始監(jiān)聽。測試能否能夠捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包設(shè)置過濾信息,測試過濾信息是否由效測試結(jié)果:通過顯示子系統(tǒng)的幾個功能,證明系統(tǒng)成功捕獲數(shù)據(jù)包。圖5.1表現(xiàn)如何進(jìn)行設(shè)置過濾信息,同樣當(dāng)設(shè)置了需要過濾的協(xié)議時,系統(tǒng)只捕獲與這些協(xié)議有關(guān)的數(shù)據(jù)包,而丟棄無關(guān)的數(shù)據(jù)包。圖5.1設(shè)置過濾信息截圖5.1.2 顯示功能測試用例:測試能否用文本信息顯示網(wǎng)絡(luò)流量的統(tǒng)計信息,包括總量,分量,百分比,通訊情況信息。如果能以文本方式正確顯示流量信息,說明測試成功,否則失敗。測試能否用圖表信息顯示統(tǒng)計信息,觀察各種流量在最近時間能的變化幅度。如果能正確顯示流量信息,說明測試成功,否則失敗。測試能否用列表方式顯示數(shù)據(jù)包的概要信息,檢驗各種概要信息是否準(zhǔn)確,詳細(xì)。如果概要信息準(zhǔn)確,說明測試成功,否則失敗。測試能否用樹形方式顯示特定數(shù)據(jù)包的詳細(xì)信息,檢驗各個包頭信息解析的是否正確。如果各個字段正確,說明測試成功,否則失敗。測試能否在特定數(shù)據(jù)包中查找到關(guān)鍵字和關(guān)鍵字附近的字符。我們使用user關(guān)鍵字來查找。如果數(shù)據(jù)包中存在user字符串,且查找到說明測試成功,否則失敗。測試結(jié)果:用文本方式顯示統(tǒng)計信息的結(jié)果,如圖示5.2:圖5.2用文本方式顯示統(tǒng)計信息的截圖用圖表方式顯示統(tǒng)計信息的結(jié)果,如圖示5.3:圖5.3用圖表方式顯示統(tǒng)計信息的截圖用列表方式顯示數(shù)據(jù)包的概要信息的測試結(jié)果,如圖示5.4:圖5.4用列表方式顯示數(shù)據(jù)包的截圖用樹形方式顯示特定數(shù)據(jù)包的詳細(xì)信息的結(jié)果,如圖示5.5:查找關(guān)鍵字的結(jié)果,我們在一個FTP數(shù)據(jù)包中得到用戶名b00015007這個帳號,加藍(lán)色的字段就是用戶名在特定數(shù)據(jù)包中如圖示5.5:(圖5.5用樹形方式顯示特定數(shù)據(jù)包的截圖)5.1.2 管理功能測試用例:在指定端口號之后,系統(tǒng)能否讓指定的主機(jī)斷網(wǎng)。點(diǎn)擊auto菜單項,把對話框中的端口地址設(shè)置為21,這樣系統(tǒng)將記錄局域網(wǎng)內(nèi)所有使用FTP應(yīng)用程序的主機(jī)IP。然后在1主機(jī)上打開FTP,連接地址為的ftp服務(wù)器。如果主機(jī)造成IP沖突并且斷網(wǎng)說明測試成功,否則失敗。測試結(jié)果:在1主機(jī)的右下角出現(xiàn),IP沖突的提示,而且FTP連接也中斷了,如圖5.6。所以證明管理功能成功完成任務(wù)。圖5.6管理功能測試結(jié)果截圖5.1.3 連接功能測試用例:測試客戶端到服務(wù)器間能否通訊。首先打開服務(wù)器應(yīng)用程序,然后點(diǎn)擊客戶端的connect菜單項,設(shè)置遠(yuǎn)程服務(wù)器的IP和端口,開始連接操作。觀察服務(wù)器端是否能收到客戶端發(fā)來的信息。如果可以成功顯示客戶端的信息,則說明測試成功,否則測試失敗。測試結(jié)果:服務(wù)器端每十秒種收到客戶端發(fā)來的監(jiān)聽得到的統(tǒng)計信息。由紅色的兩個圈可以證明數(shù)據(jù)成功地從客戶端傳送到服務(wù)器端??蛻舳说男畔⑷鐖D5.7,服務(wù)器端的信息如圖5.8:圖5.7客戶端截圖 圖5.8服務(wù)器截圖5.2 工具軟件的配置軟件運(yùn)行硬件環(huán)境:CPU(interPentium4),RAM(512M),網(wǎng)卡,Ethernet802.3(局域網(wǎng))軟件運(yùn)行軟件環(huán)境:操作系統(tǒng)(WINDOWS-XP或者WINDOWS-2000),安裝WINPCAP開發(fā)包軟件開發(fā)平臺:VC++.net集成開放環(huán)境5.3 監(jiān)聽工具的使用點(diǎn)擊工具欄中的三角形按鈕開始監(jiān)聽(或者選擇菜單欄中start選項),點(diǎn)擊工具欄中的正方形按鈕結(jié)束監(jiān)聽(或者選擇菜單欄中stop選項)。監(jiān)聽進(jìn)行過程中,視圖默認(rèn)顯示文本信息,如果要顯示圖表信息,要先結(jié)束監(jiān)聽然后選擇菜單欄中View菜單項的子菜單項Graphic。如果要顯示系統(tǒng)的列表信息,在結(jié)束監(jiān)聽狀態(tài)下,選擇Display菜單項。如果要獲得某個特定數(shù)據(jù)包的詳細(xì)信息,在列表對話框中雙擊所要查看的數(shù)據(jù)包,數(shù)據(jù)包的詳細(xì)信息就會以樹形方式展現(xiàn)在您面前。如果要實(shí)現(xiàn)管理功能,在監(jiān)聽狀態(tài)下點(diǎn)擊auto菜單項,輸入必要信息,開始管理。再點(diǎn)擊一下就結(jié)束管理功能如果要實(shí)現(xiàn)分布式監(jiān)聽,則首先打開服務(wù)器程序,然后在客戶端選擇connect菜單項,客戶端就把信息傳送給服務(wù)器端,再點(diǎn)擊一下結(jié)束數(shù)據(jù)傳送。結(jié)論系統(tǒng)的不足和改進(jìn)MySniffer軟件基本上完成了一個網(wǎng)絡(luò)監(jiān)聽工具,所要完成的基本功能,但是它還有很多不足之處無法實(shí)現(xiàn)跨平臺性 本文主要論述了如何在windowsNT,2000,xp系統(tǒng)下實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽技術(shù),這種開發(fā)方法無法在Unix和linux系統(tǒng)中實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽,甚至不能直接移植到windows98上。在Unix和Linux通常情況下我們采用Libpcap庫來實(shí)現(xiàn)。Libcap實(shí)質(zhì)上是一個系統(tǒng)獨(dú)立的API函數(shù)接口,用于用戶層次的數(shù)據(jù)包截獲工作。它為底層網(wǎng)絡(luò)監(jiān)聽編程提供了一個易于移植的應(yīng)用程序框架,底層操作包括數(shù)據(jù)包的截獲和網(wǎng)絡(luò)調(diào)試。Libpcap接口是基于BPF(BerkeleyPacketFilter)數(shù)據(jù)包過濾機(jī)制[7]。Libpcap庫只支持BPF接口的內(nèi)核過濾。如果主機(jī)上沒有BPF機(jī)制,所有的數(shù)據(jù)包都必須讀取到用戶應(yīng)用程序的空間后,才能進(jìn)行操作,這樣將導(dǎo)致性能嚴(yán)重下降,可能會有丟包的問題出現(xiàn)。對于windows98來說,我們只要替換用一個虛擬協(xié)議驅(qū)動替代現(xiàn)在的wdm協(xié)議驅(qū)動程序就可以了。無法在交換式以太網(wǎng)實(shí)現(xiàn)監(jiān)聽用交換機(jī)來代替HUB,原先的共享式以太網(wǎng)就變成了交換式以太網(wǎng),Switch不會把數(shù)據(jù)包在端口進(jìn)行廣播,它通過自己的ARP緩存來決定數(shù)據(jù)包傳輸?shù)侥膫€端口上。因此如果A,B主機(jī)在不同端口處Pa,Pb,A就沒有辦法監(jiān)聽到B的數(shù)據(jù)包。因為Switch上的arp表是動態(tài)變化的,所以我們?nèi)绻軌騻卧煲粋€ARP數(shù)據(jù)包包含B的MAC地址,然后從A發(fā)送出去,那么Switch就錯誤得認(rèn)為Pa-MACb有對應(yīng)關(guān)系,所以它就會把數(shù)據(jù)包發(fā)送到Pa端口,那么A就能監(jiān)聽到B的信息。但是還存在一個問題,就是這樣做將影響B(tài)正常的網(wǎng)絡(luò)通訊。暫時沒有想出更好的辦法。網(wǎng)絡(luò)管理子系統(tǒng)的不足MySniffer中的管理功能,其實(shí)設(shè)計不是很合理,針對端口進(jìn)行判斷主機(jī)是否存在安全問題,顯然十分武斷,那些開啟合理服務(wù)的主機(jī)也將會被懷疑。其實(shí)原本的想法是建立一個病毒特征庫對網(wǎng)絡(luò)中數(shù)據(jù)包進(jìn)行比對,發(fā)現(xiàn)有問題的數(shù)據(jù)包后,再對主機(jī)采取一定的措施??赡苡腥藭J(rèn)為這樣的工作方式,一臺管理服務(wù)器或者是網(wǎng)關(guān)服務(wù)器無法勝任大量的網(wǎng)絡(luò)處理。性能的確是問題,但是我們還可以把任務(wù)分擔(dān)到多臺服務(wù)器上,不同服務(wù)器針對不同協(xié)議或者不同長度的數(shù)據(jù)包進(jìn)行過濾。連接子系統(tǒng)的不足MySniffer中的連接子系統(tǒng)也還不很理想,只是一種思想而已。因為在C/S結(jié)構(gòu)下,只是簡單的傳輸數(shù)據(jù)顯然是很消極的管理方式,如果能采取主動的管理方式就會更加合理。比如采用SNMPV3協(xié)議實(shí)現(xiàn)分布式監(jiān)聽工具的網(wǎng)絡(luò)管理,將使系統(tǒng)更加緊湊。反監(jiān)聽技術(shù)檢測網(wǎng)絡(luò)監(jiān)聽的手段對發(fā)生在局域網(wǎng)的其他主機(jī)上的監(jiān)聽,一直以來,都缺乏很好的檢測方法。這是由于產(chǎn)生網(wǎng)絡(luò)監(jiān)聽行為的主機(jī)在工作時總是不做聲的收集數(shù)據(jù)包,幾乎不會主動發(fā)出任何信息。但目前網(wǎng)上已經(jīng)有了一些解決這個問題的思路和產(chǎn)品:利用ping模式進(jìn)行監(jiān)測當(dāng)一臺主機(jī)進(jìn)入混雜模式時,以太網(wǎng)的網(wǎng)卡會將所有不屬于他的數(shù)據(jù)照單全收;向局域網(wǎng)內(nèi)的主機(jī)發(fā)送非廣播方式的,MAC地址不等于局域網(wǎng)內(nèi)任何主機(jī)的硬件地址的icmp包,所以它不會去對比數(shù)據(jù)包的硬件地址,而是將數(shù)據(jù)包直接傳到上層,上層檢查數(shù)據(jù)包的ip地址,符合自己的ip,于是會對對這個ping的包做出回應(yīng)。這樣,一臺處于網(wǎng)絡(luò)監(jiān)聽模式的主機(jī)就被發(fā)現(xiàn)了。利用arp數(shù)據(jù)包進(jìn)行監(jiān)測除了使用ping進(jìn)行監(jiān)測外,目前比較成熟的有利用arp方式進(jìn)行監(jiān)測的。這種模式是上述ping方式的一種變體,它使用arp數(shù)據(jù)包替代了上述的icmp數(shù)據(jù)包。向局域網(wǎng)內(nèi)的主機(jī)發(fā)送非廣播方式的arp包,如果局域網(wǎng)內(nèi)的某個主機(jī)響應(yīng)了這個arp請求,那么我們就可以判斷它很可能就是處于網(wǎng)絡(luò)監(jiān)聽模式了,這是目前相對而言比較好的監(jiān)測模式。防范網(wǎng)絡(luò)監(jiān)聽的手段上面我們知道,監(jiān)聽是發(fā)生在以太網(wǎng)內(nèi)的,那么,很明顯,首先就要確保以太網(wǎng)的整體安全性,因為監(jiān)聽行為要想發(fā)生,一個最重要的前提條件就是以太網(wǎng)內(nèi)部的一臺有漏洞的主機(jī)被攻破,只有利用被攻破的主機(jī),才能進(jìn)行監(jiān)聽,去收集以太網(wǎng)內(nèi)敏感的數(shù)據(jù)信息。其次,采用加密手段也是一個很好的辦法,因為如果監(jiān)聽工具抓取到的數(shù)據(jù)都是以密文傳輸?shù)?,那對入侵者即使抓取到了傳輸?shù)臄?shù)據(jù)信息,意義也是不大的-比如作為telnet,ftp等安全替代產(chǎn)品目前采用ssh2還是安全的。這是目前相對而言使用較多的手段之一,在實(shí)際應(yīng)用中往往是指替換掉不安全的采用明文傳輸數(shù)據(jù)的服務(wù),如在server端用ssh,openssh等替換unix系統(tǒng)自帶的telnet,ftp,rsh,在client端使用securecrt,sshtransfer替代telnet,ftp等。除了加密外,使用交換機(jī)目前也是一個應(yīng)用比較多的方式,不同于工作在第一層的hub,交換機(jī)是工作在二層,也就是說數(shù)據(jù)鏈路層的。對二層設(shè)備而言,僅有兩種情況會發(fā)送廣播報文,一是數(shù)據(jù)報的目的MAC地址不在交換機(jī)維護(hù)的數(shù)據(jù)庫中,此時報文向所有端口轉(zhuǎn)發(fā),二是報文本身就是廣播報文。由此,我們可以看到,這在很大程度上解決了網(wǎng)絡(luò)監(jiān)聽的困擾。此外,對安全性要求比較高的情況可以考慮kerberos,kerberos是一種為網(wǎng)絡(luò)通信提供可信第三方服務(wù)的面向開放系統(tǒng)的認(rèn)證機(jī)制,它提供了一種強(qiáng)加密機(jī)制使client端和server即使在非安全的網(wǎng)絡(luò)連接環(huán)境中也能確認(rèn)彼此的身份,而且在雙方通過身份認(rèn)證后,后續(xù)的所有通訊也是被加密的。雖然上述的安全措施可以防范網(wǎng)絡(luò)監(jiān)聽,但是網(wǎng)絡(luò)監(jiān)聽對安全威脅至今任存在的原因是它能獲得主機(jī)之間的信任關(guān)系,通過信任鏈從事滲透入侵將是非常難以追蹤和覺察的。致謝:感謝在整個畢業(yè)設(shè)計的過程中,我的指導(dǎo)老師馮博琴老師和夏秦老師的大力幫助。剛開始,以前沒有接觸過網(wǎng)絡(luò)設(shè)備,所以在進(jìn)行網(wǎng)絡(luò)實(shí)驗的配置過程中存在很大的困難。馮老師和夏老師給認(rèn)真細(xì)致地教我們網(wǎng)絡(luò)實(shí)驗地各種原理,還幫助我們完成網(wǎng)絡(luò)實(shí)驗中遇到地困難。在軟件開發(fā)地過程中馮老師和夏老師不斷詢問我在軟件開發(fā)中遇到地問題,給予我很多地意見和建議,使我少走了不少彎路。最后在論文的撰寫過程中,夏秦老師悉心地給我修改論文地框架和內(nèi)容,在大方向上幫助我確定了論文地主題。在此,還感謝昂正全在組網(wǎng)過程中的幫助。昂正全同學(xué)認(rèn)真,踏實(shí)的工作態(tài)度,讓我欽佩不已。我們一起完成了數(shù)十個網(wǎng)絡(luò)實(shí)驗,共同討論編程中的困難,克服一個又一個難題,在工作的過程中建立了深深的友情。參考文獻(xiàn):《網(wǎng)絡(luò)偵聽器的實(shí)現(xiàn)及其優(yōu)化》李少凡,汪為農(nóng)上海交通大學(xué)學(xué)報1998年10期《用原始套接字實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽》張志強(qiáng)基于IMD的包過濾防火墻原理與實(shí)現(xiàn)《基于Winpcap的網(wǎng)絡(luò)嗅探程序設(shè)計》莊春興,彭奇志計算機(jī)與現(xiàn)代化2002年05期Winpcap源代碼http://Winpcap.polito.it《網(wǎng)絡(luò)嗅探器Sniffer軟件源代碼淺析3:采用Libpcap庫的通用設(shè)計》唐正軍,劉代志.計算機(jī)工程

2002年02期《計算機(jī)網(wǎng)絡(luò)》清華大學(xué)出版社《網(wǎng)絡(luò)編程與開發(fā)技術(shù)》西安交通大學(xué)出版社《思科網(wǎng)絡(luò)技術(shù)學(xué)院教程》人民郵電出版社《防火墻原理與實(shí)用技術(shù)》北京啟明星辰信息技術(shù)有限公司編著,北京電子工業(yè)出版社2002[12]. 《TCP/IP詳解卷1協(xié)議》史蒂文斯ShiDiWenSi(Stevens,W.Richard)著北京機(jī)械工業(yè)出版社2000附錄1typedefstructethdr{ unsignedchareh_dst[6]; //以太網(wǎng)目的地址6 unsignedchareh_src[6]; //以太網(wǎng)源地址6 unsignedshorteh_type; //幀類型2}ETHDR,*PETHDR;typedefstructarphdr{ unsignedshortarp_hdr; ///硬件類型 unsignedshortarp_pro; //協(xié)議類型 unsignedchararp_hln; //硬件地址長度 unsignedchararp_pln; //協(xié)議地址長度 unsignedshortarp_opt; //請求還是應(yīng)答 unsignedchararp_sha[6]; //發(fā)送者硬件地址 unsignedlongarp_spa; //發(fā)送者IP地址 unsignedchararp_tha[6]; //目的硬件地址 unsignedlongarp_tpa; //目的IP地址 //填充字段}ARPHDR,*PARPHDR;typedefstructiphdr{ unsignedcharh_lenver; //版本號(4位)IP頭長度(4位) unsignedchartos; //服務(wù)類型(8位) unsignedshorttotal_len; //數(shù)據(jù)包長度(16位) unsignedshortident; //標(biāo)識段(16位) unsignedshortfrag_and_flags;//標(biāo)志段(16位) unsignedcharttl; //生存時間(8位) unsignedcharprotocol; //傳輸協(xié)議(8位) unsignedshortchecksum; //頭校驗和(16位) unsignedintsourceip; //發(fā)送地址(32位) unsignedintdestip; //目標(biāo)地址(32位)}IPHDR,*PIPHDR;typedefstructtcphdr //定義TCP首部{ USHORTsource_port; //16位源端口 USHORTdest_port; //16位目的端口 unsignedintseq; //32位序列號 unsignedintack; //32位確認(rèn)號 unsignedcharlenres; //4位首部長度/6位保留字 unsignedcharflag; //6位標(biāo)志位 USHORTwin; //16位窗口大小 USHORTsum; //16位校驗和 USHORTurp; //16位緊急數(shù)據(jù)偏移量}TCPHDR,*PTCPHDR;typedefstruct

溫馨提示

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

評論

0/150

提交評論