版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、使用WinPcap編寫Sniffer程序內(nèi)容介紹嗅探器原理嗅探器原理Winpcap介紹介紹Winpcap安裝安裝Winpcap應(yīng)用程序結(jié)構(gòu)應(yīng)用程序結(jié)構(gòu)Sniffer(嗅探器)設(shè)計原理(嗅探器)設(shè)計原理 通常的套接字程序只能響應(yīng)與自己硬件地址相匹配的或是以廣播形式發(fā)出的數(shù)據(jù)幀,對于其他形式的數(shù)據(jù)幀,比如已到達(dá)網(wǎng)絡(luò)接口但卻不是發(fā)給此地址的數(shù)據(jù)幀,網(wǎng)絡(luò)接口在驗證投遞地址并非自身地址之后將不引起響應(yīng),也就是說應(yīng)用程序無法收取到達(dá)的數(shù)據(jù)包。網(wǎng)絡(luò)嗅探器的目的恰恰在于從網(wǎng)卡接收所有經(jīng)過它的數(shù)據(jù)包,這些數(shù)據(jù)包既可以是發(fā)給本機的也可以是發(fā)往別處的。通過將網(wǎng)絡(luò)接口設(shè)置為混雜模式可以使它接收所有經(jīng)過它的數(shù)據(jù)包(例如
2、以太網(wǎng)幀將會到達(dá)同一局域網(wǎng)的所有網(wǎng)絡(luò)接口)。 但是,此時操作系統(tǒng)不再行底層的細(xì)節(jié)操作(協(xié)議處理,流量均衡等) ,而是將拆封解釋處理接收到的數(shù)據(jù)幀(frame)的任務(wù)交給應(yīng)用程序完成,這樣應(yīng)用程序就可以靈活的獲取各類信息。什么是什么是 Winpcap 網(wǎng)絡(luò)數(shù)據(jù)包捕獲庫函數(shù)網(wǎng)絡(luò)數(shù)據(jù)包捕獲庫函數(shù)直接訪問網(wǎng)絡(luò),免費、公用直接訪問網(wǎng)絡(luò),免費、公用工作于驅(qū)動層,網(wǎng)絡(luò)操作高效工作于驅(qū)動層,網(wǎng)絡(luò)操作高效為應(yīng)用程序提供了一組為應(yīng)用程序提供了一組APIAPI接口接口編程容易,編程容易,源碼級移植方便源碼級移植方便Libpcap(UNIX)庫Winpcap(Windows)庫Winpcap介紹WinPcap主要功能
3、主要功能捕獲原始數(shù)據(jù)包捕獲原始數(shù)據(jù)包將數(shù)據(jù)包發(fā)送給應(yīng)用程序之前,按將數(shù)據(jù)包發(fā)送給應(yīng)用程序之前,按照用戶規(guī)定的規(guī)范過濾數(shù)據(jù)包照用戶規(guī)定的規(guī)范過濾數(shù)據(jù)包將捕獲到的數(shù)據(jù)包輸出到文件中,將捕獲到的數(shù)據(jù)包輸出到文件中,并可以對這些文件進行再分析并可以對這些文件進行再分析向網(wǎng)絡(luò)發(fā)送原始數(shù)據(jù)包向網(wǎng)絡(luò)發(fā)送原始數(shù)據(jù)包搜集網(wǎng)絡(luò)傳輸統(tǒng)計數(shù)據(jù)搜集網(wǎng)絡(luò)傳輸統(tǒng)計數(shù)據(jù)Winpcap介紹哪些應(yīng)用適合使用哪些應(yīng)用適合使用 WinPcap 網(wǎng)絡(luò)和協(xié)議分析network and protocol analyzers 網(wǎng)絡(luò)監(jiān)控network monitors 流量記錄traffic loggers 流量產(chǎn)生traffic gener
4、ators 用戶級網(wǎng)橋和路由器user-level bridges and routers 網(wǎng)絡(luò)入侵檢測network intrusion detection systems (NIDS) 網(wǎng)絡(luò)掃描network scanners 安全工具security toolsWinpcap介紹WinPcap不能勝任的事情不能勝任的事情 WinPcap從主機的協(xié)議(如從主機的協(xié)議(如TCP/IP)獨)獨立收發(fā)數(shù)據(jù)包。這意味著它不能阻塞、過立收發(fā)數(shù)據(jù)包。這意味著它不能阻塞、過濾或者處理同一主機上其他程序產(chǎn)生的數(shù)濾或者處理同一主機上其他程序產(chǎn)生的數(shù)據(jù)包:它僅僅嗅探網(wǎng)線上傳輸?shù)臄?shù)據(jù)包。據(jù)包:它僅僅嗅探網(wǎng)線上傳
5、輸?shù)臄?shù)據(jù)包。所以它不適合應(yīng)用于流量均衡、所以它不適合應(yīng)用于流量均衡、QoS調(diào)度調(diào)度和個人防火墻。和個人防火墻。 Winpcap介紹Winpcap的安裝的安裝 下載安裝包和開發(fā)包下載安裝包和開發(fā)包 http:/winpcap.polito.it Winpcap的安裝包(Winpcap_3_1.exe) 程序員開發(fā)包(WpdPack_3_1.zip) 運行運行Winpcap_3_1.exe 測試安裝結(jié)果測試安裝結(jié)果 Winpcap安裝編程環(huán)境設(shè)定1. 以以Administrator身份登錄身份登錄Windows(2000/XP),運行運行 一次一次Winpcap自帶例程,此后可以一般用戶身份使用自
6、帶例程,此后可以一般用戶身份使用2. 運行運行Visual C+ 6.0, 打開打開WpdPack_3_1WpdPackExamples-pcap下的下的 任一項目(本例用任一項目(本例用basic_dump目錄下目錄下 basic_dump.dsw)3. 在在“工程工程-設(shè)置設(shè)置 Link對象對象/庫模塊庫模塊” 中加入中加入 wsock32.lib ws2_32.lib wpcap.lib 在在“工具工具-選擇選擇-目錄目錄”的的include files和和library files設(shè)置中設(shè)置中引入引入winpcap開發(fā)包中的開發(fā)包中的Include和和Lib目錄目錄4. 編譯,運行編譯
7、,運行Winpcap安裝Winpcap安裝例程運行結(jié)果:例程運行結(jié)果:WinPcap的典型應(yīng)用的典型應(yīng)用獲得已安裝設(shè)獲得已安裝設(shè)備的高級信息備的高級信息過濾數(shù)據(jù)包過濾數(shù)據(jù)包獲得設(shè)備列表獲得設(shè)備列表打開一個適配器打開一個適配器 回調(diào)機制回調(diào)機制 直接方式直接方式解析數(shù)據(jù)包解析數(shù)據(jù)包獲得網(wǎng)絡(luò)流量統(tǒng)計數(shù)字獲得網(wǎng)絡(luò)流量統(tǒng)計數(shù)字打開離線數(shù)據(jù)包文件打開離線數(shù)據(jù)包文件獲得設(shè)備列表 (一) 一個基本的WinPcap應(yīng)用程序所需的第一步就是獲得合適的網(wǎng)絡(luò)適配器。 Libpcap提供 pcap_findalldevs() 函數(shù)完成這個功能。這個函數(shù)返回一個相連的pcap_if結(jié)構(gòu)的列表,列表的每一項包含關(guān)于適配器
8、的復(fù)雜的信息。特別的,name和description域數(shù)據(jù)包含設(shè)備的名稱和可讀的描述。 pcap_if_t *alldevs,*d; int i=0; char errbufPCAP_ERRBUF_SIZE; if (pcap_findalldevs(&alldevs, errbuf) = -1) fprintf(stderr,Error in pcap_findalldevs: %sn, errbuf); exit(1); for(d=alldevs;d;d=d-next) /* Print the list */ printf(%d. %s, +i, d-name); if (d
9、-description) printf( (%s)n, d-description); else printf( (No description available)n); if(i=0) printf(nNo interfaces found! Make sure WinPcap is installed.n); return; pcap_freealldevs(alldevs); 獲得設(shè)備列表 (二)每個pcap_findalldevs() 返回的 pcap_if 結(jié)構(gòu)也包含了一個pcap_addr 結(jié)構(gòu)的列表:v該接口的地址列表該接口的地址列表v網(wǎng)絡(luò)掩碼的列表網(wǎng)絡(luò)掩碼的列表(每個網(wǎng)絡(luò)掩
10、碼對應(yīng)地址列表中的一項) v廣播地址的列表廣播地址的列表(每個廣播地址對應(yīng)地址列表中的一項) v目標(biāo)地址的列表目標(biāo)地址的列表(每個目標(biāo)地址對應(yīng)地址列表中的一項) 通過返回的結(jié)構(gòu),我們可以得到探測到的網(wǎng)卡設(shè)備的更詳盡信息。 typedef struct pcap_if pcap_if_t struct pcap_if struct pcap_if *next; char *name; char *description; struct pcap_addr *addresses; bpf_u_int32 flags; /* PCAP_IF_ interface flags */;struct pc
11、ap_addr struct pcap_addr *next; struct sockaddr *addr; struct sockaddr *netmask; struct sockaddr *broadaddr; struct sockaddr *dstaddr; ;打開一個適配器開始捕獲數(shù)據(jù)包pcap_t * pcap_open_live ( const char * device, int snaplen, int promisc, int to_ms, char * ebuf ) pcap_t *adhandle= pcap_open_live(d-name, 65536,1, 10
12、00, errbuf ); 設(shè)備標(biāo)識(字符串)抓包長度混雜模式超時時間捕獲數(shù)據(jù)包(回調(diào)機制)int pcap_loop ( pcap_t * p, int cnt, pcap_handler callback, u_char * user ) 例如:pcap_loop(adhandle, 0, packet_handler, NULL); typedef void(* pcap_handler) ( u_char *user, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data)捕獲數(shù)據(jù)包(直接方式)int pcap_nex
13、t_ex ( pcap_t * p, struct pcap_pkthdr * pkt_header, const u_char * pkt_data )該函數(shù)從接口或者脫機讀取一個數(shù)據(jù)包。用于接收下一個可用的數(shù)據(jù)包,而不使用libpcap提供的傳統(tǒng)的回調(diào)機制。 pcap_next_ex用下一個數(shù)據(jù)包的指向數(shù)據(jù)包頭和數(shù)據(jù)的指針填充pkt_header和pkt_data參數(shù)。 pcap_next_ex() 目前只在Win32下可用,因為它不是屬libpcap原始的API。這意味著含有這個函數(shù)的代碼將不能被移植到Unix上。 過濾數(shù)據(jù)包int pcap_compile ( pcap_t * p,
14、struct bpf_program * fp, char * str, /過濾表達(dá)式 int optimize, bpf_u_int32 netmask ) /掩碼int pcap_setfilter ( pcap_t * p, struct bpf_program * fp ) pcap_compile() 編譯一個包過濾器。將一個高級的、布爾形式表示的字符串轉(zhuǎn)換成低級的、二進制過濾語句,以便被包驅(qū)動使用。pcap_setfilter() 在核心驅(qū)動中將過濾器和捕獲過程結(jié)合在一起。從這一時刻起,所有網(wǎng)絡(luò)的數(shù)據(jù)包都要經(jīng)過過濾,通過過濾的數(shù)據(jù)包將被傳入應(yīng)用程序。 過濾設(shè)置舉例 char pac
15、ket_filter = ip and udp; struct bpf_program fcode; /* 獲取接口地址的掩碼,如果沒有掩碼,認(rèn)為該接口屬于一個獲取接口地址的掩碼,如果沒有掩碼,認(rèn)為該接口屬于一個C類網(wǎng)絡(luò)類網(wǎng)絡(luò) */if(d-addresses != NULL) netmask=(struct sockaddr_in *) (d-addresses-netmask)-sin_addr.S_un.S_addr; else netmask=0 xffffff; if(pcap_compile(adhandle, &fcode, packet_filter, 1, netma
16、sk) 0 ) fprintf(stderr,nUnable to compile the filter. Check the syntax.n);pcap_freealldevs(alldevs); return -1; if(pcap_setfilter(adhandle, &fcode)= 0) /處理代碼處理代碼 /主程序中主程序中pcap_loop(fp, 0, dispatcher_handler, NULL);/主程序中主程序中void dispatcher_handler(u_char *temp1, const struct pcap_pkthdr *header,
17、const u_char *pkt_data) /處理代碼處理代碼第一步:打開離線數(shù)據(jù)文件第一步:打開離線數(shù)據(jù)文件第二步:讀取離線數(shù)據(jù)第二步:讀取離線數(shù)據(jù) (一)使用回調(diào)函數(shù) (二)不使用回調(diào)函數(shù)if ( (fp = pcap_open_offline(argv1, errbuf) ) = NULL) fprintf(stderr,nError opening dump filen);return -1;發(fā)送數(shù)據(jù)包pcap_sendpacket發(fā)送單個數(shù)據(jù)包發(fā)送單個數(shù)據(jù)包 發(fā)送隊列(查看winpcap手冊)pcap_sendpacket發(fā)送單個數(shù)據(jù)包發(fā)送單個數(shù)據(jù)包 打開適配器后,調(diào)用pcap_
18、sendpacket()函數(shù)來發(fā)送一個手寫的數(shù)據(jù)包。 pcap_sendpacket()用一個包含要發(fā)送的數(shù)據(jù)的緩沖區(qū)、該緩沖區(qū)的長度和發(fā)送它的適配器作為參數(shù)。注意該緩沖區(qū)是不經(jīng)任何處理向外發(fā)出的,這意味著,如果想發(fā)些有用的東西的話,應(yīng)用程序必須產(chǎn)生正確的協(xié)議頭。 u_char packet100;if(fp = pcap_open_live(argv1, 100, 1, 1000, error) ) = NULL) fprintf(stderr,nError opening adapter: %sn, error); return;/* Supposing to be on ethernet, set mac destination to 1:1:1:1:1:1 */ packet05=1;/* set mac source to 2:2:2:2:2:2 */ packet611=2; /* Fill the rest of the
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年保險公司保險產(chǎn)品代理合同2篇
- 2025年桉樹種植與木材市場分析及風(fēng)險控制合同2篇
- 2025年度屋頂綠化工程坡面修護施工合同模板3篇
- 二零二五年度單間出租房租賃合同(含家具家電贈送)
- 2024版離婚冷靜期協(xié)議書范本
- 二零二五年度個人債務(wù)重組合同樣本3篇
- 2024年高速公路麻石路緣石鋪設(shè)及維護合同3篇
- 2025年度燃?xì)庠O(shè)備租賃維護合同3篇
- 2025年版A4規(guī)格勞動合同樣本制作合同6篇
- 2024年英語合資企業(yè)合同模板2篇
- 路面基層允許彎沉值計算+彎沉系數(shù)圖+允許彎沉值計算公式
- 連鑄意外事故處理
- 國家開放大學(xué)(中央廣播電視大學(xué))報名登記表【模板】
- 新職業(yè)英語1-基礎(chǔ)篇-Unit 3(課堂PPT)
- 公司各部門協(xié)作情況互評表滿意度調(diào)查表
- 第二章水準(zhǔn)測量PPT課件
- 長輸管道原油輸送基本知識
- 完美世界的材料
- 藻類名稱(漢拉對照)
- 勞資專管員任命書
- 1百家姓全文帶拼音打印
評論
0/150
提交評論