![計(jì)算機(jī)網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù)設(shè)計(jì)_第1頁(yè)](http://file4.renrendoc.com/view/436d2ea3c23010deefe3014c1d67e47b/436d2ea3c23010deefe3014c1d67e47b1.gif)
![計(jì)算機(jī)網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù)設(shè)計(jì)_第2頁(yè)](http://file4.renrendoc.com/view/436d2ea3c23010deefe3014c1d67e47b/436d2ea3c23010deefe3014c1d67e47b2.gif)
![計(jì)算機(jī)網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù)設(shè)計(jì)_第3頁(yè)](http://file4.renrendoc.com/view/436d2ea3c23010deefe3014c1d67e47b/436d2ea3c23010deefe3014c1d67e47b3.gif)
![計(jì)算機(jī)網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù)設(shè)計(jì)_第4頁(yè)](http://file4.renrendoc.com/view/436d2ea3c23010deefe3014c1d67e47b/436d2ea3c23010deefe3014c1d67e47b4.gif)
![計(jì)算機(jī)網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù)設(shè)計(jì)_第5頁(yè)](http://file4.renrendoc.com/view/436d2ea3c23010deefe3014c1d67e47b/436d2ea3c23010deefe3014c1d67e47b5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
計(jì)算機(jī)網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù)設(shè)計(jì)系統(tǒng)目標(biāo)本課設(shè)從實(shí)際工程應(yīng)用角度出發(fā),以計(jì)算機(jī)網(wǎng)絡(luò)原理為指導(dǎo),結(jié)合當(dāng)前網(wǎng)絡(luò)中的一些常用技術(shù)和標(biāo)準(zhǔn),模擬仿真了一組網(wǎng)絡(luò)實(shí)驗(yàn)。為了能夠檢驗(yàn)實(shí)驗(yàn)的結(jié)果,我們開(kāi)發(fā)了這個(gè)網(wǎng)絡(luò)監(jiān)聽(tīng)工具,幫助實(shí)驗(yàn)人員對(duì)網(wǎng)絡(luò)中的信息進(jìn)行實(shí)時(shí)的監(jiān)測(cè)、分析,診斷網(wǎng)絡(luò)故障。同時(shí)通過(guò)該畢業(yè)設(shè)計(jì)的容,讓我們了解各種抓包技術(shù),熟練掌握基于Winpcap開(kāi)發(fā)包的編程模式;了解網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù)的新發(fā)展和網(wǎng)絡(luò)安全防的新方向;最后能有所體會(huì)。1.1 相關(guān)理論與技術(shù)的簡(jiǎn)單介紹1.2.1網(wǎng)絡(luò)監(jiān)聽(tīng)原理共享式局域網(wǎng)采用的是廣播信道,也就是說(shuō)每臺(tái)主機(jī)所發(fā)出的幀都會(huì)被整個(gè)網(wǎng)絡(luò)的所有主機(jī)接收到⑴。接收主機(jī)對(duì)幀的處理根據(jù)網(wǎng)卡的工作模式來(lái)實(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)卡處于混雜模式的時(shí)候,它不作任何判斷直接把接收到的所有幀交給上層處理程序。網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù)就是基于這個(gè)原理,來(lái)捕獲網(wǎng)絡(luò)中所有的數(shù)據(jù)包,實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)測(cè)和流量分析的。交換式以太網(wǎng)是基于數(shù)據(jù)鏈路層的點(diǎn)到點(diǎn)的信道,所以簡(jiǎn)單采用應(yīng)用于共享式以太網(wǎng)的監(jiān)聽(tīng)技術(shù)是完全失效的。本文主要討論共享式以太網(wǎng)的情況,最后給出交換式以太網(wǎng)監(jiān)聽(tīng)難題的解決方案。1.2.2監(jiān)聽(tīng)技術(shù)相關(guān)的實(shí)現(xiàn)方法?原始套接字編程模式⑵:RawSocket:原始套接字可以用它來(lái)發(fā)送和接收IP層以上的原始數(shù)據(jù)包,如ICMP,TCP,UDP....創(chuàng)建了一個(gè)RawSocketintsockRaw=socket(AF_INET,S0CK_RAW,IPPR0T0_RAW);.把網(wǎng)卡置于混雜模式用RawSocket實(shí)現(xiàn)代碼如下:setsockopt(sock,IPPR0T0_IP,IP_HDRINCL,(char*)&flag,sizeof(flag));設(shè)置IP頭操作選項(xiàng)。flag標(biāo)志是用來(lái)設(shè)置IP頭操作的,boolflag=ture也就是說(shuō)要親自處理IP頭。bind(sockRaw,(PSOCKADDR)&addrLocal,sizeof(addrLocal);把sockRaw綁定到本地網(wǎng)卡上,addrLocal為本地地址:SOCKADDR_INaddrLocaloioctisocket(sockRaw,SIORCVALL,&dwValue);讓sockRaw接受所有的數(shù)據(jù)。dwValue為輸入輸出參數(shù),為1時(shí)執(zhí)行,0時(shí)取消:DWORDdwValue=1;.捕獲數(shù)據(jù)包recv(sockRaw,RecvBuf,BUFFER_SIZE,0);〃接受任意數(shù)據(jù)包原始套接字編程模式:優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單,不需要做驅(qū)動(dòng)程序就可實(shí)現(xiàn)抓包.缺點(diǎn):數(shù)據(jù)不含幀信息,不能接收到與IP同層的其它數(shù)據(jù)包,如ARP,RARP,IPX-?IMD中間層驅(qū)動(dòng)編程模式⑶:中間層驅(qū)動(dòng)(NDISintermediatedriver)核級(jí)網(wǎng)絡(luò)驅(qū)動(dòng)介紹:MicrosoftWindows2000支持三種基本的核級(jí)網(wǎng)絡(luò)驅(qū)動(dòng),這三層driver順序從下到上依次為:MiniportNICdrivers:微端口網(wǎng)卡驅(qū)動(dòng),位于最底層,直接操縱網(wǎng)卡并且對(duì)高層驅(qū)動(dòng)提供接口。Intermediatedrivers:IMD中間層驅(qū)動(dòng)位于1和3之間。Protocoldrivers:高層協(xié)議驅(qū)動(dòng),俗稱(chēng)為T(mén)DI(傳輸驅(qū)動(dòng)程序接口),高于前面兩層,直接面向用戶(hù)級(jí),為用戶(hù)提供網(wǎng)絡(luò)服務(wù),也就是絕大多數(shù)程序所用到的網(wǎng)絡(luò)接口。IMD驅(qū)動(dòng)IMD中間層,它的實(shí)質(zhì)很簡(jiǎn)單,即:中間層插入網(wǎng)卡和協(xié)議層之間,對(duì)上面的協(xié)議層表現(xiàn)為一個(gè)虛擬的微端口網(wǎng)卡結(jié)構(gòu),而對(duì)下面的網(wǎng)卡則表現(xiàn)為一個(gè)協(xié)議層的結(jié)構(gòu)。所以,無(wú)論是網(wǎng)卡接收并上傳的數(shù)據(jù)報(bào),還是上層要下送至網(wǎng)卡發(fā)送的數(shù)據(jù)報(bào),無(wú)一例外地要經(jīng)過(guò)中間層。IMD包過(guò)濾技術(shù)前面我們已經(jīng)看到,所有的數(shù)據(jù)報(bào)都要經(jīng)過(guò)中間層,所以,我們可以在中間層加入我們想要過(guò)濾的數(shù)據(jù)報(bào)的特征,實(shí)現(xiàn)基于中間層驅(qū)動(dòng)的核級(jí)包過(guò)濾。優(yōu)勢(shì):首先,在驅(qū)動(dòng)級(jí)別上做過(guò)濾,無(wú)須組包,速度快,效率自然就高;其次,所有的數(shù)據(jù)報(bào)無(wú)一例外,只要網(wǎng)卡上傳的數(shù)據(jù)報(bào)均可以截獲,避免了用戶(hù)級(jí)無(wú)法得到所有數(shù)據(jù)報(bào)的缺點(diǎn)。缺點(diǎn):IMD包過(guò)濾技術(shù)也存在其不可避免的缺點(diǎn),與操作系統(tǒng)版本關(guān)系密切,與硬件聯(lián)系大,可移植性低,調(diào)試?yán)щy。?Winpcap編程模式Winpcap(windowspacketcapture)是windows平臺(tái)下一個(gè)免費(fèi),公共的網(wǎng)絡(luò)訪(fǎng)問(wèn)系統(tǒng)。開(kāi)發(fā)Winpcap這個(gè)項(xiàng)目的目的在于為Win32應(yīng)用程序提供訪(fǎng)問(wèn)網(wǎng)絡(luò)底層的能力。它提供了以下的各項(xiàng)功能:.捕獲原始數(shù)據(jù)報(bào),包括在共享式網(wǎng)絡(luò)上各主機(jī)發(fā)送/接收的以及相互之間交換的數(shù)據(jù)報(bào);.在數(shù)據(jù)報(bào)發(fā)往應(yīng)用程序之前,按照自定義的規(guī)則將某些特殊的數(shù)據(jù)報(bào)過(guò)濾掉;.在網(wǎng)絡(luò)上發(fā)送原始的數(shù)據(jù)報(bào);.收集網(wǎng)絡(luò)通信過(guò)程中的統(tǒng)計(jì)信息。不足:Winpcap的主要功能在于獨(dú)立于主機(jī)協(xié)議(如TCPTP)而發(fā)送和接收原始數(shù)據(jù)報(bào)。也就是說(shuō),Winpcap不能阻塞,過(guò)濾或控制其他應(yīng)用程序數(shù)據(jù)報(bào)的發(fā)收,它僅僅只是監(jiān)聽(tīng)共享網(wǎng)絡(luò)上傳送的數(shù)據(jù)報(bào)。因此,它不能用于QoS調(diào)度程序或個(gè)人防火墻。目前,Winpcap開(kāi)發(fā)的主要對(duì)象是windowsNT/2000/XP,這主要是因?yàn)樵谑褂肳inpcap的用戶(hù)中只有一小部分是僅使用windows95/98/Me,并且M$也已經(jīng)放棄了對(duì)win9x的開(kāi)發(fā)。其實(shí)Winpcap中的面向9x系統(tǒng)的概念和NT系統(tǒng)的非常相似,只是在某些實(shí)現(xiàn)上有點(diǎn)差異,比如說(shuō)9x只支持ANSI編碼,而NT系統(tǒng)則提倡使用Unicode編碼。1.2系統(tǒng)需求能夠捕獲所需要的所有以太網(wǎng)數(shù)據(jù)包分析捕獲的包類(lèi)型,報(bào)文信息數(shù)據(jù)形式顯示當(dāng)前以太網(wǎng)中數(shù)據(jù)包的分布情況圖表形式顯示當(dāng)前以太網(wǎng)中數(shù)據(jù)包的分布情況能表現(xiàn)網(wǎng)絡(luò)中各個(gè)節(jié)點(diǎn)的相互通訊情況可以保存數(shù)據(jù)到文件在數(shù)據(jù)包中查找敏感信息(匹配關(guān)鍵字)具備簡(jiǎn)單的網(wǎng)絡(luò)管理功能實(shí)現(xiàn)簡(jiǎn)單的分布式監(jiān)聽(tīng)第2章基于Winpcap開(kāi)發(fā)的技術(shù)詳解討論了各種不同的編程模式之后,本章將闡明我們選擇Winpcap技術(shù)的原因,然后將對(duì)Winpcap做詳細(xì)的分析。1選用Winpcap技術(shù)的原因:提供了一套標(biāo)準(zhǔn)的抓包接口,與libpcap兼容,可使得原來(lái)許多UNIX平臺(tái)下的網(wǎng)絡(luò)分析工具快速移植過(guò)來(lái)便于開(kāi)發(fā)各種網(wǎng)絡(luò)分析工具原始套接字的編程模式中不能捕獲ARP和IPX的數(shù)據(jù)包對(duì)SNIFFER軟件有著致命的限制,所以不能選擇這種方法。IMD編程模式雖然功能強(qiáng)大,而且靈活性強(qiáng),但是開(kāi)發(fā)調(diào)試難度比較大,不適合作為SNIFFER軟件的開(kāi)發(fā)模式,甚至在防火墻開(kāi)發(fā)技術(shù)中也不用IMDoWINPCAP本身不能阻塞,過(guò)濾或控制其他應(yīng)用程序數(shù)據(jù)報(bào)的發(fā)收的缺點(diǎn)在我們這個(gè)軟件的開(kāi)發(fā)過(guò)程中,并不影響。所以經(jīng)過(guò)權(quán)衡,我選用了Winpcap編程模式來(lái)開(kāi)發(fā)MySniffer軟件。2 Winpcap的結(jié)構(gòu)分析Winpcap的主要思想來(lái)源于Unix系統(tǒng)中著名的BSD包捕獲結(jié)構(gòu),它的基本結(jié)構(gòu)如圖2.1所示:整個(gè)包捕獲框架的基礎(chǔ)是NDIS(網(wǎng)絡(luò)驅(qū)動(dòng)器接口規(guī)),它是Windows中最低端的與聯(lián)網(wǎng)有關(guān)的軟件,主要是為各種應(yīng)用協(xié)議與網(wǎng)卡之間提供的一套接
OtherprotocolstacksNICDriver口函數(shù)。Winpcap由三個(gè)模塊組成,一個(gè)是工作在核級(jí)別上的NPF包過(guò)濾器;另外兩個(gè)是用戶(hù)級(jí)的動(dòng)態(tài)連接庫(kù)packet,dll和wpcap.dll"owpcap.dll是packet.dll的上一層封裝,提供了編程的高級(jí)接口。為了能更好的了解Winpcap的工作原理,我選用了OtherprotocolstacksNICDriver口函數(shù)。Winpcap由三個(gè)模塊組成,一個(gè)是工作在核級(jí)別上的NPF包過(guò)濾器;另外兩個(gè)是用戶(hù)級(jí)的動(dòng)態(tài)連接庫(kù)packet,dll和wpcap.dll"owpcap.dll是packet.dll的上一層封裝,提供了編程的高級(jí)接口。為了能更好的了解Winpcap的工作原理,我選用了packet,dll作為程序?qū)Φ讓釉L(fǎng)問(wèn)的接口。因?yàn)榛赪inpcap開(kāi)發(fā)涉及到驅(qū)動(dòng)程序開(kāi)發(fā)技術(shù),dll動(dòng)態(tài)連接庫(kù)開(kāi)發(fā)技術(shù),和vc的MFC應(yīng)用程序開(kāi)發(fā)技術(shù),所以將對(duì)它們做一些介紹。packet.dll圖2.1Winpcap及NPF的結(jié)構(gòu)圖⑸UserLevelNetworkTapKernelBufferToDiskNetworkPackets?wpcap.dllKernelsBufferKernelLevelCaptureApplic^ionLogging/ApplicationMonitoringAppliedionfilteruser-buffer1NDIS驅(qū)動(dòng)開(kāi)發(fā)技術(shù)網(wǎng)絡(luò)驅(qū)動(dòng)程序使用ISO的開(kāi)放的系統(tǒng)互連網(wǎng)羅標(biāo)準(zhǔn)(0SI),這是一個(gè)七層的模型,它的頂層是應(yīng)用軟件層,底層是硬件連接和網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu),網(wǎng)絡(luò)接口卡(NIC)給大多數(shù)的平臺(tái)提供網(wǎng)絡(luò)的硬件接口,網(wǎng)絡(luò)驅(qū)動(dòng)程序是寫(xiě)給指定的NIC的驅(qū)動(dòng)程序。網(wǎng)絡(luò)驅(qū)動(dòng)程序接口規(guī)(NDIS)給NIC驅(qū)動(dòng)程序提供庫(kù)支持,通常只允許NIC廠商提供管理硬件特殊細(xì)節(jié)的MINI驅(qū)動(dòng)程序,更高層的NDIS(中間驅(qū)動(dòng)程序,協(xié)議驅(qū)動(dòng)程序)在需要的時(shí)候提供媒體轉(zhuǎn)換,過(guò)濾。分層的NDIS如圖2所示。WIN2000提供一個(gè)分層的核模式軟件傳輸驅(qū)動(dòng)接口(TDI),這個(gè)分層的在NDIS層和高層軟件抽象像插座和NetBIOS,TDI層使WIN2000的高層結(jié)構(gòu)具有更多的可移植性。圖2.網(wǎng)絡(luò)驅(qū)動(dòng)程序接口規(guī)DLL動(dòng)態(tài)連接庫(kù)技術(shù)DLL(DynamicLinkableLibrary)文件通常是一個(gè)具有獨(dú)立功能的程序模塊,可以進(jìn)行單獨(dú)編譯和測(cè)試。在運(yùn)行時(shí),只有當(dāng)EXE程序確實(shí)要調(diào)用這些DLL模塊的情況下,系統(tǒng)才會(huì)將它們裝載到存空間中。這種方式不僅減少了EXE文件的大小和對(duì)存空間的需求,而且使這些DLL模塊可以同時(shí)被多個(gè)應(yīng)用程序使用,只是增加DLL的計(jì)數(shù)。當(dāng)應(yīng)用程序卸載DLL時(shí),計(jì)數(shù)則減少,計(jì)數(shù)為0時(shí)DLL就從存被釋放。PACKET.DLL就是為上層應(yīng)用程序開(kāi)發(fā)的,提供操作網(wǎng)卡的模塊;而且它屏蔽應(yīng)用程序直接操作底層協(xié)議驅(qū)動(dòng)程序的復(fù)雜性。所以應(yīng)用程序可以使用PACKET.DLL所提供地接口函數(shù),安全簡(jiǎn)單的操作協(xié)議驅(qū)動(dòng)程序,使應(yīng)用程序更加健壯。第3章系統(tǒng)功能描述這個(gè)網(wǎng)絡(luò)監(jiān)聽(tīng)工具雖然不是很龐大,但是有幾個(gè)功能比較明確,也就是監(jiān)聽(tīng)功能,顯示功能,管理功能,連接功能,所以我把它們劃分為四個(gè)子系統(tǒng),來(lái)實(shí)現(xiàn)。監(jiān)聽(tīng)子系統(tǒng)監(jiān)聽(tīng)子系統(tǒng)再劃分為三個(gè)功能,捕獲功能,過(guò)濾功能,保存功能;三個(gè)功能描述如下:捕獲功能根據(jù)過(guò)濾器的設(shè)置,捕獲ip,arp,ipx,tcp,udp,ospf,icmp,spx,ipx-rip等數(shù)據(jù)包,并把數(shù)據(jù)包保存在應(yīng)用程序的緩沖區(qū)。過(guò)濾功能用戶(hù)自己定義過(guò)濾信息(特定協(xié)議進(jìn)行捕獲),也就說(shuō)用戶(hù)可能只需要了解網(wǎng)絡(luò)中某種類(lèi)型的數(shù)據(jù)包的信息,而不需要捕獲太多無(wú)用的數(shù)據(jù),一方面系統(tǒng)負(fù)擔(dān)比較大,另一方面干擾信息過(guò)多不利于用戶(hù)發(fā)現(xiàn)網(wǎng)絡(luò)中存在的問(wèn)題。保存功能在捕獲的過(guò)程中,每十秒鐘,把統(tǒng)計(jì)信息寫(xiě)入文件中,等待圖表顯示功能模塊提取信息。保存功能還根據(jù)管理功能的需要,保存數(shù)據(jù)。如果管理功能被啟動(dòng),系統(tǒng)將滿(mǎn)足管理要求的主機(jī)IP地址,記錄在IP數(shù)據(jù)集合中。等待管理子系統(tǒng)從中提取IP地址,實(shí)現(xiàn)管理功能。2 顯不子系統(tǒng)顯示子系統(tǒng)可再劃分為五個(gè)功能,總量顯示功能,分量顯示功能,通訊顯示功能,列表顯示功能,樹(shù)形顯示功能。這些功能的詳細(xì)描述如下:總量顯示功能在抓包過(guò)程中顯示捕獲數(shù)據(jù)包的總量,也就是從開(kāi)始監(jiān)聽(tīng)一直到結(jié)束,捕獲的說(shuō)有數(shù)據(jù)包的數(shù)量。分量顯示功能在抓包過(guò)程中顯示各種數(shù)據(jù)包的分量,以及它們?cè)诳偭恐斜壤ò俜直蕊@示)各種數(shù)據(jù)包的百分比是指,某種類(lèi)型的數(shù)據(jù)包除以捕獲的數(shù)據(jù)包的總量。通訊顯示功能用直觀的方法表示當(dāng)前各個(gè)節(jié)點(diǎn)的通訊對(duì)象,如果雙方存在TCP,UDP,ICMP數(shù)據(jù)包的往來(lái)我們就認(rèn)為他們之間存在著通訊,然后我們記錄他們的信息,并顯示在屏幕上。列表顯示功能在抓包終止后,顯示捕獲的數(shù)據(jù)包的信息。包括:包的次序,包的源和目的地址(ip數(shù)據(jù)包顯示ip地址,arp數(shù)據(jù)包顯示mac地址,ipx數(shù)據(jù)包顯示ipx的地址形式)包的長(zhǎng)度,包的簡(jiǎn)要說(shuō)明樹(shù)形顯示功能可以指定一個(gè)數(shù)據(jù)包,并顯示它的詳細(xì)容,信息,首先判斷是網(wǎng)絡(luò)層中的哪種類(lèi)型數(shù)據(jù)包,其次判斷是傳輸層中的哪種類(lèi)型的數(shù)據(jù)包,最后判斷是哪種應(yīng)用層的服務(wù)。才判斷的過(guò)程中不斷記錄各個(gè)的信息,并以樹(shù)狀結(jié)構(gòu)加以表現(xiàn)。3.3管理子系統(tǒng)簡(jiǎn)單網(wǎng)絡(luò)管理功能:主要指可選擇監(jiān)聽(tīng)某個(gè)端口,根據(jù)一些信息截?cái)喙?jié)點(diǎn)與外界的聯(lián)系。設(shè)計(jì)這個(gè)功能的目的是,最近這段時(shí)間利用WINDOWS遠(yuǎn)程管理或是遠(yuǎn)程調(diào)用功能的漏洞,出現(xiàn)很多攻擊。它們通常利用135,139或445端口存在的緩沖區(qū)溢出的漏洞,使病毒入侵主機(jī),然后利用相同的方法再?gòu)谋桓腥镜闹鳈C(jī)向其他網(wǎng)絡(luò)中的主機(jī)發(fā)起攻擊。所以如果我們?cè)谟X(jué)察到某臺(tái)機(jī)器中毒并不斷攻擊其他主機(jī)時(shí),我們可以把他們發(fā)出的數(shù)據(jù)包定位到錯(cuò)誤的網(wǎng)關(guān)地址,這樣就把威脅限制在一個(gè)網(wǎng)段了,還可以造成IP沖突讓部分被感染主機(jī)無(wú)法和網(wǎng)絡(luò)連接。連接子系統(tǒng)實(shí)現(xiàn)分布式監(jiān)聽(tīng),這是指我們?cè)诟鱾€(gè)網(wǎng)段安排不同的MySniffer,然后把各個(gè)網(wǎng)段的信息匯總到一臺(tái)服務(wù)器中。服務(wù)器可以對(duì)數(shù)據(jù)加以顯示,幫助管理人員覺(jué)察到網(wǎng)絡(luò)的異常情況。第4章系統(tǒng)實(shí)現(xiàn)協(xié)議驅(qū)動(dòng)程序NPF的設(shè)計(jì)參考Windows系統(tǒng)的DDK(DriverDevelopmentKit)中的網(wǎng)絡(luò)驅(qū)動(dòng)程序(NetworkDriver)開(kāi)發(fā)文檔,針對(duì)不同類(lèi)型的網(wǎng)羅驅(qū)動(dòng)程序,NDIS定義的一些必須向系統(tǒng)進(jìn)行登記和實(shí)現(xiàn)的接口,作為系統(tǒng)操作和管理某一個(gè)網(wǎng)卡的入口。開(kāi)發(fā)驅(qū)動(dòng)程序主要的工作便是對(duì)這些接口進(jìn)行實(shí)現(xiàn)。系統(tǒng)采用協(xié)議驅(qū)動(dòng)程序(也叫中間驅(qū)動(dòng)程序)來(lái)進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)包的讀取,下面就是協(xié)議驅(qū)動(dòng)程序需要實(shí)現(xiàn)和登記的主要幾個(gè)接口。具體實(shí)現(xiàn)包括:NTSTATUSDriverEntry(INPDRIVER_OBJECTDriverObject,INPUNICODE_STRINGRegistryPath)[6]:DriverEntry是系統(tǒng)調(diào)用設(shè)備驅(qū)動(dòng)程序的入口函數(shù),當(dāng)協(xié)議驅(qū)動(dòng)程序被加載到存開(kāi)始運(yùn)行時(shí)它被調(diào)用。它初始化驅(qū)動(dòng)程序,注冊(cè)所有的驅(qū)動(dòng)程序的回調(diào)函數(shù),創(chuàng)建虛擬設(shè)備,在NDIS結(jié)構(gòu)中定義協(xié)議驅(qū)動(dòng)程序。參數(shù):DriverObject系統(tǒng)創(chuàng)建的一個(gè)協(xié)議驅(qū)動(dòng)程序?qū)ο驲egisterPath注冊(cè)表中與協(xié)議驅(qū)動(dòng)有關(guān)的注冊(cè)項(xiàng)的路徑返回值:包括一組網(wǎng)卡的串。NdisRegisterProtocol:在驅(qū)動(dòng)程序初始化的時(shí)候,調(diào)用該函數(shù)向系統(tǒng)進(jìn)行登記,將自己注冊(cè)成一個(gè)協(xié)議驅(qū)動(dòng)程序。NdisOpenAdapter:在驅(qū)動(dòng)程序初始化的時(shí)候,調(diào)用該函數(shù)綁定(BIND)和打開(kāi)(OPEN)一個(gè)或多個(gè)網(wǎng)絡(luò)適配器(Adapter)□?在高層應(yīng)用程序,發(fā)出要求綁定協(xié)議驅(qū)動(dòng)程序或者要求接收和發(fā)送數(shù)據(jù)包的請(qǐng)求時(shí),協(xié)議驅(qū)動(dòng)程序調(diào)用以下函數(shù):NPF_BindAdapterHandler:NDIS通過(guò)這個(gè)函數(shù)請(qǐng)求協(xié)議驅(qū)動(dòng)程序綁定到一個(gè)底層的NIC(網(wǎng)卡)或者虛擬的NICNPF_UnbindAdapterHand1er:NDIS通過(guò)這個(gè)函數(shù)關(guān)閉協(xié)議驅(qū)動(dòng)程序到NIC或者虛擬NIC的連接。NPF_OpenAdapterCompleteHandler:當(dāng)協(xié)議驅(qū)動(dòng)程序調(diào)用NdisOpenAdapter函數(shù)的返回是NDIS_STATUS_PENDING時(shí),這個(gè)函數(shù)來(lái)指定(Binding)操作完成。NPF_CloseAdapterCompleteHandler:當(dāng)協(xié)議驅(qū)動(dòng)程序調(diào)用NPF_NdisCloseAdapter函數(shù)返回是NDIS_STATUS_PENDING時(shí),這個(gè)函數(shù)來(lái)指定(Unbinding)操作完成。NPF_ReceiveHandler:當(dāng)一個(gè)數(shù)據(jù)包到達(dá)時(shí),便調(diào)用這個(gè)接口進(jìn)行處理。NPF_ReceiveCompleteHandler:指示進(jìn)行接收的數(shù)據(jù)是否已經(jīng)接收完成。NPF_TransferCompleteHandler:當(dāng)協(xié)議驅(qū)動(dòng)程序調(diào)用NdisTransferData函數(shù)的返回值是NDIS_STATUS_PENDING,系統(tǒng)調(diào)用這個(gè)函數(shù)指示傳送的數(shù)據(jù)時(shí)候已經(jīng)發(fā)送完成。NPF_SendComp1eteHand1er:當(dāng)協(xié)議驅(qū)動(dòng)程序調(diào)用NdisSend函數(shù)的返回值為NDIS_STATUS_PENDING,系統(tǒng)調(diào)用這個(gè)函數(shù)指示進(jìn)行發(fā)送的數(shù)據(jù)時(shí)候已經(jīng)發(fā)送。NPF_Read:為用戶(hù)提供讀操作。NPF_Write:為用戶(hù)提供寫(xiě)操作。NPF」oControl:處理IOCTL操作。以上所羅列的是協(xié)議驅(qū)動(dòng)程序中用到或是實(shí)現(xiàn)的主要的幾個(gè)函數(shù)。2 動(dòng)態(tài)連接庫(kù)程序PACKET.DLL的設(shè)計(jì)首先聲明一些相關(guān)的數(shù)據(jù)結(jié)構(gòu):typedefstruct_ADAPTERADAPTER161〃描述一個(gè)網(wǎng)絡(luò)適配器;typedefstruct.PACKETPACKET〃描述一組網(wǎng)絡(luò)數(shù)據(jù)報(bào)的結(jié)構(gòu);typedefstructNetTypeNetType〃描述網(wǎng)絡(luò)類(lèi)型的數(shù)據(jù)結(jié)構(gòu);typedefstructnpf_if_addrnpf_if_addr〃描述一個(gè)網(wǎng)絡(luò)適配器的ip地址;structbpf_hdr〃數(shù)據(jù)報(bào)頭部;structbpf_stat〃當(dāng)前捕獲數(shù)據(jù)報(bào)的統(tǒng)計(jì)信息。下面,將介應(yīng)用程序用到的各個(gè)函數(shù),他們都是在packet.dll中定義的:1>LPPACKETPacketAllocatePacket(void)當(dāng)需要給程序接收數(shù)據(jù)包的時(shí)候,需要先分配一個(gè)接收緩沖區(qū),而接受緩沖區(qū)又需要一個(gè)描述它的結(jié)構(gòu)體。所以在分配緩沖區(qū)的時(shí)候,調(diào)用這個(gè)函數(shù)分配這個(gè)結(jié)構(gòu)體的空間。如果運(yùn)行成功,返回一個(gè)一PACKET結(jié)構(gòu)的指針,否則返回NULLo成功返回的結(jié)果將會(huì)傳送到PacketReceivePacket()函數(shù),接收來(lái)自驅(qū)動(dòng)的網(wǎng)絡(luò)數(shù)據(jù)報(bào)。2>VOIDPacketCloseAdapter(LPADAPTERIpAdapter)當(dāng)應(yīng)用程序需要關(guān)閉監(jiān)聽(tīng)功能的時(shí)候,需要調(diào)用這個(gè)函數(shù)。關(guān)閉參數(shù)中提供的網(wǎng)絡(luò)適配器,釋放相關(guān)的ADAPTER結(jié)構(gòu)。3>VOIDPacketFreePacket(LPPACKETIpPacket)當(dāng)應(yīng)用程序結(jié)束監(jiān)聽(tīng)的時(shí)候,調(diào)用這個(gè)函數(shù),釋放描述接收緩沖區(qū)的結(jié)構(gòu)體的空間。參數(shù)提供的是.PACKET結(jié)構(gòu)的指針。4>BOOLEANPacketGetAdapterNames(LPSTRpStr,PULONGBufferSize)一臺(tái)主機(jī)可能又多個(gè)網(wǎng)卡,所以在打開(kāi)哪個(gè)網(wǎng)卡進(jìn)行監(jiān)聽(tīng)的時(shí)候,需要得到主機(jī)的網(wǎng)卡列表。所以應(yīng)用程序在打開(kāi)網(wǎng)卡前,要先調(diào)用這個(gè)函數(shù)。通過(guò)返回值可以得到的網(wǎng)絡(luò)適配器列表及描述。5>VOIDPacketlnitPacket(LPPACKETIpPacket,PVOIDBuffer,UINTLength)在應(yīng)用程序的監(jiān)聽(tīng)功能啟動(dòng)時(shí),調(diào)用這個(gè)函數(shù)。給一個(gè)_PACKET結(jié)構(gòu)中的,buffer分配空間,6>LPADAPTERPacketOpetAdapter(LPTSTRAdapterName)在應(yīng)用程序的監(jiān)聽(tīng)功能啟動(dòng)時(shí),根據(jù)前面得到的網(wǎng)卡列表,調(diào)用這個(gè)函數(shù),打開(kāi)一個(gè)網(wǎng)絡(luò)適配器。7>BOOLEANPacketReceivePacket(LPADAPTERAdapterObject,LPPACKETIpPacket,BOOLEANSync)在應(yīng)用程序的sniff。函數(shù)中調(diào)用這個(gè)函數(shù),從NPF驅(qū)動(dòng)程序讀取網(wǎng)絡(luò)數(shù)據(jù)報(bào)及統(tǒng)計(jì)信息。數(shù)據(jù)報(bào)編碼結(jié)構(gòu)如示:bpf_hdrdata|Padding|bpf_hdrIdataPadding8>BOOLEANPacketSendPacket(LPADAPTERAdapterObject,LPPACKETIpPacket,BOOLEANSync)在應(yīng)用程序的管理子系統(tǒng)的autoctrl函數(shù)中調(diào)用它,用來(lái)發(fā)送一個(gè)或多個(gè)arp數(shù)據(jù)報(bào)的副本。實(shí)際上它可以發(fā)送任何自己構(gòu)造的數(shù)據(jù)包。9>BOOLEANPacketSetHwFiIter(LPADAPTERAdapterObject,ULONGFilter)在應(yīng)用程序的監(jiān)聽(tīng)功能啟動(dòng)時(shí)調(diào)用它,為接收到的數(shù)據(jù)報(bào)設(shè)置硬件過(guò)濾規(guī)則。以下為一些典型的過(guò)濾規(guī)則:NDIS_PACKET_TYPE_PROMISCUOUS:設(shè)置為混雜模式,接收所有流過(guò)的數(shù)據(jù)報(bào);NDIS_PACKET_TYPE_DIRECTED:只有目的地為本地主機(jī)網(wǎng)絡(luò)適配器的數(shù)據(jù)報(bào)才會(huì)被接收;NDIS_PACKET_TYPE_BROADCAST:只有廣播數(shù)據(jù)報(bào)才會(huì)被接收;DIS_PACKET_TYPE_MULTICAST:只有與本地主機(jī)網(wǎng)絡(luò)適配器相對(duì)應(yīng)的為了實(shí)現(xiàn)監(jiān)聽(tīng)數(shù)據(jù)報(bào),把網(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ā)送一個(gè)數(shù)據(jù)報(bào)副本所重復(fù)的次數(shù)。15>BOOLEANPacketSetReadTimeout(LPADAPTERAdapterObject,inttimeout)在應(yīng)用程序的監(jiān)聽(tīng)功能啟動(dòng)時(shí)調(diào)用它,設(shè)置在接收到一個(gè)數(shù)據(jù)報(bào)后“休息”的時(shí)間。.3 應(yīng)用程序的結(jié)構(gòu)設(shè)計(jì).3.1數(shù)據(jù)流圖?全局關(guān)聯(lián)圖(圖4.1)
圖4.5監(jiān)聽(tīng)子系統(tǒng)數(shù)據(jù)流圖用戶(hù)發(fā)出啟動(dòng)請(qǐng)求,監(jiān)聽(tīng)子系統(tǒng)開(kāi)始監(jiān)聽(tīng)。監(jiān)聽(tīng)過(guò)程接收過(guò)濾信息,然后被系統(tǒng)時(shí)鐘所觸發(fā),每1秒完成一次操作。每次操作過(guò)程中,要對(duì)數(shù)據(jù)包進(jìn)行分析,記錄統(tǒng)計(jì)信息,捕獲的數(shù)據(jù)包和需要管理的主機(jī)ip地址集合,以備顯示子系統(tǒng),管理子系統(tǒng),和連接子系統(tǒng)使用。?顯示子系統(tǒng)數(shù)據(jù)流圖
顯示圖表信息顯示特定數(shù)據(jù),顯示特定包信圖4.4顯示子系統(tǒng)數(shù)據(jù)流圖用戶(hù)發(fā)出請(qǐng)求文本信息的要求,顯示文本信息子活動(dòng),從統(tǒng)計(jì)信息中讀取數(shù)據(jù)并顯示。用戶(hù)發(fā)出請(qǐng)求圖表信息的要求,顯示圖表信息子活動(dòng),從文件中讀取數(shù)據(jù)并顯示。用戶(hù)發(fā)出請(qǐng)求列表信息的要求,顯示列表信息子活動(dòng),從統(tǒng)計(jì)信息中讀取數(shù)據(jù)并顯示。用戶(hù)發(fā)出請(qǐng)求顯示特定數(shù)據(jù)包的要求,顯示特定數(shù)據(jù)包的子活動(dòng),從數(shù)據(jù)包集合中讀取數(shù)據(jù)并顯示。?管理子系統(tǒng)數(shù)據(jù)流圖顯示文本信息v—讀取統(tǒng)計(jì)信息1文本信息統(tǒng)計(jì)信息返回查找結(jié)果顯示列表信息,J顯示圖表信息顯示特定數(shù)據(jù),顯示特定包信圖4.4顯示子系統(tǒng)數(shù)據(jù)流圖用戶(hù)發(fā)出請(qǐng)求文本信息的要求,顯示文本信息子活動(dòng),從統(tǒng)計(jì)信息中讀取數(shù)據(jù)并顯示。用戶(hù)發(fā)出請(qǐng)求圖表信息的要求,顯示圖表信息子活動(dòng),從文件中讀取數(shù)據(jù)并顯示。用戶(hù)發(fā)出請(qǐng)求列表信息的要求,顯示列表信息子活動(dòng),從統(tǒng)計(jì)信息中讀取數(shù)據(jù)并顯示。用戶(hù)發(fā)出請(qǐng)求顯示特定數(shù)據(jù)包的要求,顯示特定數(shù)據(jù)包的子活動(dòng),從數(shù)據(jù)包集合中讀取數(shù)據(jù)并顯示。?管理子系統(tǒng)數(shù)據(jù)流圖顯示文本信息v—讀取統(tǒng)計(jì)信息1文本信息統(tǒng)計(jì)信息返回查找結(jié)果顯示列表信息,J數(shù)據(jù)包集合數(shù)據(jù)包圖形信息查找關(guān)鍵考請(qǐng)卜特定包信息數(shù)據(jù)包請(qǐng)求圖表信息-< 列表信息讀取統(tǒng)計(jì)信息2圖4.5管理子系統(tǒng)數(shù)據(jù)流圖用戶(hù)發(fā)出啟動(dòng)簡(jiǎn)單管理請(qǐng)求,啟動(dòng)網(wǎng)絡(luò)管理子活動(dòng)打開(kāi)時(shí)鐘3。網(wǎng)絡(luò)管理被時(shí)鐘3觸發(fā),每1秒操作一次。根據(jù)IP地址集,給網(wǎng)絡(luò)上的主機(jī)不斷發(fā)送ARP數(shù)據(jù)包。?連接子系統(tǒng)數(shù)據(jù)流圖統(tǒng)計(jì)信息讀取統(tǒng)計(jì)信息Ir 1/1〕用八1 —啟動(dòng)連接T開(kāi)啟連接卜連接控制一 連接傳遞統(tǒng)計(jì)信息2[服務(wù)器J圖4.4連接子系統(tǒng)數(shù)據(jù)流圖用戶(hù)發(fā)出啟動(dòng)連接請(qǐng)求,開(kāi)啟連接子活動(dòng)打開(kāi)時(shí)鐘2。連接子活動(dòng)被時(shí)鐘3觸發(fā),每10秒操作一次。根據(jù)統(tǒng)計(jì)信息,給網(wǎng)絡(luò)上的服務(wù)器不斷發(fā)送信息。4.3.2結(jié)構(gòu)圖?頂層結(jié)構(gòu)圖:發(fā)送數(shù)據(jù)包?閽di讀取統(tǒng)計(jì)信息連接子模塊I圖4.7頂層模塊圖主模塊調(diào)用監(jiān)聽(tīng),顯示,管理,連接子模塊。其中管理,連接子模塊是可選的。?監(jiān)聽(tīng)子系統(tǒng)結(jié)構(gòu)圖(圖4.8)
監(jiān)聽(tīng)子系統(tǒng)圖4.8監(jiān)聽(tīng)子系統(tǒng)模塊圖監(jiān)聽(tīng)子系統(tǒng)調(diào)用監(jiān)聽(tīng),設(shè)置和查看過(guò)濾信息,寫(xiě)入統(tǒng)計(jì)和數(shù)據(jù)包集合信息。監(jiān)聽(tīng)子系統(tǒng)調(diào)用監(jiān)聽(tīng)模塊獲得統(tǒng)計(jì)信息和數(shù)據(jù)包,并把它們寫(xiě)入相應(yīng)的存儲(chǔ)區(qū)域。?顯示子系統(tǒng)結(jié)構(gòu)圖(圖4.9)監(jiān)聽(tīng)子系統(tǒng)圖4.8監(jiān)聽(tīng)子系統(tǒng)模塊圖監(jiān)聽(tīng)子系統(tǒng)調(diào)用監(jiān)聽(tīng),設(shè)置和查看過(guò)濾信息,寫(xiě)入統(tǒng)計(jì)和數(shù)據(jù)包集合信息。監(jiān)聽(tīng)子系統(tǒng)調(diào)用監(jiān)聽(tīng)模塊獲得統(tǒng)計(jì)信息和數(shù)據(jù)包,并把它們寫(xiě)入相應(yīng)的存儲(chǔ)區(qū)域。?顯示子系統(tǒng)結(jié)構(gòu)圖(圖4.9)查看過(guò)濾信息寫(xiě)入統(tǒng)計(jì)信息寫(xiě)入數(shù)據(jù)包集合設(shè)置過(guò)濾信息圖4.9顯示子系統(tǒng)模塊圖顯示子系統(tǒng)調(diào)用顯示文本,圖表,列表,特定數(shù)據(jù)包信息四個(gè)子模塊。后三個(gè)子模塊是可選模塊,根據(jù)用戶(hù)需要,調(diào)用它們。顯示文本信息子模塊由程序部獲得統(tǒng)計(jì)信息。顯示圖表模塊從文件中獲得不同時(shí)間不同的統(tǒng)計(jì)信息。顯示列表信息和顯示特定數(shù)據(jù)包信息子模塊從數(shù)據(jù)包集合中獲得數(shù)據(jù)。?管理子系統(tǒng)結(jié)構(gòu)圖,連接子系統(tǒng)結(jié)構(gòu)圖。這兩個(gè)子系統(tǒng)結(jié)構(gòu)實(shí)現(xiàn)難度大,但是結(jié)構(gòu)比較簡(jiǎn)單,所以在頂層模塊圖中就顯示了他們部的模塊調(diào)用結(jié)構(gòu)。4.3.3源碼分析a)主要數(shù)據(jù)結(jié)構(gòu):見(jiàn)附錄1b)主要全局變量:staticLPADAPTERIpadapter;〃指向描述網(wǎng)絡(luò)適配器實(shí)例的結(jié)構(gòu)的指針;staticLPPACKETIppacketr;〃指向描述一組網(wǎng)絡(luò)數(shù)據(jù)報(bào)的結(jié)構(gòu)的指針;staticcharpacket_array[1024][1024];〃應(yīng)用程序中存放數(shù)據(jù)包的緩沖區(qū)staticcharrecvbuf[1024*250];〃協(xié)議驅(qū)動(dòng)程序存放數(shù)據(jù)包的緩沖區(qū)staticDWORD auto_ip[255];〃存放需要被管理的主機(jī)的ip地址c)監(jiān)聽(tīng)模塊:?voidSniff():功能:獲取數(shù)據(jù)包算法:循環(huán)一百次調(diào)用PacketReceivePacket函數(shù),如果成功開(kāi)始分析數(shù)據(jù)包(即調(diào)用GetData函數(shù))。
i<1OO返回?voidGetData(LPPACKETIp)功能:分析捕獲的數(shù)據(jù)包,寫(xiě)入統(tǒng)計(jì)信息,寫(xiě)入數(shù)據(jù)包集合,寫(xiě)入主機(jī)IP集合參數(shù):指向描述一組網(wǎng)絡(luò)數(shù)據(jù)報(bào)的結(jié)構(gòu)的指針;算法:i<1OO返回?voidGetData(LPPACKETIp)功能:分析捕獲的數(shù)據(jù)包,寫(xiě)入統(tǒng)計(jì)信息,寫(xiě)入數(shù)據(jù)包集合,寫(xiě)入主機(jī)IP集合參數(shù):指向描述一組網(wǎng)絡(luò)數(shù)據(jù)報(bào)的結(jié)構(gòu)的指針;算法:—fellse沙冏用GetDatai++弓單出對(duì)話(huà)框t.ruePacketReceivePacketfalsetrue
ospf_count++〃這些變量由來(lái)決定是否對(duì)這些協(xié)議監(jiān)聽(tīng)//}}AFX_DATA//Overrides//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(FilterDlg)protected:virtualvoidDoDataExchange(CDataExchange*pDX); //DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected://Generatedmessagemapfunctions//{{AFX_MSG(FilterDig)afx_msgvoidOnArpO,OnDns(),OnFtpO,OnHttpO,Onlcmp(),OnlpO,Onlpx(),OnNetboisO,OnOspf(),OnRipO,OnSmtpO,OnSpx(),OnTcpO,OnTelnet(),OnUdpO,OnDefault();〃用來(lái)在每個(gè)checkbox被觸發(fā)時(shí)調(diào)用//}}AFX_MSGDECLARE_MESSAGE_MAP()功能:設(shè)置過(guò)濾信息算法:通過(guò)一系列的checkbox控件,我們來(lái)決定需要對(duì)那些控件進(jìn)行過(guò)濾。比如tcp控件被選中我們就要對(duì)tcp協(xié)議進(jìn)行過(guò)濾,否則就掠過(guò)tcp協(xié)議。但是在我們選擇tcp協(xié)議的同時(shí)ip協(xié)議也一定會(huì)被選上,所以他們之間存在一定的關(guān)聯(lián)關(guān)系。if(m_tcp==1)m_ip=1;elsem_ftp=0;m_smtp=0;m_http=0;m_telnet=0;我們以上面的代碼為例討論這個(gè)問(wèn)題,當(dāng)tcp被選中時(shí)ip也被選中,當(dāng)tcp被取消時(shí)它的高層協(xié)議如ftp,http都會(huì)被取消。其他的代碼也都是仿照tcp的原則來(lái)寫(xiě)的。d)顯不模塊:voidShowPacketCount(CDC*pDC);功能:調(diào)用該函數(shù)顯示數(shù)據(jù)包的總量和各種協(xié)議數(shù)據(jù)包的分量信息算法:利用統(tǒng)計(jì)信息,把統(tǒng)計(jì)信息打印出來(lái)。voidShowGraphic(CDC*pDC);功能:調(diào)用該函數(shù)顯示數(shù)據(jù)包的圖表信息算法:讀取在不同時(shí)間點(diǎn)上,記錄在文件中的統(tǒng)計(jì)信息,然后以時(shí)間為橫軸,百分比為縱軸把統(tǒng)計(jì)信息顯示在視圖上。voidShowConnection(CDC*pDC);功能:調(diào)用該函數(shù)顯示網(wǎng)絡(luò)中存在通訊的節(jié)點(diǎn)之間的聯(lián)系算法:從packet_array數(shù)據(jù)包接收緩沖區(qū)中,倒序查找十個(gè)數(shù)據(jù)包,如果數(shù)據(jù)包類(lèi)型為tcp,udp,icmp那么就認(rèn)為數(shù)據(jù)包的源和目的主機(jī)之間存在著通訊關(guān)系,于是就把他們的源和目的地址展現(xiàn)在視圖上。…Mi。…public:voidSetData(charp[][1024],intc);MyDlg(CWnd*pParent=NULL); //standardconstructorintIndexInFieldList;〃記錄被選擇需要詳細(xì)顯示的數(shù)據(jù)包的序號(hào)TreeDlgm_treedlg; 〃樹(shù)行顯示數(shù)據(jù)包的對(duì)話(huà)框PVOIDpacket; //指向數(shù)據(jù)包數(shù)組packet_arry的指針intcount; 〃數(shù)據(jù)包數(shù)組中數(shù)據(jù)包的個(gè)數(shù)//DialogData//{{AFX_DATA(MyDlg)enum{IDD=IDD_DIALOG};CListCtrlm」istCtrl;//}}AFX_DATA//Overrides//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(MyDlg)public:virtualintDoModal();protected:virtualvoidDoDataExchange(CDataExchange*pDX); //DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected://Generatedmessagemapfunctions//{{AFX_MSG(MyDlg)virtualBOOLOnlnitDialogO;〃對(duì)話(huà)框的初始化函數(shù)afx_msgvoidOnDblclkList(NMHDR*pNMHDR,LRESULT*pResult)〃選擇需要詳細(xì)顯示的數(shù)據(jù)包時(shí)觸發(fā)的函數(shù)afx_msgvoidOnPaint();//}}AFX_MSGDECLARE_MESSAGE_MAP()功能:該類(lèi)用來(lái)顯示數(shù)據(jù)包的列表信息算法:首先在實(shí)例化該類(lèi)的時(shí)候我們要把packet_a門(mén)'ay數(shù)據(jù)包接收緩沖區(qū)的指針傳給PVOIDpacket,通過(guò)packet指針我們解析每一個(gè)數(shù)據(jù)包,然后把它們的信息以列表形式展現(xiàn)在用戶(hù)面前。對(duì)數(shù)據(jù)包的解析算法基本上和GetData中的算法相似所以這里就不再重復(fù)了。該類(lèi)中voidOnDblclkList(NMHDR*pNMHDR,LRESULT*pResult)函數(shù)的作用是當(dāng)用戶(hù)想更加細(xì)致地了解數(shù)據(jù)包地情況下,雙擊列表中地某一個(gè)數(shù)據(jù)包,那么它會(huì)實(shí)例化classTreeDlg類(lèi),來(lái)顯示數(shù)據(jù)包地詳細(xì)信息。?classTreeDlg:publicCDialog{//Constructionpublic:voidSetData(char*p);TreeDlg(CWnd*pParent=NULL); //standardconstructorHTREEITEMm_hRoot; 〃樹(shù)行結(jié)構(gòu)的根節(jié)點(diǎn)char*packet; 〃指向需要詳細(xì)顯示數(shù)據(jù)包的指針//DialogData//{{AFX_DATA(TreeDlg)enum{IDD=IDD_TREE_VIEW};CTreeCtrlm_tree;CStringm_str;CStringm_substr;//}}AFX_DATA//Overrides//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(TreeDlg)protected:virtualvoidDoDataExchange(CDataExchange*pDX); //DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected://Generatedmessagemapfunctions//{{AFX_MSG(TreeDlg)virtualBOOLOnlnitDialogO;afx_msgvoidOnSelchangingTree(NMHDR*pNMHDR,LRESULT*pResult);afx_msgvoidOnFind();//}}AFX_MSGDECLARE_MESSAGE_MAP()功能:顯示某一個(gè)數(shù)據(jù)包地具體信息,數(shù)據(jù)包信息以樹(shù)形結(jié)構(gòu)表現(xiàn)出來(lái),同時(shí)提供查找功能,當(dāng)我們輸入一個(gè)字符串地時(shí)候,可以找到這個(gè)字符串的前幾個(gè)字符,字符串本身,后幾個(gè)字符。算法:當(dāng)MyDlg調(diào)用TreeDlg時(shí)就把要具體顯示的數(shù)據(jù)包在緩沖區(qū)中的位置(通過(guò)intIndexInFieldList)告訴了TreeDlg這個(gè)類(lèi),TreeDlg通過(guò)該整型數(shù)據(jù)找到數(shù)據(jù)包在緩沖區(qū)中的位置,然后設(shè)置指針指向該區(qū)域。有了指向數(shù)據(jù)包的指針之后,我們解析這個(gè)數(shù)據(jù)包,然后把網(wǎng)絡(luò)各層的數(shù)據(jù)包信息轉(zhuǎn)換成字符串形式,最后顯示出來(lái)。CString m_str;〃把整個(gè)數(shù)據(jù)包可打印的信息存放在該字符串中CStringm_substr;〃需要查找的子串voidOnFind();〃完成查找任務(wù)e)連接模塊:功能:這個(gè)模塊主要分為客戶(hù)端和服務(wù)器端,客戶(hù)端容比較重要,它主動(dòng)去連接服務(wù)器來(lái)傳輸數(shù)據(jù)。服務(wù)器端指做了簡(jiǎn)單的功能,偵聽(tīng),接收連接,接收數(shù)據(jù),顯示數(shù)據(jù)。算法:?客戶(hù)端:UINTThreadConnect(LPVOIDpParam)data=(structtransfer_data*)pParam;〃獲得被傳送數(shù)據(jù)的指針 〃連接服務(wù)器,并把數(shù)據(jù)傳送過(guò)去staticvoidCALLBACKEXPORTConnect(HWNDhWnd,//handleofCWndthatcalledSetTimerUINTnMsg,//WM_TIMERUINTnIDEvent, //timeridentification「……data.total_count=total_count;data.ip_count=ip_count;data.tcp_count=tcp_count;〃對(duì)被傳送數(shù)據(jù)進(jìn)行賦值A(chǔ)fxBeginThread(ThreadConnect,PVOID(&data));〃啟動(dòng)新線(xiàn)程去完成數(shù)據(jù)傳送任務(wù)voidCList2View::OnConnect()SetTimer(3,10000,Connect);〃打開(kāi)時(shí)鐘3,用時(shí)鐘觸發(fā)連接函數(shù)?服務(wù)器端:intmain(){sock=socket(PF_INET,SOCK_STREAM,0); 〃創(chuàng)建偵聽(tīng)套接字bind(sock,(LPSOCKADDR)&m_sockServerAddr,sizeof(m_sockServerAddr))〃與選定的端口綁定listen(sock,5);〃偵聽(tīng)while(l)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)閉偵聽(tīng)套接字f)管理模塊:voidOnAuto()功能:打開(kāi)管理功能算法:創(chuàng)建CAutoDlg類(lèi),獲得本網(wǎng)段地址,和所需要監(jiān)聽(tīng)的端口啟動(dòng)時(shí)鐘2,設(shè)置時(shí)鐘2的回調(diào)函數(shù)為AutoCtrl。classCAutoDlg:publicCDialogpublic:CIPAddressCtrlm_ip;CStringm_port;〃需要被管理的端口virtualBOOLOnlnitDialogO;afx_msgvoidOnPaint();功能:從用戶(hù)的輸入需要被管理的端口算法:把端口值傳遞給全局變量m_auto_portstaticvoidCALLBACKEXPORTAutoCtrl(HWNDhWnd,//handleofCWndthatcalledSetTimerUINTnMsg,//WM_TIMERUINTnIDEvent, //timeridentificationDWORDdwTime//systemtime功能:根據(jù)GetData中記錄的需要被管理的ip地址集,發(fā)送arp和rarp數(shù)據(jù)包給各個(gè)主機(jī)中斷它們與外界的聯(lián)系。算法:偽造arp數(shù)據(jù)包,包括arp-request,arp-relay,并發(fā)送?!ㄩ_(kāi)始監(jiān)聽(tīng),并打開(kāi)網(wǎng)卡1padapter=PacketOpenAdapter(adapterlist[open-11);lppacket=PacketAllocatePacket()for(i=0;i<255;i++)if(auto_ip[i]!=0)〃構(gòu)造arp-reply欺騙數(shù)據(jù)包PacketInitPacket(Ippacket,szPacketBuf,50);〃構(gòu)造air-request欺騙數(shù)據(jù)包ZeroMemory(szPacketBuf,sizeof(szPacketBuf));memcpy(eth.eh_dst,DstMac,5);〃目標(biāo)MACmemcpy(eth.eh_src,SrcMac,5);〃發(fā)送方MACmemcpy(szPacketBuf,(char*)ð,sizeof(eth));memcpy(szPacketBuf+sizeof(eth),(char*)&arpr,sizeof(arpr));PacketInitPacket(Ippacket,szPacketBuf,50);〃發(fā)送數(shù)據(jù)包PacketSetNumWrites(Ipadapter,2)PacketSendPacket(Ipadapter,Ippacket,TRUE)==FALSE)4.4系統(tǒng)特色本系統(tǒng)的主要兩個(gè)特色就是分布式網(wǎng)絡(luò)監(jiān)聽(tīng)和簡(jiǎn)單網(wǎng)絡(luò)管理。4.4.1分布式網(wǎng)絡(luò)監(jiān)聽(tīng)由于交換式局域網(wǎng)的存在和普通監(jiān)聽(tīng)技術(shù)只對(duì)同一網(wǎng)段的主機(jī)有效的缺陷,使監(jiān)聽(tīng)技術(shù)的能力受到了很大的影響。為了能夠擴(kuò)大網(wǎng)絡(luò)監(jiān)聽(tīng)的圍,診斷不同網(wǎng)絡(luò)中問(wèn)題,我認(rèn)為我們應(yīng)該把每一個(gè)網(wǎng)絡(luò)監(jiān)聽(tīng)工具作為一個(gè)客戶(hù)端,然后把各個(gè)客戶(hù)端程序安裝到不同網(wǎng)段的網(wǎng)關(guān)上。這樣每個(gè)客戶(hù)端都可以監(jiān)聽(tīng)到本網(wǎng)段的信息,最后每個(gè)客戶(hù)端把各自的監(jiān)聽(tīng)信息發(fā)送到一個(gè)監(jiān)聽(tīng)服務(wù)器上。這樣我們就可以獲取不同網(wǎng)段上的網(wǎng)絡(luò)信息了。但是在跨越不同網(wǎng)段的時(shí)候我們又會(huì)遇到防火墻或是入侵檢測(cè)系統(tǒng)的過(guò)濾,我個(gè)人認(rèn)為如果我們從開(kāi)放服務(wù)器的80端口,然后把客戶(hù)端要傳送的數(shù)據(jù)封裝在HTTP協(xié)議的數(shù)據(jù)包,這樣一般就可以穿透絕大多數(shù)的防火墻了。4.4.2簡(jiǎn)單網(wǎng)絡(luò)管理選擇需要被管理的端口,根據(jù)一些信息截?cái)喙?jié)點(diǎn)與外界的聯(lián)系。網(wǎng)絡(luò)蠕蟲(chóng)病毒泛濫,所以如果我們?cè)谟X(jué)察到某臺(tái)機(jī)器中毒并不斷攻擊其他主機(jī)時(shí),我們可以向他們發(fā)送偽造的arp-request和arp-relay數(shù)據(jù)包,讓他們的IP沖突,而且發(fā)出的數(shù)據(jù)包被定位到錯(cuò)誤的或者不存在的網(wǎng)關(guān)地址。這樣部分被感染主機(jī)無(wú)法和網(wǎng)絡(luò)連接,或把威脅限制在一個(gè)網(wǎng)段了。第5章系統(tǒng)測(cè)試與使用說(shuō)明書(shū)5.1系統(tǒng)測(cè)試系統(tǒng)采取黑盒測(cè)試的方法,即已知系統(tǒng)的功能設(shè)計(jì)規(guī)格,對(duì)每個(gè)實(shí)現(xiàn)了的功能進(jìn)行測(cè)試,觀察是否符合要求。下面就按各個(gè)子系統(tǒng)的,測(cè)試它們的功能是否滿(mǎn)足了要求。5.1.1監(jiān)聽(tīng)功能測(cè)試用例:打開(kāi)監(jiān)聽(tīng)工具M(jìn)ySniffer,開(kāi)始監(jiān)聽(tīng)。測(cè)試能否能夠捕獲網(wǎng)絡(luò)中的數(shù)據(jù)包設(shè)置過(guò)濾信息,測(cè)試過(guò)濾信息是否由效測(cè)試結(jié)果:通過(guò)顯示子系統(tǒng)的幾個(gè)功能,證明系統(tǒng)成功捕獲數(shù)據(jù)包。圖5.1表現(xiàn)如何進(jìn)行設(shè)置過(guò)濾信息,同樣當(dāng)設(shè)置了需要過(guò)濾的協(xié)議時(shí),系統(tǒng)只捕獲與這些協(xié)議有關(guān)的數(shù)據(jù)包,而丟棄無(wú)關(guān)的數(shù)據(jù)包。NetWareProtocol□ARP ElIP aIPXIP日TCP □UDP □ICMP □OSPFTCP□FTP[3HTTP 曰TELNET □SMTPUDP□DNS □NETBOIS(UDP)IPXEljSlP| □SPX|Default:| |0K ||Cancel|圖5.1設(shè)置過(guò)濾信息截圖1.2顯示功能測(cè)試用例:測(cè)試能否用文本信息顯示網(wǎng)絡(luò)流量的統(tǒng)計(jì)信息,包括總量,分量,百分比,通訊情況信息。如果能以文本方式正確顯示流量信息,說(shuō)明測(cè)試成功,否則失敗。測(cè)試能否用圖表信息顯示統(tǒng)計(jì)信息,觀察各種流量在最近時(shí)間能的變化幅度。如果能正確顯示流量信息,說(shuō)明測(cè)試成功,否則失敗。測(cè)試能否用列表方式顯示數(shù)據(jù)包的概要信息,檢驗(yàn)各種概要信息是否準(zhǔn)確,詳細(xì)。如果概要信息準(zhǔn)確,說(shuō)明測(cè)試成功,否則失敗。
測(cè)試能否用樹(shù)形方式顯示特定數(shù)據(jù)包的詳細(xì)信息,檢驗(yàn)各個(gè)信息解析的是否正確。如果各個(gè)字段正確,說(shuō)明測(cè)試成功,否則失敗。測(cè)試能否在特定數(shù)據(jù)包中查找到關(guān)鍵字和關(guān)鍵字附近的字符。我們使用user關(guān)鍵字來(lái)查找。如果數(shù)據(jù)包中存在user字符串,且查找到說(shuō)明測(cè)試成功,否則失敗。測(cè)試結(jié)果:用文本方式顯示統(tǒng)計(jì)信息的結(jié)果,如圖示5.2:文件②編緝查看電)CoalrolCaptureVietCoa&ectDisplay口6。A■IFhetotalnumberofallIFhetotalnumberofallpacket:46Fhenmrberofippacket:11—23.91%Fhenunberofarppacket:19—41.30%Fhenunberofipxpacket:7—15.22%Fhenunberoftcppacket:4~8.70%%Fhenunberofu益packet:7—15.22%Fhenurioeroficcppacket:0~0.00%Fhenunberofospfpacket:0-0.00%Fhenunfcerofftppacket:3―6.52%%Fhenunberofhttppacket:1—2.17%Fhenunberofsntppacket:0-0.00%Fhenunfceroftelnetpacket:0—0.00%Fhenmrberofnetbiospacket:6—13.04%Thenuirberofudp_dnspacket:0―0.00%Fhenumberofspxpacket:0―0.00%Fhenunberofipxjrippacket:1-2.17%sre: 13 udp >dst:sre:13——-udp >dst:sre: 13 u<^ >dst:sre: 13 u<^ >dst:sre: 13 -u4> >dst:sre: 13 u<4> >dst:sre: 1 tcp >dst:sre: 52 tcp 〉dst:sre: 1 tcp >dst:sre: 1 1cp >dst:5555555555555215252圖5.2用文本方式顯示統(tǒng)計(jì)信息的截圖用圖表方式顯示統(tǒng)計(jì)信息的結(jié)果,如圖示5.3:
ARPIPIPXTCPUDPICIPSPXIPX_RIPprotocol圖5.3用圖表方式顯示統(tǒng)計(jì)信息的截圖用列表方式顯示數(shù)據(jù)包的概要信息的測(cè)試結(jié)果,如圖示5.4:NO.Source|Desbnabon|protocolSummary49152TCPftpthisisafiletransferprotocol50521TCPftpthisisafiletransferprotocol51152TCPftpthisisafiletransferprotocol52521TCPftpthisisafiletransferprotocol53000C767DF56D00096B12E8CCARPARP-REPLY54152TCPftpthisisafiletransferprotocol55000C767DF56C00096B12E8CCARPARP-REPLY5600096B12E8CCFFFFFFFFFFFFARPARP-REQUEST570005313A1E80FFFFFFFFFFFFARPARP-REQUEST■l記155UDPNETBIOS591055UDPNETBIOS1600005313A1E80FFFFFTFFFFFFARPARP-REQUEST0005313A1E80FFFFFFFFFFFFARPARP-REQUEST621055UDPNETBIOS薊 1m-li— Mm=| >圖5.4用列表方式顯示數(shù)據(jù)包的截圖用樹(shù)形方式顯示特定數(shù)據(jù)包的詳細(xì)信息的結(jié)果,如圖示5.5:查找關(guān)鍵字的結(jié)果,我們?cè)谝粋€(gè)FTP數(shù)據(jù)包中得到用戶(hù)名b00015007這個(gè),加藍(lán)色的字段就是用戶(hù)名在特定數(shù)據(jù)包中如圖示5.5:(圖5.5用
樹(shù)形方式顯示特定數(shù)據(jù)包的截圖)u...r..c'6.e2..p...n..userb00015007HNOu...r..c'6.e2..p...n..userb00015007SMACsrc:00096B12E8CCdst:000C767DF56Dtype:0x0800(ip)臼IPversionandlenth:0x45tos:OxOOpacketlenth:0x56ident:0xl794flags:0x4000ttl:0x80protocoktcpchecksum:0x2330src:1dst:52etcpsrc_port:1362dst_port:21seq:0x432736CDack:0x4532820D5.1.2管理功能測(cè)試用例:在指定端口號(hào)之后,系統(tǒng)能否讓指定的主機(jī)斷網(wǎng)。點(diǎn)擊auto菜單項(xiàng),把對(duì)話(huà)框中的端口地址設(shè)置為21,這樣系統(tǒng)將記錄局域網(wǎng)所有使用FTP應(yīng)用程序的主機(jī)IP。然后在1主機(jī)上打開(kāi)FTP,連接地址為的ftp服務(wù)器。如果主機(jī)造成IP沖突并且斷網(wǎng)說(shuō)明測(cè)試成功,否則失敗。測(cè)試結(jié)果:在1主機(jī)的右下角出現(xiàn),IP沖突的提示,而且FTP連接也中斷了,如圖5.6。所以證明管理功能成功完成任務(wù)。200SwitchingtoASCIImodePORT202,117,21,21,8,117200PORTcommandsuccessful.ConsiderusincPASVLIST150Herecomesthedirectory1istinc226DirectorysendOK.傳送完成:1,470字節(jié)在0.125杪內(nèi)(11.76k/W正在連鏤到,端口21(#1)正在建隹列,端口21(#1)正在連接到,端口21(#1)縮俁:連鏤超時(shí)圖5.6管理功能測(cè)試結(jié)果截圖5.1.3連接功能測(cè)試用例:測(cè)試客戶(hù)端到服務(wù)器間能否通訊。首先打開(kāi)服務(wù)器應(yīng)用程序,然后點(diǎn)擊客戶(hù)端的connect菜單項(xiàng),設(shè)置遠(yuǎn)程服務(wù)器的IP和端口,開(kāi)始連接操作。觀察服務(wù)器端是否能收到客戶(hù)端發(fā)來(lái)的信息。如果可以成功顯示客戶(hù)端的信息,則說(shuō)明測(cè)試成功,否則測(cè)試失敗。測(cè)試結(jié)果:服務(wù)器端每十秒種收到客戶(hù)端發(fā)來(lái)的監(jiān)聽(tīng)得到的統(tǒng)計(jì)信息。由紅色的兩個(gè)圈可以證明數(shù)據(jù)成功地從客戶(hù)端傳送到服務(wù)器端。客戶(hù)端的信息如圖5.7,服務(wù)器端的信息如圖5.8:Thetotalnumberofallpacket:3613Thenumberofippacket:^828--5076d)%Thenumberofarppacket:與&弱%Thenumberofipxpacket:135-3.74%Thenumberoftcppacket:506—14.00%Thenumberofudppacket:1315—36.40%Thenumber of icmp packet : 1-0.03 %Thenumber of ospf packet : 0-0.00 %Thenumberofftppacket:245—6.78%Thenumber of http packet : 238—6.59 %Thenumber of smtp packet : 0-0.00 %Thenumberoftelnetpacket:0-0.00%Thenumberofnetbiospacket:1137--31.47%Thenumberofudp-dnspacket:85-2.35%Thenumberofspxpacket:0-0.00%Thenumberofipx_rippacket:24一一0.66%圖5.7客戶(hù)端截圖BSientname:ok-0a8yu?J3rl06clientip:1爐885ip:1711ipxBSientname:ok-0a8yu?J3rl06clientip:1爐885ip:1711ipx:125tcp:497udp:1208icmp:0rip:20spx:0ftp:237http:237telnet:0smtp:0ospf:0dns:76netbios1044time:lientname:ok-0a8s/u?J3r106clientip:1rp:1012ip:1746ipx:127tcp:498udp:1242icnp:0ospf:0rip:21spx:0ftp:237http:238telnet:0smtp:0dns:81netbiosl072time:17:11:27lientname:ok-0a8yu7j3rl06clientip:1rp:1135ip:1768ipx:134tcp:498udp:1264icnp:0ospf:0netbiosl090rip:24spx:0ftp:237http:238telnet:0smtp:0dns:85netbiosl090OStime: 17:11:37clientname:ok-0a8szu7J3rl06clientip:1arp:1257ip:1792ipx:134tcp:498udp:1288icnp:0ospf:0rip:24spx:0ftp:237http:238telnet:0smtp:0dns:85netbiosl112OStine: 17:11:47clientnane:ok-0a89u7j3rl06clientip:1?rp:13R7ip:182Kipx:135tcp:506udp:1315icmp:lospf:0rip:24spx:0ftp:245http:238telnet:0smtp:0dns:85netbios1137圖5.8服務(wù)器截圖工具軟件的配置軟件運(yùn)行硬件環(huán)境:CPU(interPentium4),RAM(512M),網(wǎng)卡,Ethemet802.3(局域網(wǎng))軟件運(yùn)行軟件環(huán)境:操作系統(tǒng)(WINDOWS-XP或者WIND0WS-2000),安裝WINPCAP開(kāi)發(fā)包軟件開(kāi)發(fā)平臺(tái):VC++.net集成開(kāi)放環(huán)境監(jiān)聽(tīng)工具的使用點(diǎn)擊工具欄中的三角形按鈕開(kāi)始監(jiān)聽(tīng)(或者選擇菜單欄中start選項(xiàng)),點(diǎn)擊工具欄中的正方形按鈕結(jié)束監(jiān)聽(tīng)(或者選擇菜單欄中stop選項(xiàng))。監(jiān)聽(tīng)進(jìn)行過(guò)程中,視圖默認(rèn)顯示文本信息,如果要顯示圖表信息,要先結(jié)束監(jiān)聽(tīng)然后選擇菜單欄中View菜單項(xiàng)的子菜單項(xiàng)Graphico如果要顯示系統(tǒng)的列表信息,在結(jié)束監(jiān)聽(tīng)狀態(tài)下,選擇Display菜單項(xiàng)。如果要獲得某個(gè)特定數(shù)據(jù)包的詳細(xì)信息,在列表對(duì)話(huà)框中雙擊所要查看的數(shù)據(jù)包,數(shù)據(jù)包的詳細(xì)信息就會(huì)以樹(shù)形方式展現(xiàn)在您面前。如果要實(shí)現(xiàn)管理功能,在監(jiān)聽(tīng)狀態(tài)下點(diǎn)擊auto菜單項(xiàng),輸入必要信息,開(kāi)始管理。再點(diǎn)擊一下就結(jié)束管理功能如果要實(shí)現(xiàn)分布式監(jiān)聽(tīng),則首先打開(kāi)服務(wù)器程序,然后在客戶(hù)端選擇connect菜單項(xiàng),客戶(hù)端就把信息傳送給服務(wù)器端,再點(diǎn)擊一下結(jié)束數(shù)據(jù)傳送。結(jié)論系統(tǒng)的不足和改進(jìn)MySniffer軟件基本上完成了一個(gè)網(wǎng)絡(luò)監(jiān)聽(tīng)工具,所要完成的基本功能,但是它還有很多不足之處.無(wú)法實(shí)現(xiàn)跨平臺(tái)性本文主要論述了如何在WindowsNT,2000,xp系統(tǒng)下實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽(tīng)技術(shù),這種開(kāi)發(fā)方法無(wú)法在Unix和linux系統(tǒng)中實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽(tīng),甚至不能直接移植到windows98上。在Unix和Linux通常情況下我們采用Libpcap庫(kù)來(lái)實(shí)現(xiàn)。Libcap實(shí)質(zhì)上是一個(gè)系統(tǒng)獨(dú)立的API函數(shù)接口,用于用戶(hù)層次的數(shù)據(jù)包截獲工作。它為底層網(wǎng)絡(luò)監(jiān)聽(tīng)編程提供了一個(gè)易于移植的應(yīng)用程序框架,底層操作包括數(shù)據(jù)包的截獲和網(wǎng)絡(luò)調(diào)試。Libpcap接口是基于BPF(BerkeleyPacketFilter)數(shù)據(jù)包過(guò)濾機(jī)制‘。Libpcap庫(kù)只支持BPF接口的核過(guò)濾。如果主機(jī)上沒(méi)有BPF機(jī)制,所有的數(shù)據(jù)包都必須讀取到用戶(hù)應(yīng)用程序的空間后,才能進(jìn)行操作,這樣將導(dǎo)致性能?chē)?yán)重下降,可能會(huì)有丟包的問(wèn)題出現(xiàn)。對(duì)于windows98來(lái)說(shuō),我們只要替換用一個(gè)虛擬協(xié)議驅(qū)動(dòng)替代現(xiàn)在的wdm協(xié)議驅(qū)動(dòng)程序就可以了。.無(wú)法在交換式以太網(wǎng)實(shí)現(xiàn)監(jiān)聽(tīng)用交換機(jī)來(lái)代替HUB,原先的共享式以太網(wǎng)就變成了交換式以太網(wǎng),Switch不會(huì)把數(shù)據(jù)包在端口進(jìn)行廣播,它通過(guò)自己的ARP緩存來(lái)決定數(shù)據(jù)包傳輸?shù)侥膫€(gè)端口上。因此如果A,B主機(jī)在不同端口處Pa,Pb,A就沒(méi)有辦法監(jiān)聽(tīng)到B的數(shù)據(jù)包。因?yàn)镾witch上的arp表是動(dòng)態(tài)變化的,所以我們?nèi)绻軌騻卧煲粋€(gè)ARP數(shù)據(jù)包包含B的MAC地址,然后從A發(fā)送出去,那么Switch就錯(cuò)誤得認(rèn)為Pa-MACb有對(duì)應(yīng)關(guān)系,所以它就會(huì)把數(shù)據(jù)包發(fā)送到Pa端口,那么A就能監(jiān)聽(tīng)到B的信息。但是還存在一個(gè)問(wèn)題,就是這樣做將影響B(tài)正常的網(wǎng)絡(luò)通訊。暫時(shí)沒(méi)有想出更好的辦法。.網(wǎng)絡(luò)管理子系統(tǒng)的不足MySniffer中的管理功能,其實(shí)設(shè)計(jì)不是很合理,針對(duì)端口進(jìn)行判斷主機(jī)是否存在安全問(wèn)題,顯然十分武斷,那些開(kāi)啟合理服務(wù)的主機(jī)也將會(huì)被懷疑。其實(shí)原本的想法是建立一個(gè)病毒特征庫(kù)對(duì)網(wǎng)絡(luò)中數(shù)據(jù)包進(jìn)行比對(duì),發(fā)現(xiàn)有問(wèn)題的數(shù)據(jù)包后,再對(duì)主機(jī)采取一定的措施??赡苡腥藭?huì)認(rèn)為這樣的工作方式,一臺(tái)管理服務(wù)器或者是網(wǎng)關(guān)服務(wù)器無(wú)法勝任大量的網(wǎng)絡(luò)處理。性能的確是問(wèn)題,但是我們還可以把任務(wù)分擔(dān)到多臺(tái)服務(wù)器上,不同服務(wù)器針對(duì)不同協(xié)議或者不同長(zhǎng)度的數(shù)據(jù)包進(jìn)行過(guò)濾。.連接子系統(tǒng)的不足MySniffer中的連接子系統(tǒng)也還不很理想,只是一種思想而已。因?yàn)樵贑/S結(jié)構(gòu)下,只是簡(jiǎn)單的傳輸數(shù)據(jù)顯然是很消極的管理方式,如果能采取主動(dòng)的管理方式就會(huì)更加合理。比如采用SNMPV3協(xié)議實(shí)現(xiàn)分布式監(jiān)聽(tīng)工具的網(wǎng)絡(luò)管理,將使系統(tǒng)更加緊湊。反監(jiān)聽(tīng)技術(shù).檢測(cè)網(wǎng)絡(luò)監(jiān)聽(tīng)的手段對(duì)發(fā)生在局域網(wǎng)的其他主機(jī)上的監(jiān)聽(tīng),一直以來(lái),都缺乏很好的檢測(cè)方法。這是由于產(chǎn)生網(wǎng)絡(luò)監(jiān)聽(tīng)行為的主機(jī)在工作時(shí)總是不做聲的收集數(shù)據(jù)包,幾乎不會(huì)主動(dòng)發(fā)出任何信息。但目前網(wǎng)上已經(jīng)有了一些解決這個(gè)問(wèn)題的思路和產(chǎn)品:?利用ping模式進(jìn)行監(jiān)測(cè)當(dāng)一臺(tái)主機(jī)進(jìn)入混雜模式時(shí),以太網(wǎng)的網(wǎng)卡會(huì)將所有不屬于他的數(shù)據(jù)照單全收;向局域網(wǎng)的主機(jī)發(fā)送非廣播方式的,MAC地址不等于局域網(wǎng)任何主機(jī)的硬件地址的icmp包,所以它不會(huì)去對(duì)比數(shù)據(jù)包的硬件地址,而是將數(shù)據(jù)包直接傳到上層,上層檢查數(shù)據(jù)包的ip地址,符合自己的ip,于是會(huì)對(duì)對(duì)這個(gè)ping的包做出回應(yīng)。這樣,一臺(tái)處于網(wǎng)絡(luò)監(jiān)聽(tīng)模式的主機(jī)就被發(fā)現(xiàn)了。?利用aq)數(shù)據(jù)包進(jìn)行監(jiān)測(cè)除了使用ping進(jìn)行監(jiān)測(cè)外,目前比較成熟的有利用arp方式進(jìn)行監(jiān)測(cè)的。這種模式是上述ping方式的一種變體,它使用arp數(shù)據(jù)包替代了上述的icmp數(shù)據(jù)包。向局域網(wǎng)的主機(jī)發(fā)送非廣播方式的air包,如果局域網(wǎng)的某個(gè)主機(jī)響應(yīng)了這個(gè)a中請(qǐng)求,那么我們就可以判斷它很可能就是處于網(wǎng)絡(luò)監(jiān)聽(tīng)模式了,這是目前相對(duì)而言比較好的監(jiān)測(cè)模式。.防網(wǎng)絡(luò)監(jiān)聽(tīng)的手段上面我們知道,監(jiān)聽(tīng)是發(fā)生在以太網(wǎng)的,那么,很明顯,首先就要確保以太網(wǎng)的整體安全性,因?yàn)楸O(jiān)聽(tīng)行為要想發(fā)生,一個(gè)最重要的前提條件就是以太網(wǎng)部的一臺(tái)有漏洞的主機(jī)被攻破,只有利用被攻破的主機(jī),才能進(jìn)行監(jiān)聽(tīng),去收集以太網(wǎng)敏感的數(shù)據(jù)信息。其次,采用加密手段也是一個(gè)很好的辦法,因?yàn)槿绻O(jiān)聽(tīng)工具抓取到的數(shù)據(jù)都是以密文傳輸?shù)模菍?duì)入侵者即使抓取到了傳輸?shù)臄?shù)據(jù)信息,意義也是不大的-比如作為telnet,ftp等安全替代產(chǎn)品目前采用ssh2還是安全的。這是目前相對(duì)而言使用較多的手段之一,在實(shí)際應(yīng)用中往往是指替換掉不安全的采用明文傳輸數(shù)據(jù)的服務(wù),如在server端用ssh,openssh等替換unix系統(tǒng)自帶的telnet,ftp,rsh,在client端使用securecrt,sshtransfer替代telnet,ftp等。除了加密外,使用交換機(jī)目前也是一個(gè)應(yīng)用比較多的方式,不同于工作在第一層的hub,交換機(jī)是工作在二層,也就是說(shuō)數(shù)據(jù)鏈路層的。對(duì)二層設(shè)備而言,僅有兩種情況會(huì)發(fā)送廣播報(bào)文,一是數(shù)據(jù)報(bào)的目的MAC地址不在交換機(jī)維護(hù)的數(shù)據(jù)庫(kù)中,此時(shí)報(bào)文向所有端口轉(zhuǎn)發(fā),二是報(bào)文本身就是廣播報(bào)文。由此,我們可以看到,這在很大程度上解決了網(wǎng)絡(luò)監(jiān)聽(tīng)的困擾。此外,對(duì)安全性要求比較高的情況可以考慮kerberos,kerberos是一種為網(wǎng)絡(luò)通信提供可信第三方服務(wù)的面向開(kāi)放系統(tǒng)的認(rèn)證機(jī)制,它提供了一種強(qiáng)加密機(jī)制使client端和server即使在非安全的網(wǎng)絡(luò)連接環(huán)境中也能確認(rèn)彼此的身份,而且在雙方通過(guò)身份認(rèn)證后,后續(xù)的所有通訊也是被加密的。雖然上述的安全措施可以防網(wǎng)絡(luò)監(jiān)聽(tīng),但是網(wǎng)絡(luò)監(jiān)聽(tīng)對(duì)安全威脅至今任存在的原因是它能獲得主機(jī)之間的信任關(guān)系,通過(guò)信任鏈從事滲透入侵將是非常難以追蹤和覺(jué)察的。參考文獻(xiàn):. 《網(wǎng)絡(luò)偵聽(tīng)器的實(shí)現(xiàn)及其優(yōu)化》少凡,汪為農(nóng)交通大學(xué)學(xué)報(bào)19
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度土地開(kāi)發(fā)權(quán)轉(zhuǎn)讓合同附規(guī)劃設(shè)計(jì)及施工許可
- 施工合同簽訂及履行制度
- 教育機(jī)構(gòu)的字體運(yùn)用規(guī)范
- 遠(yuǎn)程教育對(duì)學(xué)習(xí)困難學(xué)生的支持研究
- 幼兒園燃?xì)庑孤?yīng)急預(yù)案
- 上海市某物流有限公司勞動(dòng)合同
- 個(gè)人委托代理合同范本示例
- 三孩子離婚贍養(yǎng)費(fèi)合同范本
- 二手物品買(mǎi)賣(mài)合同范文
- 個(gè)人住房抵押貸款合同范本大全
- 煤礦電氣試驗(yàn)規(guī)程
- JCT796-2013 回彈儀評(píng)定燒結(jié)普通磚強(qiáng)度等級(jí)的方法
- 物業(yè)客服培訓(xùn)課件PPT模板
- 火力發(fā)電廠節(jié)能管理制度實(shí)施細(xì)則
- 2003年版勞動(dòng)合同范本
- 全名校北師大版數(shù)學(xué)五年級(jí)下冊(cè)第三單元達(dá)標(biāo)測(cè)試卷(含答案)
- 新員工入職通識(shí)考試(中軟國(guó)際)
- 華為攜手深圳國(guó)際會(huì)展中心創(chuàng)建世界一流展館
- 2023版思想道德與法治專(zhuān)題2 領(lǐng)悟人生真諦 把握人生方向 第3講 創(chuàng)造有意義的人生
- 全過(guò)程工程咨詢(xún)服務(wù)技術(shù)方案
- GB/T 41509-2022綠色制造干式切削工藝性能評(píng)價(jià)規(guī)范
評(píng)論
0/150
提交評(píng)論