freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于winpcap數(shù)據(jù)抓取系統(tǒng)-大學(xué)學(xué)位論文范文模板參考資料-資料下載頁

2024-12-06 05:44本頁面

【導(dǎo)讀】絡(luò)通信過程中統(tǒng)計(jì)信息的重要工具。著名的網(wǎng)絡(luò)封包分析軟件Wireshark(前身是。Ethereal)就是依靠WinPcap提供的接口實(shí)現(xiàn)的數(shù)據(jù)包捕獲。本文簡(jiǎn)要介紹了WinPcap

  

【正文】 程序功能如下: include include include pragma ment(lib,) void main() 21 { struct pcap_if * pdevs=NULL,*p。 //用于存儲(chǔ)網(wǎng)卡信息 char errbuff[PCAP_ERRBUF_SIZE]。 //用于存儲(chǔ)錯(cuò)誤信息 if(pcap_findalldevs(amp。pdevs,errbuff) != 0) //獲得本地網(wǎng)卡列表 { printf(發(fā)生錯(cuò)誤: %s\n,errbuff)。 return。 } ?????????????? pcap_freealldevs(pdevs)。 //釋放網(wǎng)絡(luò)適配器資源 } 打開網(wǎng)卡設(shè)備準(zhǔn)備捕獲數(shù)據(jù)包 獲得網(wǎng)卡 列表 后就可以按數(shù)據(jù)捕獲的要求打開網(wǎng)卡, 打開網(wǎng)卡的功能是通過 pcap_open_live()來實(shí)現(xiàn)的。它的函數(shù) 實(shí)現(xiàn) 如下 : //打開設(shè)備 if ( (adhandle= pcap_open_live(dname, //設(shè)備名 65536, // 捕捉完整的數(shù)據(jù)包 1 , // 混雜模式 1001, // 讀入超時(shí) errbuf // 錯(cuò)誤緩沖 ) ) == NULL) { //打開設(shè)備失敗 ???????????? } else { ???????????? } 捕獲數(shù)據(jù)包 打開網(wǎng)絡(luò)適配器后就開始捕獲數(shù)據(jù)包 , 捕獲方式有兩種 :一是以回調(diào)的方式,在底層收集數(shù)據(jù)包,當(dāng)滿足一定的條件 (超時(shí)或者緩沖區(qū)滿 ),就調(diào)用回調(diào)函數(shù),把22 基于 winpcap數(shù)據(jù)抓取、分析軟件系統(tǒng) 收集到的原始數(shù)據(jù)包交給用戶,他們返回的數(shù)據(jù)緩沖區(qū)包含多個(gè)包 。另 一種方式每當(dāng)一個(gè)包到到達(dá)以后函數(shù)就會(huì)返回,返回的數(shù)據(jù)緩沖區(qū)里只包含一個(gè)包。捕獲的數(shù)據(jù)都是最原始的數(shù)據(jù)包,即包含數(shù)據(jù)鏈路層的數(shù)據(jù) 頭。 基于回調(diào)包捕獲機(jī)制的 pcap_loop()在某些情況下是不錯(cuò)的選擇 ,但是在一些情況下處理回調(diào)并不特別好 :就是使用這個(gè)函數(shù)時(shí)包處理函數(shù)要被包抓取驅(qū)動(dòng)程序來調(diào)用,因 此應(yīng)用程序不能直接控制它 ,這會(huì)使程序變得復(fù)雜反而效率不高。在這些情況下使用循環(huán)調(diào)用 pcap_next()來接受數(shù)據(jù)報(bào)會(huì)更容易理解, 當(dāng)然也可以用pcap_next_ex()來接受數(shù)據(jù)包。 pcap_next_ex()效率更高些,因?yàn)?pcap_next()有一些缺陷。首先,它的效率不高,因?yàn)樗m然隱藏了回調(diào)模式但是仍然依賴于pcap_dispatch()。其次,它不能檢測(cè)文件結(jié)束標(biāo)志 (EOF),所以當(dāng)從一個(gè)文件中收集包的時(shí)候不是很有用 。 這個(gè)函數(shù)的參數(shù)和回調(diào)函數(shù) pcap_loop()的一樣由是一個(gè)網(wǎng)絡(luò)適配器描述符作為入口參數(shù)和兩個(gè)指針作為出口參數(shù),這兩個(gè)指針將在函數(shù)中被初始化,然后再返回給用戶 (一個(gè)指向 pcap_pkthdr 結(jié)構(gòu),另一個(gè)指向一個(gè)用作數(shù)據(jù)緩沖區(qū)的內(nèi)存區(qū)域 )。 函數(shù) 實(shí)現(xiàn) 如下 : inelude void main() { pcap_t *adhandle。 //數(shù)據(jù)捕獲句柄 int res。 pcap_pkthdr *header。 //pcap 給出的指向數(shù)據(jù)包包頭的指針 u_char *pkt_data。 ???????????? //循環(huán)捕獲數(shù)據(jù)包 while((res=pcap_next_ex(adhandle, amp。header, amp。pkt_data))=0){} ???????????? } 數(shù)據(jù)包 的協(xié)議解析 網(wǎng)絡(luò)協(xié)議分析 每一個(gè)網(wǎng)絡(luò)數(shù)據(jù)包都是基于某一個(gè)網(wǎng)絡(luò)協(xié)議產(chǎn)生的,所以分析網(wǎng)絡(luò)數(shù)據(jù)包必定要分析其協(xié)議的內(nèi)容。由于網(wǎng)絡(luò)數(shù)據(jù)通信是要在相互公開協(xié)議的前提下對(duì)等進(jìn)行的,所以對(duì)數(shù)據(jù)包 進(jìn)行協(xié)議的分析在原理上是可行的。 一般地,協(xié)議的分析過程是這樣的 :首先捕獲數(shù)據(jù)包,再進(jìn)行相應(yīng)的過濾和分 23 解,最后進(jìn)行具體的協(xié)議分析。本 論 文要研究的 Libpcap 和 winPcap 不但能夠捕獲網(wǎng)絡(luò)上的數(shù)據(jù)包,還由于其本身就是基于 BPF 包過濾機(jī)制的,所以它們同樣具有數(shù)據(jù)包的過濾功能。具體地,由于網(wǎng)絡(luò)具有 osi 的 7層協(xié)議模型,協(xié)議數(shù)據(jù)是從上到下封裝后發(fā)送的,反過來,對(duì)于協(xié)議分析需要從下至上進(jìn)行,首先對(duì)鏈路層的協(xié)議識(shí)別后進(jìn)行組包還原,再脫去鏈路層協(xié)議頭,接下去將里面的數(shù)據(jù)交給網(wǎng)絡(luò)層分析,這樣一直進(jìn)行下經(jīng)過傳輸層直到應(yīng)用 層。 網(wǎng)絡(luò)協(xié)議分析技術(shù)除了應(yīng)用到對(duì)捕獲的網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行分析得到數(shù)據(jù)包的協(xié)議內(nèi)容外,還可以應(yīng)用到網(wǎng)絡(luò)流量統(tǒng)計(jì)、網(wǎng)絡(luò)監(jiān)視、網(wǎng)絡(luò)入侵檢測(cè)、網(wǎng)絡(luò)安全掃描等,可見網(wǎng)絡(luò)協(xié)議分析是網(wǎng)絡(luò)數(shù)據(jù)捕獲技術(shù)之后的各種網(wǎng)絡(luò)安全策略的基礎(chǔ)。 各協(xié)議幀的數(shù)據(jù)結(jié)構(gòu) 捕獲后的數(shù)據(jù)幀經(jīng)過解析才能得到想要的信息,如作為網(wǎng)絡(luò)監(jiān)聽所需要的數(shù)據(jù)幀的源地址,目的地址,協(xié)議類型等信息。需要關(guān)注的是幀的格式,解析的過程是將數(shù)據(jù)幀中的數(shù)據(jù)按不同協(xié)議進(jìn)行分析提取。常用的以太網(wǎng)幀的格式有兩種標(biāo)準(zhǔn),一種是 DIX Ether V2 標(biāo)準(zhǔn),另一種是 IEEE 的 標(biāo)準(zhǔn)?,F(xiàn)在最常用的 MAC幀是 V2 格式,這個(gè)也是本課題所要研究的格式。 以太網(wǎng) V2 幀的格式如圖 2所示。 (l)以太網(wǎng)數(shù)據(jù)結(jié)構(gòu) typedef struct ether_header { u_int8_t ether_daddr[6]。 //目的地址 u_int8_t ether_saddr[6]。 //源地址 u_int16_t ether_type。 //以太網(wǎng)類型 }ether_header。 目的地址 源地址 類型 數(shù)據(jù) CRC 類型 0800 IP 數(shù)據(jù)包 6 6 2 461500 字節(jié) 4 字節(jié) 2 461500字節(jié) 圖 2 以太網(wǎng)封裝格式 24 基于 winpcap數(shù)據(jù)抓取、分析軟件系統(tǒng) (2)IP 協(xié)議數(shù)據(jù)結(jié)構(gòu) /* IPv4 首部 */ typedef struct ip_header{ u_char ver_ihl。 // 版本 (4 bits) +首部長(zhǎng)度 (4 bits) u_char tos。 // 服務(wù)類型 (Type of service) u_short tlen。 // 總長(zhǎng) (Total length) u_short identification。 // 標(biāo)識(shí) (Identification) u_short flags_fo。 // 標(biāo)志位 (Flags) (3 bits) + 段偏移量 (Fragment offset) (13 bits) u_char ttl。 // 存活時(shí)間 (Time to live) u_char proto。 // 協(xié)議 (Protocol) u_short crc。 // 首部校驗(yàn)和 (Header checksum) in_addr saddr。 // 源地址 (Source address) in_addr daddr。 // 目的地址 (Destination address) u_int op_pad。 // 選項(xiàng)與填充 (Option + Padding) }ip_header。 (3)UDP 協(xié)議數(shù)據(jù)結(jié)構(gòu) /* UDP 首部 */ typedef struct udp_header{ u_short sport。 // 源端口 (Source port) u_short dport。 // 目的端口 (Destination port) u_short len。 // UDP 數(shù)據(jù)包長(zhǎng)度 (Datagram length) u_short crc。 // 校驗(yàn)和 (Checksum) }udp_header。 (4)TCP 協(xié)議數(shù)據(jù)結(jié)構(gòu) //TCP 首部 typedef struct tcp_header { u_short sport。 //16 位源端口 u_short dport。 //16 位目的端口 u_int seq。 //32 位序列號(hào) u_int ack。 //32 位確認(rèn)號(hào) u_char lenres。 //4 位首部長(zhǎng)度 /4位保留字 25 u_char flag。 //6 位標(biāo)志位 u_short win。 //16 位窗口大小 u_short sum。 //16 位校驗(yàn)和 u_short urp。 //16 位緊急數(shù)據(jù)偏移量 }tcp_header。 (5)ICMP 協(xié)議 數(shù)據(jù)結(jié)構(gòu) //ICMP 首部 typedef struct icmp_header { u_char type。 //8 位類型 u_char code。 //8 位代碼 u_short cksum。 //16 位校驗(yàn)和 u_short id。 //識(shí)別號(hào)(一般用進(jìn)程號(hào)作為識(shí)別號(hào)) u_short seq。 //報(bào)文序列號(hào) u_int timestamp。 //時(shí)間戳 }icmp_header。 注:要分析不同的以太網(wǎng)協(xié)議,首先要根據(jù)不同數(shù)據(jù)包的 封裝格式定義相應(yīng)的數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu),然后在程序中通過判斷和匹配來確定不同的數(shù)據(jù)包是屬于什么協(xié)議 。 分析 具體 實(shí)現(xiàn) 對(duì) IP 包的分析 (包括 TCP, UDP, ICMP)和顯示的內(nèi)容的處理都在下面這個(gè)函數(shù)內(nèi) : Analyse(const pcap_pkthdr *header,const u_char *data){ }。在定義了不同的網(wǎng)絡(luò)協(xié)議的數(shù)據(jù)結(jié)構(gòu)之后, Analyse()用這些定義好的結(jié)構(gòu)來定位數(shù)據(jù)包頭部的各種字段,經(jīng)過 switch 語句的判斷就可以確定協(xié)議的類型 。 代碼具體實(shí)現(xiàn)如下: void CWinpCaptureDlg::Analyse(const pcap_pkthdr *header,const u_char *data) { AnalyseStr= 。 CString temp。 struct ether_header *eth。 //以太網(wǎng)幀報(bào)頭指針 struct ip_header *iph。 //IP 幀報(bào)頭指針 struct udp_header *udh。 //UDP 幀報(bào)頭指針 26 基于 winpcap數(shù)據(jù)抓取、分析軟件系統(tǒng) struct tcp_header *tch。 //TCP幀報(bào)頭指針 struct icmp_header *ich。 //ICMP 幀報(bào)頭指針 char mac_addr[19]。 u_char* mac_string。 u_int ip_len。 (以太網(wǎng)幀長(zhǎng)度 :%d\r\n,headercaplen)。 eth=(struct ether_header *)data。 mac_string=ethether_saddr。 sprintf(mac_addr,%02X:%02X:%02X:%02X:%02X:%02X,*mac_string,*(mac_string+1),*(mac_string+2),*(mac_string+3),*(mac_string+4),*(mac_string+5))。 AnalyseStr+=(CString)源 MAC 地址 :+mac_addr+(CString)\r 。 mac_string=ethether_daddr。 sprintf(mac_addr,%02X:%02X:%02X:%02X:%02X:%02X,*mac_string,*(mac_string+1),*(mac_string+2),*(mac_string+3),*(mac_string+4),*(mac_string+5))。 AnalyseStr+=(CString)目的 MAC 地址 :+mac_addr+(CString)\r\n。 AnalyseStr+=以太網(wǎng)幀類型 : 。 AnalyseStr+=IP 包 \r\n。 iph=(ip_header *)(data+14)。 AnalyseStr+=
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1