數(shù)據(jù)包捕獲與解析分解_第1頁(yè)
數(shù)據(jù)包捕獲與解析分解_第2頁(yè)
數(shù)據(jù)包捕獲與解析分解_第3頁(yè)
數(shù)據(jù)包捕獲與解析分解_第4頁(yè)
數(shù)據(jù)包捕獲與解析分解_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、數(shù)據(jù)包捕獲與解析課程設(shè)計(jì)報(bào)告學(xué)生姓名:董耀杰學(xué) 號(hào):1030430330指導(dǎo)教師:江珊珊數(shù)據(jù)包捕獲與分析摘 要 本課程設(shè)計(jì)通過(guò)Ethereal捕捉實(shí)時(shí)網(wǎng)絡(luò)數(shù)據(jù)包,并根據(jù)網(wǎng)絡(luò)協(xié)議分析流程對(duì)數(shù) 據(jù)包在TCP/IP各層協(xié)議中進(jìn)行實(shí)際解包分析,讓網(wǎng)絡(luò)研究人員對(duì)數(shù)據(jù)包的認(rèn)識(shí)上升到 一個(gè)感性的層面,為網(wǎng)絡(luò)協(xié)議分析提供技術(shù)手段。最后根據(jù)Ethereal的工作原理,用Visual C+編寫一個(gè)簡(jiǎn)單的數(shù)據(jù)包捕獲與分析軟件。關(guān)鍵詞 協(xié)議分析;Ethereal;數(shù)據(jù)包;Visual C4- +1引言本課程設(shè)計(jì)通過(guò)技術(shù)手段捕獲數(shù)據(jù)包并加以分析,追蹤數(shù)據(jù)包在TCP/IP各層的封 裝過(guò)程,對(duì)于網(wǎng)絡(luò)協(xié)議的研究具有重要的意義

2、。Ethereal是當(dāng)前較為流行的圖形用戶接 口的抓包軟件,是一個(gè)可以用來(lái)監(jiān)視所有在網(wǎng)絡(luò)上被傳送的包,并分析其內(nèi)容的程序。它 通常被用來(lái)檢查網(wǎng)絡(luò)工作情況,或是用來(lái)發(fā)現(xiàn)網(wǎng)絡(luò)程序的bugso通過(guò)ethereal對(duì)TCP、 UDP、SMTP、telnet和FTP等常用協(xié)議進(jìn)行分析,非常有助于網(wǎng)絡(luò)故障修復(fù)、分析以及 軟件和協(xié)議開發(fā)。,它以開源、免費(fèi)、操作界面友好等優(yōu)點(diǎn)廣為世界各地網(wǎng)絡(luò)研究人員 使用為網(wǎng)絡(luò)協(xié)議分析搭建了一個(gè)良好的研究平臺(tái)。1.1 課程設(shè)計(jì)的內(nèi)容(1)掌握數(shù)據(jù)包捕獲和數(shù)據(jù)包分析的相關(guān)知識(shí);(2)掌握Ethreal軟件的安裝、啟動(dòng),并熟悉用它進(jìn)行局域網(wǎng)數(shù)據(jù)捕獲和分析的功能; (3)設(shè)計(jì)一個(gè)簡(jiǎn)

3、單的數(shù)據(jù)包捕獲與分析軟件。1.2 課程設(shè)計(jì)的要求(1)按要求編寫課程設(shè)計(jì)報(bào)告書,能正確闡述設(shè)計(jì)結(jié)果。(2)通過(guò)課程設(shè)計(jì)培養(yǎng)學(xué)生嚴(yán)謹(jǐn)?shù)目茖W(xué)態(tài)度,認(rèn)真的工作作風(fēng)和團(tuán)隊(duì)協(xié)作精神。(3)學(xué)會(huì)文獻(xiàn)檢索的基本方法和綜合運(yùn)用文獻(xiàn)的能力。(4)在老師的指導(dǎo)下,要求每個(gè)學(xué)生獨(dú)立完成課程設(shè)計(jì)的全部?jī)?nèi)容。1.3 課程設(shè)計(jì)平臺(tái)Windows XP; Visual C+ +2用Visual C+設(shè)計(jì)一個(gè)簡(jiǎn)單的數(shù)據(jù)包捕獲和分析軟件2.1 Visual C+簡(jiǎn)介VisualC+ +即VC,微軟公司出品的高級(jí)可視化計(jì)算機(jī)程序開發(fā)工具。他提 供了一套開發(fā)環(huán)境:Visual Studio, Visual Studio本身包括一個(gè)

4、文本編輯器、資源 編輯器、工程編譯工具、一個(gè)增量連接器、源代碼瀏覽器、集成調(diào)試工具,以及 一套聯(lián)機(jī)文檔,借助這套工具,用戶可以隨心所欲地開發(fā)出各種功能的應(yīng)用軟件 以及借助OpenGL和DirectX技術(shù)開發(fā)游戲軟件。Visual C+可以識(shí)別C/C+并編 譯,支持MFC類庫(kù),并提供了一系列模板,常用的MFC AppWizard(EXE/DLL),MFC ActiveXControl Wizard, Win32 Application, Win32Console Application, ATLCOMAppWi zardo這種可視化編程環(huán)境可以令程序員花更多精力在程序功能的實(shí)現(xiàn)上,而不是 底層的

5、建設(shè)上,這就大大加快了程序開發(fā)速度和效率,這也是Visual C+一個(gè)顯著 的特點(diǎn)。利用Visual C+編譯出的程序空間小,運(yùn)行快,比其他的編譯工具編譯出 的軟件占據(jù)較多優(yōu)勢(shì)?,F(xiàn)在常用的版本有Visual C+6.0/.Net/2005|5|o2.2 WinPcap 簡(jiǎn)介WinPcap是一個(gè)在Windows操作系統(tǒng)下的免費(fèi)、公開的用于直接訪問(wèn)網(wǎng)絡(luò)的開發(fā)工 具包(編程APDo大多數(shù)Windows網(wǎng)絡(luò)應(yīng)用程序都是通過(guò)Winsock API (Windows套接 口)這類高級(jí)編程接口訪問(wèn)網(wǎng)絡(luò)的。這種方法允許在網(wǎng)絡(luò)上進(jìn)行簡(jiǎn)單的數(shù)據(jù)傳送,因?yàn)?操作系統(tǒng)的TCP/IP協(xié)議棧實(shí)現(xiàn)軟件會(huì)處理底層細(xì)節(jié)(協(xié)議操

6、作、流程重組等等),并提 供一個(gè)類似于讀寫文件的函數(shù)接口。然而,有時(shí)候“簡(jiǎn)便方法”并不能滿足實(shí)際需要。有 些程序希望繞過(guò)TCP/IP協(xié)議棧,直接處理底層網(wǎng)絡(luò)中的通信數(shù)據(jù),它們需要對(duì)網(wǎng)絡(luò)進(jìn) 行底層進(jìn)行直接訪問(wèn),即在沒(méi)有類似協(xié)議棧(TCP/IP協(xié)議棧)的實(shí)體介入條件下對(duì)網(wǎng)絡(luò) 進(jìn)行原始訪問(wèn)?;赪insock API編程,應(yīng)用程序是通過(guò)調(diào)用操作系統(tǒng)提供的編程接口 訪問(wèn)TCP/IP協(xié)議棧實(shí)現(xiàn)網(wǎng)絡(luò)通信的?;赪inPcap編程,網(wǎng)絡(luò)程序?qū)嶋H上是繞開操作 系統(tǒng)的TCP/IP協(xié)議棧直接通過(guò)底層網(wǎng)絡(luò)發(fā)送數(shù)據(jù),因此網(wǎng)絡(luò)程序可以實(shí)現(xiàn)一些更低級(jí)、 更靈活的功能。23建立工程在VC+ 6.0下創(chuàng)建一個(gè)單文檔的MFC應(yīng)

7、用程序,工程名:Sniffer如圖3-1->圖3-2->圖 3-3 o文件工程|工作區(qū)|其它文巖|&ZL COM AppWIZMd皂 RcM)rcc Type WizardJ Custom AfypWcardDatabase Project 綣 DevStadio Addin Wizard 底 ExtendM S<(xed Proc Wizard SISAP1 Extension Wiz 神。Mokcfilc統(tǒng) MFC ActiveX CofitrolWsirdMFCAppWizard (diq SjMFCAppWizard (exe) XNcw Databaw Wi

8、zard Vf IRIHty Prtjed3V/1n32 AppKc«ion二Condole ApplicoliiMi<| Win32 Dynamic-Link Libraryhj Win32 Slafic LibraryI«sfliiioc)-C-Czfi:|EATCPPR(MECB8»l«c< .6 B倉(cāng)蛭新工傕區(qū)r &澆加主現(xiàn)花.小片r ohMl"k,I3圖2-1建立工程你言愛創(chuàng)法的應(yīng)用程序莢型?佝單個(gè)文檔M穿走文檔?;緦?duì)話口蚊檢查看體系結(jié)構(gòu)支持?L你再愛你的貨源使用什么語(yǔ)言?| (APPWZCHS.DLL圖22選中

9、單文檔AppVAzard creates the following glasses for vpy;CSniHerViewCSniffcrApp CMainFramc CSnlfferDocL分類名:Header lile:CSnlfferViewSnlflerVlew.hBase class:CView3Implementation file:SnlffcrVicw.cpp圖2-3自動(dòng)生成的類列表到 /devel.htm 下載 WinPc叩 4.02.zip,然后解壓,解壓縮就可 以看見 Includelib ;在 HProject->Set

10、tingsn 標(biāo)簽欄中選擇"C/C+”,在"Preprocessordefinitions”的輸入框里添力口"WPCAP”;再選擇“Link”,在"Object/library modules”的輸入 框里添加"wpcap.lib "o然后再設(shè)置VC+環(huán)境變量:選擇Tools->options->Directories的 include里面加入下載的winpcap開發(fā)包解壓以后的include文件選擇 Tools->options->Directories的lib里面加入下載的winpc叩開發(fā)包解壓以后的lib

11、文件夾 。2.4 進(jìn)行界面的設(shè)計(jì)工程建好了,下面進(jìn)行界面的設(shè)計(jì):首先,對(duì)菜單欄進(jìn)行修改,去掉原來(lái)單文檔所自帶的“文件”、“編輯”菜單選項(xiàng),保 留“查看”和“幫助”,新建“文件”,下面有“開始抓包(ID_FILE_START) ”、“停止抓包 (ID_FILE_STOP) ”、“退出(ID_APP_EXIT) ”三個(gè)菜單選項(xiàng)。再建“適配器”菜單,下 面有“選擇適配器(ID_ADP_CHOOSE) ”選項(xiàng),并對(duì)每個(gè)新建的選項(xiàng)進(jìn)行注釋說(shuō)明。如 圖 3-4:(喬n適配器查看幫助=1I 開始抓包 停止抓包 退出 !S圖2-4菜單欄然后,打開Sniffer.rc文件,對(duì)工具欄進(jìn)行修改。自做了一個(gè)工具欄圖片

12、Toolbarl.bmp 來(lái)代替原來(lái)工程的Toolbar.bmp,然后將多余的復(fù)制粘貼等工具按鈕信息刪除掉,回到 界面處,再對(duì)每個(gè)按鈕圖標(biāo)進(jìn)行id設(shè)置。如圖:從左向右依次是: 開始抓包、停止抓包、選擇適配器、幫助圖標(biāo)按鈕。最后,新建一個(gè)選擇適配器的基本對(duì)話框,ID標(biāo)識(shí)為IDD_ADP_DIALOG,雙擊此 對(duì)話框新建一個(gè)類:CAdpterDlgo在此基本對(duì)話框上拖入一個(gè)Tree Contrl控件和List Contrl控件,對(duì)控件屬性界面進(jìn)行調(diào)整,打開類向?qū)В瑢ree Contrl成員變量設(shè)置為: m_treeCtrl, List Contrl 成員變量設(shè)置為 mistCtrl。如圖 3-5

13、:圖2-5選擇適配器對(duì)話框2.5 程序設(shè)計(jì)思想本程序中,主要有四種類型的類,主控類:CMainFrame,視圖類:CCapPackView> CProTreeView,對(duì)話框類:CAdpterDlg以及報(bào)文類。圖3-6為整體的類之間的調(diào)用流程 圖。ARPGramRARPGram IPGram7yEtherHead< 一文內(nèi)容yGetServiceO 獲取協(xié)議類型GetMacDestAddr()包目的1人。地址GetDestAddr() 獲取目的IPGetDestAddr() 獲取口的IP點(diǎn)擊:文件* 開始抓包GetMacSrcAddrO 包源MAC地址GetSrcHdwAddrO包

14、發(fā)送方MACGet Dest Hd w Ad d r() 包接收方MACGetType() 獲取睚據(jù)包類型點(diǎn)擊:適配器*選 擇適配器OnlnitialUpdateO界面設(shè)理OnlnitDialogO OnClickAdpTreeO 選中適配器故示所有抓到的包 的荷要信息類: CProTreeViewCAdpterDlg jjrOnOK()點(diǎn)擊按鈕,綁定網(wǎng)GetSrcPrtAddrO 包發(fā)送方IP(CMainFrame通知 ProTreeViewl 刷新為新選中的報(bào)GetDestPrt Addr()1包接收方IP啟動(dòng)收包線程點(diǎn)擊:退出類:CGppPackViewOnlnitialUpdateO界

15、面設(shè)置OnPacketSelect() 以樹形結(jié)構(gòu)顯示選 中的包的具體信息圖26總體類調(diào)用流程圖CMainFrame,是用于主控的類,它起到分區(qū)、處理消息、傳遞消息的功能。將用 戶區(qū)分為兩個(gè)視圖,點(diǎn)擊菜單里的按鈕,觸發(fā)打開適配器對(duì)話框或者開始抓包、停止抓 包的動(dòng)作。圖3-7為CMainFrame類中方法調(diào)用流程圖。表3-1 CMainFrame類說(shuō)明為 CMainFrame函數(shù)成員的說(shuō)明。表21 CMainFrame類說(shuō)明CMainFrame 類父類CFrameWnd 類成員函數(shù)參數(shù)功能OnCreateClient()LPCREATESTRUCT將用戶區(qū)分為左右兩個(gè)視圖Ipcs, CCreat

16、eContext* pContextProTree View、CapPackViewOnAdpChoose() 消息處理函數(shù)無(wú)為適配器對(duì)話框初始化值,即點(diǎn)擊 選中適配器按鈕彈出適配器對(duì)話框OnFileStart()消息處理函數(shù)無(wú)設(shè)置抓包狀態(tài),釋放所有包,清空 內(nèi)容,啟動(dòng)收包線程,開始捕獲包。OnFileStopO消息處理函數(shù)無(wú)停止抓包OnUpdateFileStar t()消息處理函數(shù)CCmdUI* pCmdUI當(dāng)在捕獲包時(shí),禁用“抓包”按鈕OnUpdateFileStop()消息處理函數(shù)CCmdUI* pCmdUI當(dāng)停止捕獲包時(shí),禁用“停止”按鈕成員變量類型含義* Pack ViewCCap

17、PackView顯示所有抓到的包的簡(jiǎn)要信息* ProTree ViewCProTreeView顯示選中的包的具體信息,用解析 樹表達(dá)*alldevspcapjf_t適配器鏈表*devpcapjf_t適配器鏈表isStartbool是否開始抓包isStopbool是否停止抓包類:CMainFrame圖2-7 CMainFrame類中方法調(diào)用流程圖CAdpterDlg:對(duì)話框類,此對(duì)話框分為兩部分:樹形控件和list控件。當(dāng)對(duì)話框被觸 發(fā)后,樹形控件顯示了本機(jī)所有的適配器列表,雙擊選中網(wǎng)卡,list控件顯示其名稱、 描述、子網(wǎng)掩碼、IP地址等信息。點(diǎn)擊確定按鈕即綁定了此網(wǎng)卡,注意虛擬網(wǎng)卡是不能 被

18、綁定的。表3-2為類CAdpterDlg的成員函數(shù)及成員變量的說(shuō)明。CAdpterDlg類中函 數(shù)調(diào)用流程圖如圖3-8所示。表 2-2 CAdpterDlg 類說(shuō)明CAdpterDlg 類父類CDialog 類成員函數(shù)參數(shù)功能OnlnitDialogO 公有無(wú)初始化樹形控件,設(shè)置list控件, 讀取適配器并將適配器列表顯示 在樹形控件中。當(dāng)網(wǎng)卡綁定以后再 次打開此對(duì)話框,直接顯示其信 息。續(xù)表2-2:OnClickAdpTree() 消息處理函數(shù)NMHDR*pNMHDR, LRESULT* pResult當(dāng)雙擊選中網(wǎng)卡時(shí),找到選中的 網(wǎng)卡,設(shè)置list控件,并顯示網(wǎng) 卡名稱、描述等信息。OnO

19、K()消息處理函數(shù)無(wú)對(duì)選中的網(wǎng)卡進(jìn)行判斷,不可以 選虛擬網(wǎng)卡也不可不選。OnCancel() 消息處理函數(shù)無(wú)關(guān)閉對(duì)話框成員變量類型含義*devpcap_if_t適配器鏈表*aHdevspcap_if_t適配器鏈表errbufPCAP_ERRBUF_SIZEchar存儲(chǔ)錯(cuò)誤信息的字符串(CMainFrame / CAdpterDlgalldevs=NULL;dev=NULL;OnlnitDialogO對(duì)話框設(shè)置,并顯 示適配器列表OnOKO點(diǎn)擊按鈕,綁定網(wǎng) 卡點(diǎn)擊:適配器0選擇適配器OnAdpChooseO 選擇適配器aLldevs=adp.alldevsxdev=adp.dev圖2-8 CAd

20、pterDlg類中函數(shù)調(diào)用流程圖CCapPackView,視圖類,主要功能是實(shí)現(xiàn)接收從類MainFrm傳遞過(guò)來(lái)的消息和報(bào) 文,將數(shù)據(jù)包的頭部及數(shù)據(jù)包的數(shù)據(jù)內(nèi)容分別保存在CArray數(shù)組中,然后調(diào)用報(bào)文類IPGram、ARPGram、RARPGram中的函數(shù),將數(shù)據(jù)包簡(jiǎn)要信息顯示于界面。表3-3為CC叩PackView的成員函數(shù)及成員變量的說(shuō)明。圖3-9為其類中方法調(diào)用流程圖。表23 CCapPackVIevv類說(shuō)明CCapPackView 類父類CListView 類成員函數(shù)參數(shù)功能OnInitialUpdate()公有無(wú)設(shè)置CapPackView視圖的視圖風(fēng) 格,設(shè)置其列信息。OnPacke

21、tReceive() 消息處理函數(shù)pcap_pkthdr*pkt_header,constu_char*pkCdata顯示所有抓到的包的簡(jiǎn)要信息Onltemchanged()消息處理函數(shù)NMHDR* pNMHDR, LRESULT* pResult當(dāng)點(diǎn)擊列表中某行信息,將向 ProTreeView發(fā)送消息,并傳遞報(bào)文 信息。成員變量類型含義indexint序號(hào)totalmeniint收到的報(bào)文占用總字節(jié)數(shù)timeint流逝的秒數(shù)deltaint一秒內(nèi)收到的字節(jié)數(shù)/類:CCapPackView 圖2-9 CCapPackView類中函數(shù)調(diào)用流程圖CProTreeView,視圖類,主要功能是接收來(lái)

22、自于CapPackView的消息,調(diào)用消息處 理函數(shù)OnPacketSelect(),在顯示數(shù)據(jù)前清空列表及捕獲的數(shù)據(jù)包。對(duì)傳遞過(guò)來(lái)的報(bào)文頭 部和內(nèi)容進(jìn)行分析,調(diào)用報(bào)文類IPGram、ARPGram、RARPGram中的函數(shù)將具體信息 顯示于樹形列表中。表3-4為CProTreeView的成員函數(shù)及成員變量的說(shuō)明。表24 CProTreeView類說(shuō)明CProTreeView 類父類CTree View 類成員函數(shù)參數(shù)功能OnInitialUpdate()無(wú)設(shè)置ProTreeView視圖的視圖風(fēng) 格,解析樹。OnPacketSelect()消息處理函數(shù)pcap_pkthdr*pkt_head

23、er.constu_char*pkt_data (報(bào)文頭部和內(nèi)容指 針)以樹形結(jié)構(gòu)顯示選中的包的具體 信息。OnClick()NMHDR* pNMHDR.LRESULT* pResult無(wú)成員變量類型含義*ipIPGram指向IP報(bào)文的指針*etherEtherHead指向以太幀的指針*arpint指向ARP報(bào)文的指針*rarpint指向RARP報(bào)文的指針2.5程序設(shè)計(jì)對(duì)菜單中的按鈕項(xiàng)分別建立類向?qū)?、增加函?shù),如“選擇適配器”的消息映射關(guān)系為 ON_COMMAND(ID_ADP_CHOOSE, OnAdpChoose), “開始抓包”的消息映射關(guān)系為 ON_COMMAND(ID_FILE_ST

24、ART, OnFileStart); “ 停止抓包”的消息映射關(guān)系為 ON_COMMAND(ID_FILE_STOP, OnFileStop)以及菜單項(xiàng)是否禁用的菜單項(xiàng)的狀態(tài)的響 應(yīng)消息映射關(guān)系。這些都是在CMainFrame類里面定義或聲明的,CMainFrame作為一 個(gè)主控類,當(dāng)操作時(shí),其調(diào)用其他的對(duì)話框類、視圖類,然后再調(diào)用報(bào)文類。網(wǎng)卡的綁定,為ID_ADP_CHOOSE選擇適配器建立類向?qū)?,新建函?shù): OnAdpChoose(),打開適配器對(duì)話框,并對(duì)網(wǎng)卡鏈表進(jìn)行傳遞。具體代碼如下:void CMainFrame:OnAdpChoose()CAdpterDlg adp;為適配器對(duì)話框

25、初始化值adp.mainFrm=this;adp.alldevs=this->alldevs;adp.dev=this->dev;if(adp.DoModal()=IDOK)將適配器信息返回this->alldevs=adp.alldevs;this->dev=adp.dev;適配器對(duì)話框的數(shù)據(jù)初始化:在類向?qū)е袨轭怌AdpterDlg添加WMNITDIALOG 消息,并添加默認(rèn)函數(shù):OnlnitDialog,點(diǎn)擊“Edit Code”對(duì)函數(shù)進(jìn)行編輯。Pcap提供 cap_findAlldevs()這個(gè)函數(shù)來(lái)實(shí)現(xiàn)些功能,返回一個(gè)pcap_if結(jié)構(gòu)的鏈表,鏈表的每項(xiàng) 內(nèi)容

26、都含有全面的網(wǎng)卡信息,網(wǎng)卡名稱和網(wǎng)卡描述,特別是pcap_find疝devs。這個(gè)函數(shù) 返回的每個(gè)pc叩_if結(jié)構(gòu)體都同包含一個(gè)pcap_addr結(jié)構(gòu)的列表,它包含:一個(gè)地址列 表,一個(gè)掩碼列表,一個(gè)廣播地址列表和一個(gè)目的地址列表。Tree Contrl建立類向?qū)?,增加OnClickAdpTree。,實(shí)現(xiàn)雙擊網(wǎng)卡,在List Contrl 中顯示網(wǎng)卡具體信息,要注意的是顯示網(wǎng)卡詳細(xì)信息時(shí),調(diào)用DeleteAHItems()刪除原來(lái) 內(nèi)容。捕獲包并顯示數(shù)據(jù)包的簡(jiǎn)要信息規(guī)劃捕獲包和分析數(shù)據(jù)包的界面,我準(zhǔn)備將視圖分 為左右兩部分,左邊為一個(gè)ListView ,右邊為一個(gè)Tree View。所以新建兩

27、個(gè)類 CapPackView(繼承 CListView)> ProTreeView (繼承 CTreeView)o CapPackView 負(fù)責(zé)顯 示所有抓到的包的簡(jiǎn)要信息,ProTreeView負(fù)責(zé)顯示選中的包的具體信息。在主窗口按下開始抓包按鈕時(shí),啟動(dòng)捕獲包線程ReceivePacket ,調(diào)用 pcap_openive(dev->name,65536,l,1000,errbuf)打開網(wǎng)卡,在這里第三個(gè)參數(shù)設(shè)置為1 代表將適配器設(shè)置為混雜模式,捕獲所有流經(jīng)此適配器的數(shù)據(jù)包。網(wǎng)卡一旦打開,就可 以調(diào)用pcapoop()進(jìn)行數(shù)據(jù)的捕獲。每次捕獲到數(shù)據(jù)包時(shí),libpc叩都會(huì)自動(dòng)調(diào)用回

28、調(diào)函 數(shù)pcap_handle (),在回調(diào)函數(shù)里,PostMessage ()向CapPackView發(fā)送消息,通知 C叩PackView處理收到的包。在這里,使用的是自定義消息來(lái)實(shí)現(xiàn)的,即首先自定義消 ,#define WM_MESSAGE_PACKET_RECEIVE WM_USER+1,類 CCapPackView 頭文件 中聲明消息的數(shù)據(jù)包處理函數(shù):afx_msg void OnPacketReceive(const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)oCapPackView收到消息,調(diào)用OnPacketRe

29、ceive ()將將所捕獲包的內(nèi)容復(fù)制下來(lái), 并保存到CArray數(shù)組中,然后對(duì)包的類型進(jìn)行判斷,當(dāng)為IP數(shù)據(jù)包時(shí),調(diào)用類IPGram 中的函數(shù)GetSrcAddr。(獲取IP數(shù)據(jù)包的源IP地址),GetDestAddr()(獲取IP數(shù)據(jù)包 的目的IP地址),ip.GetSer,ice()(得到IP數(shù)據(jù)包的協(xié)議類型),將這些信息及數(shù)據(jù)包的 長(zhǎng)度等顯示到界面。類似的,如果數(shù)據(jù)包為ARP或RARP類型,則相應(yīng)的調(diào)用類 ARPGram、RARPGram 中的 GetSrcPrtAddr。、GetDestPrtAddr(), GetSrcPrtAddr() > GetDestPrtAddr()等

30、函數(shù),并將信息逐行顯示于界面。選中CapPackView中的某條信息,將數(shù)據(jù)包的具體信息顯示于ProTreeView中。定 義響應(yīng)操作 的消息#define WM_MESSAGE_PACKET_SELECT WM_USER+2 ,在類 CProTreeView 頭文件中聲明消息的處理函數(shù):afx_msg void OnPacketSelect(const struct pcap_pkthdr *pkt_header, const u_char *pkt_data);在類 CCpPackView 中,調(diào)用 PostMessage ()通知ProTreeView刷新為新選中的報(bào)文內(nèi)容。類CProTreeView接收到消息后,調(diào)用OnPacketSelect。,對(duì)數(shù)據(jù)包進(jìn)行分析,首先 解析以太幀,調(diào)用類EtherHead中的函數(shù)GetMacDestAddr。(獲取目的MAC地址)、 GetMacSrcAddr()(獲取源MAC地址)。然后根據(jù)數(shù)據(jù)包類型的不同,調(diào)用IP數(shù)據(jù)包、 ARP數(shù)據(jù)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論