本發(fā)明涉及計算機、大數(shù)據(jù)、模式匹配等
技術領域:
,特別涉及正則表達式匹配在服務器端對高速輸入數(shù)據(jù)的識別過濾系統(tǒng)。
背景技術:
:正則表達式是當前主流的字符串識別機制之一,正則表達式具有構造相對簡單,運行效率較高的特點,所以一般的字符串識別會使用正則表達式。正則表達式的軟件匹配通過多年的發(fā)展,以及實現(xiàn)了完善的匹配功能,目前絕大多數(shù)正則表達式匹配功能通過軟件實現(xiàn)。軟件實現(xiàn)正則表達式匹配靈活方便,易于搭建匹配平臺,且布置成本較低。正則表達式的匹配技術主要是基于非確定自動機(nfa),基于確定自動機(dfa)和基于nfa和dfa的混合匹配技術。因為nfa的并行狀態(tài)特性很匹配fpga的天然并發(fā)性,是在fpga上實現(xiàn)正則匹配引擎的首選。隨著網(wǎng)絡帶寬的不斷增長,網(wǎng)絡將無數(shù)計算機資源極盡所能的連結在一起,在互聯(lián)網(wǎng)用戶和互聯(lián)網(wǎng)資源海量互聯(lián)的同時也帶來了大量垃圾信息和惡意攻擊,此時單純依靠軟件過濾程序或許能夠滿足單個用戶的應用需求,如采用snort/bro等入侵檢測系統(tǒng),依靠正則表達式匹配軟件過濾危險信息。但是在服務器端,在這個數(shù)據(jù)爆炸的時代,依靠軟件過濾的方法無法滿足服務器的帶寬需求。因此基于軟件的正則表達式匹配引擎已經(jīng)無法滿足網(wǎng)絡帶寬高速增長的需求。正則表達式匹配引擎硬件加速研究會成為接下來研究的熱點。正則表達式匹配的硬件實現(xiàn)研究起源于1982年,floy和ullman基于自動機理論在硬件上實現(xiàn)了一個nfa模型;sidhu和prasanna在此基礎上提出了正則表達式中的基本操作符,連接、并聯(lián)和閉包的基本專用電路結構,為之后模塊化構造正則表達式硬件電路打下基礎。在未來的應用場景中,快速的編譯大規(guī)模的正則表達式集合并在像fpga這樣的硬件平臺配置對應的匹配引擎,有很高的應用價值。技術實現(xiàn)要素:發(fā)明目的:本發(fā)明旨在發(fā)明一個通用正則表達式編譯器,快速地將大規(guī)模的正則表達式規(guī)則集合編譯成對應的硬件匹配引擎并配置在fpga上。解決過濾系統(tǒng)規(guī)則集更替帶來的煩瑣工作,實現(xiàn)從輸入規(guī)則到輸出電路全自動的編譯過程,解決了硬件入侵檢測系統(tǒng)維護工作的復雜度。為了解決上述技術問題,本發(fā)明公開了一種新型的正則表達式自動快速編譯方法并通過組合程序段實現(xiàn)編譯器的全部功能。代碼簡潔,編譯器功能強大。為了便于闡述,定義基本正則表達式規(guī)則a:a=j{3}2{2}9(a|[cd]+e)*x?,在規(guī)則a中,{3}為限定重復三次前驅(qū)字符?!皘”為或關系操作符,即并聯(lián)關系?!?”為限定重復至少一次前驅(qū)字符?!?”為限定詞重復任意次前驅(qū)字符?!埃俊睘橄薅ㄖ貜?或1次前驅(qū)字符。正則表達式a僅僅為簡單示例,并不涵蓋本編譯器包含的全部語法。本發(fā)明的主要內(nèi)容包括:1.前期處理模塊,對輸入的snort/bro等規(guī)則集合的正則表達式部分截取,保存為正則集合輸入文件。2.規(guī)則集合生成模塊,在本編譯支持語法框架下,輸出任意數(shù)量任意長度的正則表達式集合。3.對于基本正則表達式a,編譯器自動抓取單個匹配規(guī)則,分析正則式構成,將正則表達式分析成鏈式結構。4.對鏈式結構進行解析,采用改進的my算法輸出nfa結果,并標記為自定義的新型nfa表示結構,后續(xù)模塊可從nfa表示圖中獲取連接信息。5.在此過程中伴隨以并行的匹配字符串輸出和相應的測試激勵文件生成功能,為rtl配置前測試提供配套的測試用例和仿真激勵文件。6.采用并行結構自動集合輸入規(guī)則集合對應的生成模塊,連接以生成整體的對應集合的正則表達式匹配引擎。本發(fā)明采用并行結構,自動對輸入的文件進行分析,選擇截取獲取或者自動生成符合要求的正則表達式集合,編譯器操作難度低,編譯速度快,可以很好的加速今后硬件過濾平臺的搭建,快速的實現(xiàn)從正則規(guī)則集到現(xiàn)實的硬件電路的生成,并可以提供配套的測試文件用于仿真測試。附圖說明下面結合附圖和具體實施方式對本發(fā)明做更進一步的具體說明,本發(fā)明的上述和/或其他方面的優(yōu)點將會變得更加清楚。圖1是本發(fā)明的整體模塊劃分圖。圖2是本發(fā)明的鏈式編譯分析圖。圖3是本發(fā)明的核心編譯功能示意圖。圖4是本發(fā)明的核心編譯功能示例的nfa狀態(tài)轉(zhuǎn)移圖。圖5是本發(fā)明的匹配更新模塊(左)和否定匹配模塊(右)。圖6是本發(fā)明的二輸入匹配狀態(tài)更新模塊綜合實例示意圖。圖7是本發(fā)明的正則匹配引擎結構。圖8是本發(fā)明的十規(guī)則引擎綜合rtl結構示意圖。具體實施方式下面詳細地描述本發(fā)明的實施例,所述示例為上述正則表達式a,編譯器整體框架以及分流程在附圖中示出。本編譯器可以從輸入端接收或自動生成測試正則規(guī)則集合,并自動完成之后編譯過程直至輸出rtl電路用于之后的仿真和綜合驗證。如圖1所示,整個正則表達式編譯器由snort/bro規(guī)則集合提取模塊,自定義規(guī)則集合生成模塊,匹配字符串生成模塊,測試文件生成模塊,正則表達式編譯模塊,頂層連接模塊,rtl輸出模塊等七個模塊組成。所有的子模塊集合構成了自動本發(fā)明的快速自動正則表達式編譯器。如圖2所示,編譯器首先將輸入的正則表達式示例a分析成鏈式結構的組成單元。每個單元由四個構成要素組成,分別是值域、正則操作符、后繼單元和子單元。其中值域可以表示ascii表中任意字符(包含具有特殊作用,需要轉(zhuǎn)義使用的字符)。操作符包括了所有正則表達式支持的語法,并支持部分定制的語法功能的添加。后繼單元則承接前驅(qū)單元,子單元為出現(xiàn)“()”和“|”時的多路可選子規(guī)則。本編譯器支持的正則表達式語法規(guī)則見表一。表一:編譯器支持的正則規(guī)則語法操作符正則表達式中的匹配作用a+匹配大于一個aa?匹配零或一個aa*匹配任意個數(shù)a(a|b)匹配a或者b中的一個a{n}/{n,}/{n,m}限定重復,匹配n個a/大于n個a/n至m個a.通配符,匹配任意一個字符\xff匹配十六進制值對應的ascii字符\n,\r,\t,\v匹配回車,換行,制表,垂直制表符[a-z],[0-9],[!-&]范圍匹配,匹配“-”相連范圍內(nèi)的字符[abc]匹配abc中任意一個字符[^a-z]否定范圍匹配,匹配除“-”相連范圍內(nèi)的字符[a-c0-9!-&]范圍匹配,匹配“-”兩側若干范圍內(nèi)的任意字符\*,\?,\+轉(zhuǎn)義字符,將特殊字符轉(zhuǎn)義成普通字符匹配^reg^從開頭開始匹配reg&&匹配至結尾處結束\s\s,匹配任意空白字符(回車,換行,制表,空格)\s\s,匹配任意非空白字符\d匹配任意0-9之間數(shù)字\d匹配除0-9之外的任意字符\w匹配0-9,a-z,a-z,或“_”\w匹配除\w,之外的任意字符.*(?^abc)限定通配符重復,匹配任意個數(shù)除(abc)外的任意字符除了通用的正則表達式規(guī)則之外,本編譯器還支持一些自定義規(guī)則并預留新匹配規(guī)則支持接口以便編譯器后期功能升級。如圖3所示為編譯器核心算法流程。在完成鏈式分析之后,編譯器將鏈式存儲單元讀入并采用改進后的my(mcnaughton-yamada)構造算法,將鏈式單元分析成對應的nfa單個狀態(tài)。如圖4所示為示例正則表達式a所對應的狀態(tài)轉(zhuǎn)移圖。根據(jù)nfa結構,本發(fā)明所提出的編譯方法采取新型的nfa標記結構,有效存儲了nfa狀態(tài)轉(zhuǎn)移方向,方便了之后連接模塊對單個正則規(guī)則單元采取對應的連接策略。表二為本發(fā)明所提出的新型nfa記錄結構。表二:針對示例a的nfa記錄結構狀態(tài)名狀態(tài)值前入狀態(tài)后續(xù)狀態(tài)標記位0start/1t1j02t2j13t3j24t4235t5246t6957,8,10,11t7a6,7,97,8,10,11t8cd6,7,8,98,9t9e87,8,10,11t10x6,7,911t11end6,7,9,10/t本發(fā)明方法定義的nfa結構包含五個組成部分,狀態(tài)名,狀態(tài)值,前入狀態(tài),后續(xù)狀態(tài),匹配標記。1.狀態(tài)名部分由起始狀態(tài)0開始,依次標記為對應狀態(tài)號。2.狀態(tài)值從start開始終于end。之間各狀態(tài)的值為狀態(tài)對應的轉(zhuǎn)移值。3.前入狀態(tài)表示為轉(zhuǎn)移到該狀態(tài)的所有狀態(tài)。4.后續(xù)狀態(tài)表示狀態(tài)往后轉(zhuǎn)移的路徑。5.標記位記錄了狀態(tài)的匹配狀態(tài),“t”為匹配,“f”為否定匹配,即匹配非val值的任意字符。由表二可知,起始狀態(tài)的前入狀態(tài)為空,終止狀態(tài)的后續(xù)狀態(tài)為空。正則表達式模塊根據(jù)nfa狀態(tài),對該nfa所對應的正則表達式的硬件電路進行模塊連結。采取模塊化的匹配模塊,根據(jù)nfa中的后續(xù)狀態(tài)集合,自動連結各狀態(tài)模塊,實現(xiàn)整個正則匹配單元。如圖五所示為單個狀態(tài)匹配的狀態(tài)更新模塊結構示意圖,左圖為匹配模塊,右圖為否定匹配模塊。如圖六所示為匹配狀態(tài)更新模塊的綜合rtl可視圖。對照本編譯器輸出的硬件描述文件,在quartusii中綜合得到的結果。如圖七所示,編譯器編譯完成規(guī)則集合中的所有正則表達式之后,頂層連結模塊將所有正則表達單元聯(lián)結成完整正則表達式匹配引擎。并伴隨產(chǎn)生對應的規(guī)則集合測試文件和仿真激勵文件。如圖八所示為十規(guī)則正則匹配引擎的綜合rtl可視圖。表三為示例十規(guī)則集合,此處僅為驗證整體結構,并未涉及到本編譯器所支持的全部語法規(guī)則。表三:示例十規(guī)則正則表達式集合lq*(q{2,4}|uj{4,})*(mx?|ov+)[uwp][vi](z?[xo]|[jz]?)?[jr][bx]shc[^cl]*f+z{2}wp?.s(m{3}|jy*)+tq?(n+|lf)*[fr][xh]?ds+.r*[lve]ywt+pk?(k{2,6}|.n+)*run(ffbn|eld+)?k{2,}[cj]*z{1,6}(js|l+)fh+q{4,}ibvm([dp]|pw+)?m{2}mo[hn]?[ac]nn([cxa]?|fc)測試字符串為編譯器產(chǎn)生字符串集合,如表四所示。在modelsim中用對表四中的示例字符串所產(chǎn)生的激勵文件進行仿真,仿真結果表明本編譯器編譯產(chǎn)生的硬件電路能夠有效的匹配相應符合規(guī)則的信息。表四:示例十規(guī)則正則表達式測試字符串集合lqqujjjjjmwijxshcaaaffzzwpasmmmtqlflffhdsswrreywttpannnrunelddkkkjjjzzzllfhhhqqqqqibvmpwwmmmocnnfc對大規(guī)模測試集合的編譯結果表面,本編譯器可以在30秒內(nèi)實現(xiàn)包含超過500個正則表達式的正則表達式規(guī)則集合的編譯,生成對應的硬件描述文件,測試文件和激勵文件,且仿真綜合結果都符合要求。綜上所述,利用本發(fā)明實施例展示了本編譯器方法及實現(xiàn)編譯器的作用??梢钥焖俑咝У膶崿F(xiàn)對大規(guī)模正則匹配引擎的搭建,適用于今后數(shù)據(jù)帶寬日益提高的高速數(shù)據(jù)匹配場景。盡管已經(jīng)示出和描述了本發(fā)明的實施例,可以理解的是,上述實施例是示例性的,不能理解為對本發(fā)明的限制,本領域的普通技術人員在不脫離本發(fā)明的原理和宗旨的情況下載本發(fā)明的范圍內(nèi)可以對上述實施例進行變化、修改、替換和變型。當前第1頁12