專利名稱:正則表達(dá)式匹配系統(tǒng)及匹配方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)安全技術(shù)領(lǐng)域,尤其涉及一種正則表達(dá)式匹配系統(tǒng)及匹配方法。
背景技術(shù):
基于正則表達(dá)式的模式匹配,簡稱正則表達(dá)式匹配,是深度檢測防火墻(De印 Inspection Firewall)、網(wǎng)絡(luò)入侵檢測/防御系統(tǒng)(NIDS/NIPS)、統(tǒng)一威脅管理(UTM)等安全網(wǎng)關(guān)系統(tǒng)的關(guān)鍵組成部分和核心技術(shù)所在。正則表達(dá)式匹配通過檢查和處理OSI網(wǎng)絡(luò)協(xié)議的L4層之上的網(wǎng)包載荷O^yload)來對網(wǎng)包進(jìn)行監(jiān)控或者過濾。正則表達(dá)式匹配主要通過確定型有窮自動機(jī)(DFA)和非確定型有窮自動機(jī)(NFA) 兩種數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)。DFA匹配速度快,但內(nèi)存占用過高,對于不少復(fù)雜的正則表達(dá)式規(guī)則或者大規(guī)模的正則表達(dá)式規(guī)則集合DFA會發(fā)生狀態(tài)爆炸從而根本無法構(gòu)造出;NFA內(nèi)存占用小,但匹配速度極慢,在多核或通用處理器平臺上根本不能滿足實(shí)際的網(wǎng)絡(luò)處理要求。目前工業(yè)界在正則表達(dá)式匹配上普遍沒有好的解決方案,其方法和面臨的瓶頸主要是1)利用學(xué)術(shù)界提出的規(guī)則分組思想,將一個集合中的正則表達(dá)式規(guī)則分成多組,每一組正則表達(dá)式規(guī)則分別構(gòu)造出對應(yīng)的滿足一定內(nèi)存占用大小的DFA,用多個DFA來進(jìn)行正則表達(dá)式匹配,但這無法解決不少規(guī)則單條就會造成DFA狀態(tài)爆炸的問題,也無法解決大規(guī)模情況下分組DFA太多而造成匹配性能過低的問題;2)為了保證一定的正則表達(dá)式匹配性能,改動正則表達(dá)式規(guī)則的語義以避免生成狀態(tài)爆炸的DFA,大大犧牲了正則表達(dá)式規(guī)則所描述特征的精確性;3)提取正則表達(dá)式規(guī)則中的近似精確串的部分作為預(yù)過濾規(guī)則, 將一個集合中所有正則表達(dá)式規(guī)則對應(yīng)的預(yù)過濾規(guī)則構(gòu)造成DFA作為預(yù)過濾器,而將原來的正則表達(dá)式規(guī)則集合構(gòu)造成NFA作為匹配引擎,通過預(yù)過濾器來過濾到大部分確定不匹配的內(nèi)容,而只將疑似匹配的內(nèi)容傳給匹配引擎做精確匹配,但這無法保證匹配性能,好壞完全決定于匹配引擎是否被觸發(fā)。而在學(xué)術(shù)界,關(guān)于正則表達(dá)式匹配的研究也非常熱門,代表性的方法如基于
FPGA 平-Q勺 NFA ^“卞去R.Si 此u an^ V. K. Prasanna, "Fast Regular Expression Matching using FPGAs, “ Proc of IEEE FCCM,2001
J^貝貝ij^v^^^"卞去F. Yu,X. Chen,Y. Diao,Τ. V. Lakshman,and E. H. Katz, "Fast and Memory-efficient Regular Expression Matching for Deep Packet Inspection, “ Proc. of ACM/IEEE ANCS,2006DFA 壓縮方法Y.^,K' Wang' Fong' Y- Xue' J.Li,W. Jiang, and V. Prasanna, "FEACAN :Front-end Acceleration for Content-aware Network Processing, “ Proc of IEEE INF0C0M,2011
卞節(jié)^Afc開丨J自 ^J 機(jī)方法Μ. Becchi and P. Crowley, "A Hybri Finite Automaton for Practical Deep Packet Inspection, "Proc. of ACM CoNEXT,2007以及 ^ffJ自卞去[R. Smith, C. Estan, S. Jha, and S. Kong, "Deflating the Big Bang :Fast and Scalable Deep Packet Inspection
with Extended Finite Automata, "Proc. of ACM SIGC0MM,2008·,j日 i 目—禾中己公開的^去可以實(shí)際全胃地
解決正則表達(dá)式匹配存在的上述問題。
發(fā)明內(nèi)容
(一)要解決的技術(shù)問題本發(fā)明要解決的技術(shù)問題是提供一種正則表達(dá)式匹配系統(tǒng)及匹配方法,其能夠提高正則表達(dá)式匹配的速度,并且具有較強(qiáng)的擴(kuò)展性。( 二 )技術(shù)方案為解決上述問題,本發(fā)明提供了一種正則表達(dá)式匹配系統(tǒng),包括預(yù)處理單元、匹配單元和轉(zhuǎn)發(fā)單元,所述預(yù)處理單元對正則表達(dá)式規(guī)則集合中的規(guī)則進(jìn)行拆分,根據(jù)拆分結(jié)果構(gòu)造正則表達(dá)式匹配引擎并發(fā)送給所述匹配單元,所述匹配單元通過正則表達(dá)式匹配引擎對輸入網(wǎng)包進(jìn)行正則表達(dá)式匹配處理,輸出匹配結(jié)果給轉(zhuǎn)發(fā)單元,由轉(zhuǎn)發(fā)單元實(shí)現(xiàn)網(wǎng)包的存儲轉(zhuǎn)發(fā)。優(yōu)選地,所述預(yù)處理單元包括第一預(yù)處理模塊,用于對正則表達(dá)式規(guī)則進(jìn)行拆分。優(yōu)選地,所述預(yù)處理單元包括第二預(yù)處理模塊,用于構(gòu)造正則表達(dá)式匹配引擎并發(fā)送給所述匹配單元。優(yōu)選地,所述第一預(yù)處理模塊包括用于對輸入的正則表達(dá)式規(guī)則集合進(jìn)行規(guī)范化處理的規(guī)范化處理模塊,用于對規(guī)范化的正則表達(dá)式規(guī)則集合進(jìn)行規(guī)則標(biāo)記的規(guī)則標(biāo)記模塊,以及用于對標(biāo)記好的正則表達(dá)式規(guī)則集合進(jìn)行規(guī)則拆分的規(guī)則拆分模塊。優(yōu)選地,所述第二預(yù)處理模塊包括用于為拆分生成的正則表達(dá)式子規(guī)則集合構(gòu)造數(shù)據(jù)結(jié)構(gòu)的子規(guī)則數(shù)據(jù)結(jié)構(gòu)模塊,用于為拆分生成的正則表達(dá)式子規(guī)則索引文件構(gòu)造數(shù)據(jù)結(jié)構(gòu)的索引文件數(shù)據(jù)結(jié)構(gòu)模塊,以及用于根據(jù)所述兩數(shù)據(jù)結(jié)構(gòu)模塊構(gòu)造正則表達(dá)式匹配引擎的匹配引擎構(gòu)造模塊。優(yōu)選地,所述匹配單元包括向匹配單元輸入網(wǎng)包的輸入模塊,通過正則表達(dá)式匹配引擎對輸入網(wǎng)包數(shù)據(jù)按字符進(jìn)行匹配的正則表達(dá)式匹配模塊,以及輸出正則表達(dá)式匹配結(jié)果給轉(zhuǎn)發(fā)單元的輸出模塊。一種利用前述系統(tǒng)進(jìn)行正則表達(dá)式匹配的方法,包括以下步驟A 預(yù)處理單元對正則表達(dá)式規(guī)則集合中的規(guī)則進(jìn)行拆分生成正則表達(dá)式子規(guī)則集合,以及對應(yīng)的正則表達(dá)式子規(guī)則索引文件;B:預(yù)處理單元根據(jù)所述正則表達(dá)式子規(guī)則集合和正則表達(dá)式子規(guī)則索引文件構(gòu)造正則表達(dá)式匹配引擎并發(fā)送給所述匹配單元;C 匹配單元通過正則表達(dá)式匹配引擎對輸入網(wǎng)包進(jìn)行正則表達(dá)式匹配;D 匹配單元輸出匹配結(jié)果并發(fā)送給轉(zhuǎn)發(fā)單元。優(yōu)選地,所述步驟A,進(jìn)一步包括Al 對輸入的正則表達(dá)式規(guī)則集合進(jìn)行規(guī)范化處理得到規(guī)范化正則表達(dá)式規(guī)則集合;A2 對規(guī)范化正則表達(dá)式規(guī)則集合中每條規(guī)則的拆分依據(jù)進(jìn)行標(biāo)記;A3:根據(jù)所述標(biāo)記對規(guī)范化正則表達(dá)式規(guī)則集合中的規(guī)則逐條進(jìn)行拆分。優(yōu)選地,所述步驟B,進(jìn)一步包括Bl 為拆分生成的正則表達(dá)式子規(guī)則集合構(gòu)造數(shù)據(jù)結(jié)構(gòu);B2 為拆分生成的正則表達(dá)式子規(guī)則索引文件構(gòu)造數(shù)據(jù)結(jié)構(gòu);B3 根據(jù)所述兩數(shù)據(jù)結(jié)構(gòu)構(gòu)造正則表達(dá)式匹配引擎。優(yōu)選地,所述步驟C,進(jìn)一步包括Cl 向匹配單元輸入網(wǎng)包數(shù)據(jù);C2 通過正則表達(dá)式匹配引擎對輸入網(wǎng)包數(shù)據(jù)按字符進(jìn)行匹配。
(三)有益效果本發(fā)明正則表達(dá)式匹配系統(tǒng)及方法,通過拆分正則表達(dá)式規(guī)則這一核心思想,將原正則表達(dá)式規(guī)則集合中會引起DFA狀態(tài)爆炸的規(guī)則拆分成了不會引起DFA狀態(tài)爆炸的子規(guī)則;同時構(gòu)造出的DFA匹配引擎在數(shù)據(jù)結(jié)構(gòu)描述上等價于原規(guī)則集合;最后通過設(shè)計(jì)子規(guī)則的匹配方法,實(shí)現(xiàn)了等價于原規(guī)則語義的正則表達(dá)式匹配,且激活狀態(tài)數(shù)收斂并無限趨近于1。本發(fā)明匹配速度快,可以和DFA相比擬,并且基于多核處理器平臺的并行處理設(shè)計(jì)可以讓本方法實(shí)際地達(dá)到線速的匹配速度;本發(fā)明占用內(nèi)存很小,可以和NFA相比擬, 且與正則表達(dá)式規(guī)則集合的規(guī)模成線性關(guān)系,可擴(kuò)展性強(qiáng);本發(fā)明構(gòu)造速度快,預(yù)處理時間接近甚至優(yōu)于不拆分規(guī)則時的NFA構(gòu)造速度,能夠滿足實(shí)際處理中在規(guī)則更新時間上的需求。
圖1為本發(fā)明實(shí)施方式中所述正則表達(dá)式匹配系統(tǒng)的原理圖;圖2為本發(fā)明實(shí)施方式中所述進(jìn)行正則表達(dá)式匹配的方法流程圖;圖3為本發(fā)明實(shí)施方式中所述正則表達(dá)式匹配引擎在多核處理器平臺上運(yùn)行時的原理圖。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例,對本發(fā)明的具體實(shí)施方式
作進(jìn)一步詳細(xì)描述。以下實(shí)施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。如圖1所示,本發(fā)明所述的正則表達(dá)式匹配系統(tǒng),包括預(yù)處理單元、匹配單元和轉(zhuǎn)發(fā)單元,所述預(yù)處理單元對正則表達(dá)式規(guī)則集合中的規(guī)則進(jìn)行拆分,根據(jù)拆分結(jié)果構(gòu)造正則表達(dá)式匹配引擎并發(fā)送給所述匹配單元,所述匹配單元通過正則表達(dá)式匹配引擎對輸入網(wǎng)包進(jìn)行正則表達(dá)式匹配處理,輸出匹配結(jié)果給轉(zhuǎn)發(fā)單元,由轉(zhuǎn)發(fā)單元實(shí)現(xiàn)網(wǎng)包的存儲轉(zhuǎn)發(fā)。所述預(yù)處理單元包括第一預(yù)處理模塊,用于對正則表達(dá)式規(guī)則進(jìn)行拆分。所述第一預(yù)處理模塊包括用于對輸入的正則表達(dá)式規(guī)則集合進(jìn)行規(guī)范化處理的規(guī)范化處理模塊,用于對規(guī)范化的正則表達(dá)式規(guī)則集合進(jìn)行規(guī)則標(biāo)記的規(guī)則標(biāo)記模塊,以及用于對標(biāo)記好的正則表達(dá)式規(guī)則集合進(jìn)行規(guī)則拆分的規(guī)則拆分模塊。所述預(yù)處理單元包括第二預(yù)處理模塊,用于構(gòu)造正則表達(dá)式匹配引擎并發(fā)送給所述匹配單元。所述第二預(yù)處理模塊包括用于為拆分生成的正則表達(dá)式子規(guī)則集合構(gòu)造數(shù)據(jù)結(jié)構(gòu)的子規(guī)則數(shù)據(jù)結(jié)構(gòu)模塊,用于為拆分生成的正則表達(dá)式子規(guī)則索引文件構(gòu)造數(shù)據(jù)結(jié)構(gòu)的索引文件數(shù)據(jù)結(jié)構(gòu)模塊,以及用于根據(jù)所述兩數(shù)據(jù)結(jié)構(gòu)模塊構(gòu)造正則表達(dá)式匹配引擎的匹配引擎構(gòu)造模塊。所述匹配單元包括向匹配單元輸入網(wǎng)包的輸入模塊,通過正則表達(dá)式匹配引擎對輸入網(wǎng)包數(shù)據(jù)按字符進(jìn)行匹配的正則表達(dá)式匹配模塊,以及輸出正則表達(dá)式匹配結(jié)果給轉(zhuǎn)發(fā)單元的輸出模塊。如圖2所示,本發(fā)明所述的利用前述系統(tǒng)進(jìn)行正則表達(dá)式匹配的方法,包括以下步驟CN Α:預(yù)處理單元對正則表達(dá)式規(guī)則集合中的規(guī)則進(jìn)行拆分生成正則表達(dá)式子規(guī)則集合,以及對應(yīng)的正則表達(dá)式子規(guī)則索引文件;本步驟可通過以下步驟實(shí)現(xiàn)Al 對輸入的正則表達(dá)式規(guī)則集合進(jìn)行規(guī)范化處理得到規(guī)范化正則表達(dá)式規(guī)則集合;該步驟是針對輸入的正則表達(dá)式規(guī)則集合中,規(guī)則的編寫方式不適合直接進(jìn)行后續(xù)的規(guī)則標(biāo)記和拆分、或者規(guī)則的編寫方式可以進(jìn)一步優(yōu)化以提高最終的正則表達(dá)式匹配性能的情況。該步驟按照以下規(guī)范來對輸入的正則表達(dá)式規(guī)則集合進(jìn)行規(guī)范化處理(以下雙引號之間的“□”表示內(nèi)容,其他部分表示符號本身)規(guī)范1 一律用符號“.”表示包含了所有ASCII字符的字符集;規(guī)范2 —律用符號“ Γ □]”表示只排除了少數(shù)幾個ASCII字符的字符集,或者至少包含了所有大小寫字母的字符集;規(guī)范3 —律不用符號“[-□]”表示除規(guī)范1和規(guī)范2以外的字符集;規(guī)范4 一律用符號“*”表示任意次數(shù)的連續(xù)重復(fù);規(guī)范5 —律用符號“ + ”表示至少一次的連續(xù)重復(fù);規(guī)范6 —律用符號“? ”表示至多一次的連續(xù)重復(fù);規(guī)范7 —律用符號“ { □ } ”表示大于一次的限定次數(shù)的連續(xù)重復(fù),或者除規(guī)范5 以外的限定次數(shù)上限的有限連續(xù)重復(fù);規(guī)范8 一律用規(guī)范6和規(guī)范3的符號組合(規(guī)范6的符號在前)來表示除規(guī)范3 和規(guī)范4以外的限定次數(shù)下限的無限連續(xù)重復(fù);定義1 在規(guī)范1 8的基礎(chǔ)上,定義符號組合“.*”“ Γ □ ]*”“. +”“ Γ □ ]+”“. {□}”“[-□]{□}”為混沌因子,其中符號組合“.*” “. +”為隱性混沌因子,符號組合 "[“□ ]*” “Γ □ ]+”為中性混沌因子,符號組合“.{□}”“[-□]{ □ }”為顯性混沌因子;規(guī)范9 一律使規(guī)則中的混沌因子不在任何一對提高優(yōu)先級的括號“(□) ”內(nèi);規(guī)范10 —律去掉規(guī)則中不在任何一對提高優(yōu)先級的括號“(口)”內(nèi)的并規(guī)則符號“ I ”,轉(zhuǎn)換成規(guī)則號相同的多條獨(dú)立規(guī)則;規(guī)范11 一律以符號開頭表示錨定規(guī)則,未以符號開頭表示非錨定規(guī)則;定義2 定義在正則表達(dá)式語法規(guī)范的基礎(chǔ)上能夠表示出的對應(yīng)語法組合中最短的字符序列為語法單位;定義3 定義規(guī)則中被混沌因子隔開的至少為一個語法單位的規(guī)則片段為近似串;規(guī)范12(優(yōu)化規(guī)范)在滿足規(guī)范1 10的正則表達(dá)式規(guī)則集合中,對于每個位于中性和顯性混沌因子前面的近似串,優(yōu)化挑選其后綴連續(xù)的一部分,使得這部分近似串后綴片段滿足下面的原則。挑選出的近似串后綴片段將用括號“(口)”括起來。1)近似串存在;2)不包括本身是錨定規(guī)則前綴的近似串;3)挑選的近似串后綴片段不會因?yàn)榧由侠ㄌ枴?口)”而造成近似串本來的語法被
7破壞;4)對于本身是非錨定規(guī)則前綴的近似串、或者前面是隱性混沌因子的近似串,挑選的近似串后綴片段不能完全等于近似串本身而且要盡量短,默認(rèn)是近似串后綴的一個語法單位;5)對于前面是中性或顯性混沌因子的近似串,挑選的近似串后綴片段不能完全等于近似串本身而且要盡量長,默認(rèn)是去掉前綴一個語法單位的近似串;6)對于字符集不完全相同的混沌因子,對應(yīng)挑選的近似串后綴片段盡可能地相斥,即如果對應(yīng)的所有片段被錨定后兩兩之間編譯成DFA,兩片段的匹配狀態(tài)是不相同的兩個;7)對于字符集完全相同的混沌因子,對應(yīng)挑選的近似串后綴片段盡可能地相同, 即如果對應(yīng)的所有片段被錨定后兩兩之間編譯成DFA,兩片段的匹配狀態(tài)是相同的一個;經(jīng)過上述的規(guī)范化處理,可以得到一個規(guī)范統(tǒng)一且優(yōu)化的正則表達(dá)式規(guī)則集合。 正則表達(dá)式規(guī)則編寫者以后可以參考上述規(guī)范來編寫正則表達(dá)式規(guī)則,以實(shí)現(xiàn)高效且高性能的基于規(guī)則拆分的正則表達(dá)式匹配。A2 對規(guī)范化正則表達(dá)式規(guī)則集合中每條規(guī)則的拆分依據(jù)進(jìn)行標(biāo)記;該步驟旨在查找和標(biāo)記正則表達(dá)式規(guī)則集合中每條規(guī)則的拆分點(diǎn),以指示后續(xù)的規(guī)則拆分應(yīng)該在哪拆、如何拆。該步驟按照以下方法來對規(guī)范化的正則表達(dá)式規(guī)則集合中的規(guī)則進(jìn)行逐條標(biāo)記1)對于規(guī)則中沒有混沌因子的情況1. 1)非錨定規(guī)則在規(guī)則之前插入標(biāo)記α,完成規(guī)則標(biāo)記;1. 2)錨定規(guī)則在規(guī)則之前插入標(biāo)記β,完成規(guī)則標(biāo)記。2)對于規(guī)則中只有一個混沌因子的情況2. 1)非錨定規(guī)則在規(guī)則之前插入標(biāo)記α ;對于混沌因子2. 1. 1)如果是隱性混沌因子在混沌因子之前插入標(biāo)記α,完成規(guī)則標(biāo)記;2. 1. 2)如果是非隱性混沌因子如果混沌因子前面近似串長度僅為一個語法單位2. 1. 2. 1)如果是顯性混沌因子在混沌因子前面插入標(biāo)記、,完成規(guī)則標(biāo)記;2. 1. 2. 2)如果是中性混沌因子在混沌因子前面插入標(biāo)記δ,完成規(guī)則標(biāo)記;否則,在混沌因子前面近似串后綴的一個語法單位之前插入標(biāo)記β,完成規(guī)則標(biāo)記。2. 2)錨定規(guī)則
對于混沌因子2. 2. 1)如果是隱性混沌因子在規(guī)則之前插入標(biāo)記β ;在混沌因子之前插入標(biāo)記α,完成規(guī)則標(biāo)記;2. 2. 2)如果是非隱性混沌因子如果混沌因子前面沒有近似串2. 2. 2. 1)如果是顯性混沌因子在混沌因子前面插入標(biāo)記、,完成規(guī)則標(biāo)記;2. 2. 2. 2)如果是中性混沌因子在混沌因子前面插入標(biāo)記δ,完成規(guī)則標(biāo)記;否則,在規(guī)則之前插入標(biāo)記β,完成規(guī)則標(biāo)記。3)對于規(guī)則中至少有兩個混沌因子的情況從規(guī)則開頭到第一個混沌因子的處理等同情況2,但要繼續(xù)處理后續(xù)的混沌因子;從上一個混沌因子到下一個混沌因子之間的處理如下,直到下一個混沌因子不存在時完成規(guī)則標(biāo)記3. 1)如果上一個是隱性混沌因子,下一個是隱性混沌因子在下一個混沌因子前面插入標(biāo)記α,繼續(xù)后面的處理;3. 2)如果上一個是隱性混沌因子,下一個是非隱性混沌因子如果混沌因子前面近似串長度僅為一個語法單位3. 2. 1)如果下一個混沌因子是顯性混沌因子在下一個混沌因子前面插入標(biāo)記Y,繼續(xù)后面的處理;3. 2. 2)如果下一個混沌因子是中性混沌因子在下一個混沌因子前面插入標(biāo)記δ,繼續(xù)后面的處理;否則,在下一個混沌因子前面近似串后綴的一個語法單位之前插入標(biāo)記β,繼續(xù)后面的處理;3. 3)如果上一個是非隱性混沌因子,下一個是隱性混沌因子在下一個混沌因子前面插入標(biāo)記α,繼續(xù)后面的處理;3. 4)如果上一個是非隱性混沌因子,下一個是非隱性混沌因子在下一個混沌因子前面近似串后綴的一個語法單位之前插入標(biāo)記β,繼續(xù)后面的處理。經(jīng)過上述的規(guī)則標(biāo)記,可以得到一個標(biāo)記好的正則表達(dá)式規(guī)則集合,以實(shí)現(xiàn)有效的規(guī)則拆分。補(bǔ)充說明在高級正則表達(dá)式語法中,對于表示懶惰匹配的高級語法符號 “* ? ”“+ ? ”“ ?? ”“ { □丨? ”,在規(guī)則標(biāo)記中可以等價于“*”“ + ”“ ?”“ { □ } ”來處理;對于表示修改匹配模式的高級語法符號“\9口 \E""( i) ^ ( ? -i) ^ ( ? s)""( -s)”“(? m)”“(? -m)”“(? x)”“(? -m)”,在規(guī)則標(biāo)記中可以基于添加語法來處理。A3:根據(jù)所述標(biāo)記對規(guī)范化正則表達(dá)式規(guī)則集合中的規(guī)則逐條進(jìn)行拆分。該步驟旨在將正則表達(dá)式規(guī)則集合中的每條規(guī)則拆分成多條只含有原規(guī)則語法片段的子規(guī)則,并記錄子規(guī)則之間的對應(yīng)信息,以有效地構(gòu)造后續(xù)的正則表達(dá)式匹配引擎。該步驟按照以下方法來對作標(biāo)記的正則表達(dá)式規(guī)則集合中的規(guī)則進(jìn)行逐條拆分1)對于規(guī)則中只有一個標(biāo)記的情況不用拆分,將標(biāo)記后面的整個原規(guī)則作為一個子規(guī)則,該標(biāo)記就是該子規(guī)則的標(biāo)記,根據(jù)當(dāng)前的子規(guī)則數(shù)目設(shè)定其子規(guī)則號,并按照標(biāo)記將該子規(guī)則和其對應(yīng)的子規(guī)則號存入到相應(yīng)的子規(guī)則集合;同時在索引文件中記錄下在原規(guī)則中該子規(guī)則前一個子規(guī)則的子規(guī)則號(沒有時默認(rèn)為空),后一個子規(guī)則的標(biāo)記(沒有時默認(rèn)為空),該子規(guī)則是原規(guī)則的第幾部分,以及原規(guī)則的規(guī)則號;2)對于規(guī)則中至少有兩個標(biāo)記的情況2. 1)從上一個標(biāo)記到下一個標(biāo)記之間的處理如下,直到下一個標(biāo)記不存在時轉(zhuǎn)到情況2. 2處理將上一個標(biāo)記到下一個標(biāo)記之間的子規(guī)則從原規(guī)則中拆分出來,在開頭添加錨定符號“ ~ ”并去掉子規(guī)則中的冗余語法,在所有子規(guī)則集合中逐條查找與該子規(guī)則等價的子規(guī)則2. 1. 1)如果能查找到將等價子規(guī)則的子規(guī)則號作為該子規(guī)則的子規(guī)則號,繼續(xù)后面的處理;2. 1. 2)如果不能查找到根據(jù)當(dāng)前的子規(guī)則數(shù)目設(shè)定該子規(guī)則的子規(guī)則號,并按照上一個標(biāo)記將該子規(guī)則和其對應(yīng)的子規(guī)則號存入到相應(yīng)的子規(guī)則集合,該上一個標(biāo)記就是該子規(guī)則的標(biāo)記;同時在索引文件中記錄下在原規(guī)則中該子規(guī)則前一個子規(guī)則的子規(guī)則號,后一個子規(guī)則的標(biāo)記 (沒有時默認(rèn)為空),該子規(guī)則是原規(guī)則的第幾部分;繼續(xù)后面的處理;2. 2)對于最后一個標(biāo)記到規(guī)則結(jié)尾的處理將標(biāo)記后面的子規(guī)則從原規(guī)則中拆分出來,該標(biāo)記就是該子規(guī)則的標(biāo)記,在開頭添加錨定符號并去掉子規(guī)則中的冗余語法,根據(jù)當(dāng)前的子規(guī)則數(shù)目設(shè)定其子規(guī)則號,并按照標(biāo)記將該子規(guī)則和其對應(yīng)的子規(guī)則號存入到相應(yīng)的子規(guī)則集合;同時在索引文件中記錄下在原規(guī)則中該子規(guī)則前一個子規(guī)則的子規(guī)則號,后一個子規(guī)則的標(biāo)記(沒有時默認(rèn)為空),該子規(guī)則是原規(guī)則的第幾部分,以及原規(guī)則的規(guī)則號。經(jīng)過上述的規(guī)則拆分,可以生成K(K可能是1,2,3或4,由標(biāo)記的種數(shù)決定)個拆分后的正則表達(dá)式子規(guī)則集合,以及一個對應(yīng)的正則表達(dá)式子規(guī)則索引文件。實(shí)際上,K個正則表達(dá)式子規(guī)則集合可以通過不考慮標(biāo)記的差異而能夠彈性地合并為指定個數(shù)的子規(guī)
則集合。B:預(yù)處理單元根據(jù)所述正則表達(dá)式子規(guī)則集合和正則表達(dá)式子規(guī)則索引文件構(gòu)造正則表達(dá)式匹配引擎并發(fā)送給所述匹配單元;本步驟可通過以下步驟實(shí)現(xiàn)Bl 為拆分生成的正則表達(dá)式子規(guī)則集合構(gòu)造數(shù)據(jù)結(jié)構(gòu);該步驟按照以下流程來為拆分的正則表達(dá)式子規(guī)則集合進(jìn)行數(shù)據(jù)結(jié)構(gòu)的構(gòu)造1)將K個正則表達(dá)式子規(guī)則集分別構(gòu)造為K個DFA,每個DFA中對應(yīng)于某條子規(guī)則的匹配狀態(tài)記錄了輸出對應(yīng)子規(guī)則的子規(guī)則號;
10
2)可選擇利用和本發(fā)明正交的DFA優(yōu)化方法(背景技術(shù)中提到的方法)來進(jìn)一步優(yōu)化K個DFA。經(jīng)過上述的構(gòu)造,可以實(shí)現(xiàn)能夠處理每個正則表達(dá)式子規(guī)則的數(shù)據(jù)結(jié)構(gòu)。B2 為拆分生成的正則表達(dá)式子規(guī)則索引文件構(gòu)造數(shù)據(jù)結(jié)構(gòu);該步驟旨在將正則表達(dá)式子規(guī)則索引文件構(gòu)造成計(jì)算機(jī)能夠處理的數(shù)據(jù)結(jié)構(gòu)。該步驟按照以下流程來為拆分的正則表達(dá)式子規(guī)則索引文件進(jìn)行數(shù)據(jù)結(jié)構(gòu)的構(gòu)造1)將正則表達(dá)式子規(guī)則索引文件中的信息按照表1所示的關(guān)聯(lián)索引信息表示來構(gòu)造成矩陣數(shù)據(jù)結(jié)構(gòu);表權(quán)利要求
1.一種正則表達(dá)式匹配系統(tǒng),其特征在于,包括預(yù)處理單元、匹配單元和轉(zhuǎn)發(fā)單元, 所述預(yù)處理單元對正則表達(dá)式規(guī)則集合中的規(guī)則進(jìn)行拆分,根據(jù)拆分結(jié)果構(gòu)造正則表達(dá)式匹配引擎并發(fā)送給所述匹配單元,所述匹配單元通過正則表達(dá)式匹配引擎對輸入網(wǎng)包進(jìn)行正則表達(dá)式匹配處理,輸出匹配結(jié)果給轉(zhuǎn)發(fā)單元,由轉(zhuǎn)發(fā)單元實(shí)現(xiàn)網(wǎng)包的存儲轉(zhuǎn)發(fā)。
2.如權(quán)利要求1所述的正則表達(dá)式匹配系統(tǒng),其特征在于,所述預(yù)處理單元包括第一預(yù)處理模塊,用于對正則表達(dá)式規(guī)則進(jìn)行拆分。
3.如權(quán)利要求1所述的正則表達(dá)式匹配系統(tǒng),其特征在于,所述預(yù)處理單元包括第二預(yù)處理模塊,用于構(gòu)造正則表達(dá)式匹配引擎并發(fā)送給所述匹配單元。
4.如權(quán)利要求2所述的正則表達(dá)式匹配系統(tǒng),其特征在于,所述第一預(yù)處理模塊包括 用于對輸入的正則表達(dá)式規(guī)則集合進(jìn)行規(guī)范化處理的規(guī)范化處理模塊,用于對規(guī)范化的正則表達(dá)式規(guī)則集合進(jìn)行規(guī)則標(biāo)記的規(guī)則標(biāo)記模塊,以及用于對標(biāo)記好的正則表達(dá)式規(guī)則集合進(jìn)行規(guī)則拆分的規(guī)則拆分模塊。
5.如權(quán)利要求3所述的正則表達(dá)式匹配系統(tǒng),其特征在于,所述第二預(yù)處理模塊包括 用于為拆分生成的正則表達(dá)式子規(guī)則集合構(gòu)造數(shù)據(jù)結(jié)構(gòu)的子規(guī)則數(shù)據(jù)結(jié)構(gòu)模塊,用于為拆分生成的正則表達(dá)式子規(guī)則索引文件構(gòu)造數(shù)據(jù)結(jié)構(gòu)的索引文件數(shù)據(jù)結(jié)構(gòu)模塊,以及用于根據(jù)所述兩數(shù)據(jù)結(jié)構(gòu)模塊構(gòu)造正則表達(dá)式匹配引擎的匹配引擎構(gòu)造模塊。
6.如權(quán)利要求1所述的正則表達(dá)式匹配系統(tǒng),其特征在于,所述匹配單元包括向匹配單元輸入網(wǎng)包的輸入模塊,通過正則表達(dá)式匹配引擎對輸入網(wǎng)包數(shù)據(jù)按字符進(jìn)行匹配的正則表達(dá)式匹配模塊,以及輸出正則表達(dá)式匹配結(jié)果給轉(zhuǎn)發(fā)單元的輸出模塊。
7.一種利用權(quán)利要求1-6中任一項(xiàng)所述系統(tǒng)進(jìn)行正則表達(dá)式匹配的方法,其特征在于,包括以下步驟A 預(yù)處理單元對正則表達(dá)式規(guī)則集合中的規(guī)則進(jìn)行拆分生成正則表達(dá)式子規(guī)則集合, 以及對應(yīng)的正則表達(dá)式子規(guī)則索引文件;B:預(yù)處理單元根據(jù)所述正則表達(dá)式子規(guī)則集合和正則表達(dá)式子規(guī)則索引文件構(gòu)造正則表達(dá)式匹配引擎并發(fā)送給所述匹配單元;C 匹配單元通過正則表達(dá)式匹配引擎對輸入網(wǎng)包進(jìn)行正則表達(dá)式匹配; D 匹配單元輸出匹配結(jié)果并發(fā)送給轉(zhuǎn)發(fā)單元。
8.如權(quán)利要求7所述的進(jìn)行正則表達(dá)式匹配的方法,其特征在于,所述步驟A,進(jìn)一步包括Al 對輸入的正則表達(dá)式規(guī)則集合進(jìn)行規(guī)范化處理得到規(guī)范化正則表達(dá)式規(guī)則集合; A2 對規(guī)范化正則表達(dá)式規(guī)則集合中每條規(guī)則的拆分依據(jù)進(jìn)行標(biāo)記; A3:根據(jù)所述標(biāo)記對規(guī)范化正則表達(dá)式規(guī)則集合中的規(guī)則逐條進(jìn)行拆分。
9.如權(quán)利要求7所述的進(jìn)行正則表達(dá)式匹配的方法,其特征在于,所述步驟B,進(jìn)一步包括Bl 為拆分生成的正則表達(dá)式子規(guī)則集合構(gòu)造數(shù)據(jù)結(jié)構(gòu); B2 為拆分生成的正則表達(dá)式子規(guī)則索引文件構(gòu)造數(shù)據(jù)結(jié)構(gòu); B3 根據(jù)所述兩數(shù)據(jù)結(jié)構(gòu)構(gòu)造正則表達(dá)式匹配引擎。
10.如權(quán)利要求7所述的進(jìn)行正則表達(dá)式匹配的方法,其特征在于,所述步驟C,進(jìn)一步包括Cl 向匹配單元輸入網(wǎng)包數(shù)據(jù);C2 通過正則表達(dá)式匹配引擎對輸入網(wǎng)包數(shù)據(jù)按字符進(jìn)行匹配。
全文摘要
本發(fā)明公開了一種正則表達(dá)式匹配系統(tǒng)及匹配方法,涉及網(wǎng)絡(luò)安全技術(shù)領(lǐng)域,所述方法包括預(yù)處理單元、匹配單元和轉(zhuǎn)發(fā)單元,所述預(yù)處理單元對正則表達(dá)式規(guī)則集合中的規(guī)則進(jìn)行拆分,根據(jù)拆分結(jié)果構(gòu)造正則表達(dá)式匹配引擎并發(fā)送給所述匹配單元,所述匹配單元通過正則表達(dá)式匹配引擎對輸入網(wǎng)包進(jìn)行正則表達(dá)式匹配處理,輸出匹配結(jié)果給轉(zhuǎn)發(fā)單元,由轉(zhuǎn)發(fā)單元實(shí)現(xiàn)網(wǎng)包的存儲轉(zhuǎn)發(fā)。本發(fā)明匹配速度快,可以和DFA相比擬;本發(fā)明占用內(nèi)存很小,可以和NFA相比擬,且與正則表達(dá)式規(guī)則集合的規(guī)模成線性關(guān)系,可擴(kuò)展性強(qiáng);本發(fā)明構(gòu)造速度快,預(yù)處理時間接近甚至優(yōu)于不拆分規(guī)則時的NFA構(gòu)造速度,能夠滿足實(shí)際處理中在規(guī)則更新時間上的需求。
文檔編號G06F17/30GK102523219SQ20111042485
公開日2012年6月27日 申請日期2011年12月16日 優(yōu)先權(quán)日2011年12月16日
發(fā)明者亓亞烜, 李軍, 王凱 申請人:清華大學(xué)