版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn)WIN PCWP編程 實(shí)驗(yàn)?zāi)康?了解WINPCA啲架構(gòu) 學(xué)習(xí)WINPCAP編程 實(shí)驗(yàn)原理 WinPcap 是一個(gè)基于 Win32 平臺(tái)的,用于捕獲網(wǎng)絡(luò)數(shù)據(jù)包并進(jìn)行分析的開(kāi)源庫(kù)比如 sockets 。 這是一 比如協(xié)議處理, 封裝數(shù)據(jù)因?yàn)橛行?yīng)用程序需要直接訪(fǎng)即沒(méi)有被操作系統(tǒng)利用網(wǎng)絡(luò)大多數(shù)網(wǎng)絡(luò)應(yīng)用程序通過(guò)被廣泛使用的操作系統(tǒng)元件來(lái)訪(fǎng)問(wèn)網(wǎng)絡(luò), 種簡(jiǎn)單的實(shí)現(xiàn)方式, 因?yàn)椴僮飨到y(tǒng)已經(jīng)妥善處理了底層具體實(shí)現(xiàn)細(xì)節(jié) 包等等),并且提供了一個(gè)與讀寫(xiě)文件類(lèi)似的,令人熟悉的接口。然而,有些時(shí)候,這種 “簡(jiǎn)單的方式 ”并不能滿(mǎn)足任務(wù)的需求, 問(wèn)網(wǎng)絡(luò)中的數(shù)據(jù)包。 也就是說(shuō), 那些應(yīng)用程序需要訪(fǎng)問(wèn)原始數(shù)據(jù)包, 協(xié)議
2、處理過(guò)的數(shù)據(jù)包。WinPcap 產(chǎn)生的目的,就是為 Win32 應(yīng)用程序提供這種訪(fǎng)問(wèn)方式; WinPcap 提供了以下 功能1.2.3.4.捕獲原始數(shù)據(jù)包,無(wú)論它是發(fā)往某臺(tái)機(jī)器的,還是在其他設(shè)備(共享媒介)上進(jìn)行交換的 在數(shù)據(jù)包發(fā)送給某應(yīng)用程序前,根據(jù)用戶(hù)指定的規(guī)則過(guò)濾數(shù)據(jù)包 將原始數(shù)據(jù)包通過(guò)網(wǎng)絡(luò)發(fā)送出去收集并統(tǒng)計(jì)網(wǎng)絡(luò)流量信息以上這些功能需要借助安裝在 Win32 內(nèi)核中的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序才能實(shí)現(xiàn), 再加上幾個(gè)動(dòng)態(tài)鏈 接庫(kù) DLL 。所有這些功能都能通過(guò)一個(gè)強(qiáng)大的編程接口來(lái)表現(xiàn)出來(lái),易于開(kāi)發(fā),并能在不同的操作系統(tǒng)上使用。這本手冊(cè)的主要目標(biāo)是在一些程序范例的幫助下,敘述這些編程接口的使用。Win
3、Pcap 的典型應(yīng)用有:WinPcap 可以被用來(lái)制作網(wǎng)絡(luò)分析、監(jiān)控工具。一些基于1.網(wǎng)絡(luò)與協(xié)議分析器(network and protocol analyzers)2.網(wǎng)絡(luò)監(jiān)視器 (network monitors)3.網(wǎng)絡(luò)流量記錄器(traffic loggers)4.網(wǎng)絡(luò)流量發(fā)生器(traffic generators)5.用戶(hù)級(jí)網(wǎng)橋及路由(user-level bridges and routers)6.網(wǎng)絡(luò)入侵檢測(cè)系統(tǒng)(network intrusion detection systems (NIDS)7.網(wǎng)絡(luò)掃描器 (network scanners)8.安全工具(security
4、 tools)實(shí)驗(yàn)內(nèi)容通過(guò)學(xué)習(xí)WIN PCA架構(gòu),編寫(xiě)一個(gè)網(wǎng)絡(luò)抓包程序。Winpcap是針對(duì) Win32平臺(tái)上的抓包和網(wǎng)絡(luò)分析 的一個(gè)架構(gòu)。它包括一個(gè) 核心態(tài)的包過(guò)濾器,一個(gè)底層的動(dòng)態(tài)鏈接庫(kù)(packet.dll )和一個(gè)高層的不依賴(lài)于系統(tǒng)的庫(kù)(wpcap .dll )首先,抓包系統(tǒng)必須繞過(guò) 操作系統(tǒng)的協(xié)議棧來(lái)訪(fǎng)問(wèn)在網(wǎng)絡(luò)上傳輸?shù)脑紨?shù)據(jù)包(rawpacket),這就要求一部分運(yùn)行在操作系統(tǒng)核心內(nèi)部,直接與網(wǎng)絡(luò)接口驅(qū)動(dòng)交互。這個(gè)部分是系統(tǒng)依賴(lài)(system dependent )的,在Winpcap的解決方案里它被認(rèn)為是一個(gè)設(shè)備驅(qū)動(dòng),稱(chēng)作 NPF ( Netgroup Packet Filter
5、 )。Winpcap 開(kāi)發(fā)小組針對(duì) Windows95 ,Windows98 ,WindowsME ,Windows NT 4 ,Windows2000 和 WindowsXP 提供了不同版本的驅(qū)動(dòng)。這些驅(qū)動(dòng)不僅提供了基本的特性(例如抓包和injection),還有更高級(jí)的特性(例如可編程的過(guò)濾器系統(tǒng)和監(jiān)視引擎)。前者可以被用來(lái)約束一個(gè)抓包會(huì)話(huà)只針對(duì)網(wǎng)絡(luò)通信中的一個(gè)子集(例如,僅僅捕獲特殊主機(jī)產(chǎn)生的f2通信的數(shù)據(jù)包),后者提供了一個(gè)強(qiáng)大而簡(jiǎn)單的統(tǒng)計(jì)網(wǎng)絡(luò)通信量的機(jī)制(例如,獲得網(wǎng)絡(luò)負(fù)載或兩個(gè)主機(jī)間的數(shù)據(jù)交換量)其次,抓包系統(tǒng)必須有用戶(hù)級(jí)的 程序接口 .,通過(guò)這些接口,用戶(hù)程序 可以利用內(nèi)核驅(qū)動(dòng)提
6、供的高級(jí)特性。Winpcap提供了兩個(gè)不同的庫(kù):packet.dll 和 wpcap.dll。前者提供了一個(gè)底層API,伴隨著一個(gè)獨(dú)立于Microsoft操作系統(tǒng)的編程接口,這些API可以直接用來(lái)訪(fǎng)1問(wèn)驅(qū)動(dòng)的函數(shù);后者導(dǎo)出了一組更強(qiáng)大的與 libpcap 一致的高層抓包函數(shù)庫(kù)(capture操作系統(tǒng)無(wú)關(guān)的方式進(jìn)行。primitives)。這些函數(shù)使得數(shù)據(jù)包的捕獲以一種與網(wǎng)絡(luò)硬件和Z011T恢帆邑1豐切咒ft*5右T刖口“豐如故ftWHSLAh>1PJia19U11I*JITLB彈誹歴押厲Jsn>艸筋;忙一-afiM_HL+mBTME:JL葉L丄帕刃;IFM.LSA9j7:|=F_H
7、L+陽(yáng)K召L-i 1*18 ia;lfHXO丹;MLWk 花防口請(qǐng)側(cè).FT仟穴肝肝貳姑坯門(mén)軒MMprrerWMOUDuauMlMKk 口gm一 aUXMrOfrW .DI 那PEM.-OlflMarWrt 0 恥 UhDIIKpJIljMlMIf核心代碼:抓包函數(shù)UINT _cdecl CYwkPackDlg: CapThread( LPVOID IpParameter ) CYwkPackDlg* this2 ; pcap_t * adhandle ;char errbuf PCAP_ERRBUF_SIZ; E pcap_dumper_t * dumpfile ;struct pcap_pk
8、thdr * header; const u_char * data;DWORDres ;bool bExit ; static long i =0,j =0;ListData List ;struct ether_header * eth;u_char * mac_string ; struct iphead * IPHead; struct arphead * ARPHea;din_addr ipaddr ;this2=( CYwkPackDlg*) IpParameter ;i =0; j =0; charif式)p256;CStringA ts ( this2 -> Adapte
9、rName. GetBuffer (); memcp(yp, ts . GetBuffer (), 256);( adhandle = pcap_open_live ( p,65536,1 ,1000, errbuf ) = NULL) / 打開(kāi)網(wǎng)卡接口(混雜模: MessageBox(0,L "不能打開(kāi)網(wǎng)絡(luò)適配器 , 請(qǐng)?jiān)诰W(wǎng)卡設(shè)置中經(jīng)行設(shè)置 ",L "錯(cuò)誤" ,0);EnterCriticalSection (&( this2 -> csThreadStop ); / 關(guān)閉線(xiàn)程 2 this2 -> bThreadStop =tru
10、e ;LeaveCriticalSection (&( this2 -> csThreadStop );SetEvent ( this2 -> eThreadStart );return 0;dumpfile =pcap_dump_open( adhandle , CStringA ( this2 -> CapFilePath . GetBuffer (); / 打 開(kāi)數(shù)據(jù)文件失敗if ( dumpfile =NULL):MessageBoXO丄"不能打開(kāi)記錄文件"丄"錯(cuò)誤",0);EnterCriticalSection (&
11、amp;( this2 -> csThreadStop ); this2 -> bThreadStop=true ;LeaveCriticalSection (&( this2 -> csThreadStop ); SetEvent (this2 ->eThreadStart );return 0;EnterCriticalSection (&( this2 this2 ->bThreadStop=false ;LeaveCriticalSection (&( this2SetEvent (this2 ->eThreadStart-&
12、gt;csThreadStop ); / 開(kāi)始線(xiàn)程->csThreadStop ););: MessageBox(0,L "開(kāi)始抓包 ",L "ok" ,0);while (1)EnterCriticalSection (&( this2 -> csThreadStop ); bExit =this2 ->bThreadStop;LeaveCriticalSection (&( this2 -> csThreadStop ); if ( bExit ) return 0;res = pcap_next_ex (ad
13、handle,&header,&data ); if (res=0)/ 超時(shí) Sleep(100);continue ;elseif (res<0)/ 操作失敗break ;pcap_dump( u_char *) dumpfile , header, data );eth=(ether_header *) data; mac_string =eth -> ether_shost ;wsprintf (List . sMac,L "%02X:%02X:%02X:%02X:%02X:%02,X*"mac_string ,*( mac_string
14、+1),*( m ac_string +2),*( mac_string +3),*( mac_string +4),*( mac_string +5);mac_string =eth -> ether_dhost ;wsprintf (List .dMac,L"%02X:%02X:%02X:%02X:%02X:%02,X*"mac_string ,*( mac_string +1),*( m ac_string +2),*( mac_string +3),*( mac_string +4),*( mac_string +5);_itow ( header ->
15、 caplen , List . Len,10); memcp(yList .Text , data ,45); / 數(shù)據(jù)不含以太網(wǎng)頭 List .Text 45= '0' ;int len =wcslen ( List .Text );/char *list1=new charlen+1;char * list1 = ( char *) malloc (len + 1); wcstombs( list1 , List .Text , len + 1); list1 len =0;this2 -> DecodeChar( list1 ,len );/delete list
16、1;switch ( ntohs ( eth -> ether_type ) case ETHERTYPE_A:RP/if(!this2->FilterSet.bAllProtocol&& !this2->FilterSet.bArp)bFilter=true;break;wcscpy( List . Procotol ,L "ARP");ARPHea=d( arphead *)( data +14);wsprintf (List . sIP,L "%d.%d.%d.%d", ARPHea-d> arp_sourc
17、e_ip_address 0, ARPHea-d> arp_sou rce_ip_address 1, ARPHea-d> arp_source_ip_address 2, ARPHea-d> arp_source_ip_address 3);p_destination_ip_address tion_ip_address 3);wcscpy( List wcscpy( List break ;wsprintf (List . dIP,L "%d.%d.%d.%d", ARPHea-d> arp_destination_ip_address 0, A
18、RPHea-d> ar1, ARPHea-d> arp_destination_ip_address 2, ARPHea-d> arp_destina. sPort ,L "-" ); . dPort ,L "-" );case ETHERTYPE_REVA: RPwcscpy( List . Procotol ,L "RARP"); break ;case ETHERTYPE_I:PIPHead=( iphead *)( data +14); ipaddr =IPHead-> ip_souce_address
19、 ;wsprintf (List . sIP,L "%d.%d.%d.%d", ipaddr . S_un. S_un_b. s_b1, ipaddr . S_un. S_un_b. s_b2, ip addr. S_un. S_un_b. s_b3, ipaddr . S_un. S_un_b. s_b4);IPHead-> ip_destination_address;wsprintf (List . dIP,L "%d.%d.%d.%d", ipaddr . S_un. S_un_b. s_b1, ipaddr . S_un. S_un_b.
20、 s_b2, ip addr. S_un. S_un_b. s_b3, ipaddr . S_un. S_un_b. s_b4);switch ( IPHead-> ip_protocol )case 1:/if(!this2->FilterSet.bAllProtocol&& !this2->FilterSet.bIcmp)bFilter=true;break; wcscpy( List wcscpy( List wcscpy( List break ;. Procotol ,L "ICMP"); . sPort ,L "-&q
21、uot; );. dPort ,L "-" );case 6:/if(!this2->FilterSet.bAllProtocol&& !this2->FilterSet.bTcp)bFilter=true;break; wcscpy( List . Procotol ,L"TCP"); wsprintf*)( data +16+20)-> th_sportwsprintf*)( data +16+20)-> th_dportbreak ;(List . sPort ,L "%d", ntohs
22、 ( ( );(List . dPort ,L "%d", ntohs ( ( );tcpheadtcpheadcase 17:/if(!this2->FilterSet.bAllProtocol&& !this2->FilterSet.bUdp)bFilter=true;break; wcscpy( List . Procotol ,L"UDP"); wsprintf (List . sPort , L "%d" , ntohs ( ( *)( data +16+20)-> udp_source_p
23、ort );wsprintf (List . dPort ,L "%d", ntohs ( ( );udpheadudphead*)( data +16+20)-> udp_destinanion_portbreak ;default :wcscpy( List . Procotol wcscpy( List . sIP,L "- wcscpy( List . dIP,L "- wcscpy( List . sPort ,L"-" ); wcscpy( List . dPort ,L"-" ); break ;丄"未知IP包");););break ;case ETHERTYPE_P:UPwcscpy( Lis
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權(quán)】 ISO 15883-3:2024 EN Washer-disinfectors - Part 3: Requirements and tests for washer-disinfectors employing thermal disinfection for human waste containers
- 勞動(dòng)合同糾紛仲裁代理詞撰寫(xiě)指南
- 美國(guó)專(zhuān)有技術(shù)轉(zhuǎn)讓合同案例
- 企業(yè)合同權(quán)益轉(zhuǎn)讓協(xié)議書(shū)案例
- 房地產(chǎn)代理銷(xiāo)售合同書(shū)范文示例
- 工程項(xiàng)目管理合同的關(guān)鍵條款
- 代售協(xié)議書(shū)范例
- 店面臨時(shí)租賃合同書(shū)
- 2024寬帶接入電信服務(wù)協(xié)議范本
- 小產(chǎn)權(quán)住宅購(gòu)買(mǎi)協(xié)議書(shū)
- 2024年消防月全員消防安全知識(shí)專(zhuān)題培訓(xùn)-附20起典型火災(zāi)案例
- 2025屆高三化學(xué)一輪復(fù)習(xí) 第13講 鐵鹽、亞鐵鹽及其轉(zhuǎn)化 課件
- 【電商企業(yè)跨國(guó)并購(gòu)的績(jī)效探析案例:以阿里巴巴并購(gòu)Lazada為例(論文)14000字】
- 恒牙臨床解剖-上頜中切牙(牙體解剖學(xué)課件)
- 云南太陽(yáng)能資源分析
- 2024智慧園區(qū)系統(tǒng)建設(shè)規(guī)范
- GB/T 44592-2024紅樹(shù)林生態(tài)保護(hù)修復(fù)技術(shù)規(guī)程
- 第5課 互聯(lián)網(wǎng)接入 教學(xué)設(shè)計(jì) 2023-2024學(xué)年浙教版(2023)初中信息技術(shù)七年級(jí)上冊(cè)
- 小學(xué)語(yǔ)文一年級(jí)上冊(cè)課件第四單元01-10 ai ei ui
- 傳感器技術(shù)-武漢大學(xué)
- GB/T 44413-2024城市軌道交通分類(lèi)
評(píng)論
0/150
提交評(píng)論