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

正文內(nèi)容

網(wǎng)絡(luò)數(shù)據(jù)包捕獲及報(bào)文監(jiān)測(cè)與重組技術(shù)的研究-在線瀏覽

2025-08-10 01:28本頁(yè)面
  

【正文】 統(tǒng)的基礎(chǔ),本章詳細(xì)討論了各種網(wǎng)絡(luò)環(huán)境下數(shù)據(jù)包的捕獲方式,重點(diǎn)介紹了BPF機(jī)制,并描述了數(shù)據(jù)包捕獲函數(shù)庫(kù)Libpcap和PF_RING套接字。 第四章介紹了監(jiān)控系統(tǒng)的主體程序框架,重點(diǎn)分析了監(jiān)控程序?qū)崿F(xiàn)中的幾個(gè)關(guān)鍵點(diǎn):HTTP報(bào)文重組、內(nèi)存回收、HTTP報(bào)文解壓縮、郵件內(nèi)容的獲取和消息體的編碼轉(zhuǎn)換,并提出了系統(tǒng)功能擴(kuò)展的一些方面。第二章 數(shù)據(jù)包的捕獲WebMail監(jiān)控系統(tǒng)先通過(guò)數(shù)據(jù)捕獲模塊捕獲、初步過(guò)濾所有的網(wǎng)絡(luò)數(shù)據(jù)包,定位模塊進(jìn)行精確過(guò)濾,定位數(shù)據(jù)包所屬郵箱,重組數(shù)據(jù)包則在具體郵箱分析模塊進(jìn)行,數(shù)據(jù)包重組后就可根據(jù)具體的應(yīng)用層協(xié)議恢復(fù)應(yīng)用層的內(nèi)容,最后再根據(jù)要求獲得郵件的具體信息。167。數(shù)據(jù)在這些網(wǎng)絡(luò)上是以幀為單位傳輸,幀通過(guò)特定的網(wǎng)絡(luò)驅(qū)動(dòng)程序進(jìn)行成型,然后通過(guò)網(wǎng)卡發(fā)送到網(wǎng)線上。在同一個(gè)沖突域中的以太網(wǎng)中節(jié)點(diǎn)都可以收到所有被發(fā)送的幀,因此,我們說(shuō)以太網(wǎng)是一種廣播網(wǎng)絡(luò)。當(dāng)網(wǎng)絡(luò)接口處于正常狀態(tài)時(shí),根據(jù)數(shù)據(jù)幀的真實(shí)目的地址來(lái)決定是否處理,如果目的地址為本機(jī)地址或?yàn)閺V播地址則接收。專(zhuān)門(mén)用于同時(shí)向網(wǎng)絡(luò)中所有工作站進(jìn)行發(fā)送的地址就是廣播地址。簡(jiǎn)單的說(shuō),當(dāng)網(wǎng)絡(luò)接口處于正常狀態(tài)時(shí),下面兩種數(shù)據(jù)幀會(huì)被一個(gè)網(wǎng)絡(luò)接口(網(wǎng)卡)響應(yīng):(1) 數(shù)據(jù)幀匹配自己的MAC地址;(2)發(fā)向網(wǎng)絡(luò)內(nèi)的所有主機(jī)的廣播數(shù)據(jù)幀網(wǎng)卡是計(jì)算機(jī)的一個(gè)組件,它工作在數(shù)據(jù)鏈路層。網(wǎng)卡的主要功能有:實(shí)現(xiàn)與局域網(wǎng)傳輸介質(zhì)之間的物理連接,進(jìn)行電信號(hào)匹配,發(fā)送和接收幀,封裝與拆封幀,控制介質(zhì)訪問(wèn),對(duì)數(shù)據(jù)進(jìn)行編碼和解碼和緩存數(shù)據(jù)等。幀可以看做一個(gè)數(shù)據(jù)包,里面除了包含有數(shù)據(jù)信息外,還包含數(shù)據(jù)的發(fā)送地址,接收地址和數(shù)據(jù)校驗(yàn)等信息。網(wǎng)卡的缺省接收模式包含廣播模式和直接模式,可以通過(guò)網(wǎng)卡驅(qū)動(dòng)程序?qū)⒔邮漳J皆O(shè)為混雜模式。正常情況下,只接收MAC地址匹配的數(shù)據(jù)幀和廣播幀,其余的幀會(huì)簡(jiǎn)單丟棄,而在混雜模式下,所有傳來(lái)的數(shù)據(jù)幀都會(huì)被網(wǎng)卡接受。接收數(shù)據(jù)和發(fā)送數(shù)據(jù)時(shí),網(wǎng)卡通常會(huì)產(chǎn)生中斷信號(hào)通知CPU,CPU產(chǎn)生中斷,操作系統(tǒng)調(diào)用網(wǎng)卡自己中斷處理函數(shù)去調(diào)用驅(qū)動(dòng)程序接收數(shù)據(jù),這個(gè)中斷函數(shù)是由網(wǎng)卡驅(qū)動(dòng)程序注冊(cè)到操作系統(tǒng)的中斷描述符表(IDT)和中斷服務(wù)程序(ISR)中。工作在廣播模式下的網(wǎng)卡能接收廣播幀。網(wǎng)卡在直接模式下只接收與自己的MAC地址匹配的數(shù)據(jù)幀。一般情況下,前三種模式是網(wǎng)卡的缺省配置。在本系統(tǒng)中,就是將網(wǎng)卡設(shè)為混雜接收模式,進(jìn)行網(wǎng)絡(luò)監(jiān)聽(tīng)。 我們?cè)谏弦还?jié)分析網(wǎng)卡的工作模式時(shí)了解到,即時(shí)網(wǎng)卡工作在混雜模式下,它也只能接收到經(jīng)過(guò)該網(wǎng)卡的數(shù)據(jù)包,對(duì)于不經(jīng)過(guò)該網(wǎng)卡的數(shù)據(jù)包則不能監(jiān)控。監(jiān)控主機(jī)的工作環(huán)境必需同網(wǎng)絡(luò)的組建方式相適應(yīng)。 共享式網(wǎng)絡(luò)局域網(wǎng)內(nèi)主機(jī)通過(guò)Hub集線器連接。其網(wǎng)絡(luò)拓?fù)湫问饺缦滤荆? 被監(jiān)測(cè)對(duì)象被監(jiān)測(cè)對(duì)象集線器監(jiān)控探測(cè)器互聯(lián)網(wǎng)被監(jiān)測(cè)對(duì)象 圖 集線器連接在共享式網(wǎng)絡(luò)中,一條通訊線路被所有機(jī)器共享。它沒(méi)有端口的概念,以“廣播”的方式發(fā)送數(shù)據(jù)。也就是說(shuō),當(dāng)主機(jī)向某個(gè)目標(biāo)主機(jī)發(fā)送數(shù)據(jù)包時(shí),盡管在數(shù)據(jù)包里已說(shuō)明了目標(biāo)主機(jī)的MAC地址,但是集線器還是會(huì)將它收到的數(shù)據(jù)包發(fā)送到與它連接的每一個(gè)節(jié)點(diǎn)。如果該網(wǎng)絡(luò)中的某臺(tái)主機(jī)想監(jiān)聽(tīng)這個(gè)局域網(wǎng)的所有信息,可以簡(jiǎn)單的將它的網(wǎng)卡設(shè)為混雜模式(promiscuous)就可以監(jiān)聽(tīng)這個(gè)局域網(wǎng)了。局域網(wǎng)內(nèi)的微機(jī)通過(guò)智能交換機(jī)相連,且交換機(jī)支持端口鏡像(帶網(wǎng)管的交換機(jī)大多支持端口鏡像),則只需將網(wǎng)絡(luò)監(jiān)聽(tīng)主機(jī)的監(jiān)控口與網(wǎng)關(guān)設(shè)備或網(wǎng)關(guān)電腦連接在同一臺(tái)交換機(jī)上,且將網(wǎng)關(guān)設(shè)備所占端口的所有通信鏡像到網(wǎng)絡(luò)監(jiān)聽(tīng)主機(jī)所接的端口,就可以實(shí)現(xiàn)監(jiān)控。交換機(jī)工作在數(shù)據(jù)鏈路層,交換機(jī)內(nèi)存中有一個(gè)地址對(duì)照表,交換機(jī)收到數(shù)據(jù)包后,處理端口會(huì)查找這個(gè)對(duì)照表以確定目的MAC的網(wǎng)卡掛在那個(gè)端口上,然后將數(shù)據(jù)包傳送到目的端口。而可網(wǎng)管式交換機(jī),具有端口鏡像的功能。經(jīng)過(guò)這樣設(shè)置,經(jīng)過(guò)被鏡像的端口的網(wǎng)絡(luò)數(shù)據(jù)也會(huì)復(fù)制一份到鏡像端口上。這種方式要求監(jiān)聽(tīng)者有權(quán)限物理接觸目標(biāo)網(wǎng)絡(luò)并可以調(diào)整網(wǎng)絡(luò)設(shè)置。局域網(wǎng)內(nèi)的微機(jī)通過(guò)非智能交換機(jī)(傻交換)相連,且網(wǎng)關(guān)設(shè)備上也沒(méi)有合適的安裝點(diǎn)。將內(nèi)網(wǎng)交換機(jī)的數(shù)據(jù)通過(guò)網(wǎng)絡(luò)流量鏡像設(shè)備鏡像到網(wǎng)絡(luò)監(jiān)聽(tīng)主機(jī)上,組成的網(wǎng)絡(luò)拓?fù)鋱D如下。要監(jiān)聽(tīng)網(wǎng)絡(luò)中所有的數(shù)據(jù)包,可以使用Cable Tap接線盒的方式。Cable Tap接入到網(wǎng)絡(luò)中,并不影響網(wǎng)絡(luò)的傳輸速度。這種方式也要求監(jiān)聽(tīng)者有權(quán)限物理接觸目標(biāo)網(wǎng)絡(luò)并可以調(diào)整網(wǎng)絡(luò)設(shè)置。在一定的特殊情況下,無(wú)法對(duì)機(jī)房總交換機(jī)進(jìn)行接觸,沒(méi)有能夠接到交換機(jī)鏡像端口的條件,這種情況只有通過(guò)交換機(jī)欺騙才能拿到數(shù)據(jù)。利用這些漏洞,進(jìn)行交換機(jī)欺騙,就可使交換機(jī)根據(jù)MAC地址進(jìn)行端口轉(zhuǎn)發(fā)的功能不會(huì)影響到網(wǎng)絡(luò)監(jiān)聽(tīng)。ARP欺騙的技術(shù)比較成熟,因此最常用。這可以提高帶寬利用率,因?yàn)樾畔⒘饔貌恢鴱乃卸丝诎l(fā)送出去,而只從需要接收的那些端口發(fā)送出去。如果向交換機(jī)發(fā)送大量含有虛假M(fèi)AC地址和IP地址的IP包,使交換機(jī)無(wú)法處理如此多的信息而引起設(shè)備工作異常,也就是所謂的“失效”模式,在這個(gè)模式里,交換機(jī)的處理器已經(jīng)不能正常分析數(shù)據(jù)報(bào)和構(gòu)造查詢(xún)地址表了,然后,交換機(jī)就會(huì)成為一臺(tái)普通的集線器,毫無(wú)選擇的向所有端口發(fā)送數(shù)據(jù),這個(gè)行為被稱(chēng)作“泛洪發(fā)送”,這樣一來(lái)監(jiān)聽(tīng)系統(tǒng)就能嗅探到所需數(shù)據(jù)了。MAC復(fù)制MAC地址作為網(wǎng)卡的唯一標(biāo)識(shí)在一般情況下是不能夠隨意修改的,任何一個(gè)網(wǎng)卡都有一個(gè)MAC地址,他的長(zhǎng)度是48位,在初始時(shí)這個(gè)地址是由網(wǎng)卡制造商燒錄進(jìn)去的,理論上MAC地址全球都是唯一的,不會(huì)出現(xiàn)沖突問(wèn)題。在監(jiān)控系統(tǒng)中,知道欲監(jiān)控主機(jī)的MAC地址后,用這個(gè)MAC地址替換監(jiān)聽(tīng)主機(jī)的MAC地址。ARP欺騙ARP協(xié)議為IP地址到硬件地址提供動(dòng)態(tài)的映射關(guān)系,實(shí)現(xiàn)將網(wǎng)絡(luò)IP地址轉(zhuǎn)化成機(jī)器MAC地址。ARP欺騙的實(shí)現(xiàn)方式與監(jiān)聽(tīng)環(huán)境有關(guān),有兩種實(shí)現(xiàn)方式:局域網(wǎng)內(nèi)ARP欺騙和Internet的ARP欺騙在局域網(wǎng)里,計(jì)算機(jī)要查找彼此并不是通過(guò)IP進(jìn)行的,而是通過(guò)網(wǎng)卡MAC地址,根據(jù)協(xié)議規(guī)范,當(dāng)一臺(tái)計(jì)算機(jī)要查找另一臺(tái)計(jì)算機(jī)時(shí),它必須把目標(biāo)計(jì)算機(jī)的IP通過(guò)ARP協(xié)議(地址解析協(xié)議)在物理網(wǎng)絡(luò)中廣播出去,“廣播”是一種讓任意一臺(tái)計(jì)算機(jī)都能收到數(shù)據(jù)的數(shù)據(jù)發(fā)送方式,計(jì)算機(jī)收到數(shù)據(jù)后就會(huì)判斷這條信息是不是發(fā)給自己的,如果是,就會(huì)返回應(yīng)答,在這里,它會(huì)返回自身地址,這一步被稱(chēng)為“ARP尋址”。數(shù)據(jù)在發(fā)送之前需要進(jìn)行封裝,在網(wǎng)絡(luò)層添加IP頭(含有源IP地址,目的IP地址)形成IP數(shù)據(jù)報(bào),然后到達(dá)鏈路層,如果IP數(shù)據(jù)報(bào)長(zhǎng)度大于一幀,數(shù)據(jù)鏈路層會(huì)將IP數(shù)據(jù)報(bào)分割,然后添加以太網(wǎng)包頭(含有源主機(jī)MAC地址,目標(biāo)主機(jī)MAC地址),再由網(wǎng)卡進(jìn)行發(fā)送。而MAC地址就是通過(guò)前面提到的ARP尋址獲得的。當(dāng)一臺(tái)計(jì)算機(jī)要發(fā)送數(shù)據(jù)給另一臺(tái)計(jì)算機(jī)時(shí),它會(huì)以IP地址為依據(jù)首先查詢(xún)自身的ARP地址表,如果里面沒(méi)有目標(biāo)計(jì)算機(jī)的MAC信息,它就觸發(fā)ARP廣播尋址數(shù)據(jù)直到目標(biāo)計(jì)算機(jī)返回自身地址報(bào)文,而一旦這個(gè)地址表里存在目標(biāo)計(jì)算機(jī)的MAC信息,計(jì)算機(jī)就直接把這個(gè)地址作為數(shù)據(jù)鏈路層的以太網(wǎng)地址頭部封裝發(fā)送出去。系統(tǒng)在指定的時(shí)期里,計(jì)算機(jī)是不會(huì)再去廣播尋址信息獲取目標(biāo)MAC地址的。例如在以太網(wǎng)中有兩臺(tái)主機(jī)A和B進(jìn)行通信,這兩臺(tái)主機(jī)通過(guò)交換機(jī)連接。這樣A和B都會(huì)誤認(rèn)為監(jiān)控主機(jī)C的MAC地址是對(duì)方的MAC地址。只要監(jiān)聽(tīng)主機(jī)在被監(jiān)聽(tīng)的機(jī)器重新發(fā)送ARP查詢(xún)包前及時(shí)偽造虛假ARP應(yīng)答包就能維持著這個(gè)通訊鏈路,從而獲得持續(xù)的數(shù)據(jù)記錄,同時(shí)也不會(huì)造成被監(jiān)聽(tīng)者的通訊異常。ARP協(xié)議的作用是將IP地址映射到MAC地址,監(jiān)聽(tīng)設(shè)備通過(guò)向目標(biāo)主機(jī)發(fā)送偽造的ARP應(yīng)答包,使目標(biāo)系統(tǒng)更新自身的ARP緩存表,將目標(biāo)系統(tǒng)的網(wǎng)關(guān)的MAC地址修改為監(jiān)聽(tīng)設(shè)備的主機(jī)MAC地址,使數(shù)據(jù)包都經(jīng)由監(jiān)聽(tīng)設(shè)備的主機(jī),同時(shí)監(jiān)聽(tīng)設(shè)備向網(wǎng)關(guān)發(fā)送偽造的ARP應(yīng)答包,欺騙網(wǎng)關(guān)更新自己的ARP緩存表,網(wǎng)關(guān)發(fā)給目標(biāo)主機(jī)的數(shù)據(jù)也都流經(jīng)監(jiān)聽(tīng)的主機(jī),這樣就實(shí)現(xiàn)了交換環(huán)境下的網(wǎng)絡(luò)監(jiān)聽(tīng)。 167。在這個(gè)過(guò)程中,根據(jù)系統(tǒng)設(shè)置的過(guò)濾條件,通常會(huì)丟棄一些不符合條件的數(shù)據(jù)包。因此,為了提高效率,必須盡可能早的在底層截獲數(shù)據(jù)包,設(shè)定過(guò)濾條件,丟棄監(jiān)控系統(tǒng)不需要的數(shù)據(jù)包。因此監(jiān)控系統(tǒng)的程序架構(gòu)大體分為兩部分:捕獲和過(guò)濾網(wǎng)絡(luò)數(shù)據(jù)包的內(nèi)核空間部分,進(jìn)行協(xié)議分析、設(shè)計(jì)用戶(hù)界面的用戶(hù)空間部分,在用戶(hù)空間也可以設(shè)置過(guò)濾條件,在協(xié)議分析之前對(duì)數(shù)據(jù)包進(jìn)行過(guò)濾。數(shù)據(jù)包有網(wǎng)卡接收,經(jīng)操作系統(tǒng)調(diào)用網(wǎng)卡驅(qū)動(dòng)程序處理,然后到達(dá)數(shù)據(jù)鏈路層,經(jīng)操作系統(tǒng)的協(xié)議棧進(jìn)行處理,最后交給應(yīng)用程序。操作系統(tǒng)對(duì)數(shù)據(jù)包仍然進(jìn)行網(wǎng)絡(luò)協(xié)議堆棧處理,并不受包捕獲機(jī)制的影響。包捕獲機(jī)制中底層與操作系統(tǒng)有關(guān)的部分,用戶(hù)并不可見(jiàn),用戶(hù)程序只考慮調(diào)用接口函數(shù),這樣使得用戶(hù)程序移植性很好。[3]。SOCK_PACKET類(lèi)型的協(xié)議套接字工作在用戶(hù)層,Linux用它可以實(shí)現(xiàn)對(duì)鏈路層的訪問(wèn)的部分功能,而通常要通過(guò)編寫(xiě)內(nèi)核驅(qū)動(dòng)程序,在Linux下才可對(duì)鏈路層進(jìn)行訪問(wèn)。使用如下方式來(lái)建立SOCK_PACKET類(lèi)型的套接字:socket (AF_INET,SOCK_PACKET, htons(0x0003));表示建立的因特網(wǎng)協(xié)議族類(lèi)型的套接字,該套接字在物理層截取數(shù)據(jù)幀,數(shù)據(jù)不需要網(wǎng)絡(luò)協(xié)議棧處理,而且截取幀的類(lèi)型為不確定,所有的數(shù)據(jù)包都需處理。網(wǎng)卡的模式設(shè)置可以通過(guò)設(shè)備管理函數(shù)ioctl()來(lái)實(shí)現(xiàn)。這樣一來(lái)它的數(shù)據(jù)包接收過(guò)程需要頻繁的進(jìn)行系統(tǒng)調(diào)用,使得系統(tǒng)開(kāi)銷(xiāo)很大。套接口要接收來(lái)自以太網(wǎng)、PPP鏈路、SLIP鏈路等設(shè)備的數(shù)據(jù),而不能只接收某一設(shè)備的數(shù)據(jù),比如以太網(wǎng)設(shè)備。(BSD Packet Filter, 簡(jiǎn)稱(chēng)BPF)[4]。目前,許多版本Unix和Linux平臺(tái)上多數(shù)嗅探器都是基于BPF開(kāi)發(fā)的。過(guò)濾器程序可以通過(guò)這個(gè)偽機(jī)器的機(jī)器語(yǔ)言編寫(xiě),但有一種更簡(jiǎn)單的編寫(xiě)方式,就是使用pcap_pile函數(shù)接口,將應(yīng)用進(jìn)程設(shè)定的ASCII過(guò)濾字符串編譯成BPF偽機(jī)器的機(jī)器語(yǔ)言。如果這個(gè)數(shù)據(jù)包被過(guò)濾器接收,它就會(huì)傳到與過(guò)濾器相連的緩存中,最后由應(yīng)用進(jìn)程處理時(shí)再將其從緩沖區(qū)拷貝到用戶(hù)進(jìn)程空間中。網(wǎng)絡(luò)中的數(shù)據(jù)除了按內(nèi)核協(xié)議棧流程傳遞處理,Linux內(nèi)核還提供了一種靈活修改網(wǎng)絡(luò)數(shù)據(jù)的機(jī)制,在網(wǎng)絡(luò)數(shù)據(jù)流轉(zhuǎn)經(jīng)過(guò)多個(gè)地點(diǎn)設(shè)立檢查點(diǎn),用戶(hù)可以在這些檢查點(diǎn)設(shè)立處理方法,數(shù)據(jù)流轉(zhuǎn)這些地方的時(shí)候就會(huì)按照這些方法進(jìn)行處理,然后再正常流轉(zhuǎn)。在Linux內(nèi)核中,用NetFilter模塊實(shí)現(xiàn)BPF,在用戶(hù)空間用iptables實(shí)現(xiàn)過(guò)濾。IPV4在數(shù)據(jù)包的傳遞過(guò)程中設(shè)立了五個(gè)檢查點(diǎn),分別是NF_IP_PRE_ROUTINE、NF_IP_FOWARD、NF_IP_POST_FOUTINE、NF_IP_LOCAL_IN和NF_IP_LOCAL_OUT。內(nèi)核通過(guò)這五個(gè)鉤子函數(shù)完成包過(guò)濾過(guò)程[5]。(2) 由BPF傳遞到應(yīng)用進(jìn)程的只是每個(gè)分組的一段定長(zhǎng)部分。大多數(shù)應(yīng)用進(jìn)程只需要分組頭部而不需要分組數(shù)據(jù)。也可以根據(jù)應(yīng)用的需要設(shè)置這個(gè)長(zhǎng)度值。如此緩沖,雖然還是相同數(shù)量的分組從BPF拷貝到應(yīng)用進(jìn)程,但系統(tǒng)調(diào)用的次數(shù)大量減少,提高了數(shù)據(jù)包處理效率。167。通常在網(wǎng)絡(luò)安全監(jiān)控程序中必須實(shí)現(xiàn)以下功能:截獲數(shù)據(jù)包,分析數(shù)據(jù)報(bào)頭,重寫(xiě)數(shù)據(jù)包甚至將通訊連接截?cái)?。這些封裝的函數(shù)以應(yīng)用程序編程接口函數(shù)庫(kù)的形式供開(kāi)發(fā)人員使用。Libpcap是平臺(tái)獨(dú)立的分組捕獲函數(shù)庫(kù),主要支持讀入分組;而libnet則支持構(gòu)造任意協(xié)議的分組和數(shù)據(jù)鏈路分組的寫(xiě)出;libnids[7]的開(kāi)發(fā)是基于libpcap和libnet的,除了能夠捕獲網(wǎng)絡(luò)數(shù)據(jù)包,還能重組ip碎片,重組TCP數(shù)據(jù)流,監(jiān)測(cè)端口掃描攻擊等。本文所論述的系統(tǒng)是監(jiān)控系統(tǒng),故下面將詳細(xì)討論libpcap. Libpcap函數(shù)庫(kù)1.Libpcap概述 Libpcap[8]的英文意思是Packet Capture Library,是一個(gè)開(kāi)源的數(shù)據(jù)庫(kù),向網(wǎng)絡(luò)抓包系統(tǒng)提供一個(gè)高層接口。雖然幾乎每一個(gè)操作系統(tǒng)都有自己的抓包機(jī)制,但是應(yīng)用程序使用libpcap就可以消除依賴(lài)于系統(tǒng)的包捕獲模塊,這樣就為底層網(wǎng)絡(luò)監(jiān)控編程提供了一個(gè)易于移植的應(yīng)用框架。幾乎所有的類(lèi)Unix操作系統(tǒng)都可以運(yùn)行l(wèi)ibpcap,當(dāng)然也包括Linux.[9]使用libpcap進(jìn)行網(wǎng)絡(luò)監(jiān)聽(tīng),首先需要知道監(jiān)聽(tīng)的網(wǎng)絡(luò)接口。查找網(wǎng)絡(luò)接口的函數(shù)是char* pcap_lookupdev(char *errbuf),這個(gè)函數(shù)返回一個(gè)字符串指針,這個(gè)指針?biāo)傅淖址羞m合包捕獲的第一個(gè)網(wǎng)絡(luò)設(shè)備。指明網(wǎng)絡(luò)接口,在Linux中我們可以這樣說(shuō)明,比如eth0,一個(gè)錯(cuò)誤的做法是使用硬編碼的接口名字,這是因?yàn)樗鼈儾皇强缙脚_(tái)可移植的。Libpcap的許多函數(shù)需要這個(gè)參數(shù),我們必須小心分配這個(gè)緩沖空間,因?yàn)檫@個(gè)緩沖空間必須至少能容納PCAP_ERRBUF_SIZE個(gè)字節(jié),目前定義為256.一旦知道了網(wǎng)絡(luò)設(shè)備的名稱(chēng),我們需要打開(kāi)它。這個(gè)函數(shù)返回pcap_t類(lèi)型的接口句柄,當(dāng)調(diào)用libpcap的其它函數(shù)時(shí),就需要使用這個(gè)句柄。第二個(gè)參數(shù)是要捕捉的最大字節(jié)數(shù)。通常,以太幀最大長(zhǎng)度為1518個(gè)字節(jié),但是其它的鏈路類(lèi)型可能有更大的長(zhǎng)度。參數(shù)to_ms規(guī)定了將捕捉的信息從內(nèi)核空間拷貝到用戶(hù)空間時(shí),內(nèi)核應(yīng)該等待多長(zhǎng)時(shí)間(單位是毫秒)。如果我們?cè)诟咚倬W(wǎng)絡(luò)上捕捉數(shù)據(jù),最好讓內(nèi)核讓內(nèi)核先把一些包緩沖在一起,然后再一起從內(nèi)核空間拷貝到用戶(hù)空間。Libpcap的文檔并沒(méi)有對(duì)這個(gè)數(shù)值提供任何建議。注意,如果我們讓libpcap以nonpromiscuous模式監(jiān)聽(tīng),但接口的工作方式之前已經(jīng)是promiscuous模式,接口可能仍然保持該模式。對(duì)于這種情況最好使用libpcap提供的過(guò)濾功能。要獲得數(shù)據(jù)包,我們有幾個(gè)選擇:1) 函數(shù) const u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h),這個(gè)函數(shù)需要一個(gè)由pcap_open_live返回的pcap_t句柄,和一個(gè)pcap_pkthdr類(lèi)型的結(jié)構(gòu)指針,該函數(shù)返回到達(dá)網(wǎng)絡(luò)設(shè)備的第一個(gè)數(shù)據(jù)包。這個(gè)函數(shù)在沒(méi)有捕捉到t個(gè)數(shù)據(jù)包之前,不會(huì)返回。函數(shù)pcap_loop()返回的是一個(gè)整數(shù)值,并沒(méi)有返回捕捉到的數(shù)據(jù)包,而是每當(dāng)有一個(gè)數(shù)據(jù)包準(zhǔn)備讀取時(shí),就調(diào)用一個(gè)用戶(hù)定義的函數(shù)進(jìn)行處理。如果使用pcap_next()函數(shù),就必須進(jìn)行循環(huán)調(diào)用,但對(duì)包的處理過(guò)程也得放在循環(huán)里。使用全局變量并不是一個(gè)好方法。每次調(diào)用時(shí),
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1