專利名稱:一種數(shù)據(jù)快速捕獲與過濾轉(zhuǎn)發(fā)裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,更為具體地講,涉及一種數(shù)據(jù)快速捕獲與過濾轉(zhuǎn) 發(fā)裝置。
背景技術(shù):
數(shù)據(jù)捕獲與過濾轉(zhuǎn)發(fā)技術(shù)在網(wǎng)絡(luò)性能分析系統(tǒng)實現(xiàn)、防火墻系統(tǒng)實現(xiàn)、入侵檢測 防御系統(tǒng)實現(xiàn)、對黑客攻擊檢測防御系統(tǒng)實現(xiàn)等方面中起著重要作用。數(shù)據(jù)捕獲與過濾轉(zhuǎn) 發(fā)技術(shù)是網(wǎng)絡(luò)管理中使用的基本技術(shù),可用于網(wǎng)絡(luò)測試,如校驗網(wǎng)絡(luò)設(shè)置、重構(gòu)端到端的會 話,如監(jiān)視網(wǎng)絡(luò)安全的連接工具及監(jiān)測網(wǎng)絡(luò)負載等。通過對捕獲的數(shù)據(jù)包進行分析,可以實 時了解網(wǎng)絡(luò)的使用情況,如響應(yīng)時間、丟包率、某一時段的網(wǎng)絡(luò)負載及平均負載,發(fā)現(xiàn)網(wǎng)絡(luò) 運行的瓶頸以及分析網(wǎng)絡(luò)數(shù)據(jù)包中攜帶的非法內(nèi)容等。數(shù)據(jù)捕獲和過濾轉(zhuǎn)發(fā)技術(shù)是網(wǎng)絡(luò)數(shù) 據(jù)分析的前提和第一步驟。但是,網(wǎng)絡(luò)應(yīng)用的豐富和普及也導(dǎo)致了網(wǎng)絡(luò)流量的日益增長,隨著網(wǎng)絡(luò)技術(shù)的發(fā) 展,網(wǎng)絡(luò)鏈路的速率迅猛增長,千兆網(wǎng)絡(luò)適配器和千兆網(wǎng)絡(luò)交換機已經(jīng)進入主流市場。傳 統(tǒng)數(shù)據(jù)捕獲與過濾轉(zhuǎn)發(fā)通常是借助WinPcap等函數(shù)庫,對經(jīng)過網(wǎng)絡(luò)適配器的數(shù)據(jù)幀進行捕 獲。但是這種方式遇到了諸多瓶頸,如PCI總線吞吐量、存儲容量、內(nèi)存訪問速度、磁盤訪問 速度、內(nèi)存拷貝的開銷、系統(tǒng)調(diào)用的開銷、中斷開銷以及操作系統(tǒng)的任務(wù)調(diào)度機制等都對高 速數(shù)據(jù)捕獲產(chǎn)生了一定影響。所以,僅能滿足中低速網(wǎng)絡(luò)需求的傳統(tǒng)的數(shù)據(jù)捕獲與過濾轉(zhuǎn) 發(fā)技術(shù)不能應(yīng)用到當前高速的網(wǎng)絡(luò)中。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術(shù)的不足,提出一種數(shù)據(jù)快速捕獲與過濾轉(zhuǎn)發(fā)裝 置,以提高數(shù)據(jù)捕獲與過濾轉(zhuǎn)發(fā)的速率,以適應(yīng)千兆高速網(wǎng)絡(luò)的需求。為實現(xiàn)上述發(fā)明目的,本發(fā)明數(shù)據(jù)快速捕獲與過濾轉(zhuǎn)發(fā)裝置,其特征在于,包括一數(shù)據(jù)捕獲內(nèi)核模塊,運行于Linux內(nèi)核空間,其通過在接收數(shù)據(jù)網(wǎng)絡(luò)適配器驅(qū) 動程序中開啟一個單獨的接口,對接收數(shù)據(jù)網(wǎng)絡(luò)適配器處理完的數(shù)據(jù)進入接管,捕獲數(shù) 據(jù);—數(shù)據(jù)過濾模塊,運行于Linux內(nèi)核空間,對數(shù)據(jù)捕獲內(nèi)核模塊捕獲的數(shù)據(jù)進行 分類判斷,將數(shù)據(jù)分為兩類一是無需進行分析處理的數(shù)據(jù),二是需要進行分析處理的數(shù) 據(jù);對無需進行分析處理的數(shù)據(jù)提交給數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模塊通過數(shù)據(jù)發(fā)送網(wǎng)絡(luò)適配器轉(zhuǎn)發(fā), 對需要進行分析處理的數(shù)據(jù),以skb指針的形式返回接收數(shù)據(jù)網(wǎng)絡(luò)適配器驅(qū)動程序,通過 網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包LibPcap將數(shù)據(jù)向數(shù)據(jù)捕獲用戶模塊提交;一數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模塊,運行于Linux內(nèi)核空間,對數(shù)據(jù)過濾模塊提交的無需進行 分析處理的數(shù)據(jù)直接通過數(shù)據(jù)發(fā)送網(wǎng)絡(luò)適配器轉(zhuǎn)發(fā);一數(shù)據(jù)捕獲用戶模塊,運行于Linux用戶空間,用于接收數(shù)據(jù)捕獲內(nèi)核模塊捕獲 并經(jīng)數(shù)據(jù)過濾模塊判斷為需要進行分析處理的數(shù)據(jù),然后提交至后臺進行分析處理;
一數(shù)據(jù)轉(zhuǎn)發(fā)用戶模塊,運行于Linux用戶空間,對經(jīng)后臺處理后的捕獲數(shù)據(jù)進行 接收,按需求進行標識,通過網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包LibPcap提供的數(shù)據(jù)幀發(fā)送函數(shù)將數(shù) 據(jù),經(jīng)數(shù)據(jù)發(fā)送網(wǎng)絡(luò)適配器轉(zhuǎn)發(fā)。本發(fā)明的發(fā)明目的是這樣實現(xiàn)的數(shù)據(jù)由數(shù)據(jù)捕獲內(nèi)核模塊進入,然后由數(shù)據(jù)過濾模塊進行判斷,根據(jù)數(shù)據(jù)過濾模 塊的判斷結(jié)果,進行相應(yīng)的處理對于無需進行分析處理的數(shù)據(jù),直接送至數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模 塊進行數(shù)據(jù)轉(zhuǎn)發(fā);對于需要進行分析處理的數(shù)據(jù),通過網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包LibPcap進 入數(shù)據(jù)捕獲用戶模塊,由其將數(shù)據(jù)送入后臺系統(tǒng)進行處理,待處理完畢后送至數(shù)據(jù)轉(zhuǎn)發(fā)用 戶模塊,由網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包LibPcap的發(fā)送函數(shù)進行數(shù)據(jù)轉(zhuǎn)發(fā)。在本發(fā)明中,大多無 需進行分析處理的數(shù)據(jù)避免了進入用戶空間的過程,并提交至后臺進行分析處理,減小了 網(wǎng)絡(luò)分析系統(tǒng)的開銷,提升了網(wǎng)絡(luò)分析系統(tǒng)的性能。
圖1是本發(fā)明數(shù)據(jù)快速捕獲與過濾轉(zhuǎn)發(fā)裝置一種具體實施方式
原理框圖;圖2是本發(fā)明的數(shù)據(jù)捕獲內(nèi)核模塊的捕獲數(shù)據(jù)流程圖;圖3是本發(fā)明的數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模塊的轉(zhuǎn)發(fā)數(shù)據(jù)流程圖;圖4是本發(fā)明的數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器驅(qū)動程序修改部分的流程圖。
具體實施例方式下面結(jié)合附圖對本發(fā)明的具體實施方式
進行描述,以便本領(lǐng)域的技術(shù)人員更好地 理解本發(fā)明。需要特別提醒注意的是,在以下的描述中,當已知功能和設(shè)計的詳細描述也許 會淡化本發(fā)明的主要內(nèi)容時,這些描述在這里將被忽略。實施例圖1是本發(fā)明數(shù)據(jù)快速捕獲與過濾轉(zhuǎn)發(fā)裝置一種具體實施方式
原理框圖。在本實施例中,如圖1所示,數(shù)據(jù)快速捕獲與過濾轉(zhuǎn)發(fā)裝置包括數(shù)據(jù)捕獲內(nèi)核模 塊201、數(shù)據(jù)過濾模塊202、數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模塊203、數(shù)據(jù)捕獲用戶模塊204、數(shù)據(jù)轉(zhuǎn)發(fā)用戶 模塊205。其中,數(shù)據(jù)捕獲內(nèi)核模塊201、數(shù)據(jù)過濾模塊202、數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模塊203運行于 Linux內(nèi)核空間;數(shù)據(jù)捕獲用戶模塊204、數(shù)據(jù)轉(zhuǎn)發(fā)用戶模塊205運行于Linux用戶空間。數(shù)據(jù)捕獲內(nèi)核模塊201通過在接收數(shù)據(jù)網(wǎng)絡(luò)適配器驅(qū)動程序中開啟一個單獨的 接口,對接收數(shù)據(jù)網(wǎng)絡(luò)適配器處理完的數(shù)據(jù)進入接管,捕獲數(shù)據(jù);數(shù)據(jù)過濾模塊202對數(shù)據(jù) 捕獲內(nèi)核模塊201捕獲的數(shù)據(jù)進行分類判斷,將數(shù)據(jù)分為兩類一是無需進行分析處理的 數(shù)據(jù),二是需要進行分析處理的數(shù)據(jù);對無需進行分析處理的數(shù)據(jù)提交給數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模 塊203通過數(shù)據(jù)發(fā)送網(wǎng)絡(luò)適配器轉(zhuǎn)發(fā)至網(wǎng)絡(luò)3中,對需要進行分析處理的數(shù)據(jù),以skb指針 的形式返回接收數(shù)據(jù)網(wǎng)絡(luò)適配器驅(qū)動程序,通過網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包LibPcap將數(shù)據(jù)向 數(shù)據(jù)捕獲用戶模塊204提交;數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模塊203對數(shù)據(jù)過濾模塊202提交的無需進行 分析處理的數(shù)據(jù)直接通過數(shù)據(jù)發(fā)送網(wǎng)絡(luò)適配器轉(zhuǎn)發(fā)至網(wǎng)絡(luò)3中。數(shù)據(jù)捕獲用戶模塊204接收數(shù)據(jù)捕獲內(nèi)核模塊201捕獲并經(jīng)數(shù)據(jù)過濾模塊202判 斷為需要進行分析處理的數(shù)據(jù),然后提交至后臺1進行分析處理;數(shù)據(jù)轉(zhuǎn)發(fā)用戶模塊205, 對經(jīng)后臺1處理后的捕獲數(shù)據(jù)進行接收,按需求進行標識,通過網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包LibPcap提供的數(shù)據(jù)幀發(fā)送函數(shù)將數(shù)據(jù),經(jīng)數(shù)據(jù)發(fā)送網(wǎng)絡(luò)適配器轉(zhuǎn)發(fā)至網(wǎng)絡(luò)3中。在本發(fā)明中,如圖1所示,數(shù)據(jù)快速捕獲與過濾轉(zhuǎn)發(fā)裝置運行于Linux內(nèi)核空間與 Linux用戶空間,并通過網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包LibPcap進行數(shù)據(jù)交換,簡化了本發(fā)明數(shù)據(jù) 快速捕獲與過濾轉(zhuǎn)發(fā)裝置的結(jié)構(gòu)。在本實施例中,數(shù)據(jù)網(wǎng)絡(luò)適配器為Intel 82751網(wǎng)絡(luò)適配器,對Intel elOOOe網(wǎng) 絡(luò)適配器驅(qū)動程序分析可知,網(wǎng)絡(luò)適配器驅(qū)動程序在將數(shù)據(jù)處理完成之后,將數(shù)據(jù)提交到 系統(tǒng)時所執(zhí)行的函數(shù)是el000_receive_skb。則對驅(qū)動程序進行修改在el000_receive_ skb函數(shù)之前插入數(shù)據(jù)捕獲內(nèi)核模塊201所提供的接口函數(shù),令數(shù)據(jù)進入數(shù)據(jù)捕獲內(nèi)核模 塊201。這樣,數(shù)據(jù)捕獲內(nèi)核模塊201通過在接收數(shù)據(jù)網(wǎng)絡(luò)適配器驅(qū)動程序中開啟一個單獨 的接口,對接收數(shù)據(jù)網(wǎng)絡(luò)適配器處理完的數(shù)據(jù)進入接管,捕獲數(shù)據(jù)。數(shù)據(jù)過濾模塊202運行于Linux內(nèi)核空間中,其功能為對由數(shù)據(jù)捕獲內(nèi)核模塊201 進入的數(shù)據(jù)進行分類判斷,數(shù)據(jù)將被分為兩種類型其一是無需進行分析處理的數(shù)據(jù),其二 是需要進行分析處理的數(shù)據(jù)。在分類后,數(shù)據(jù)過濾模塊202將根據(jù)數(shù)據(jù)類型的不同進行相 應(yīng)的處理。例如,需要進行分析處理的數(shù)據(jù)為SIP信令,則對于一個由數(shù)據(jù)捕獲內(nèi)核模塊 201進入的數(shù)據(jù)幀,首先通過MAC幀首部的類型字段判斷其是否為IP分組;若否則直接返 回判斷結(jié)果(本例中對于“否”的結(jié)果皆如此,不再贅述),若是再通過IP分組首部的協(xié)議 字段判斷其是否為UDP報文;若是再將數(shù)據(jù)指針移動至UDP首部后的數(shù)據(jù)字段,根據(jù)關(guān)鍵字 對SIP協(xié)議進行判斷。數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模塊203的功能是對經(jīng)由數(shù)據(jù)過濾模塊202判斷后無需進行分析處 理的數(shù)據(jù)進行直接通過數(shù)據(jù)發(fā)送網(wǎng)絡(luò)適配器轉(zhuǎn)發(fā)。在本實施例中,其采用的方式為在數(shù)據(jù) 過濾模塊202進行判斷后,修改數(shù)據(jù)中的目的網(wǎng)絡(luò)適配器指針,使其指向數(shù)據(jù)發(fā)送網(wǎng)絡(luò)適 配器,再調(diào)用Linux內(nèi)核所提供的函數(shù),直接將數(shù)據(jù)加入到數(shù)據(jù)發(fā)送網(wǎng)絡(luò)適配器發(fā)送隊列 進行發(fā)送。數(shù)據(jù)捕獲用戶模塊204的功能是對經(jīng)由運行于內(nèi)核空間中的數(shù)據(jù)過濾模塊202判 斷為需要處理的數(shù)據(jù)進行接收,其使用網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包LibPcap從內(nèi)核空間中獲取 需進行處理的數(shù)據(jù)。該模塊還將數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器設(shè)置為混雜模式,網(wǎng)絡(luò)數(shù)據(jù)包捕獲函 數(shù)包LibPcap提供的開啟設(shè)備捕獲句柄的函數(shù)提供了將數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器設(shè)置為混雜 模式的功能。若未將數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器設(shè)置為混雜模式,數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器將濾掉所 有目的MAC地址為非本機或廣播地址的數(shù)據(jù)幀。數(shù)據(jù)轉(zhuǎn)發(fā)用戶模塊205的功能是對經(jīng)過分析處理后的數(shù)據(jù)進行發(fā)送。該模塊基于 網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包LibPcap完成,采用的方式為,接收到經(jīng)過分析處理后的數(shù)據(jù)幀,根 據(jù)附帶的需求標識,調(diào)用LibPcap提供的數(shù)據(jù)幀發(fā)送函數(shù),將數(shù)據(jù)幀經(jīng)由數(shù)據(jù)發(fā)送網(wǎng)絡(luò)適 配器進行發(fā)送至網(wǎng)絡(luò)3中。從圖1,我們可以看出大多無需進行分析處理的數(shù)據(jù)直接通過數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模塊 203直接轉(zhuǎn)發(fā),避免了進入用戶空間的過程,并提交至后臺進行分析處理,減小了網(wǎng)絡(luò)分析 系統(tǒng)的開銷,從而提升了網(wǎng)絡(luò)分析系統(tǒng)的性能。圖2是本發(fā)明的數(shù)據(jù)捕獲內(nèi)核模塊捕獲數(shù)據(jù)的流程圖。數(shù)據(jù)捕獲內(nèi)核模塊201是本發(fā)明與原有驅(qū)動程序的接口,其捕獲數(shù)據(jù)的流程為al 從數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器驅(qū)動程序捕獲數(shù)據(jù)幀;
a2 數(shù)據(jù)到達后,首先調(diào)用is_Valid_ether_addr函數(shù)對數(shù)據(jù)幀的源MAC地址進 行檢查,以判斷其是否為有效的數(shù)據(jù)幀;該函數(shù)的功能是檢查源MAC地址,以確保其不是 00 00 00 00 00 00、FF FF FF FF FF FF或多播地址,若源MAC地址為有效地址進入步驟 a3,無效地址則進入步驟a5 ;a3 使用Skb_Share_CheCk函數(shù)對套接字緩沖區(qū)單元skb是否為共享狀態(tài)進行判 斷;由于在程序中會對套接字緩沖區(qū)單元skb的內(nèi)容進行修改,則需判斷是否有其他模塊 共享使用該套接字緩沖區(qū)單元skb。skb_share_check函數(shù)的類型為struct sk_buff*型, 返回值為一個指向套接字緩沖區(qū)單元的指針。該函數(shù)用于判斷一個skb是否為共享狀態(tài), 若是則對該skb進行復(fù)制,返回復(fù)制后的skb的指針,以便于對其進行修改;若不是共享狀 態(tài)則返回原skb的指針;a4:數(shù)據(jù)已進入數(shù)據(jù)捕獲內(nèi)核模塊201,數(shù)據(jù)捕獲內(nèi)核模塊201的工作便完成了, 此處需要將數(shù)據(jù)送入數(shù)據(jù)過濾模塊202 ;a5 數(shù)據(jù)幀的源MAC地址為無效地址,數(shù)據(jù)捕獲內(nèi)核模塊201則執(zhí)行kfree_skb函 數(shù)直接將其丟棄。圖3是本發(fā)明的數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模塊的轉(zhuǎn)發(fā)數(shù)據(jù)流程圖。在本實施例中,如圖3所示,數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模塊203的功能為對經(jīng)由數(shù)據(jù)過濾模塊 判斷的無需處理的數(shù)據(jù)進行高速轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)流程為bl 對其中的目的網(wǎng)絡(luò)適配器地址進行修改;由于經(jīng)由數(shù)據(jù)過濾模塊處理后的數(shù) 據(jù)為套接字緩沖區(qū)單元skb,它是一個sturct sk_buff*類型的結(jié)構(gòu)體指針,其中skb- > dev的項指向網(wǎng)絡(luò)設(shè)備,該項是一個struct net_device*類型的結(jié)構(gòu)體指針,保存數(shù)據(jù)捕 獲網(wǎng)絡(luò)適配器的信息。在轉(zhuǎn)發(fā)時,需將該設(shè)備項修改成為數(shù)據(jù)轉(zhuǎn)發(fā)網(wǎng)絡(luò)適配器。例如,某 skb- > dev項指向數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器devl,則在此時須將skb- > dev的值改為數(shù)據(jù)轉(zhuǎn) 發(fā)網(wǎng)絡(luò)適配器dev2;b2 對IP校驗和狀態(tài)進行修改,此時調(diào)用了 skb_f0rWard_Csum函數(shù),其工作是將 IP校驗和狀態(tài)修改成為“未進行”。由于我們在數(shù)據(jù)鏈路層進行數(shù)據(jù)轉(zhuǎn)發(fā),故無需判斷IP校 驗和的狀態(tài);但在進行發(fā)送時,該校驗和狀態(tài)應(yīng)被標記為“未進行”;b3:對所要發(fā)送的數(shù)據(jù)函數(shù)進行長度判斷,若數(shù)據(jù)長度大于設(shè)備MTU(Maximum Transmission Unit,最大傳輸單元)則無法進行轉(zhuǎn)發(fā),進入步驟b6 ;當進行數(shù)據(jù)幀捕獲、轉(zhuǎn) 發(fā)的兩個網(wǎng)絡(luò)適配器并非同類時,則可能出現(xiàn)此問題;若未大于MTU,則進入步驟b4 ;b4 在判斷無誤后則將數(shù)據(jù)中skb- > data的指針前移16個字節(jié),指向MAC的首 部。由于數(shù)據(jù)捕獲內(nèi)核模塊在從數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器獲得數(shù)據(jù)時,數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器提 供的skb中,data項直接指向IP首部。但所有的數(shù)據(jù)都存在于skb中,數(shù)據(jù)指針可以自由 前后移動。在發(fā)送時,data指針向前移動16字節(jié)指向MAC首部,進行發(fā)送。MAC首部的實 際長度為14字節(jié),此處卻進行16字節(jié)的移動,其目的是進行首部對齊。b5 將skb送入系統(tǒng)的發(fā)送隊列進行數(shù)據(jù)發(fā)送,調(diào)用Linux內(nèi)核提供的dev_ queue_xmit函數(shù)。該函數(shù)對skb進行排隊,最終調(diào)用網(wǎng)絡(luò)適配器驅(qū)動程序進行數(shù)據(jù)傳輸。b6 需進行丟棄處理,即執(zhí)行kfree_skb函數(shù)。圖4是本發(fā)明的數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器驅(qū)動程序修改部分的流程圖。為配合數(shù)據(jù)捕獲內(nèi)核模塊201和數(shù)據(jù)過濾模塊202對數(shù)據(jù)幀處理的需要,在本實施例中,對數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器驅(qū)動程序進行了修改。如圖4所示,由于需從數(shù)據(jù)捕獲網(wǎng)絡(luò) 適配器的驅(qū)動程序獲得數(shù)據(jù)幀,故需在驅(qū)動程序中插入相應(yīng)的接口函數(shù),使數(shù)據(jù)進入數(shù)據(jù) 捕獲內(nèi)核模塊201,數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器驅(qū)動程序修改部分為cl 將數(shù)據(jù)交給數(shù)據(jù)捕獲內(nèi)核模塊201的接口函數(shù)br_handle_frame ;c2 對其返回值進行判斷,若返回值為NULL則進入步驟c3 ;若返回值為指向skb 的指針,則進入步驟c4;c3 繼續(xù)進行數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器驅(qū)動程序的流程,更新計數(shù)器;c4 調(diào)用el000_receiVe_skb函數(shù)對skb進行接收,使得網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包 LibPcap能夠接收到數(shù)據(jù)。盡管上面對本發(fā)明說明性的具體實施方式
進行了描述,以便于本技術(shù)領(lǐng)的技術(shù)人 員理解本發(fā)明,但應(yīng)該清楚,本發(fā)明不限于具體實施方式
的范圍,對本技術(shù)領(lǐng)域的普通技術(shù) 人員來講,只要各種變化在所附的權(quán)利要求限定和確定的本發(fā)明的精神和范圍內(nèi),這些變 化是顯而易見的,一切利用本發(fā)明構(gòu)思的發(fā)明創(chuàng)造均在保護之列。
權(quán)利要求
一種數(shù)據(jù)快速捕獲與過濾轉(zhuǎn)發(fā)裝置,其特征在于,包括一數(shù)據(jù)捕獲內(nèi)核模塊,運行于Linux內(nèi)核空間,其通過在接收數(shù)據(jù)網(wǎng)絡(luò)適配器驅(qū)動程序中開啟一個單獨的接口,對接收數(shù)據(jù)網(wǎng)絡(luò)適配器處理完的數(shù)據(jù)進入接管,捕獲數(shù)據(jù);一數(shù)據(jù)過濾模塊,運行于Linux內(nèi)核空間,對數(shù)據(jù)捕獲內(nèi)核模塊捕獲的數(shù)據(jù)進行分類判斷,將數(shù)據(jù)分為兩類一是無需進行分析處理的數(shù)據(jù),二是需要進行分析處理的數(shù)據(jù);對無需進行分析處理的數(shù)據(jù)提交給數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模塊通過數(shù)據(jù)發(fā)送網(wǎng)絡(luò)適配器轉(zhuǎn)發(fā),對需要進行分析處理的數(shù)據(jù),以skb指針的形式返回接收數(shù)據(jù)網(wǎng)絡(luò)適配器驅(qū)動程序,通過網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包LibPcap將數(shù)據(jù)向數(shù)據(jù)捕獲用戶模塊提交;一數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模塊,運行于Linux內(nèi)核空間,對數(shù)據(jù)過濾模塊提交的無需進行分析處理的數(shù)據(jù)直接通過數(shù)據(jù)發(fā)送網(wǎng)絡(luò)適配器轉(zhuǎn)發(fā);一數(shù)據(jù)捕獲用戶模塊,運行于Linux用戶空間,用于接收數(shù)據(jù)捕獲內(nèi)核模塊捕獲并經(jīng)數(shù)據(jù)過濾模塊判斷為需要進行分析處理的數(shù)據(jù),然后提交至后臺進行分析處理;一數(shù)據(jù)轉(zhuǎn)發(fā)用戶模塊,運行于Linux用戶空間,對經(jīng)后臺處理后的捕獲數(shù)據(jù)進行接收,按需求進行標識,通過網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包LibPcap提供的數(shù)據(jù)幀發(fā)送函數(shù)將數(shù)據(jù),經(jīng)數(shù)據(jù)發(fā)送網(wǎng)絡(luò)適配器轉(zhuǎn)發(fā)。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)快速捕獲與過濾轉(zhuǎn)發(fā)裝置,其特征在于,所述的捕獲數(shù) 據(jù)流程為al 從數(shù)據(jù)捕獲網(wǎng)絡(luò)適配器驅(qū)動程序捕獲數(shù)據(jù)幀;a2 數(shù)據(jù)到達后,首先調(diào)用is_valid_ether_addr函數(shù)對數(shù)據(jù)幀的源MAC地址進行檢 查,以判斷其是否為有效的數(shù)據(jù)幀,若源MAC地址為有效地址進入步驟a3,無效地址則進入 步驟a5 ;a3 使用Skb_Share_CheCk函數(shù)對套接字緩沖區(qū)單元skb是否為共享狀態(tài)進行判斷,若 是則對該skb進行復(fù)制,返回復(fù)制后的skb的指針,以便于對其進行修改;若不是共享狀態(tài) 則返回原skb的指針;a4:數(shù)據(jù)已進入數(shù)據(jù)捕獲內(nèi)核模塊,數(shù)據(jù)捕獲內(nèi)核模塊的工作便完成了,此處需要將數(shù) 據(jù)送入數(shù)據(jù)過濾模塊;a5 數(shù)據(jù)幀的源MAC地址為無效地址,數(shù)據(jù)捕獲內(nèi)核模塊201則執(zhí)行kfree_skb函數(shù)直 接將其丟棄。
3.根據(jù)權(quán)利要求1所述的數(shù)據(jù)快速捕獲與過濾轉(zhuǎn)發(fā)裝置,其特征在于,所述的轉(zhuǎn)發(fā)流 程為bl 對其中的目的網(wǎng)絡(luò)適配器地址進行修改由于經(jīng)由數(shù)據(jù)過濾模塊處理后的數(shù)據(jù)中 skb- > dev項指向的網(wǎng)絡(luò)設(shè)備,修改成為數(shù)據(jù)轉(zhuǎn)發(fā)網(wǎng)絡(luò)適配器;b2 對IP校驗和狀態(tài)進行修改將該校驗和狀態(tài)標記為“未進行”; b3 對所要發(fā)送的數(shù)據(jù)函數(shù)進行長度判斷,若數(shù)據(jù)長度大于設(shè)備最大傳輸單元,則無法 進行轉(zhuǎn)發(fā);若未大于設(shè)備最大傳輸單元,則進入步驟b4 ;b4 在判斷無誤后則將數(shù)據(jù)中skb- > data的指針前移16個字節(jié),指向MAC的首部進 行發(fā)送;b5 將skb送入系統(tǒng)的發(fā)送隊列進行數(shù)據(jù)發(fā)送,調(diào)用Linux內(nèi)核提供的deV_qUeUe_ xmit函數(shù)。該函數(shù)對skb進行排隊,最終調(diào)用網(wǎng)絡(luò)適配器驅(qū)動程序進行數(shù)據(jù)傳輸;b6 需進行丟棄處理,即執(zhí)行kfree_skb函數(shù)。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)快速捕獲與過濾轉(zhuǎn)發(fā)裝置,數(shù)據(jù)由數(shù)據(jù)捕獲內(nèi)核模塊進入,然后由數(shù)據(jù)過濾模塊進行判斷,根據(jù)數(shù)據(jù)過濾模塊的判斷結(jié)果,進行相應(yīng)的處理對于無需進行分析處理的數(shù)據(jù),直接送至數(shù)據(jù)轉(zhuǎn)發(fā)內(nèi)核模塊進行數(shù)據(jù)轉(zhuǎn)發(fā);對于需要進行分析處理的數(shù)據(jù),通過網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包LibPcap進入數(shù)據(jù)捕獲用戶模塊,由其將數(shù)據(jù)送入后臺系統(tǒng)進行處理,待處理完畢后送至數(shù)據(jù)轉(zhuǎn)發(fā)用戶模塊,由網(wǎng)絡(luò)數(shù)據(jù)包捕獲函數(shù)包LibPcap的發(fā)送函數(shù)進行數(shù)據(jù)轉(zhuǎn)發(fā)。在本發(fā)明中,大多無需進行分析處理的數(shù)據(jù)避免了進入用戶空間的過程,并提交至后臺進行分析處理,減小了網(wǎng)絡(luò)分析系統(tǒng)的開銷,提升了網(wǎng)絡(luò)分析系統(tǒng)的性能。
文檔編號H04L29/06GK101997871SQ201010288668
公開日2011年3月30日 申請日期2010年9月21日 優(yōu)先權(quán)日2010年9月21日
發(fā)明者孫健, 王春厚, 董青, 許都, 隆克平, 馬卉慧 申請人:電子科技大學(xué)