版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
XX理工大學(xué)計算機科學(xué)與技術(shù)學(xué)院課程設(shè)計報告—第一學(xué)期課程名稱網(wǎng)絡(luò)安全設(shè)計題目網(wǎng)絡(luò)嗅探器設(shè)計與實現(xiàn)姓名xxxxxxxxxx學(xué)號XXXXXXXXXXX專業(yè)班級XXXXXXXXXX指引教師xxxxxxxxxxx年1月2日簡樸網(wǎng)絡(luò)嗅探器摘要計算機網(wǎng)絡(luò)嗅探器是可以竊聽計算機程序在網(wǎng)絡(luò)上發(fā)送和接受到數(shù)據(jù),程序?qū)崿F(xiàn)了對抓取到本機在網(wǎng)絡(luò)中通信數(shù)據(jù)合同類型、源地址、目地址、端口和數(shù)據(jù)包大小加以簡樸分析,改程序應(yīng)用C#語言編寫,實現(xiàn)了一種簡樸網(wǎng)絡(luò)嗅探功能。。網(wǎng)絡(luò)嗅探器具備兩面性,襲擊者可以用它來監(jiān)聽網(wǎng)絡(luò)中數(shù)據(jù),達(dá)到非法獲得信息目,網(wǎng)絡(luò)管理者可以通過使用嗅探器捕獲網(wǎng)絡(luò)中傳播數(shù)據(jù)包并對其進行分析,分析成果可供網(wǎng)絡(luò)安全分析之用。本文對網(wǎng)絡(luò)嗅探技術(shù)進行了簡要分析,研究了網(wǎng)絡(luò)數(shù)據(jù)包捕獲機制。文中一方面分析了嗅探原理和危害并簡介了幾種常用嗅探器,然后研究了入侵檢測系統(tǒng)中使用包捕獲技術(shù)。運用原始套接字在windows平臺下實現(xiàn)了一種網(wǎng)絡(luò)嗅探器程序,完畢了對數(shù)據(jù)包進行解包、分析數(shù)據(jù)包功能。核心詞:網(wǎng)絡(luò)嗅探器;發(fā)送和接受到數(shù)據(jù);合同類型;源地址;目地地址;端口和數(shù)據(jù)包;分析;C#言語目錄一引言1.1基本原理二基本原理2.1概述2.2作用2.3分類2.4也許導(dǎo)致危害2.5基本工作原理2.6工作環(huán)境三需求分析3.1需求闡明3.2需求分析四概要設(shè)計4.1編程環(huán)境4.2模塊分析五詳細(xì)設(shè)計5.1嗅探器詳細(xì)實現(xiàn)過5.2重要數(shù)據(jù)構(gòu)造六嗅探器實現(xiàn)與測試6.1實現(xiàn)與測試6.2實驗體會七附錄(重要代碼)引言
1.1基本原理網(wǎng)絡(luò)安全現(xiàn)狀隨著各種新網(wǎng)絡(luò)技術(shù)不斷浮現(xiàn)、應(yīng)用和發(fā)展,計算機網(wǎng)絡(luò)應(yīng)用越來越廣泛,其作用也越來越重要。但是由于計算機系統(tǒng)中軟硬件脆弱性和計算機網(wǎng)絡(luò)脆弱性以及地理分布位置、自然環(huán)境、自然破壞以及人為因素影響,不但增長了信息存儲、解決風(fēng)險,也給信息傳送帶來了新問題。計算機網(wǎng)絡(luò)安全問題越來越嚴(yán)重,網(wǎng)絡(luò)破壞所導(dǎo)致?lián)p失越來越大。Internet安全已經(jīng)成為亟待解決問題
二、網(wǎng)絡(luò)嗅探器基本原理
2.1概述
網(wǎng)絡(luò)嗅探器又稱為網(wǎng)絡(luò)監(jiān)聽器,簡稱為Sniffer子系統(tǒng),放置于網(wǎng)絡(luò)節(jié)點處,對網(wǎng)絡(luò)中數(shù)據(jù)幀進行捕獲一種被動監(jiān)聽手段,是一種慣用收集有用數(shù)據(jù)辦法,這些數(shù)據(jù)可以是顧客賬號和密碼,可以是某些商用機密數(shù)據(jù)等等。她廣泛地應(yīng)用于流量分析、安全監(jiān)控、網(wǎng)管分析、防火墻等實現(xiàn)中。Sniffer是運用計算機網(wǎng)絡(luò)接口截獲目地為其她計算機數(shù)據(jù)報文一種工具。Sniffer合法用處重要是分析網(wǎng)絡(luò)流量,以便找出所關(guān)懷網(wǎng)絡(luò)中潛在問題。例如,假設(shè)網(wǎng)絡(luò)某一段運營得不是較好,報文發(fā)送比較慢,而咱們又不懂得問題出在什么地方,此時就可以用嗅探器截獲網(wǎng)絡(luò)中數(shù)據(jù)包,分析問題所在。而嗅探器也可作為襲擊工具被黑客所運用為其發(fā)動進一步襲擊提供有價值信息。2.2作用
嗅探器是網(wǎng)絡(luò)抓包工具,可以對網(wǎng)絡(luò)中大量數(shù)據(jù)抓取,從而以便使用者對網(wǎng)絡(luò)中顧客某些信息進行分析,因此,普通被黑客運用于網(wǎng)絡(luò)襲擊。咱們?nèi)绻材苷莆站W(wǎng)絡(luò)嗅探器原理和設(shè)計,可以將它運用與網(wǎng)絡(luò)故障檢測、網(wǎng)絡(luò)狀況監(jiān)視,還可以加強公司信息安全防護。2.3分類
Sniffer分為軟件和硬件兩種,軟件Sniffer有NetXray、Packetboy、Netmonitor等,其長處是物美價廉,易于學(xué)習(xí)使用,同步也易于交流;缺陷是無法抓取網(wǎng)絡(luò)上所有傳播,某些狀況下也就無法真正理解網(wǎng)絡(luò)故障和運營狀況。硬件Sniffer普通稱為合同分析儀,普通都是商業(yè)性,價格也比較貴。
事實上本文中所講Sniffer指是軟件。它把包抓取下來,然后打開并查看其中內(nèi)容,可以得到密碼等。Sniffer只能抓取一種物理網(wǎng)段內(nèi)包,就是說,你和監(jiān)聽目的中間不能有路由或其她屏蔽廣播包設(shè)備,這一點很重要。因此,對普通撥號上網(wǎng)顧客來說,是不也許運用Sniffer來竊聽到其她人通信內(nèi)容。2.4也許導(dǎo)致危害
sniffing是作用在網(wǎng)絡(luò)基本構(gòu)造底層。普通狀況下,顧客并不直接和該層打交道,有些甚至不懂得有這一層存在。因此,應(yīng)當(dāng)說snffer危害是相稱之大,普通,使用sniffer是在網(wǎng)絡(luò)中進行欺騙開始。它也許導(dǎo)致危害:
嗅探器可以捕獲口令。這大概是絕大多數(shù)非法使用sniffer理由,sniffer可以記錄到明文傳送userid和passwd。
可以捕獲專用或者機密信息。例如金融帳號,許多顧客很放心在網(wǎng)上使用自己信用卡或鈔票帳號,然而sniffer可以很輕松截獲在網(wǎng)上傳送顧客姓名、口令、信用卡號碼、截止日期、帳號和pin。例如偷窺機密或敏感信息數(shù)據(jù),通過攔截數(shù)據(jù)包,入侵者可以很以便記錄別人之間敏感信息傳送,或者干脆攔截整個email會話過程。
可以用來危害網(wǎng)絡(luò)鄰居安全,或者用來獲取更高檔別訪問權(quán)限。窺探低檔合同信息。這是很可怕事,通過對底層信息合同記錄,例如記錄兩臺主機之間網(wǎng)絡(luò)接口地址、遠(yuǎn)程網(wǎng)絡(luò)接口IP地址、IP路由信息和TCP連接字節(jié)順序號碼等。這些信息由非法入侵人掌握后將對網(wǎng)絡(luò)安全構(gòu)成極大危害,普通有人用sniffer收集這些信息只有一種因素:她正要進行一次欺騙(普通IP地址欺騙就規(guī)定你精確插入TCP連接字節(jié)順序號)。事實上,如果你在網(wǎng)絡(luò)上存在非授權(quán)嗅探器就意味著你系統(tǒng)已經(jīng)暴露在別人面前了。
簡樸放置一種嗅探器并將其放到隨便什么地方將不會起到什么作用。將嗅探器放置于被襲擊機器或網(wǎng)絡(luò)附近,這樣將捕獲到諸多口令,尚有一種比較好辦法就是放在網(wǎng)關(guān)上。sniffer普通運營在路由器,或有路由器功能主機上。這樣就能對大量數(shù)據(jù)進行監(jiān)控。sniffer屬第二層次襲擊。普通是襲擊者已經(jīng)進入了目的系統(tǒng),然后使用sniffer這種襲擊手段,以便得到更多信息。如果這樣話就能捕獲網(wǎng)絡(luò)和其她網(wǎng)絡(luò)進行身份鑒別過程2.5基本工作原理網(wǎng)絡(luò)嗅探器運用是共享式網(wǎng)絡(luò)傳播介質(zhì)。共享即意味著網(wǎng)絡(luò)中一臺機器可以嗅探到傳遞給本網(wǎng)段(沖突域)中所有機器報文。網(wǎng)絡(luò)嗅探器通過將網(wǎng)卡設(shè)立為混雜模式來實現(xiàn)對網(wǎng)絡(luò)嗅探。一種實際主機系統(tǒng)中,數(shù)據(jù)收發(fā)是由網(wǎng)卡來完畢,當(dāng)網(wǎng)卡接受到傳播來數(shù)據(jù)包時,網(wǎng)卡內(nèi)單片程序一方面解析數(shù)據(jù)包目網(wǎng)卡物理地址,然后依照網(wǎng)卡驅(qū)動程序設(shè)立接受模式判斷該不該接受,以為該接受就產(chǎn)生中斷信號告知CPU,以為不該接受就丟掉數(shù)據(jù)包,因此不該接受數(shù)據(jù)包就被網(wǎng)卡截斷了,上層應(yīng)用主線就不懂得這個過程。CPU如果得到網(wǎng)卡中斷信號,則依照網(wǎng)卡驅(qū)動程序設(shè)立網(wǎng)卡中斷程序地址調(diào)用驅(qū)動程序接受數(shù)據(jù),并將接受數(shù)據(jù)交給上層合同軟件解決。下面給出一種簡樸圖示,簡樸理解數(shù)據(jù)傳送原理:_________/\/..Internet.\++++++UserA路由UserB++^++++\/\/++嗅探器++UserAIP地址:3UserBIP地址:4當(dāng)前懂得UserA要于UserB進行計算機通訊,UserA需要為3到4通訊建立一種IP包。這個IP包在網(wǎng)絡(luò)上傳播,它必要可以穿透路由器。因而,UserA必要一方面提交這個包給路由器。由每個路由器考查目地IP地址然后決定傳送途徑。UserA所懂得只是本地與路由連接,和UserBIP地址。UserA并不清晰網(wǎng)絡(luò)構(gòu)造狀況和路由走向。UserA必要告訴路由預(yù)備發(fā)送數(shù)據(jù)包狀況,以太網(wǎng)數(shù)據(jù)傳播構(gòu)造大概是這樣:+--+--+--+--+--+--+目的MAC+--+--+--+--+--+--+源MAC+--+--+--+--+--+--+0800+--+--++...IP包...+--+--+--+--++CRC校驗+--+--+--+--+理解一下這個構(gòu)造,UserA計算機建立了一種包假設(shè)它由100個字節(jié)長度(咱們假設(shè)一下,20個字節(jié)是IP信息,20個字節(jié)是TCP信息,尚有60個字節(jié)為傳送數(shù)據(jù))。當(dāng)前把這個包發(fā)給以太網(wǎng),放14個字節(jié)在目地MAC地址之前,源MAC地址,還要置一種0x0800標(biāo)記,她批示出了TCP/IP棧后數(shù)據(jù)構(gòu)造。同步,也附加了4個字節(jié)用于做CRC校驗(CRC校驗用來檢查傳播數(shù)據(jù)對的性)。當(dāng)前發(fā)送數(shù)據(jù)到網(wǎng)絡(luò)。所有在網(wǎng)內(nèi)計算機通過適配器都可以發(fā)現(xiàn)這個數(shù)據(jù)片,其中也涉及路由適配器,嗅探器和其她某些機器。普通,適配器都具備一塊芯片用來做構(gòu)造比較,檢查構(gòu)造中目地MAC地址和自己MAC地址,如果不相似,則適配器會丟棄這個構(gòu)造。這個操作會由硬件來完畢,因此,對于計算機內(nèi)程序來說,整個過程時毫無察覺。
當(dāng)路由器以太網(wǎng)適配器發(fā)現(xiàn)這個構(gòu)造后,它會讀取網(wǎng)絡(luò)信息,并且去掉前14個字節(jié),跟蹤4個字節(jié)。查找0x8000標(biāo)記,然后對這個構(gòu)造進行解決(它將依照網(wǎng)絡(luò)狀況推測出下一種最快路由節(jié)點,從而最快傳送數(shù)據(jù)到預(yù)定目的地址)。
設(shè)想,只有路由機器可以檢查這個構(gòu)造,并且所有其她機器都忽視這個構(gòu)造,則嗅探器無論如何也無法檢測到這個構(gòu)造。
sniffer工作在網(wǎng)絡(luò)環(huán)境中底層,它會攔截所有正在網(wǎng)絡(luò)上傳送數(shù)據(jù),并且通過相應(yīng)軟件解決,可以實時分析這些數(shù)據(jù)內(nèi)容,進而分析所處網(wǎng)絡(luò)狀態(tài)和整體布局。值得注意是:sniffer是極其安靜,它是一種悲觀安全襲擊。2.6工作環(huán)境
snifffer就是可以捕獲網(wǎng)絡(luò)報文設(shè)備。嗅探器合法用處在于分析網(wǎng)絡(luò)流量,以便找出所關(guān)懷網(wǎng)絡(luò)中潛在問題。例如,假設(shè)網(wǎng)絡(luò)某一段運營得不是較好,報文發(fā)送比較慢,而咱們又不懂得問題出在什么地方,此時就可以用嗅探器來作出精準(zhǔn)問題判斷。
嗅探器在功能和設(shè)計方面有諸多不同。有些只能分析一種合同,而另某些也允許以分析幾百種合同。普通狀況下,大多數(shù)嗅探器至少可以分析下面合同:
1.原則以太網(wǎng)
2.TCP/IP
3.IPX
4.DECNet三需求分析3.1需求闡明實現(xiàn)Sniffer基本功能。Sniffer是一種用于監(jiān)測網(wǎng)絡(luò)性能、使用狀況工具。可以偵聽所有進出本主機數(shù)據(jù)包,完整顯示數(shù)據(jù)包網(wǎng)絡(luò)層和傳播層(ICMP、IP、TCP和UDP)頭信息。例如,對IP頭而言,需要顯示版本、頭長度、服務(wù)類型、數(shù)據(jù)包長度、標(biāo)記、DF/MF標(biāo)志、段內(nèi)偏移、生存期、合同類型、源目IP地址、選項內(nèi)容。規(guī)定顯示數(shù)據(jù)實際含義;偵聽來源于指定IP地址數(shù)據(jù),顯示接受到TCP數(shù)據(jù)包所有實際內(nèi)容。需要考慮一種TCP包劃分為各種IP包傳播狀況;功能驗證手段:在運營Sniffer同步,執(zhí)行原則Ping、Telnet和瀏覽網(wǎng)頁等操作,檢查Sniffier能否返回預(yù)期成果。需求分析有于水平有限,不也許實現(xiàn)像Sniffer或者影音神探那樣復(fù)雜設(shè)立和分析,因此咱們只對抓取到本機在網(wǎng)絡(luò)中通信數(shù)據(jù)(如合同類型,源、目地址和端口、數(shù)據(jù)包大小等)加以分析,實現(xiàn)一種簡樸網(wǎng)絡(luò)嗅探器。一種窗體顯示主頁面,另一種頁面顯示詳細(xì)包信息。
詳細(xì)信息頁面,咱們顯示一下信息:
開始時間:嗅探器抓取數(shù)據(jù)包時間;
源端口:源目IP地址+端標(biāo)語;
目端口:目IP地址+端標(biāo)語;
合同類型:只分析一下類型,GPG,ICMP,IDP,IGMP,IP,ND,PUP,TCP,UDP,其她不再分析;
版本信息:合同版本;
生存時間:;
報頭大?。簣笪膱笫撞看笮?;
報文總長:整個數(shù)據(jù)報大小;
優(yōu)先級別:提供七個級別,分別是Routine=0,Priority=1,Immediate=2,Flash=3,FlashOverride=4,CRITICECP=5,InternetworkControl=6,NetworkControl=7;
延遲:NormalDelay=0、LowDelay=1;
吞吐量:NormalThroughput=0,HighThroughput=1;
可靠性:NormalReliability=0,HighReliability=1;四、概要設(shè)計4.1編程環(huán)境本軟件是在VC++環(huán)境下編寫,使用WinPcap中定義頭文獻(xiàn)和lib文獻(xiàn)為支持,運用WinPcap提供數(shù)據(jù)包捕獲程序執(zhí)行核心操作。4.2模塊分析(1)本軟件使用重要模塊及其功能如下:線程控制模塊抓包模塊數(shù)據(jù)包分析模塊(2)模塊間調(diào)用關(guān)系如下:啟動線程啟動線程關(guān)閉線程抓包抓包解包解包五、詳細(xì)設(shè)計5.1嗅探器詳細(xì)實現(xiàn)過程程序在執(zhí)行過程中有兩個核心工作,一是調(diào)用Winpcap函數(shù)庫實現(xiàn)下層抓包。二是對抓到包文進行分析。下面分別列出兩個核心過程基本算法與有關(guān)實當(dāng)代碼。 抓包算法: 第一:初始化Winpcap開發(fā)庫 第二:獲得當(dāng)前網(wǎng)卡列表,同步規(guī)定顧客指定要操作網(wǎng)卡 第三:獲得當(dāng)前過濾規(guī)則,可為空第四:調(diào)用庫函數(shù),pcap_loop(),同步并指定其回調(diào)函數(shù),其中其回調(diào)函數(shù)為數(shù)據(jù)包分析過程。分析算法:第一:得到數(shù)據(jù)包,先將其轉(zhuǎn)存到內(nèi)存里,以備后來再用。第二:分析當(dāng)前數(shù)據(jù)包,分析過程如下:數(shù)據(jù)包前14個字節(jié)(Byte)代表數(shù)據(jù)鏈路層報文頭,其報文格式是前6Byte為目MAC地址,隨后6個Byte為源Mac地址,最后2Byte代表上層合同類型這個數(shù)據(jù)很重要,是咱們分析上層合同根據(jù)。依照1所分析到合同類型進行類似1迭代分析。這樣就可以得到各層中報文頭信息和數(shù)據(jù)信息。第三:結(jié)束本次分析。5.2重要模塊清單咱們使用了MFC人機交互界面完畢該功能設(shè)立,其重要函數(shù)如下(詳細(xì)代碼見附錄):AdapaterSelection.cpp//網(wǎng)卡配備選取函數(shù)ARPPacket.cpp//ARP合同包函數(shù)CapturePacket.cpp//捕獲包合同CapturePacketDlg.cpp//捕獲包合同對話框DirDialog.cpp//目的文獻(xiàn)函數(shù)FilterDl.cpp//文獻(xiàn)合同函數(shù)FramePacket.cpp//表格包函數(shù)ICMPPacket.cpp//ICMP報文合同包函數(shù)IPPacket.cpp//IP報文合同函數(shù)OutputDataDlg.cpp//數(shù)據(jù)導(dǎo)出包函數(shù)RARPPacket.cpp//RARP合同包函數(shù)StdAfx.cpp//頭文獻(xiàn)TCPPacket.cpp//TCP報文合同函數(shù)TestDlg.cpp//測試對話框函數(shù)UDPPacket.cpp//UDP報文合同對話框六嗅探器實現(xiàn)與測試6.1實現(xiàn)與測試1.在操作菜單中選中啟動,便可以使程序進行抓包狀態(tài)。其運營效果圖如下所示2.記錄量是程序?qū)Ξ?dāng)前網(wǎng)絡(luò)數(shù)據(jù)包按合同類型進行簡樸計數(shù),通過查看界面上如圖所示位置便可以清晰看到數(shù)據(jù)包分類狀況。6.2實驗體會實驗中遇到問題: 在本次實驗中我以為有一種問題比較麻煩,就是對抓到包進行分析并提取出相應(yīng)位填充到相應(yīng)數(shù)據(jù)類型中,對于這個問題采用是查看相應(yīng)合同書,并從網(wǎng)上看了一下流行解決辦法。實驗中收獲:一定限度上加深了對TCP/IP合同理解,對課程學(xué)習(xí)打下了一種比較好基本;用某些設(shè)計模式在一定限度能提高開發(fā)效能,減少開發(fā)復(fù)雜度;七附錄(詳細(xì)實當(dāng)代碼請見電子版)重要源代碼如下:網(wǎng)卡配備//AdapaterSelection.cpp:implementationfileBOOLCAdapaterSelection::OnInitDialog(){CDialog::OnInitDialog(); //初始化樹形選取HTREEITEMroot=m_treeAdapater.InsertItem(_T("網(wǎng)絡(luò)適配器")); if(pcap_findalldevs(&m_pAllDevs,m_strErrorBuf)==-1) returnFALSE;for(m_pDev=m_pAllDevs;m_pDev!=NULL;m_pDev=m_pDev->next) {chartemp[400]; CStringstrText; HTREEITEMhSubItem=m_treeAdapater.InsertItem(m_pDev->name,root); if(m_pDev->description!=NULL) {strText.Format("網(wǎng)卡描述信息:%s",m_pDev->description); m_treeAdapater.InsertItem(strText,hSubItem); } else {m_treeAdapater.InsertItem("網(wǎng)卡描述信息:空",hSubItem);}if(m_pDev->addresses!=NULL&&m_pDev->addresses->addr!=NULL) {iptos(((structsockaddr_in*)m_pDev->addresses->addr)->sin_addr.s_addr,temp); strText.Format("IP地址:%s",temp); m_treeAdapater.InsertItem(strText,hSubItem); } else {m_treeAdapater.InsertItem("IP地址:空",hSubItem);}if(m_pDev->addresses!=NULL&&m_pDev->addresses->broadaddr!=NULL) {iptos(((structsockaddr_in*)m_pDev->addresses->broadaddr)->sin_addr.s_addr,temp); strText.Format("廣播地址:%s",temp); m_treeAdapater.InsertItem(strText,hSubItem); } else {m_treeAdapater.InsertItem("廣播地址:無",hSubItem);}if(m_pDev->addresses!=NULL&&m_pDev->addresses->netmask!=NULL) {iptos(((structsockaddr_in*)m_pDev->addresses->netmask)->sin_addr.s_addr,temp); strText.Format("子網(wǎng)掩碼:%s",temp); m_treeAdapater.InsertItem(strText,hSubItem); } else {m_treeAdapater.InsertItem("子網(wǎng)掩碼:空",hSubItem);}if(m_pDev->addresses!=NULL&&m_pDev->addresses->dstaddr!=NULL) {iptos(((structsockaddr_in*)m_pDev->addresses->dstaddr)->sin_addr.s_addr,temp); strText.Format("目地地址:%s",temp); m_treeAdapater.InsertItem(strText,hSubItem); } else {m_treeAdapater.InsertItem("目地地址:無",hSubItem);} } m_pDev=NULL; m_treeAdapater.Expand(root,TVE_EXPAND); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol //EXCEPTION:OCXPropertyPagesshouldreturnFALSE}voidCAdapaterSelection::OnDblclkTreeNetworkadapters(NMHDR*pNMHDR,LRESULT*pResult){ HTREEITEMhSubItem=m_treeAdapater.GetSelectedItem(); if(m_treeAdapater.GetParentItem(hSubItem)==NULL) return;elseif(m_treeAdapater.GetItemText(m_treeAdapater.GetParentItem(hSubItem))!="網(wǎng)絡(luò)適配器") hSubItem=m_treeAdapater.GetParentItem(hSubItem);m_pDev=m_pAllDevs;while(strcmp(m_pDev->name,m_treeAdapater.GetItemText(hSubItem))!=0) { //找到被選中網(wǎng)卡 m_pDev=m_pDev->next; }*pResult=0;}ARP合同包//ARPPacket.cpp:implementationoftheCARPPacketclass.CARPPacket::CARPPacket(constunsignedchar*buf,constunsignedintbuflen){unsignedchar*pos=(unsignedchar*)buf; m_nHaddrtype=(*pos)*0x100+(*(pos+1));pos+=2; 。。。。。。}CStringCARPPacket::GetHaddrtype(){returnGetData(m_nHaddrtype);//硬件地址類型}。。。。。。捕獲包//CapturePacket.cpp:Definestheclassbehaviorsfortheapplication.BEGIN_MESSAGE_MAP(CCapturePacketApp,CWinApp) ON_COMMAND(ID_HELP,CWinApp::OnHelp)END_MESSAGE_MAP()CCapturePacketApptheApp;目的文獻(xiàn)//DirDialog.cpp:implementationoftheCDirDialogclass.staticint__stdcallBrowseCtrlCallback(HWNDhwnd,UINTuMsg,LPARAMlParam,LPARAMlpData){CDirDialog*pDirDialogObj=(CDirDialog*)lpData;if(uMsg==BFFM_INITIALIZED){if(!pDirDialogObj->m_strSelDir.IsEmpty())::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)(LPCTSTR)(pDirDialogObj->m_strSelDir));}::SendMessage(hwnd,BFFM_ENABLEOK,0,TRUE);return0;}intCDirDialog::DoBrowse(CWnd*pwndParent){if(!m_strSelDir.IsEmpty()){m_strSelDir.TrimRight();if(m_strSelDir.Right(1)=="\\"||m_strSelDir.Right(1)=="http://")m_strSelDir=m_strSelDir.Left(m_strSelDir.GetLength()-1);}LPMALLOCpMalloc;if(SHGetMalloc(&pMalloc)!=NOERROR)returnFALSE;BROWSEINFObInfo;LPITEMIDLISTpidl;ZeroMemory((PVOID)&bInfo,sizeof(BROWSEINFO));if(!m_strInitDir.IsEmpty()){OLECHARolePath[MAX_PATH];ULONGchEaten;ULONGdwAttributes;HRESULThr;LPSHELLFOLDERpDesktopFolder;if(SUCCEEDED(SHGetDesktopFolder(&pDesktopFolder))){MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,m_strInitDir.GetBuffer(MAX_PATH),-1,olePath,MAX_PATH);m_strInitDir.ReleaseBuffer(-1);hr=pDesktopFolder->ParseDisplayName(NULL,NULL,olePath,&chEaten,&pidl,&dwAttributes);if(FAILED(hr)){pMalloc->Free(pidl);pMalloc->Release();returnFALSE;}bInfo.pidlRoot=pidl;}}bInfo.hwndOwner=pwndParent==NULL?NULL:pwndParent->GetSafeHwnd();bInfo.pszDisplayName=m_strPath.GetBuffer(MAX_PATH);bInfo.lpszTitle=m_strWindowTitle;bInfo.ulFlags=BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS|(FALSE/*m_bStatus*/?BIF_STATUSTEXT:0);bInfo.lpfn=BrowseCtrlCallback;bInfo.lParam=(LPARAM)this;if((pidl=::SHBrowseForFolder(&bInfo))==NULL){returnFALSE;}m_strPath.ReleaseBuffer();m_iImageIndex=bInfo.iImage;if(::SHGetPathFromIDList(pidl,m_strPath.GetBuffer(MAX_PATH))==FALSE){pMalloc->Free(pidl);pMalloc->Release();returnFALSE;}m_strPath.ReleaseBuffer();pMalloc->Free(pidl);pMalloc->Release();returnTRUE;}文獻(xiàn)合同//FilterDl.cpp:implementationfileCFilterDl::CFilterDl(CWnd*pParent/*=NULL*/) :CDialog(CFilterDl::IDD,pParent){}voidCFilterDl::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX); DDX_Control(pDX,IDC_TAB_CTR,m_tCtr);}BEGIN_MESSAGE_MAP(CFilterDl,CDialog) ON_NOTIFY(TCN_SELCHANGE,IDC_TAB_CTR,OnSelchangeTabCtr)END_MESSAGE_MAP()BOOLCFilterDl::OnInitDialog(){CDialog::OnInitDialog(); TCITEMitem; item.mask=TCIF_TEXT; item.pszText="第一頁";m_tCtr.InsertItem(0,&item); item.pszText="第二頁"; m_tCtr.InsertItem(1,&item);m_dlg1.Create(IDD_ABOUTBOX,&m_tCtr); m_dlg2.Create(IDD_DIALOG_OUTPUTDATA,&m_tCtr);m_dlg1.SetWindowPos(NULL,10,30,400,100,SWP_SHOWWINDOW); m_dlg2.SetWindowPos(NULL,10,30,400,100,SWP_HIDEWINDOW);returnTRUE;}voidCFilterDl::OnSelchangeTabCtr(NMHDR*pNMHDR,LRESULT*pResult){*pResult=0;}表格包//FramePacket.cpp:implementationoftheCFramePacketclass.CFramePacket::CFramePacket(constunsignedchar*buf,intbuflen){unsignedchar*pPos; pPos=(unsignedchar*)buf;for(inti=0;i<6;i++) {m_nDestAddr[i]=*pPos; pPos++; }for(i=0;i<6;i++) {m_nSrcAddr[i]=*pPos; pPos++; }m_nType=(*pPos)*0x100+(*(pPos+1));}voidCFramePacket::GetMacSrcAddr(char*str){sprintf(str,"%02X-%02X-%02X-%02X-%02X-%02X",m_nSrcAddr[0],m_nSrcAddr[1],m_nSrcAddr[2],m_nSrcAddr[3],m_nSrcAddr[4],m_nSrcAddr[5]);}CStringCFramePacket::GetMacSrcAddr(){CStringstr; str.Format("%02X-%02X-%02X-%02X-%02X-%02X",m_nSrcAddr[0],m_nSrcAddr[1],m_nSrcAddr[2],m_nSrcAddr[3],m_nSrcAddr[4],m_nSrcAddr[5]); returnstr;}。。。。。。intCFramePacket::GetType(){returnm_nType;}ICMP報文合同包//ICMPPacket.cpp:implementationoftheCICMPPacketclass.CICMPPacket::CICMPPacket(){}CICMPPacket::~CICMPPacket(){}IP報文合同包//IPPacket.cpp:implementationoftheCIPPacketclass.//用于初始化IP頭信息CIPPacket::CIPPacket(constunsignedchar*buf,intbuflen){unsignedchar*pos; pos=(unsignedchar*)buf; m_nVersion=*pos/16; m_nHeaderLength=*pos%16;pos++; m_nServiceType=*pos; m_nPrecedence=(*pos&16)*4+(*pos&8)*2+(*pos&4); if(*pos&16)m_bDelay=true; elsem_bDelay=false; 。。。。。。 m_nFragOffSet=(*pos%32)*256+(*(pos+1));pos+=2; m_nTTL=*pos;pos++; m_nProtocol=*pos;pos++; m_nCheckSum=(*pos)*256+(*(pos+1));pos+=2; m_lSrcIP=(*pos)*0x1000000+(*(pos+1))*0x10000+(*(pos+2))*0x100+(*(pos+3));pos+=4; m_lDestIP=(*pos)*0x1000000+(*(pos+1))*0x10000+(*(pos+2))*0x100+(*(pos+3));if(m_nHeaderLength>5) {pos+=4; m_nOptLength=(m_nHeaderLength-5)*4; m_pOptions=newunsignedchar[m_nOptLength]; memcpy(m_pOptions,buf+20,m_nOptLength); } else {m_nOptLength=0; m_pOptions=NULL; } pos=(unsignedchar*)(buf+m_nHeaderLength*4); m_nDataLength=m_uTotalLength-m_nHeaderLength*4; if(m_nDataLength>0) {m_pData=newunsignedchar[m_nDataLength]; memcpy(m_pData,buf+m_nHeaderLength*4,m_nDataLength); } Elsem_pData=NULL;}CStringCIPPacket::GetProtocol(){CStringstr; switch(m_nProtocol) {case6:str.Format("TCP");break; case17:str.Format("UDP");break; case1:str.Format("ICMP");break; case89:str.Format("OSPF");break; default:str.Format("%d",m_nProtocol); } returnstr;}CStringCIPPacket::GetDestIP(){CStringstr; inttemp=m_lDestIP; unsignedchari0,i1,i2,i3;i0=(temp&0xff000000)/0x1000000; i1=(temp&0x00ff0000)/0x10000; i2=(temp&0x0000ff00)/0x100; i3=temp&0x000000ff; str.Format("%003u.%003u.%003u.%003u",i0,i1,i2,i3);returnstr;}CStringCIPPacket::GetSrcIP(){CStringstr; inttemp=m_lSrcIP; unsignedchari0,i1,i2,i3;i0=(temp&0xff000000)/0x1000000; i1=(temp&0x00ff0000)/0x10000; i2=(temp&0x0000ff00)/0x100; i3=temp&0x000000ff; str.Format("%003u.%003u.%003u.%003u",i0,i1,i2,i3);returnstr;}unsignedchar*CIPPacket::GetTData(){ if(m_pData!=NULL) returnm_pData;returnNULL;}int CIPPacket::GetDataLength(){returnm_nDataLength;}//得到版本號CString CIPPacket::GetVersion(){returnGetInt(m_nVersion);}。。。。。。數(shù)據(jù)導(dǎo)出//OutputDataDlg.cpp:implementationfileCOutputDataDlg::COutputDataDlg(CWnd*pParent/*=NULL*/) :CDialog(COutputDataDlg::IDD,pParent){m_strDirPath=_T(""); m_strFileName=_T("");}voidCOutputDataDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX); DDX_Text(pDX,IDC_EDIT_DIRPATH,m_strDirPath); DDX_Text(pDX,IDC_EDIT_FILENAME,m_strFileName);}BEGIN_MESSAGE_MAP(COutputDataDlg,CDialog) ON_BN_CLICKED(IDC_BUTTON_SELECTIONDIR,OnButtonSelectiondir)END_MESSAGE_MAP()voidCOutputDataDlg::OnButtonSelectiondir(){UpdateData(); CDirDialogdlg; if(dlg.DoBrowse(this)>0) {m_strDirPath=dlg.m_strPath; }UpdateData(false);}voidCOutputDataDlg::OnOK(){UpdateData(); if(m_strFileName.GetLength()<=0) {AfxMessageBox("文獻(xiàn)名為空"); return; } elseif(m_strFileName.Find(".xml")<=0) {m_strFileName+=".xml";}if(m_strDirPath.GetLength()<=0) {AfxMessageBox("文獻(xiàn)途徑為空"); return; } UpdateData(false); CDialog::OnOK();}BOOLCOutputDataDlg::OnInitDialog(){CDialog::OnInitDialog(); structtm*p; charbuf[40]; longltime; time(<ime); p=localtime(<ime); strftime(buf,29,"%a%d%b%Y%H%M%SGMT",p); UpdateData(); m_strFileName.Format("%s數(shù)據(jù)文獻(xiàn)",buf); UpdateData(false); returnTRUE;}RARP合同//RARPPacket.cpp:implementationoftheCRARPPacketclass.CRARPPacket::CRARPPacket(){}CRARPPacket::~CRARPPacket(){}TCP報文合同//TCPPacket.cpp:implementationoftheCTCPPacketclass.CTCPPacket::CTCPPacket(unsignedchar*buf,intbuflen){unsignedchar*pos; pos=(unsignedchar*)buf; m_nSrcPort=(*pos)*0x100+(*(pos+1));pos+=2; m_nDestPort=(*pos)*0x100+(*(pos+1));pos+=2; m_uSeqNum=(*pos)*0x1000000+(*(pos+1))*0x10000+(*(pos+2))*0x100+(*(pos+3));pos+=4; m_uAckNum=(*pos)*0x1000000+(*(pos+1))*0x10000+(*(pos+2))*0x100+(*(pos+3));pos+=4; m_nHeadLen=(*pos)/16;pos++; if(*pos&0x20)m_bURG=true; elsem_bURG=false; if(*pos&0x10)m_bACK=true; elsem_bACK=false; if(*pos&0x08)m_bPSH=true; elsem_bPSH=false; if(*pos&0x04)m_bRST=true; elsem_bRST=false; if(*pos&0x02)m_bSYN=true; elsem_bSYN=false; if(*pos&0x01)m_bFIN=true; elsem_bFIN=false;pos++; m_nWindowSize=(*pos)*0x100+(*(pos+1));pos+=2; m_nCheckSum=(*pos)*0x100+(*(pos+1));pos+=2; m_nUrgPos=(*pos)*0x100+(*(pos+1));if(m_nHeadLen>5) {pos+=2; m_nOptLen=m_nHeadLen*4-20; m_pOptions=newunsignedchar[m_nOptLen]; memcpy(m_pOptions,buf+20,m_nOptLen); } else {m_nOptLen=0; m_pOptions=NULL; }pos=(unsignedchar*)(buf+m_nHeadLen*4); m_nDataLen=buflen-m_nHeadLen*4; if(m_nDataLen>0) {m_pData=newunsignedchar[m_nDataLen]; memcpy(m_pData,buf+m_nHeadLen*4,m_nDataLen); } else {m_pData=NULL; m_nDataLen=0; }}CStringCTCPPacket::GetSrcPort(){return GetStr(m_nSrcPort);}CStringCTCPPacket::GetDestPort(){return GetStr(m_nDestPort);}CStringCTCPPacket::GetSeqNum(){returnGetStr(m_uSeqNum);//順序號}。。。。。。CStringCTCPPacket::GetStr(unsignedintnNum,unsignedchar*pData,boolnFlag){CStringstr; if(nFlag) str.Format("%u",nNum); else {if(pData!=NULL) str.Format("%s",pData); else str="空"; } returnstr;}CStringCTCPPacket::GetBool(boolnFlag){if(nFlag) return"TRUE"; return"FALSE";}測試對話框//TestDlg.cpp:implementationfileCTestDlg::CTestDlg(CWnd*pParent/*=NULL*/) :CDialog(CTestDlg::IDD,pParent){}voidCTestDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CTestDlg,CDialog)END_MESSAGE_MAP()UDP報文合同對話框//UDPPacket.cpp:implementationoftheCUDPPacketclass.CUDPPacket::CUDPPacket(unsignedchar*buf,intbuflen){unsignedchar*pos;pos=(unsignedchar*)buf; m_uSrcPort=(*pos)*0x100+(*(pos+1));pos+=2; m_uDestPort=(*pos)*0x100+(*(pos+1));pos+=2; m_nTotalLen=(*pos)*0x100+(*(pos+1));pos+=2; m_nCheckSum=(*pos)*0x100+(*(pos+1));m_uDataLen=buflen-8; if(m_uDataLen>0) {m_pData=newchar[m_uDataLen]; memcpy(m_pData,buf+8,m_uDataLen); } else m_pData=NULL;}CStringCUDPPacket::GetDestPort(){returnGetInt(m_uDestPort);}。。。。。。捕獲包合同對話框//CapturePacketDlg.cpp:implementationfileclassCAboutDlg:publicCDialog{public: CAboutDlg(); enum{IDD=IDD_ABOUTBOX}; protected: virtualvoidDoDataExchange(CDataExchange*pDX);protected: DECLARE_MESSAGE_MAP()};voidCAboutDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)END_MESSAGE_MAP()CCapturePacketDlg::CCapturePacketDlg(CWnd*pParent/*=NULL*/) :CDialog(CCapturePacketDlg::IDD,pParent){m_strArpCount=_T(""); 。。。。。。 m_lArpCount =0; 。。。。。。}voidCCapturePacketDlg::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX); DDX_Control(pDX,IDC_EDIT_PACKETHEX,m_editHex); 。。。。。。}BEGIN_MESSAGE_MAP(CCapturePacketDlg,CDialog) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_COMMAND(ID_MENU_NETWORKCONFIGURATION,OnMenuNetworkconfiguration) 。。。。。。END_MESSAGE_MAP()BOOLCCapturePacketDlg::OnInitDialog(){CDialog::OnInitDialog(); ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE); if(pSysMenu!=NULL) {CStringstrAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if(!strAboutMenu.IsEmpty()) {pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu); } } SetIcon(m_hIcon,TRUE); //Setbigicon SetIcon(m_hIcon,FALSE); //Setsmallicon m_pDevice=NULL; m_bFlag=false; //設(shè)立列信息m_listPacket.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); m_listPacket.InsertColumn(0,"編號",LVCFMT_RIGHT,50); m_listPacket.InsertColumn(1,"時間戳",LVCFMT_RIGHT,120); m_listPacket.InsertColumn(2,"源網(wǎng)卡地址",LVCFMT_RIGHT,120); m_listPacket.InsertColumn(3,"目網(wǎng)卡地址",LVCFMT_RIGHT,120); m_listPacket.InsertColumn(4,"長度",LVCFMT_RIGHT,50); m_listPacket.InsertColumn(5,"合同",LVCFMT_RIGHT,50); m_listPacket.InsertColumn(6,"源端口",LVCFMT_LEFT,50); m_listPacket.InsertColumn(7,"源IP地址",LVCFMT_LEFT,120); m_listPacket.InsertColumn(8,"目IP地址",LVCFMT_LEFT,120); m_listPacket.InsertColumn(10,"目端口",LVCFMT_LEFT,50);LoadFilterString(); returnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCCapturePacketDlg::OnSysCommand(UINTnID,LPARAMlParam){if((nID&0xFFF0)==IDM_ABOUTBOX) {CAboutDlgdlgAbout; dlgAbout.DoModal(); } else {CDialog::OnSysCommand(nID,lParam);}}HCURSORCCapturePacketDlg::OnQueryDragIcon(){return(HCURSOR)m_hIcon;}voidCCapturePacketDlg::OnMenuNetworkconfiguration(){//用于選取網(wǎng)卡信息CAdapaterSelectiondlg; if(dlg.DoModal()==IDOK) {m_pDevice=dlg.getDevice();}}DWORDWINAPICapturePacket(LPVOIDlpParam){CCapturePacketDlg*pDlg=(CCapturePacketDlg*)lpParam; pcap_t*pCap; char strErrorBuf[PCAP_ERRBUF_SIZE];if((pCap=pcap_open_live(pDlg->getDevice()->name,65536,1,1000,strErrorBuf))==NULL) {return-1;}if(pDlg->m_strFilterString.GetLength()>0) {structbpf_programfcode;bpf_u_int32NetMask; NetMask=0xffffff;charfilter[1024]; strcpy(filter,pDlg->m_strFilterString.GetBuffer(pDlg->m_strFilterString.GetLength())); pDlg->m_strFilterString.ReleaseBuffer(); if(pcap_compile(pCap,&fcode,filter,1,NetMask)<0) {AfxMessageBox("編譯字符串失敗,程序無法啟動進行抓包,請確認(rèn)規(guī)則對的性"); return-1; } if(pcap_setfilter(pCap,&fcode)<0) {AfxMessageBox("設(shè)立過濾串失敗"); return-1; }}do {pcap_loop(pCap,1,pcap_handle,NULL); }while(pDlg->getFlag());pcap_close(pCap); pDlg=NULL; return1; }boolCCapturePacketDlg::getFlag(){returnm_bFlag;}//解決所有網(wǎng)絡(luò)數(shù)據(jù)voidCCapturePacketDlg::processPacket(constpcap_pkthdr*pkt_header,constu_char*pkt_data){//用于存諸網(wǎng)絡(luò)中數(shù)據(jù),并保存到CArray中,以備將來使用 structpcap_pkthdr*pHeader=newpcap_pkthdr;u_char*pData; unsignedchar*pPosition=(unsignedchar*)pkt_data; longnIndex=0;//標(biāo)記當(dāng)前數(shù)據(jù)包位置 longnCount=0;//標(biāo)記日后 charstrData[20];//標(biāo)記數(shù)據(jù)pHeader->caplen=pkt_header->caplen; pHeader->len=pkt_header->len;pData=newunsignedchar[pHeader->len]; memcpy((void*)pData,pkt_data,pHeader->len);m_pktHeaders.Add(pHeader); m_pktDatas.Add(pData);nIndex=m_pktHeaders.GetSize()-1; sprintf(strData,"%07d",nIndex+1); nCount=m_listPacket.InsertItem(nIndex,strData,0);m_lTotalCount++;//總數(shù)據(jù)包加1 CFramePacket*pFramePacket=newCFramePacket(pData,14); CStringstrStamp; structtm*ltime; ltime=localtime(&pkt_header->ts.tv_sec);strStamp.Format("%d-%d-%d%d:%d:%d",ltime->tm_year+1900,ltime->tm_mon+1,ltime->tm_mday,ltime->tm_hour,ltime->tm_min,ltime->tm_sec); CStringstrLength; strLength.Format("%ld",pHeader->len); m_listPacket.SetItemText(nCount,1,strStamp); m_listPacket.SetItemText(nCount,2,pFramePacket->GetMacSrcAddr()); m_listPacket.SetItemText(nCount,3,pFramePacket->GetMacDestAddr()); m_listPacket.SetItemText(nCount,4,strLength); if(pFramePacket->GetType()==0x0800) {CIPPacketipPacket(pData+14,pHeader->len-14); m_listPacket.SetItemText(nCount,5,ipPacket.GetProtocol());m_listPacket.SetItemText(nCount,7,ipPacket.GetSrcIP()); m_listPacket.SetItemText(nCount,8,ipPacket.GetDestIP()); if(ipPacket.GetProtocol()=="UDP") {CUDPPacket*pUDPPacket=newCUDPPacket(ipPacket.GetTData(),ipPacket.GetDataLength()); m_listPacket.SetItemText(nCount,6,pUDPPacket->GetSrcPort()); m_listPacket.SetItemText(nCount,9,pUDPPacket->GetDestPort()); deletepUDPPacket; pUDPPacket=NULL; m_lUdpCount++;//UDP包加1 } elseif(ipPacket.GetProtocol()=="TCP") {CTCPPacket*pTCPPacket=newCTCPPacket(ipPacket.GetTData(),ipPacket.GetDataLength()); m_listPacket.SetItemText(nCount,6,pTCPPacket->GetSrcPort()); m_listPacket.SetItemText(nCount,9,pTCPPacket->GetDestPort()); deletepTCPPacket; pTCPPacket=NULL; m_lTcpCount++;//TCP包加1 } } elseif(pFramePacket->GetType()==0x0806) {m_listPacket.SetItemText(nCount,5,"ARP"); CARPPacket*pARPPacket=newCARPPacket(pData+14,pHeader->len-14); m_listPacket.SetItemText(nCount,7,pARPPacket->GetSPAddr()); m_listPacket.SetItemText(nCount,8,pARPPacket->GetDPAddr()); deletepARPPacket; pARPPacket=NULL; m_lArpCount++;//ARP包加1 } elseif(pFramePacket->GetType()==0x8035) {m_listPacket.SetItemText(nCount,5,"RARP"); CARPPacket*pRARPPacket=newCARPPacket(pData+14,pHeader->len-14); m_listPacket.SetItemText(nCount,7,pRARPPacket->GetSPAddr()); m_listPacket.SetItemText(nCount,8,pRARPPacket->GetDPAddr()); deletepRARPPacket; pRARPPacket=NULL; m_lOtherCount++; } else {CStringstrProtocol; strProtocol.Format("0X%x",pFramePacket->GetType()); m_listPacket.SetItemText(nCount,5,strProtocol); m_lOtherCount++; } deletepFramePacket; pFramePacket=NULL; ShowPacketCount();//顯示記錄量信息}voidCCapturePacketDlg::ShowPacketForTree(constpcap_pkthdr*pkt_header,constu_char*pkt_data,longindex){m_treeSingerPacket.DeleteAllItems(); CStringstrTitle; strTitle.Format("第%ld個數(shù)據(jù)包",index+1);HTREEITEMhRoot=m_treeSingerPacket.InsertItem(strTitle); HTREEITEMhSubItem=m_treeSingerPacket.InsertItem("鏈路層數(shù)據(jù)",hRoot);CFramePacket*pFramePacket=newCFramePacket(pkt_data,14);HTREEITEMhItem=m_treeSingerPacket.InsertItem("源MAC地址:"+pFramePacket->GetMacSrcAddr(),hSubItem); hItem=m_treeSingerPacket.InsertItem("目MAC地址:"+pFramePacket->GetMacDestAddr(),hSubItem); CStringstrType; strType.Format("類型:0X%x",pFramePacket->GetType()); hItem=m_treeSingerPacket.InsertItem(strType,hSubItem);if(pFramePacket->GetType()==0x0800) {hSubItem=m_treeSingerPacket.InsertItem("網(wǎng)絡(luò)層數(shù)據(jù)",hRoot); CIPPacketipPacket(pkt_data+14,pkt_header->len-14); hItem=m_treeSingerPacket.InsertItem("合同:IP",hSubItem); hItem=m_treeSingerPacket.InsertItem("源IP:"+ipPacket.GetSrcIP(),hSubItem); hItem=m_treeSingerPacket.InsertItem("目IP:"+ipPacket.GetDestIP(),hSubItem); hItem=m_treeSingerPacket.InsertItem("版本號:"+ipPacket.GetVersion(),hSubItem); hItem=m_treeSingerPacket.InsertItem("TTL值:"+ipPacket.GetTTL(),hSubItem); hItem=m_treeSingerPacket.InsertItem("總長度:"+ipPacket.GetTotalLength(),hSubItem); 。。。。。。 HTREEITEMh1=m_treeSingerPacket.InsertItem("可靠性:"+ipPacket.GetReliability(),hItem); h1=m_treeSingerPacket.InsertItem("延遲:"+ipPacket.GetDelay(),hItem); h1=m_treeSingerPacket.InsertItem("吞吐量:"+ipPacket.GetThroughtPut(),hItem); hItem=m_treeSingerPacket.InsertItem("IP標(biāo)記:"+ipPacket.GetIdentification(),hSubItem); 。。。。。。hSubItem=m_treeSingerPacket.InsertItem("傳播層數(shù)據(jù)",hRoot); if(ipPacket.GetProtocol()=="UDP") {CUDPPacket*pUDPPacket=newCUDPPacket(ipPacket.GetTData(),ipPacket.GetDataLength()); hItem=m_treeSingerPacket.InsertItem("合同:UDP",hSubItem); hItem=m_treeSingerPacket.InsertItem("源端口:"+pUDPPacket->GetSrcPort(),hSubItem); 。。。。。。 deletepUDPPacket; pUDPPacket=NULL; } elseif(ipPacket.GetProtocol()=="TCP") {CTCPPacket*pTCPPacket=newCTCPPacket(ipPacket.GetTData(),ipPacket.GetDataLength()); hItem=m_treeSingerPacket.InsertItem("合同:TCP",hSubItem); hItem=m_treeSingerPacket.InsertItem("源端口:"+pTCPPacket->GetSrcPort(),hSubItem); 。。。。。。 deletepTCPPacket; pTCPPacket=NULL; } m_treeSingerPacket.Expand(hSubItem,TVE_EXPAND); } elseif(pFramePacket->GetType()==0x0806) {CARPPacket*pARPPacket=newCARPPacket(pkt_data+14,pkt_header->len-14); hItem=m_treeSingerPacket.InsertItem("合同:ARP",hSubItem); hItem=m_treeSingerPacket.InsertItem("源IP:"+pARPPacket->GetSPAddr(),hSubItem); 。。。。。。 deletepARPPacket; pARPPacket=NULL; } elseif(pFramePacket->GetType()==0x8035) {CARPPacket*pARPPacket=newCARPPacket(pkt_data+14,pkt_header->len-14); hItem=m_treeSingerPac
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工合同進度管理策略
- 門店租賃合同簡易
- 養(yǎng)殖場環(huán)保專員合同范本
- 創(chuàng)新研發(fā)承諾書格式承諾書
- 魯教青島版七年級下冊數(shù)學(xué)期中試卷-1
- 娛樂場所咖啡廳租賃協(xié)議范本
- 班級班規(guī)的制定與實施計劃
- 年度工作計劃
- 長方體和正方體的表面積教學(xué)反思15篇
- 幼兒園衛(wèi)生保健工作計劃3篇
- 線性代數(shù)(上海電力大學(xué))智慧樹知到答案2024年上海電力大學(xué)
- 2024年人教版小學(xué)四年級信息技術(shù)(上冊)期末試卷及答案
- 2024年全國煙花爆竹經(jīng)營單位安全生產(chǎn)考試題庫(含答案)
- 《病梅館記》解析版(分層作業(yè))
- 嬰幼兒發(fā)展引導(dǎo)員理論考試題庫資料500題(含答案)
- 《預(yù)防和減少未成年人犯罪》專題講座(經(jīng)典)
- 2024-2030年中國激光陀螺儀行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- DL∕ T 1195-2012 火電廠高壓變頻器運行與維護規(guī)范
- 大數(shù)據(jù)分析導(dǎo)論智慧樹知到期末考試答案章節(jié)答案2024年南京工業(yè)大學(xué)
- 內(nèi)審員培訓(xùn)班考核試題
- 新疆維吾爾自治區(qū)桶裝飲用水生產(chǎn)企業(yè)質(zhì)量安全風(fēng)險清單
評論
0/150
提交評論