用于編譯有限自動(dòng)機(jī)的方法和裝置制造方法
【專利摘要】提供一種使用確定性有限自動(dòng)機(jī)(DFA)和非確定性有限自動(dòng)機(jī)(NFA)來(lái)實(shí)施運(yùn)行時(shí)間處理以發(fā)現(xiàn)在凈荷中存在的模式的方法和對(duì)應(yīng)裝置。可以基于至少一個(gè)試探從在一個(gè)或者多個(gè)正則表達(dá)式模式的集合中的每個(gè)模式選擇子模式,并且可以使用從在集合中的所有模式選擇的子模式來(lái)生成統(tǒng)一的確定性有限自動(dòng)機(jī)(DFA),而且可以為在集合中的至少一個(gè)模式生成至少一個(gè)非確定性的有限自動(dòng)機(jī)(NFA)從而優(yōu)化運(yùn)行時(shí)間處理的運(yùn)行時(shí)間性能。
【專利說(shuō)明】用于編譯有限自動(dòng)機(jī)的方法和裝置
【背景技術(shù)】
[0001]開(kāi)放系統(tǒng)互連(OSI)參考模型定義用來(lái)通過(guò)傳輸介質(zhì)通信的七個(gè)網(wǎng)絡(luò)協(xié)議層(L1-L7)。更高層(L4-L7)代表端到端通信而更低層(L1-L3)代表本地通信。
[0002]網(wǎng)絡(luò)應(yīng)用感知系統(tǒng)需要處理、過(guò)濾和切換范圍從L3至L7的網(wǎng)絡(luò)協(xié)議層、例如L7網(wǎng)絡(luò)協(xié)議層諸如超文本傳送協(xié)議(HTTP)和簡(jiǎn)單郵件傳送協(xié)議(SMTP)以及L4網(wǎng)絡(luò)協(xié)議層諸如傳輸控制協(xié)議(TCP)。除了處理網(wǎng)絡(luò)協(xié)議層之外,網(wǎng)絡(luò)應(yīng)用感知系統(tǒng)還需要同時(shí)保護(hù)這些協(xié)議,而通過(guò)L4-L7網(wǎng)絡(luò)協(xié)議層的基于訪問(wèn)和內(nèi)容的安全性包括線速的防火墻、虛擬專用網(wǎng)(VPN)、安全套接字層(SSL)、入侵檢測(cè)系統(tǒng)(IDS)、網(wǎng)際協(xié)議安全性(IPSec)、防病毒(AV)和防垃圾郵件功能。
[0003]網(wǎng)絡(luò)處理器可用于高吞吐量L2和L3網(wǎng)絡(luò)協(xié)議處理、也就是執(zhí)行用于線速轉(zhuǎn)發(fā)分組的分組處理。通常,通用處理器用來(lái)處理需要更智能處理的L4-L7網(wǎng)絡(luò)協(xié)議。雖然通用處理器可以執(zhí)行計(jì)算密集任務(wù),但是它未提供用于處理數(shù)據(jù)、從而可以線速轉(zhuǎn)發(fā)它的充分性能。
[0004]內(nèi)容感知網(wǎng)絡(luò)需要在“線速”檢查分組的內(nèi)容??梢苑治鰞?nèi)容以確定是否已經(jīng)有安全漏洞或者入侵。大量正則表達(dá)式形式的模式和規(guī)則被應(yīng)用以保證檢測(cè)到所有安全漏洞或者入侵。正則表達(dá)式是一種以字符串描述模式的緊致方法。正則表達(dá)式匹配的最簡(jiǎn)單模式是單個(gè)字符或者字符串、例如/c/或者/cat。正則表達(dá)式也包括算符和具有特殊含義的元字符。
[0005]通過(guò)使用元字符,正則表達(dá)式可以用于更復(fù)雜的搜索、比如“abc.*XyZ”。也就是說(shuō),發(fā)現(xiàn)串“ abc ”跟隨有字符“ xyz ”但在“ abc ”與“ xyz ”之間的字符數(shù)目不限。另一示例是正則表達(dá)式“abc..abc.*xyz ; ”、也就是發(fā)現(xiàn)串“abc”跟隨有兩個(gè)字符、隨后為串“abc”和不限數(shù)目的字符、隨后為串“ xyz ”。
[0006]入侵檢測(cè)系統(tǒng)(IDS)應(yīng)用檢查流過(guò)網(wǎng)絡(luò)的所有個(gè)別分組的內(nèi)容并且標(biāo)識(shí)可疑模式,這些可疑模式可以指示用于闖入或者危害系統(tǒng)的嘗試。可疑模式的一個(gè)示例可以是在分組中的特定文本串跟隨有100個(gè)字符、隨后為另一特定文本串。
[0007]通常使用搜索方法、比如確定性有限自動(dòng)機(jī)(DFA)或者非確定性有限自動(dòng)機(jī)(NFA)來(lái)執(zhí)行內(nèi)容搜索以處理正則表達(dá)式。
【發(fā)明內(nèi)容】
[0008]本發(fā)明的實(shí)施例提供一種用于有限自動(dòng)機(jī)的編譯和運(yùn)行時(shí)間處理的方法、裝置、計(jì)算機(jī)程序產(chǎn)品和相應(yīng)系統(tǒng)。
[0009]根據(jù)一個(gè)實(shí)施例,一種方法可以在操作地耦合到網(wǎng)絡(luò)的安全設(shè)備中,操作地耦合到至少一個(gè)存儲(chǔ)器的至少一個(gè)處理器中基于至少一個(gè)試探從在一個(gè)或者多個(gè)正則表達(dá)式模式的集合中的每個(gè)模式選擇子模式。該方法可以使用從在集合中的所有模式選擇的子模式來(lái)生成統(tǒng)一的確定性有限自動(dòng)機(jī)(DFA)。該方法可以為在集合中的至少一個(gè)模式可以生成至少一個(gè)非確定性有限自動(dòng)機(jī)(NFA)。至少一個(gè)模式的用于生成至少一個(gè)NFA的部分和用于至少一個(gè)NFA的運(yùn)行時(shí)間處理的至少一個(gè)遍歷方向可以基于選擇的子模式的長(zhǎng)度是固定還是可變和選擇的子模式在至少一個(gè)模式內(nèi)的位置來(lái)確定。該方法可以在至少一個(gè)存儲(chǔ)器中存儲(chǔ)所生成的統(tǒng)一的DFA和至少一個(gè)NFA。
[0010]至少一個(gè)試探可以包括最大化選擇的唯一子模式的數(shù)目和選擇的每個(gè)子模式的長(zhǎng)度。
[0011]該方法可以確定選擇的子模式的長(zhǎng)度是固定還是可變。
[0012]該方法可以計(jì)算選擇的每個(gè)子模式的哈希值并且與從其選擇子模式的模式的標(biāo)識(shí)符關(guān)聯(lián)地存儲(chǔ)計(jì)算的每個(gè)哈希值。
[0013]至少一個(gè)試探可以包括最大化選擇的唯一子模式的數(shù)目,并且該方法可以包括為在集合中的每個(gè)模式計(jì)算選擇的子模式的哈希值。該方法可以比較計(jì)算的哈希值與為在集合中的其它模式選擇的子模式的哈希值的列表。如果在列表中發(fā)現(xiàn)計(jì)算的哈希值,則該方法可以確定是否(i)用來(lái)自模式的另一子模式替換選擇的子模式或者(ii)用從在集合中的其他模式選擇的備選(alternate)子模式替換為在集合中的另一模式選擇的子模式。在集合中的其他模式可以基于在列表中的與計(jì)算的哈希值的關(guān)聯(lián)性來(lái)標(biāo)識(shí)。用于是否替換(i)或者(ii)的確定可以基于比較被考慮用于替換的子模式的長(zhǎng)度以便最大化選擇的唯一子模式的長(zhǎng)度。
[0014]至少一個(gè)試探可以包括標(biāo)識(shí)每個(gè)模式的子模式并且如果每個(gè)模式的標(biāo)識(shí)的子模式中的給定的子模式具有小于最小門(mén)限的長(zhǎng)度則忽略給定的子模式。
[0015]至少一個(gè)試探可以包括訪問(wèn)與歷史使用頻率指示符關(guān)聯(lián)的子模式的知識(shí)庫(kù)并且如果在訪問(wèn)的知識(shí)庫(kù)中的用于每個(gè)模式的標(biāo)識(shí)的子模式中的給定的子模式的歷史使用頻率指示符大于或者等于使用頻率門(mén)限則忽略給定的子模式。
[0016]至少一個(gè)試探可以包括標(biāo)識(shí)每個(gè)模式的子模式并且為每個(gè)模式通過(guò)基于標(biāo)識(shí)的子模式中的給定的子模式具有標(biāo)識(shí)的子模式中的最大數(shù)目的連續(xù)文本字符并且基于給定的子模式在為一個(gè)或者多個(gè)正則表達(dá)式的集合選擇的所有子模式之中唯一而選擇給定的子模式,來(lái)最大化在選擇的子模式中的連續(xù)文本字符的數(shù)目。
[0017]至少一個(gè)試探可以包括:基于每個(gè)模式的給定的子模式中的每個(gè)子模式的子模式類型和給定的子模式的長(zhǎng)度為每個(gè)模式的給定的子模式設(shè)置優(yōu)先級(jí),更長(zhǎng)長(zhǎng)度子模式被設(shè)置優(yōu)先級(jí)高于更少長(zhǎng)度的另一子模式,基于優(yōu)先級(jí)設(shè)置選擇唯一子模式作為選擇的子模式,選擇的唯一子模式具有至少最小長(zhǎng)度門(mén)限的長(zhǎng)度,并且如果給定的子模式都不唯一和具有至少最小長(zhǎng)度門(mén)限的長(zhǎng)度,則基于優(yōu)先級(jí)設(shè)置選擇非唯一子模式作為選擇的子模式。
[0018]至少一個(gè)試探可以包括基于每個(gè)模式的給定的子模式中的每個(gè)子模式的子模式類型為給定的子模式設(shè)置優(yōu)先級(jí),子模式類型是僅文本、備選、單字符重復(fù)或者多字符重復(fù),并且用于子模式類型的從最高到最低的優(yōu)先級(jí)順序是僅文本、備選、單字符重復(fù)和多字符重復(fù)。
[0019]如果選擇的子模式的第一元素是至少一個(gè)模式的第一元素并且選擇的子模式的長(zhǎng)度固定,則選擇的子模式的位置可以是至少一個(gè)模式的開(kāi)始位置,至少一個(gè)模式的用于生成至少一個(gè)NFA的部分可以是排除選擇的子模式的至少一個(gè)模式。至少一個(gè)NFA可以是單個(gè)NFA,并且至少一個(gè)NFA的至少一個(gè)遍歷方向可以是前向遍歷方向。
[0020]生成統(tǒng)一的DFA可以包括:關(guān)聯(lián)生成的統(tǒng)一的DFA的與選擇的子模式的最后元素關(guān)聯(lián)的DFA節(jié)點(diǎn)與元數(shù)據(jù),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向生成的至少一個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在前向遍歷方向上對(duì)至少一個(gè)NFA進(jìn)行遍歷并且報(bào)告選擇的子模式的匹配、在DFA節(jié)點(diǎn)的與選擇的子模式的最后元素匹配的前導(dǎo)字符在凈荷內(nèi)的前導(dǎo)偏移作為選擇的子模式的結(jié)束偏移和選擇的子模式的長(zhǎng)度的指令。至少一個(gè)NFA的開(kāi)始節(jié)點(diǎn)可以與至少一個(gè)模式的用于生成至少一個(gè)NFA的部分的第一元素關(guān)聯(lián),至少一個(gè)NFA的凈荷開(kāi)始偏移可以與在選擇的子模式的結(jié)束偏移的另一字節(jié)之后的字節(jié)關(guān)聯(lián)。
[0021]生成至少一個(gè)NFA可以包括:關(guān)聯(lián)生成的至少一個(gè)NFA的NFA節(jié)點(diǎn)與元數(shù)據(jù),元數(shù)據(jù)向遍歷器指示用于終止遍歷并且報(bào)告在NFA節(jié)點(diǎn)匹配的滯后字符在凈荷內(nèi)的滯后偏移作為至少一個(gè)模式的結(jié)束偏移和至少一個(gè)模式的最終匹配的指令,NFA節(jié)點(diǎn)與至少一個(gè)模式的最后元素關(guān)聯(lián)。
[0022]如果選擇的子模式的第一元素不是至少一個(gè)模式的第一元素并且選擇的子模式的最后元素不是至少一個(gè)模式的最后元素,則選擇的子模式的位置可以是至少一個(gè)模式的中間位置。如果選擇的子模式的長(zhǎng)度固定,則至少一個(gè)模式的用于生成至少一個(gè)NFA的部分可以包括至少一個(gè)模式的滯后部分和前導(dǎo)部分。至少一個(gè)模式的滯后部分可以是排除選擇的子模式和至少一個(gè)模式的前導(dǎo)部分的至少一個(gè)模式。至少一個(gè)模式的前導(dǎo)部分可以排除選擇的子模式和至少一個(gè)模式的滯后部分。至少一個(gè)NFA可以包括滯后NFA和前導(dǎo)NFA,至少一個(gè)遍歷方向可以包括前向遍歷方向和反向遍歷方向,滯后NFA可以具有前向遍歷方向,并且前導(dǎo)NFA可以具有反向遍歷方向。至少一個(gè)模式的滯后部分可以用于生成滯后NFA,并且至少一個(gè)模式的前導(dǎo)部分可以用于生成前導(dǎo)NFA。
[0023]生成統(tǒng)一的DFA可以包括:關(guān)聯(lián)生成的統(tǒng)一的DFA節(jié)點(diǎn)與元數(shù)據(jù),DFA節(jié)點(diǎn)與選擇的子模式的最后元素關(guān)聯(lián),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向滯后NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在前向遍歷方向上對(duì)滯后NFA進(jìn)行遍歷的指令,滯后NFA的開(kāi)始節(jié)點(diǎn)與滯后部分的第一元素關(guān)聯(lián),滯后NFA的凈荷開(kāi)始偏移與在選擇的子模式的結(jié)束偏移之后的字節(jié)關(guān)聯(lián),指示指向前導(dǎo)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在反向遍歷方向上對(duì)前導(dǎo)NFA進(jìn)行遍歷并且報(bào)告在DFA節(jié)點(diǎn)的與選擇的子模式的最后元素匹配的字符在凈荷內(nèi)的偏移作為選擇的子模式的結(jié)束偏移、選擇的子模式的匹配和選擇的子模式的長(zhǎng)度的指令,前導(dǎo)NFA的開(kāi)始節(jié)點(diǎn)與前導(dǎo)部分的最后元素關(guān)聯(lián),前導(dǎo)NFA的凈荷開(kāi)始偏移通過(guò)從選擇的子模式的結(jié)束偏移減去選擇的子模式的長(zhǎng)度來(lái)確定。
[0024]生成至少一個(gè)NFA可以包括:關(guān)聯(lián)滯后NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),滯后節(jié)點(diǎn)與至少一個(gè)模式的最后元素關(guān)聯(lián),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于終止對(duì)生成的滯后NFA進(jìn)行遍歷并且報(bào)告在滯后節(jié)點(diǎn)的與最后元素匹配的、凈荷的滯后字符在凈荷內(nèi)的滯后偏移和至少一個(gè)模式的滯后部分的匹配的指令。生成至少一個(gè)NFA可以包括:關(guān)聯(lián)前導(dǎo)NFA的前導(dǎo)節(jié)點(diǎn)與元數(shù)據(jù),前導(dǎo)節(jié)點(diǎn)與至少一個(gè)模式的第一元素關(guān)聯(lián),元數(shù)據(jù)向遍歷器指示用于終止對(duì)生成的前導(dǎo)NFA進(jìn)行遍歷并且報(bào)告至少一個(gè)模式的前導(dǎo)部分的匹配并且如果與至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在前導(dǎo)節(jié)點(diǎn)的與第一元素匹配的、凈荷的前導(dǎo)字符在凈荷內(nèi)的前導(dǎo)偏移作為至少一個(gè)模式的開(kāi)始偏移的指令。
[0025]如果選擇的子模式的第一元素不是至少一個(gè)模式的第一元素并且選擇的子模式的最后元素可以不是至少一個(gè)模式的最后元素,則選擇的子模式的位置可以是至少一個(gè)模式的中間位置,并且如果選擇的子模式的第一元素是至少一個(gè)模式的第一元素,則選擇的子模式的位置可以是至少一個(gè)模式的開(kāi)始位置。如果子模式的長(zhǎng)度固定或者可變,則至少一個(gè)模式的用于生成至少一個(gè)NFA的部分可以包括至少一個(gè)模式的滯后部分和整個(gè)部分。至少一個(gè)模式的滯后部分可以是排除至少一個(gè)模式的前導(dǎo)部分的至少一個(gè)模式。前導(dǎo)部分可以包括至少一個(gè)模式的第一元素、選擇的子模式的最后元素和在至少一個(gè)模式中的在它們之間的所有元素。至少一個(gè)模式的整個(gè)部分可以是至少一個(gè)模式,如果選擇的子模式的位置是開(kāi)始位置,則前導(dǎo)部分是選擇的子模式。至少一個(gè)NFA可以包括滯后NFA和傘形NFA。至少一個(gè)遍歷方向可以包括前向遍歷方向和反向遍歷方向。滯后NFA可以具有前向遍歷方向,并且傘形NFA可以具有反向遍歷方向。至少一個(gè)模式的滯后部分可以用于生成滯后NFA,并且至少一個(gè)模式的整個(gè)部分可以用于生成傘形NFA。
[0026]生成統(tǒng)一的DFA可以包括:關(guān)聯(lián)生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),DFA節(jié)點(diǎn)與選擇的子模式的最后元素關(guān)聯(lián),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向滯后NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在前向遍歷方向上對(duì)滯后NFA進(jìn)行遍歷并且報(bào)告選擇的子模式的匹配和在DFA節(jié)點(diǎn)的與選擇的子模式的最后元素匹配的字符在凈荷內(nèi)的偏移作為選擇的子模式的結(jié)束偏移并且如果選擇的子模式的長(zhǎng)度固定則報(bào)告長(zhǎng)度的指令,滯后NFA的開(kāi)始節(jié)點(diǎn)與滯后部分的第一元素關(guān)聯(lián)。
[0027]生成至少一個(gè)NFA可以包括:關(guān)聯(lián)生成的滯后NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),滯后節(jié)點(diǎn)與至少一個(gè)模式的最后元素關(guān)聯(lián),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向傘形NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在反向遍歷方向上對(duì)傘形NFA進(jìn)行遍歷并且可選地報(bào)告在滯后節(jié)點(diǎn)的與至少一個(gè)模式的最后元素匹配的字符在凈荷內(nèi)的偏移并且可選地報(bào)告至少一個(gè)模式的滯后部分的匹配的指令,傘形NFA的開(kāi)始節(jié)點(diǎn)與至少一個(gè)模式的最后元素關(guān)聯(lián)。生成至少一個(gè)NFA可以包括:關(guān)聯(lián)生成的傘形NFA的傘形節(jié)點(diǎn)與元數(shù)據(jù),傘形節(jié)點(diǎn)與至少一個(gè)模式的第一元素關(guān)聯(lián),元數(shù)據(jù)向遍歷器指示用于終止遍歷并且報(bào)告至少一個(gè)模式的最終匹配并且如果與至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在傘形節(jié)點(diǎn)的與至少一個(gè)模式的第一元素匹配的開(kāi)始字符在凈荷內(nèi)的開(kāi)始偏移作為至少一個(gè)模式的開(kāi)始偏移的指令。
[0028]如果選擇的子模式的第一元素不是至少一個(gè)模式的第一元素并且選擇的子模式的最后元素不是至少一個(gè)模式的最后元素,則選擇的子模式的位置可以是至少一個(gè)模式的中間位置,并且如果選擇的子模式的第一元素是至少一個(gè)模式的第一元素,則選擇的子模式的位置可以是至少一個(gè)模式的開(kāi)始位置。如果子模式的長(zhǎng)度固定或者可變,則至少一個(gè)模式的用于生成至少一個(gè)NFA的部分可以包括至少一個(gè)模式的滯后部分和前導(dǎo)部分。至少一個(gè)模式的滯后部分可以是排除至少一個(gè)模式的前導(dǎo)部分的至少一個(gè)模式。前導(dǎo)部分可以包括至少一個(gè)模式的第一元素、選擇的子模式的最后元素和在至少一個(gè)模式中的在它們之間的所有元素。如果選擇的子模式的位置是開(kāi)始位置,則滯后部分可以是選擇的子模式。至少一個(gè)NFA可以包括滯后NFA和前導(dǎo)NFA。至少一個(gè)遍歷方向可以包括前向遍歷方向和反向遍歷方向。滯后NFA可以具有前向遍歷方向,并且前導(dǎo)NFA可以具有反向遍歷方向。至少一個(gè)模式的滯后部分可以用于生成滯后NFA。至少一個(gè)模式的前導(dǎo)部分可以用于生成前導(dǎo) NFA。
[0029]生成統(tǒng)一的DFA可以包括:關(guān)聯(lián)生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),DFA節(jié)點(diǎn)與選擇的子模式的最后元素關(guān)聯(lián),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向滯后NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在前向遍歷方向上對(duì)滯后NFA進(jìn)行遍歷的指令,滯后NFA的開(kāi)始節(jié)點(diǎn)與滯后部分的第一元素關(guān)聯(lián),指示指向前導(dǎo)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在反向遍歷方向上對(duì)前導(dǎo)NFA進(jìn)行遍歷并且報(bào)告選擇的子模式的匹配和在DFA節(jié)點(diǎn)的與選擇的子模式的最后元素匹配的字符在凈荷內(nèi)的偏移作為選擇的子模式的結(jié)束偏移并且如果選擇的子模式的長(zhǎng)度固定則報(bào)告長(zhǎng)度的指令,前導(dǎo)NFA的開(kāi)始節(jié)點(diǎn)與選擇的子模式的最后元素關(guān)聯(lián)。
[0030]生成至少一個(gè)NFA可以包括:關(guān)聯(lián)生成的滯后NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),滯后節(jié)點(diǎn)與至少一個(gè)模式的最后元素關(guān)聯(lián),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于終止對(duì)滯后NFA進(jìn)行遍歷并且報(bào)告在滯后節(jié)點(diǎn)的與至少一個(gè)模式的最后元素匹配的滯后字符在凈荷內(nèi)的滯后偏移并且報(bào)告至少一個(gè)模式的滯后部分的匹配的指令。生成至少一個(gè)NFA可以包括:關(guān)聯(lián)生成的前導(dǎo)NFA的前導(dǎo)節(jié)點(diǎn)與元數(shù)據(jù),前導(dǎo)節(jié)點(diǎn)與至少一個(gè)模式的第一元素關(guān)聯(lián),元數(shù)據(jù)向遍歷器指示用于終止對(duì)前導(dǎo)NFA進(jìn)行遍歷并且報(bào)告在前導(dǎo)節(jié)點(diǎn)的與至少一個(gè)模式的第一元素匹配的前導(dǎo)字符在凈荷內(nèi)的前導(dǎo)偏移的指令。
[0031]如果選擇的子模式的第一元素不是至少一個(gè)模式的第一元素并且選擇的子模式的最后元素不是至少一個(gè)模式的最后元素,則選擇的子模式的位置可以是至少一個(gè)模式的中間位置。如果選擇的子模式的長(zhǎng)度固定或者可變,則至少一個(gè)NFA可以是單個(gè)NFA。至少一個(gè)遍歷方向可以包括用于單個(gè)NFA的與至少一個(gè)模式的滯后部分的元素關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的前向遍歷方向和用于單個(gè)NFA的與至少一個(gè)模式的所有元素關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的反向遍歷方向。至少一個(gè)模式的滯后部分可以是排除至少一個(gè)模式的前導(dǎo)部分的至少一個(gè)模式,前導(dǎo)部分可以包括至少一個(gè)模式的第一元素、選擇的子模式的最后元素和在至少一個(gè)模式中的在它們之間的所有元素。
[0032]生成統(tǒng)一的DFA可以包括:關(guān)聯(lián)生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),該節(jié)點(diǎn)與選擇的子模式的最后元素關(guān)聯(lián),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向單個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在前向遍歷方向上對(duì)生成的單個(gè)NFA進(jìn)行遍歷并且報(bào)告選擇的子模式的匹配、在DFA節(jié)點(diǎn)的與選擇的子模式的最后元素匹配的字符在凈荷內(nèi)的偏移作為選擇的子模式的結(jié)束偏移并且如果選擇的子模式的長(zhǎng)度固定則報(bào)告長(zhǎng)度的指令,開(kāi)始節(jié)點(diǎn)與在至少一個(gè)模式中的緊接地跟隨選擇的子模式的最后元素的下一元素關(guān)聯(lián)。
[0033]生成至少一個(gè)NFA可以包括:關(guān)聯(lián)單個(gè)NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),滯后節(jié)點(diǎn)與至少一個(gè)模式的最后元素關(guān)聯(lián),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于轉(zhuǎn)變至用選擇的子模式的結(jié)束偏移關(guān)聯(lián)的凈荷開(kāi)始偏移在反向遍歷方向上對(duì)單個(gè)NFA進(jìn)行遍歷的指令。生成至少一個(gè)NFA可以包括:關(guān)聯(lián)單個(gè)NFA的前導(dǎo)節(jié)點(diǎn)與元數(shù)據(jù),前導(dǎo)節(jié)點(diǎn)與至少一個(gè)模式的第一元素關(guān)聯(lián),元數(shù)據(jù)向遍歷器指示用于終止遍歷并且如果與至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在前導(dǎo)節(jié)點(diǎn)的與至少一個(gè)模式的第一元素匹配的字符在凈荷內(nèi)的偏移作為至少一個(gè)模式的開(kāi)始偏移以及至少一個(gè)模式的最終匹配的指令。
[0034]如果選擇的子模式的第一元素不是至少一個(gè)模式的第一元素并且選擇的子模式的最后元素不是至少一個(gè)模式的最后元素,則選擇的子模式的位置可以是至少一個(gè)模式的中間位置。如果選擇的子模式的長(zhǎng)度固定,則至少一個(gè)NFA可以是單個(gè)NFA。至少一個(gè)遍歷方向可以包括用于單個(gè)NFA的與至少一個(gè)模式的前導(dǎo)部分關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的反向遍歷方向和用于單個(gè)NFA的與至少一個(gè)模式的所有元素關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的前向遍歷方向。前導(dǎo)部分可以是排除至少一個(gè)模式的滯后部分的至少一個(gè)模式。滯后部分可以包括選擇的子模式的第一元素、至少一個(gè)模式的最后元素和至少一個(gè)模式中的在它們之間的所有元素。
[0035]生成統(tǒng)一的DFA可以包括:關(guān)聯(lián)生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),節(jié)點(diǎn)與選擇的子模式的最后元素關(guān)聯(lián),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向單個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在反向遍歷方向上對(duì)生成的單個(gè)NFA進(jìn)行遍歷并且報(bào)告選擇的子模式的匹配、在DFA節(jié)點(diǎn)的與選擇的子模式的最后元素匹配的字符在凈荷內(nèi)的偏移作為選擇的子模式的結(jié)束偏移和選擇的子模式的長(zhǎng)度的指令,開(kāi)始節(jié)點(diǎn)與前導(dǎo)部分的最后元素關(guān)聯(lián),凈荷開(kāi)始偏移通過(guò)從選擇的子模式的結(jié)束偏移減去選擇的子模式的長(zhǎng)度來(lái)確定。
[0036]生成至少一個(gè)NFA可以包括:關(guān)聯(lián)單個(gè)NFA的前導(dǎo)節(jié)點(diǎn)與元數(shù)據(jù),前導(dǎo)節(jié)點(diǎn)與至少一個(gè)模式的第一元素關(guān)聯(lián),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于轉(zhuǎn)變至在前向遍歷方向上對(duì)單個(gè)NFA進(jìn)行遍歷的指令。生成至少一個(gè)NFA可以包括:關(guān)聯(lián)單個(gè)NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),滯后節(jié)點(diǎn)與至少一個(gè)模式的最后元素關(guān)聯(lián),元數(shù)據(jù)向遍歷器指示用于終止遍歷并且報(bào)告在滯后節(jié)點(diǎn)的與至少一個(gè)模式的最后元素匹配的字符在凈荷內(nèi)的偏移和至少一個(gè)模式的最終匹配的指令。
[0037]如果選擇的子模式的第一元素是至少一個(gè)模式的最后元素,則選擇的子模式的位置可以是至少一個(gè)模式的結(jié)束位置,并且如果選擇的子模式的長(zhǎng)度固定,則至少一個(gè)模式的用于生成至少一個(gè)NFA的部分可以是排除選擇的子模式的至少一個(gè)模式,并且至少一個(gè)遍歷方向可以是反向遍歷方向。
[0038]生成統(tǒng)一的DFA可以包括:關(guān)聯(lián)DFA節(jié)點(diǎn)與元數(shù)據(jù),DFA節(jié)點(diǎn)與選擇的子模式的最后元素關(guān)聯(lián),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向生成的至少一個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在反向遍歷方向上對(duì)生成的至少一個(gè)NFA進(jìn)行遍歷并且報(bào)告選擇的子模式的匹配和在DFA節(jié)點(diǎn)的與選擇的子模式的最后元素匹配的字符在凈荷內(nèi)的偏移作為選擇的子模式的結(jié)束偏移的指令,生成的至少一個(gè)NFA的開(kāi)始節(jié)點(diǎn)與部分的最后元素關(guān)聯(lián),生成的至少一個(gè)NFA的凈荷開(kāi)始偏移通過(guò)從選擇的子模式的結(jié)束偏移減去選擇的子模式的長(zhǎng)度來(lái)確定。
[0039]生成至少一個(gè)NFA可以包括:關(guān)聯(lián)與部分的第一元素關(guān)聯(lián)的NFA節(jié)點(diǎn)與元數(shù)據(jù),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于終止遍歷并且報(bào)告至少一個(gè)模式的最終匹配并且如果與至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在NFA節(jié)點(diǎn)的與部分的第一元素匹配的字符在凈荷內(nèi)的偏移作為至少一個(gè)模式的開(kāi)始偏移的指令。
[0040]如果選擇的子模式的第一元素是至少一個(gè)模式的最后元素,則選擇的子模式的位置可以是至少一個(gè)模式的結(jié)束位置,并且如果選擇的子模式的長(zhǎng)度可變或者固定,則至少一個(gè)模式的用于生成至少一個(gè)NFA的部分可以是至少一個(gè)模式,并且至少一個(gè)遍歷方向可以是反向遍歷方向。
[0041]生成統(tǒng)一的DFA可以包括:關(guān)聯(lián)DFA節(jié)點(diǎn)與元數(shù)據(jù),DFA節(jié)點(diǎn)與選擇的子模式的最后元素關(guān)聯(lián),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向生成的至少一個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在反向遍歷方向上對(duì)生成的至少一個(gè)NFA進(jìn)行遍歷并且報(bào)告選擇的子模式的匹配和在DFA節(jié)點(diǎn)的與選擇的子模式的最后元素匹配的字符在凈荷內(nèi)的偏移作為選擇的子模式的結(jié)束偏移并且如果選擇的子模式的長(zhǎng)度固定則報(bào)告長(zhǎng)度的指令,生成的至少一個(gè)NFA的開(kāi)始節(jié)點(diǎn)與選擇的子模式的最后元素關(guān)聯(lián),生成的至少一個(gè)NFA的凈荷開(kāi)始偏移與選擇的子模式的結(jié)束偏移關(guān)聯(lián)。
[0042]生成至少一個(gè)NFA可以包括:關(guān)聯(lián)與部分的第一元素關(guān)聯(lián)的NFA節(jié)點(diǎn)與元數(shù)據(jù),元數(shù)據(jù)向被配置為用凈荷對(duì)生成的統(tǒng)一的DFA和至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于終止遍歷并且報(bào)告至少一個(gè)模式的最終匹配并且如果與至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在NFA節(jié)點(diǎn)的與部分的第一元素匹配的字符在凈荷內(nèi)的偏移作為至少一個(gè)模式的開(kāi)始偏移的指令。
[0043]在至少一個(gè)存儲(chǔ)器中存儲(chǔ)生成的統(tǒng)一 DFA和至少一個(gè)NFA可以包括生成包括生成的統(tǒng)一 DFA和至少一個(gè)NFA的二進(jìn)制圖像。
[0044]至少一個(gè)處理器可以包括配置作為加速單元以分別分流DFA和NFA運(yùn)行時(shí)間處理的DFA協(xié)同處理器和NFA協(xié)同處理器。
[0045]這里公開(kāi)的另一示例實(shí)施例包括一種與這里公開(kāi)的裝置實(shí)施例一致的操作對(duì)應(yīng)的裝置。
[0046]另外,又一示例實(shí)施例可以包括一種非瞬態(tài)計(jì)算機(jī)可讀介質(zhì),該非瞬態(tài)計(jì)算機(jī)可讀介質(zhì)具有在其上存儲(chǔ)的指令序列,該指令序列在被加載并且由處理器執(zhí)行時(shí)使處理器執(zhí)行這里公開(kāi)的方法。
【專利附圖】
【附圖說(shuō)明】
[0047]前文將從如附圖中所示本發(fā)明的示例實(shí)施例的以下更具體描述中變得清楚,在附圖中,相似標(biāo)號(hào)貫穿不同視圖指代相同部分。附圖未必按比例、代之以著重于舉例說(shuō)明本發(fā)明的實(shí)施例。
[0048]圖1是可以在其中實(shí)施這里公開(kāi)的實(shí)施例的安全設(shè)備的一個(gè)實(shí)施例的框圖。
[0049]圖2A-G是示例NFA和DFA圖形以及圖示圖形展開(kāi)概念的表。
[0050]圖3A是其中可以實(shí)施這里公開(kāi)的實(shí)施例的安全設(shè)備的一個(gè)實(shí)施例的另一框圖。
[0051]圖3B是可以在操作地耦合到網(wǎng)絡(luò)的安全設(shè)備中操作地耦合到至少一個(gè)存儲(chǔ)器的至少一個(gè)處理器中實(shí)施的方法的一個(gè)示例實(shí)施例的流程圖。
[0052]圖4是用于基于選擇的子模式的長(zhǎng)度固定并且選擇的子模式的位置是正則表達(dá)式模式的開(kāi)始位置來(lái)生成統(tǒng)一的DFA和至少一個(gè)NFA的一個(gè)實(shí)施例的框圖。
[0053]圖5是用于基于選擇的子模式的位置是正則表達(dá)式模式的中間位置并且選擇的子模式的長(zhǎng)度固定來(lái)生成統(tǒng)一的DFA和至少一個(gè)NFA的一個(gè)實(shí)施例的框圖。
[0054]圖6是用于基于選擇的子模式的位置是正則表達(dá)式模式的中間位置或者開(kāi)始位置并且子模式的長(zhǎng)度固定或者可變來(lái)生成統(tǒng)一的DFA和至少一個(gè)NFA的一個(gè)實(shí)施例的框圖。
[0055]圖7是用于基于選擇的子模式的位置是正則表達(dá)式模式的中間位置或者開(kāi)始位置并且選擇的子模式的長(zhǎng)度固定或者可變來(lái)生成統(tǒng)一的DFA和至少一個(gè)NFA的另一實(shí)施例的框圖。
[0056]圖8是用于基于選擇的子模式的位置是正則表達(dá)式模式的中間位置并且選擇的子模式的長(zhǎng)度固定或者可變來(lái)生成統(tǒng)一的DFA和至少一個(gè)NFA的一個(gè)實(shí)施例的框圖。
[0057]圖9是用于基于選擇的子模式的位置是正則表達(dá)式模式的中間位置并且選擇的子模式的長(zhǎng)度固定來(lái)生成統(tǒng)一的DFA和至少一個(gè)NFA的一個(gè)實(shí)施例的框圖。
[0058]圖10是用于基于選擇的子模式的位置是正則表達(dá)式模式的結(jié)束位置并且選擇的子模式的長(zhǎng)度固定來(lái)生成統(tǒng)一的DFA和至少一個(gè)NFA的一個(gè)實(shí)施例的框圖。
[0059]圖11是用于基于選擇的子模式的位置是正則表達(dá)式模式的結(jié)束位置并且選擇的子模式的長(zhǎng)度固定或者可變來(lái)生成統(tǒng)一的DFA和至少一個(gè)NFA的一個(gè)實(shí)施例的框圖。
[0060]圖12是可選地在這里公開(kāi)的一個(gè)實(shí)施例內(nèi)的計(jì)算機(jī)的示例內(nèi)部結(jié)構(gòu)的框圖。
【具體實(shí)施方式】
[0061]在具體描述本發(fā)明的示例實(shí)施例之前,以下緊接地描述其中可以實(shí)施這些實(shí)施例的示例安全性應(yīng)用以及使用確定性有限自動(dòng)機(jī)(DFA)和非確定性有限自動(dòng)機(jī)(NFA)的典型處理的示例安全性應(yīng)用以幫助讀者理解本發(fā)明的發(fā)明特征。
[0062]圖1是其中可以實(shí)施本發(fā)明的實(shí)施例的安全設(shè)備102的一個(gè)實(shí)施例的框圖。安全設(shè)備102可以包括網(wǎng)絡(luò)服務(wù)處理器100。安全設(shè)備102可以是單獨(dú)系統(tǒng),該單獨(dú)系統(tǒng)可以將在一個(gè)網(wǎng)絡(luò)接口 103a接收的分組向另一網(wǎng)絡(luò)接口 103b切換并且可以在轉(zhuǎn)發(fā)接收的分組之前對(duì)分組執(zhí)行多個(gè)安全性功能。例如安全設(shè)備102可以用來(lái)在向局域網(wǎng)(LAN) 105b或者任何其它適當(dāng)網(wǎng)絡(luò)轉(zhuǎn)發(fā)處理的分組1lb之前對(duì)可以在廣域網(wǎng)(WAN) 105a或者任何其它適當(dāng)網(wǎng)絡(luò)上接收的分組1la執(zhí)行安全性處理。
[0063]網(wǎng)絡(luò)服務(wù)處理器100可以被配置為處理在接收的分組中封裝的開(kāi)放系統(tǒng)互連
(OSI)網(wǎng)絡(luò)L2-L7層協(xié)議。如本領(lǐng)域技術(shù)人員所知,OSI參考模型定義七個(gè)網(wǎng)絡(luò)協(xié)議層(L1-L7)。物理層(LI)代表將設(shè)備連接到傳輸介質(zhì)的實(shí)際電和物理接口。數(shù)據(jù)鏈路層(L2)執(zhí)行數(shù)據(jù)成幀。網(wǎng)絡(luò)層(L3)將數(shù)據(jù)格式化成分組。傳送層(L4)操縱端到端傳送。會(huì)話層(L5)管理在設(shè)備之間的通信、例如通信是半雙工還是全雙工。呈現(xiàn)層(L6)管理數(shù)據(jù)格式化和呈現(xiàn)、例如語(yǔ)法、控制代碼、特殊圖形和字符集合。應(yīng)用層(L7)允許在用戶之間的通信、例如文件傳送和電子郵件。
[0064]網(wǎng)絡(luò)服務(wù)處理器100可以對(duì)用于更高級(jí)網(wǎng)絡(luò)協(xié)議、例如L4-L7的工作(例如分組處理操作)進(jìn)行調(diào)度和排隊(duì)并且使更高級(jí)網(wǎng)絡(luò)協(xié)議在接收的分組中的處理能夠被執(zhí)行,從而以線速(即網(wǎng)絡(luò)——可以通過(guò)該網(wǎng)絡(luò)發(fā)送和接收數(shù)據(jù)——的數(shù)據(jù)傳送速率)轉(zhuǎn)發(fā)分組。通過(guò)處理協(xié)議以線速轉(zhuǎn)發(fā)分組,網(wǎng)絡(luò)服務(wù)處理器100未減緩網(wǎng)絡(luò)數(shù)據(jù)傳送速率。網(wǎng)絡(luò)服務(wù)處理器100可以從可以是物理硬件接口的網(wǎng)絡(luò)接口 103a或者103b接收分組并且對(duì)接收的分組執(zhí)行L2-L7網(wǎng)絡(luò)協(xié)議處理。網(wǎng)絡(luò)服務(wù)處理器100可以隨后通過(guò)網(wǎng)絡(luò)接口 103a或者103b向在網(wǎng)絡(luò)中的另一跳躍、最終目的地或者通過(guò)另一總線(未示出)轉(zhuǎn)發(fā)處理的分組1lb用于由主機(jī)處理器(未示出)進(jìn)一步處理。網(wǎng)絡(luò)協(xié)議處理可以包括處理網(wǎng)絡(luò)安全性協(xié)議、t匕如防火墻、應(yīng)用防火墻、包括IP安全性(IPSec)和/或安全套接字層(SSL)的虛擬專用網(wǎng)(VPN)、入侵檢測(cè)系統(tǒng)(IDS)和防病毒(AV)。
[0065]網(wǎng)絡(luò)服務(wù)器處理器100可以使用多個(gè)處理器(即核)來(lái)交付高應(yīng)用性能。核(未示出)中的每個(gè)核可以專用于執(zhí)行數(shù)據(jù)平面或者控制平面操作。數(shù)據(jù)平面操作可以包括用于轉(zhuǎn)發(fā)分組的分組操作??刂破矫娌僮骺梢园ㄌ幚韽?fù)雜的更高級(jí)協(xié)議、比如網(wǎng)際協(xié)議安全性(IPSec)、傳輸控制協(xié)議(TCP)和安全套接字層(SSL)的部分。數(shù)據(jù)平面操作可以包括處理這些復(fù)雜的更高級(jí)協(xié)議的其它部分。
[0066]網(wǎng)絡(luò)服務(wù)處理器100也可以包括分流(offload)核的專用協(xié)同處理器(未示出),從而網(wǎng)絡(luò)服務(wù)處理器100實(shí)現(xiàn)高吞吐量。例如網(wǎng)絡(luò)服務(wù)處理器100可以包括加速單元106,該加速單元可以包括用于NFA處理的硬件加速的超非確定性自動(dòng)機(jī)(HNA)協(xié)同處理器108和用于DFA處理的硬件加速的超有限自動(dòng)機(jī)(HFA)協(xié)同處理器110。HNA 108和HFA 110協(xié)同處理器可以被配置為分流網(wǎng)絡(luò)服務(wù)處理器100通用核(未示出)的執(zhí)行計(jì)算和存儲(chǔ)器密集模式匹配方法的繁重負(fù)擔(dān)。
[0067]網(wǎng)絡(luò)服務(wù)處理器100可以執(zhí)行模式搜索、正則表達(dá)式處理、內(nèi)容驗(yàn)證、變換和安全性加速分組處理。正則表達(dá)式處理和模式搜索可以用來(lái)為AV和IDS應(yīng)用以及需要串匹配的其它應(yīng)用執(zhí)行串匹配。在網(wǎng)絡(luò)服務(wù)處理器100中的存儲(chǔ)器控制器(未示出)可以控制對(duì)操作地耦合到該網(wǎng)絡(luò)服務(wù)處理器100的存儲(chǔ)器104的訪問(wèn)。存儲(chǔ)器可以是內(nèi)部(即片上)或者外部(即片外)或者其組合并且可以被配置為存儲(chǔ)接收的數(shù)據(jù)分組、例如分組1la用于由網(wǎng)絡(luò)服務(wù)處理器100處理。存儲(chǔ)器可以被配置為存儲(chǔ)編譯的規(guī)則數(shù)據(jù),該編譯的規(guī)則數(shù)據(jù)用于在DFA和NFA圖形表達(dá)式檢索中的查找和模式匹配。可以存儲(chǔ)編譯的規(guī)則數(shù)據(jù)作為二值圖像112——該二進(jìn)制圖像包括用于DFA和NFA的編譯的規(guī)則數(shù)據(jù)——或者作為多個(gè)二進(jìn)制圖像,這些多個(gè)二進(jìn)制圖像從NFA編譯的規(guī)則數(shù)據(jù)分離DFA編譯的規(guī)則數(shù)據(jù)。
[0068]典型內(nèi)容感知應(yīng)用處理可以使用DFA或者NFA以識(shí)別在接收的分組的內(nèi)容中的模式。DFA和NFA均為有限自動(dòng)機(jī)、也就是計(jì)算模型,每個(gè)計(jì)算模型包括狀態(tài)集合、開(kāi)始狀態(tài)、輸入字母(所有可能字符的集合)和轉(zhuǎn)變函數(shù)。計(jì)算在開(kāi)始狀態(tài)中開(kāi)始并且根據(jù)轉(zhuǎn)變函數(shù)改變成新?tīng)顟B(tài)。
[0069]普遍使用正則表達(dá)式來(lái)表達(dá)模式,該正則表達(dá)式包括原子元素、例如普通文本字符如A-Z、0-9和元字符如*、~和I。正則表達(dá)式的原子元素是待匹配的符號(hào)(單字符)。原子元素可以與允許級(jí)聯(lián)(+)、備選(I)和克林星號(hào)(*)的元字符進(jìn)行組合。用于級(jí)聯(lián)的元字符可以用來(lái)創(chuàng)建來(lái)自單個(gè)字符(或者子串)的多個(gè)字符匹配模式,而用于備選(I)的元字符可以用來(lái)創(chuàng)建可以匹配兩個(gè)或者更多子串中的任何子串的正則表達(dá)式。元字符克林星號(hào)(*)允許模式匹配任何次數(shù)、包括未出現(xiàn)先前字符或者字符串。
[0070]組合不同算符和單字符允許構(gòu)造表達(dá)式的復(fù)雜子模式。例如子模式、比如(th (is I at) *)可以匹配多個(gè)字符串、比如:th、this、that、thisis、thisat、that is 或者thatat。表達(dá)式的復(fù)雜子模式的另一示例可以是并入字符類構(gòu)造[…]的子模式,該字符類構(gòu)造允許列舉搜尋的字符的列表。例如gr[ea]y尋找grey和gray 二者。其它復(fù)雜子模式示例是可以使用破折號(hào)以指示字符范圍的子模式、例如[A-Z]或者匹配任何一個(gè)字符的源字符”。模式的元素可以是原子元素或者一個(gè)或者多個(gè)原子元素與一個(gè)或者多個(gè)元字符組合的組合。
[0071]向DFA或者NFA狀態(tài)機(jī)的輸入通常是來(lái)自輸入流(即接收的分組)的(8比特)字節(jié)的串,也就是說(shuō),字母可以是單個(gè)字節(jié)(一個(gè)字符或者符號(hào))。在輸入流中的每個(gè)字節(jié)可以產(chǎn)生從一個(gè)狀態(tài)向另一狀態(tài)的轉(zhuǎn)變。DFA或者NFA狀態(tài)機(jī)的狀態(tài)和轉(zhuǎn)變函數(shù)可以由圖形代表。在圖形中的每個(gè)節(jié)點(diǎn)可以代表狀態(tài),并且在圖形中的弧可以代表狀態(tài)轉(zhuǎn)變。狀態(tài)機(jī)的當(dāng)前狀態(tài)可以由選擇圖形中的特定節(jié)點(diǎn)的節(jié)點(diǎn)標(biāo)識(shí)符代表。
[0072]使用DFA以處理正則表達(dá)式并且在輸入字符流中發(fā)現(xiàn)正則表達(dá)式描述的一個(gè)或者多個(gè)模式可以被表征為具有確定性運(yùn)行時(shí)間性能??梢詮妮斎胱址?或者符號(hào))和DFA的當(dāng)前狀態(tài)確定DFA的下一狀態(tài),因?yàn)槊恳?DFA狀態(tài)僅有一個(gè)狀態(tài)轉(zhuǎn)變。這樣,DFA的運(yùn)行時(shí)間性能被認(rèn)為是確定性的,并且可以從輸入完全地預(yù)測(cè)行為。然而用于確定性的折衷是這樣的圖形,在該圖形中,節(jié)點(diǎn)的數(shù)目(或者圖形大小)可以隨著模式的大小呈指數(shù)地增長(zhǎng)。
[0073]對(duì)照而言,可以表征NFA圖形的節(jié)點(diǎn)的數(shù)目(或者圖形大小)為隨著模式的大小線性地增長(zhǎng)。然而使用NFA以處理正則表達(dá)式并且在輸入字符流中發(fā)現(xiàn)正則表達(dá)式描述的一個(gè)或者多個(gè)模式可以被表征為具有非確定性運(yùn)行時(shí)間性能。例如給定輸入字符(或者符號(hào))和NFA的當(dāng)前狀態(tài),有可能的是有NFA的待轉(zhuǎn)變成的多于一個(gè)的下一狀態(tài)。這樣,不能從輸入和NFA的當(dāng)前狀態(tài)唯一地確定NFA的下一狀態(tài)。因此,認(rèn)為NFA的運(yùn)行時(shí)間性能為非確定性,因?yàn)椴荒軓妮斎胪耆仡A(yù)測(cè)行為。
[0074]圖2A-G示出DFA“圖形展開(kāi)”概念。圖2A、2B和2C分別示出用于模式*a[~\n] ”、 *a[~\n] Γ\η] *a[~\n] Γ\η] Γ\η] ”的圖形,并且圖2D、2E和2F分別示出用于相同模式的DFA圖形。如圖2A-2F中所不和圖2G的表概括的那樣,NFA可以對(duì)于一些模式線性地增長(zhǎng),而用于相同模式的DFA可以呈指數(shù)地增長(zhǎng)從而產(chǎn)生圖形展開(kāi)。如圖所示,對(duì)于一個(gè)或者多個(gè)給定的模式,DFA狀態(tài)的數(shù)目可以大于NFA狀態(tài)的數(shù)目、通常為多數(shù)百個(gè)或者多數(shù)千個(gè)狀態(tài)這一量級(jí)。這是“圖形展開(kāi)”的示例,該圖形展開(kāi)是DFA的標(biāo)志特性。
[0075]根據(jù)這里公開(kāi)的實(shí)施例,可以使用DFA、NFA或者其組合來(lái)執(zhí)行內(nèi)容搜索。根據(jù)一個(gè)實(shí)施例,運(yùn)行時(shí)間處理器、協(xié)同處理器或者其組合可以在硬件中被實(shí)施并且可以被配置為實(shí)施編譯器和遍歷器(walker)。
[0076]編譯器可以將模式或者模式(也稱為簽名或者規(guī)則)的輸入列表編譯成DFA、NFA或者其組合。DFA和NFA可以是二進(jìn)制數(shù)據(jù)結(jié)構(gòu)、比如DFA和NFA圖形和表。
[0077]遍歷器可以執(zhí)行運(yùn)行時(shí)間處理、即用于標(biāo)識(shí)在輸入流中存在模式或者匹配模式與在輸入流中的內(nèi)容的動(dòng)作。內(nèi)容可以是網(wǎng)際協(xié)議(IP)數(shù)據(jù)報(bào)的凈荷部分或者在輸入流中的任何其它適當(dāng)凈荷。DFA或者NFA圖形的運(yùn)行時(shí)間處理可以稱為用凈荷對(duì)DFA或者NFA圖形進(jìn)行遍歷以確定模式匹配。被配置為生成DFA、NFA或者其組合的處理器可以這里稱為編譯器。被配置為使用生成的DFA、NFA或者其組合來(lái)實(shí)施凈荷的運(yùn)行時(shí)間處理的處理器可以這里稱為遍歷器。根據(jù)這里公開(kāi)的實(shí)施例,網(wǎng)絡(luò)服務(wù)處理器100可以被配置為在安全設(shè)備102中實(shí)施編譯器和遍歷器。
[0078]圖3A是其中可以實(shí)施本發(fā)明的實(shí)施例的圖1的安全設(shè)備102的另一實(shí)施例的框圖。如參照?qǐng)D1描述的那樣,安全設(shè)備102可以操作地耦合到一個(gè)或者多個(gè)網(wǎng)絡(luò)并且可以包括存儲(chǔ)器104和可以包括加速單元106的網(wǎng)絡(luò)服務(wù)處理器100。參照?qǐng)D3A,網(wǎng)絡(luò)服務(wù)處理器100可以被配置為實(shí)施生成二進(jìn)制圖像112的編譯器306和使用二進(jìn)制圖像112的遍歷器320。例如編譯器306可以生成二進(jìn)制圖像112,該二進(jìn)制圖像包括由遍歷器302用于對(duì)接收的分組101a(圖1中所示)執(zhí)行模式匹配方法的編譯的規(guī)則數(shù)據(jù)。根據(jù)這里公開(kāi)的實(shí)施例,編譯器306可以如以下進(jìn)一步描述的那樣通過(guò)基于至少一個(gè)試探(heuristic)確定用于DFA、NFA或者其組合的編譯的規(guī)則數(shù)據(jù)來(lái)生成二進(jìn)制圖像112。編譯器306可以確定有利地適合用于DFA和NFA的規(guī)則數(shù)據(jù)。
[0079]根據(jù)這里公開(kāi)的實(shí)施例,編譯器306可以通過(guò)處理可包括一個(gè)或者多個(gè)正則表達(dá)式模式的集合304和可選限定符308的規(guī)則集合310來(lái)生成二進(jìn)制圖像112。從規(guī)則集合310,編譯器306可以使用從所有一個(gè)或者多個(gè)正則表達(dá)式模式中選擇的子模式生成統(tǒng)一的DFA 312以及為在一個(gè)或者多個(gè)正則表達(dá)式模式的集合304中的至少一個(gè)模式生成至少一個(gè)NFA 314以用于由遍歷器302在運(yùn)行時(shí)間處理期間使用,而且生成元數(shù)據(jù)(未示出),該元數(shù)據(jù)包括用于在統(tǒng)一的DFA 312的狀態(tài)(未示出)與至少一個(gè)NFA 314的狀態(tài)之間轉(zhuǎn)變遍歷器320的映射信息??梢园磾?shù)據(jù)結(jié)構(gòu)將統(tǒng)一的DFA 312和至少一個(gè)NFA 314表示為圖形或者以任何其它適當(dāng)形式,并且可以按數(shù)據(jù)結(jié)構(gòu)表示元數(shù)據(jù)中的映射為一個(gè)或者多個(gè)表或者以任何其它適當(dāng)形式。根據(jù)這里公開(kāi)的實(shí)施例,如果從模式選擇的子模式是該模式,則不為該模式生成NFA。根據(jù)這里公開(kāi)的實(shí)施例,生成的每個(gè)NFA可以用于在集合中的特定模式,而可以基于來(lái)自集合中的所有模式的所有子模式生成統(tǒng)一的DFA。
[0080]遍歷器320通過(guò)基于來(lái)自在接收的分組1la中的凈荷的消耗字節(jié)來(lái)轉(zhuǎn)變統(tǒng)一的DFA 312和至少一個(gè)NFA的狀態(tài)、用凈荷對(duì)統(tǒng)一的DFA 312和至少一個(gè)NFA 314進(jìn)行遍歷。這樣,遍歷器320用凈荷遍歷經(jīng)過(guò)統(tǒng)一的DFA 312和至少一個(gè)NFA 314。
[0081]規(guī)則集合310可以包括一個(gè)或者多個(gè)正則表達(dá)式模式的集合304并且可以是以Perl兼容正則表達(dá)式(PCRE)腳本文件的形式或者任何其它適當(dāng)形式。PCRE已經(jīng)變成用于在安全性和聯(lián)網(wǎng)應(yīng)用中的正則表達(dá)式語(yǔ)法的實(shí)際規(guī)則。隨著需要深度分組檢查的更多應(yīng)用已經(jīng)顯現(xiàn)或者更多威脅已經(jīng)變成在因特網(wǎng)中盛行,用于標(biāo)識(shí)病毒/攻擊或者應(yīng)用的對(duì)應(yīng)簽名/模式也已經(jīng)變成更復(fù)雜。例如簽名數(shù)據(jù)庫(kù)已經(jīng)從具有簡(jiǎn)單串模式演變成具有通配符字符、范圍、字符類和高級(jí)PCRE簽名的正則表達(dá)式(regex)模式。
[0082]如圖3A中所示,可選限定符308可以各自與在正則表達(dá)式模式的集合304中的模式關(guān)聯(lián)。例如可選限定符322可以與模式316關(guān)聯(lián)??蛇x限定符308可以各自是一個(gè)或者多個(gè)限定符,該一個(gè)或者多個(gè)限定符指定希望的定制、高級(jí)PCRE簽名選項(xiàng)或者用于處理與限定符關(guān)聯(lián)的模式的其它適當(dāng)選項(xiàng)。例如限定符322可以指示是否希望用于模式316的高級(jí)PCRE簽名選項(xiàng)中的開(kāi)始偏移(即模式的在凈荷中匹配的第一匹配字符在凈荷中的位置)選項(xiàng)。
[0083]隨著應(yīng)用顯現(xiàn),開(kāi)始偏移已經(jīng)變成對(duì)于在深度分組檢查(DPI)系統(tǒng)中的處理而言重要。傳統(tǒng)上,僅需有限自動(dòng)機(jī)以報(bào)告給定的模式在輸入中存在或者未存在并且報(bào)告匹配的模式在凈荷中的結(jié)束偏移用于處理。如以下描述的那樣,參照?qǐng)D4-11,如果限定符322指示希望開(kāi)始偏移,則編譯器306可以用如下方式生成二進(jìn)制圖像112,該方式使遍歷器320報(bào)告(即聲明)模式的在凈荷中匹配的第一匹配字符在凈荷中的位置的偏移。
[0084]根據(jù)這里公開(kāi)的實(shí)施例,編譯器306可以使用從在一個(gè)或者多個(gè)正則表達(dá)式模式的集合304中的所有模式選擇的子模式302來(lái)生成統(tǒng)一的DFA 312。編譯器306可以如以下進(jìn)一步描述的那樣基于至少一個(gè)試探從在一個(gè)或者多個(gè)正則表達(dá)式模式的集合304中的每個(gè)模式選擇子模式302。編譯器306也可以為在集合中的至少一個(gè)模式316生成至少一個(gè)NFA 314,至少一個(gè)模式316的用于生成至少一個(gè)NFA 314的部分(未示出)和用于至少一個(gè)NFA 314的運(yùn)行時(shí)間處理(即遍歷)的至少一個(gè)遍歷方向可以基于選擇的子模式318的長(zhǎng)度是固定還是可變和選擇的子模式318在至少一個(gè)模式316內(nèi)的位置來(lái)確定。編譯器306可以在至少一個(gè)存儲(chǔ)器104中存儲(chǔ)統(tǒng)一的DFA 312和至少一個(gè)NFA 314。
[0085]編譯器可以確定選擇的潛在子模式的長(zhǎng)度是固定還是可變。例如可以確定子模式、比如“cedf ”的長(zhǎng)度具有固定長(zhǎng)度4,因?yàn)椤癱def ”是串,而可以確定包括算符的復(fù)雜子模式為具有可變長(zhǎng)度。例如復(fù)雜子模式、比如“a.*cdr\n] {O, 10}.*y”可以具有“cdr\n]{O, 10} ”作為選擇的子模式,該子模式可以具有可變長(zhǎng)度2至12。
[0086]根據(jù)這里公開(kāi)的實(shí)施例,子模式選擇可以基于至少一個(gè)試探。子模式是來(lái)自模式的一個(gè)或者多個(gè)連續(xù)元素的集合,其中來(lái)自模式的每個(gè)元素可以由在DFA或者NFA圖形中的節(jié)點(diǎn)代表用于匹配來(lái)自凈荷的字節(jié)或者字符。元素如以上描述的那樣可以是節(jié)點(diǎn)代表的單個(gè)文本字符或者節(jié)點(diǎn)代表的字符類。編譯器306可以如以上參照?qǐng)D2A-G描述的那樣基于子模式是否可能引起過(guò)度DFA圖形展開(kāi)來(lái)確定在模式中的哪些子模式更好地適合用于NFA。例如從包括連續(xù)文本字符的子模式生成DFA將不產(chǎn)生DFA圖形展開(kāi),而復(fù)雜子模式如以上描述的那樣可以包括算符以及字符、因此可以引起DFA圖形展開(kāi)。例如包括重復(fù)多次的通配符字符或者更大字符類的子模式(例如Γ\η]*οι.Γ\η] {16}))可以在DFA中引起過(guò)度狀態(tài)、因此可以更有利地適合用于NFA。
[0087]如以上公開(kāi)的那樣,從在一個(gè)或者多個(gè)正則表達(dá)式的集合304中的每個(gè)模式選擇子模式可以基于至少一個(gè)試探。根據(jù)一個(gè)實(shí)施例,至少一個(gè)試探可以包括最大化選擇的唯一子模式的數(shù)目和選擇的每個(gè)子模式的長(zhǎng)度。例如模式、比如“ab.*cdef.*mn”可以具有多個(gè)潛在子模式、比如“ab.*”、“cdef”和*mn”。編譯器可以選擇“cdef ”作為模式的子模式,因?yàn)樗窃谀J健癮b.*cdef.*mn”中的不可能引起DFA圖形展開(kāi)的最大子模式。然而如果已經(jīng)為另一模式選擇子模式“cdef”,則編譯器可以為模式“ab.*cdef.*mn”選擇備選子模式。備選地,編譯器可以將子模式“cdef”替換為用于其它模式的另一子模式,從而使子模式“cdef”能夠被選擇用于模式“ab.*cdef.*mn”。
[0088]這樣,編譯器306可以基于用于模式304的每個(gè)模式的可能子模式的情境,選擇模式304的子模式,從而實(shí)現(xiàn)最大化所選擇的唯一子模式的數(shù)目和所選擇的每個(gè)子模式的長(zhǎng)度。這樣,編譯器306可以從選擇的子模式302生成統(tǒng)一的DFA 312,該統(tǒng)一的DFA通過(guò)增加在至少一個(gè)NFA 314中的模式匹配的概率來(lái)最小化在至少一個(gè)NFA 314的模式匹配中的誤判(即無(wú)匹配或者部分匹配)的數(shù)目。
[0089]通過(guò)最大化子模式長(zhǎng)度,可以避免在NFA處理中的誤判。在NFA處理中的誤判可以造成非確定性運(yùn)行時(shí)間處理、因此可以減少運(yùn)行時(shí)間性能。另外,通過(guò)最大化選擇的唯一子模式的數(shù)目,編譯器306在被給定統(tǒng)一的DFA中的子模式(來(lái)自模式)的匹配的集合中實(shí)現(xiàn)在統(tǒng)一的DFA向從該模式生成的至少一個(gè)NFA 314之間的1:1轉(zhuǎn)變。
[0090]例如如果多個(gè)模式共享選擇的子模式,則統(tǒng)一的DFA的遍歷器將需要向多個(gè)至少一個(gè)DFA轉(zhuǎn)變,因?yàn)槊總€(gè)至少一個(gè)NFA是每模式NFA,并且來(lái)自統(tǒng)一 DFA中的子模式匹配表示用于多個(gè)模式中的每個(gè)模式的部分匹配。這樣,最大化唯一子模式的數(shù)目減少DFA=NFA1:N轉(zhuǎn)變的數(shù)目從而減少遍歷器320的運(yùn)行時(shí)間處理。
[0091]為了實(shí)現(xiàn)最大化唯一子模式的數(shù)目,編譯器302可以計(jì)算選擇的子模式318的哈希值326并且與從其選擇子模式318的模式316的標(biāo)識(shí)符(未示出)關(guān)聯(lián)地存儲(chǔ)計(jì)算的哈希值326。例如編譯器306可以為在集合304中的每個(gè)模式計(jì)算選擇的子模式的哈希值。計(jì)算的哈希值324可以存儲(chǔ)于至少一個(gè)存儲(chǔ)器104中作為表或者以任何適當(dāng)方式。使用的哈希方法可以是任何適當(dāng)哈希方法。編譯器可以比較計(jì)算的哈希值與為在集合中的其它模式選擇的子模式的哈希值的列表以便確定選擇的子模式是否唯一。
[0092]如果在列表中發(fā)現(xiàn)計(jì)算的哈希值,則編譯器可以確定是(i)用來(lái)自模式的另一子模式替換選擇的子模式還是(ii)用從在集合中的另一模式選擇的備選子模式替換為在集合中的另一模式選擇的子模式??梢曰谂c在列表中計(jì)算的哈希值的關(guān)聯(lián)性標(biāo)識(shí)在集合中的另一模式。用于是替換(i)還是(ii)的確定可以基于比較被考慮用于替換的子模式的長(zhǎng)度以便如以上描述的那樣最大化選擇的唯一子模式的長(zhǎng)度。替換選擇的子模式可以包括選擇為給定的模式標(biāo)識(shí)的下一最長(zhǎng)子模式或者下一最高優(yōu)先級(jí)的子模式。例如可以基于造成DFA展開(kāi)的可能性或者預(yù)計(jì)的DFA展開(kāi)的量值為潛在子模式設(shè)置優(yōu)先級(jí)。
[0093]根據(jù)這里公開(kāi)的實(shí)施例,至少一個(gè)試探可以包括標(biāo)識(shí)每個(gè)模式的子模式并且如果每個(gè)模式的標(biāo)識(shí)的子模式中的給定的子模式具有小于最小門(mén)限的長(zhǎng)度則忽略給定的子模式。例如為了減少在至少一個(gè)NFA中的誤判,編譯器可以忽略具有小于最小門(mén)限的長(zhǎng)度的子模式,因?yàn)檫@樣的子模式可以造成在至少一個(gè)NFA中的誤判的更高概率。
[0094]至少一個(gè)試探可以包括訪問(wèn)與歷史使用頻率指示符關(guān)聯(lián)的子模式的知識(shí)庫(kù)(未示出)并且如果在訪問(wèn)的知識(shí)庫(kù)中的用于每個(gè)模式的標(biāo)識(shí)的子模式中的給定的子模式的歷史使用頻率指示符大于或者等于使用頻率門(mén)限則忽略給定的子模式。例如應(yīng)用或者協(xié)議專屬子模式可以具有高使用頻率、比如對(duì)于超文本傳送協(xié)議(HTTP)的凈荷、“carriagereturn line feed”、或者凈流量(clear traffic)比如來(lái)自二進(jìn)制文件的多個(gè)連續(xù)O、或者任何其它頻繁使用的子模式。
[0095]至少一個(gè)試探可以包括標(biāo)識(shí)每個(gè)模式的子模式,以及對(duì)于每個(gè)模式通過(guò)基于標(biāo)識(shí)的子模式中的給定的子模式具有標(biāo)識(shí)的子模式的最大數(shù)目的連續(xù)文本指示符并且基于給定的子模式在為一個(gè)或者多個(gè)正則表達(dá)式的集合選擇的所有子模式之中唯一來(lái)選擇給定的子模式,而最大化在選擇的子模式中的連續(xù)文本字符的數(shù)目。如以上公開(kāi)的那樣,最大化選擇的子模式的長(zhǎng)度可以實(shí)現(xiàn)在至少一個(gè)NFA中的匹配的更高概率。
[0096]至少一個(gè)試探可以包括基于每個(gè)模式的給定的子模式中的每個(gè)子模式的子模式類型和給定的子模式的長(zhǎng)度為給定的子模式設(shè)置優(yōu)先級(jí)。子模式類型可以是僅文本、備選(alternat1n)、單字符重復(fù)或者多字符重復(fù),并且用于子模式類型的從最高到最低的優(yōu)先級(jí)可以是僅文本、備選(alternat1n)、單字符重復(fù)和多字符重復(fù)。這樣,具有至少最小長(zhǎng)度門(mén)限的長(zhǎng)度的作為文本串的子模式可以優(yōu)先級(jí)高于可變長(zhǎng)度的復(fù)雜子模式。
[0097]編譯器306可以使更長(zhǎng)長(zhǎng)度子模式被設(shè)置優(yōu)先級(jí)高于更少長(zhǎng)度的另一子模式。編譯器306可以基于優(yōu)先級(jí)設(shè)置選擇唯一子模式作為選擇的子模式。如以上描述的那樣,選擇的唯一子模式可以具有至少最小長(zhǎng)度門(mén)限的長(zhǎng)度。
[0098]如果給定的子模式都不唯一和具有至少最小長(zhǎng)度門(mén)限的長(zhǎng)度,則編譯器306可以基于優(yōu)先級(jí)設(shè)置選擇非唯一子模式作為選擇的子模式。這樣,編譯器306可以從模式選擇子模式一該子模式是從另一模式選擇的子模式的重復(fù)一而不是選擇具有小于最小門(mén)限的長(zhǎng)度的子模式。為了有助于最后確定子模式,編譯器306可以對(duì)模式執(zhí)行多遍并且按長(zhǎng)度對(duì)可能子模式進(jìn)行排序。這樣,用于在一個(gè)或者多個(gè)正則表達(dá)式的集合304中的給定的模式的編譯器子模式選擇可以在用于在一個(gè)或者多個(gè)正則表達(dá)式的集合304中的其它模式的子模式選擇的情境內(nèi)被執(zhí)行。
[0099]如以上描述的那樣,限定符322可以指示希望報(bào)告開(kāi)始偏移。然而開(kāi)始偏移可能不容易可辨認(rèn)。例如在凈荷中發(fā)現(xiàn)與模式比如“a.*b”或者“a.*d”匹配的開(kāi)始偏移可能在給定凈荷、比如“axycamb”時(shí)有難度,因?yàn)閮蓚€(gè)模式可以匹配“axycamb”和“amb”。這樣,可能需要跟蹤用于凈荷中的“a”的兩個(gè)實(shí)例的偏移作為潛在開(kāi)始偏移。根據(jù)這里公開(kāi)的實(shí)施例,無(wú)需跟蹤潛在開(kāi)始偏移,因?yàn)殚_(kāi)始偏移并沒(méi)有確定直到整個(gè)模式的匹配被確定為已經(jīng)在凈荷中發(fā)現(xiàn)??梢岳脕?lái)自統(tǒng)一的DFA、至少一個(gè)NFA或者其組合的匹配結(jié)果來(lái)發(fā)現(xiàn)確定整個(gè)模式的匹配。
[0100]根據(jù)這里公開(kāi)的實(shí)施例,如果在接收的分組101中的凈荷包括與從模式316選擇的子模式318匹配的內(nèi)容,則遍歷器可以轉(zhuǎn)變成對(duì)用于模式318的至少一個(gè)NFA進(jìn)行遍歷。遍歷器320可以報(bào)告選擇的子模式318的匹配和偏移,該偏移標(biāo)識(shí)匹配子模式的最后字符在接收的分組中的位置作為凈荷中的用于子模式的結(jié)束偏移。如果子模式是模式的子集,則子模式匹配可以是用于模式的部分匹配。這樣,遍歷器320可以通過(guò)對(duì)用于模式的至少一個(gè)NFA進(jìn)行遍歷來(lái)繼續(xù)在凈荷中搜尋模式的其余部分以便確定用于模式的最終匹配。應(yīng)當(dāng)理解模式可以遍歷在接收的分組1la中的一個(gè)或者多個(gè)凈荷。
[0101]圖3B是可以在操作地耦合到網(wǎng)絡(luò)的安全設(shè)備中操作地耦合到至少一個(gè)存儲(chǔ)器的至少一個(gè)處理器中實(shí)施的方法的一個(gè)示例實(shí)施例的流程圖(350)。該方法可以開(kāi)始(352)并且基于至少一個(gè)試探從在一個(gè)或者多個(gè)正則表達(dá)式模式的集合中的每個(gè)模式選擇子模式(354)。該方法可以使用從集合中的所有模式選擇的子模式來(lái)生成統(tǒng)一的確定性自動(dòng)機(jī)(DFA) (356)。該方法可以為在集合中的至少一個(gè)模式生成至少一個(gè)非確定性自動(dòng)機(jī)(NFA),至少一個(gè)模式的用于生成至少一個(gè)NFA的部分和用于至少一個(gè)NFA的運(yùn)行時(shí)間處理的至少一個(gè)遍歷方向基于選擇的子模式的長(zhǎng)度是固定的還是可變和選擇的子模式在至少一個(gè)模式內(nèi)的位置來(lái)確定(358)。該方法可以在至少一個(gè)存儲(chǔ)器中存儲(chǔ)生成的統(tǒng)一的DFA和至少一個(gè)NFA(360)。該方法隨后在示例實(shí)施例中結(jié)束(362)。
[0102]如以上公開(kāi)的那樣,編譯器306可以生成統(tǒng)一的DFA 312和至少一個(gè)NFA 314以使遍歷器320能夠在接收的分組1la中搜尋一個(gè)或者多個(gè)正則表達(dá)式模式的集合304的匹配。編譯器306可以基于至少一個(gè)試探從在一個(gè)或者多個(gè)正則表達(dá)式模式的集合304中的每個(gè)模式選擇子模式??梢允褂脧脑诩?04中的所有模式選擇的子模式302來(lái)生成統(tǒng)一的DFA 312。編譯器306可以為在集合304中的至少一個(gè)模式316生成至少一個(gè)NFA314。至少一個(gè)模式的用于生成至少一個(gè)NFA 314的部分和用于至少一個(gè)NFA 314的運(yùn)行時(shí)間處理的至少一個(gè)遍歷方向可以如以下參照?qǐng)D4-11公開(kāi)的那樣基于選擇的子模式318的長(zhǎng)度是固定還是可變和選擇的子模式318在至少一個(gè)模式316內(nèi)的位置來(lái)確定。
[0103]圖4是用于基于選擇的子模式404的長(zhǎng)度固定和選擇的子模式的位置是至少一個(gè)模式406的開(kāi)始位置來(lái)生成統(tǒng)一的DFA 312和至少一個(gè)NFA 314的框圖400。如圖4中所示,選擇的子模式404的第一元素408是至少一個(gè)模式406的第一元素。至少一個(gè)模式的用于生成至少一個(gè)NFA 402的部分410可以是排除選擇的子模式404的至少一個(gè)模式406。至少一個(gè)NFA 314可以是單個(gè)NFA 402,并且至少一個(gè)NFA 314的至少一個(gè)遍歷方向可以是前向遍歷方向412。例如對(duì)于給定的模式、比如“cavium”,前向遍歷方向?qū)⒃趶摹癱”到“m”的遍歷方向上經(jīng)過(guò)至少一個(gè)NFA 314的節(jié)點(diǎn)對(duì)輸入凈荷進(jìn)行遍歷,而相反遍歷方向?qū)⒃趶摹癿”到“c”的遍歷方向上對(duì)輸入凈荷進(jìn)行遍歷。
[0104]根據(jù)圖4的示例實(shí)施例,編譯器306可以將統(tǒng)一的DFA 312的、與選擇的子模式404的最后元素416關(guān)聯(lián)的DFA節(jié)點(diǎn)414與元數(shù)據(jù)418關(guān)聯(lián)。元數(shù)據(jù)418可以向被配置為用凈荷426對(duì)統(tǒng)一的DFA312和至少一個(gè)NFA 314進(jìn)行遍歷的遍歷器320指示指向單個(gè)NFA402的開(kāi)始節(jié)點(diǎn)422的指針420。元數(shù)據(jù)418可以包括用于轉(zhuǎn)變至在前向遍歷方向412上對(duì)單個(gè)NFA 402進(jìn)行遍歷的指令。單個(gè)NFA 402的開(kāi)始節(jié)點(diǎn)422可以與至少一個(gè)模式406的用于生成單個(gè)NFA 402的部分410的第一元素424關(guān)聯(lián)。元數(shù)據(jù)418可以向遍歷器320指示報(bào)告選擇的子模式404的匹配、在DFA節(jié)點(diǎn)414的與選擇的子模式404的最后元素416匹配的(字符430中的)前導(dǎo)字符在凈荷426內(nèi)的(偏移428中的)前導(dǎo)偏移作為選擇的子模式的結(jié)束偏移、以及選擇的子模式的長(zhǎng)度。用于對(duì)單個(gè)NFA 402進(jìn)行遍歷的凈荷開(kāi)始偏移可以是在凈荷426中的結(jié)束偏移的字節(jié)之后的字節(jié)的偏移。例如可以確定在凈荷中的用于在開(kāi)始節(jié)點(diǎn)422開(kāi)始單個(gè)NFA 402的遍歷的下一字符為在凈荷中的結(jié)束偏移的字節(jié)之后的字節(jié)。由于選擇的子模式的長(zhǎng)度固定,所以編譯器306可以確定選擇的子模式的長(zhǎng)度并且在元數(shù)據(jù)418中包括它。遍歷器320可以使用在元數(shù)據(jù)418中包括的長(zhǎng)度以便確定模式406在凈荷426內(nèi)的開(kāi)始偏移。例如如果限定符308中的限定符需要,則遍歷器320可以通過(guò)從確定的結(jié)束偏移減去在元數(shù)據(jù)418中包括的長(zhǎng)度來(lái)確定開(kāi)始偏移。
[0105]應(yīng)當(dāng)理解可以用任何適當(dāng)方式執(zhí)行報(bào)告。例如遍歷器320可以通過(guò)向網(wǎng)絡(luò)服務(wù)處理器100聲明結(jié)束偏移一例如通過(guò)向存儲(chǔ)器位置寫(xiě)入、觸發(fā)中斷、發(fā)送或者發(fā)表消息等——來(lái)報(bào)告結(jié)束偏移。備選地,遍歷器320可以通過(guò)在它自己的數(shù)據(jù)結(jié)構(gòu)中聲明結(jié)束偏移或者其它確立的結(jié)果用于在遍歷器本身的過(guò)程中使用來(lái)基于匹配結(jié)果報(bào)告結(jié)束偏移或者任何其它偏移或者息。
[0106]根據(jù)圖4的示例實(shí)施例,編譯器306可以將生成的單個(gè)NFA的NFA節(jié)點(diǎn)432與元數(shù)據(jù)434關(guān)聯(lián),該元數(shù)據(jù)向遍歷器指示用于終止遍歷的指令,因?yàn)橐呀?jīng)標(biāo)識(shí)整個(gè)模式406的最終匹配。NFA節(jié)點(diǎn)432可以與至少一個(gè)模式406的最后元素436關(guān)聯(lián)。元數(shù)據(jù)434可以指示遍歷器320報(bào)告在NFA節(jié)點(diǎn)432匹配的(字符430中的)滯后字符在凈荷426內(nèi)的(偏移428中的)滯后偏移作為至少一個(gè)模式406的結(jié)束偏移以及至少一個(gè)模式406的最終匹配。
[0107]遍歷器320可以使得用于給定的模式的每個(gè)遍歷與事務(wù)標(biāo)識(shí)符相關(guān)。這樣,可以與對(duì)應(yīng)事務(wù)標(biāo)識(shí)符關(guān)聯(lián)地報(bào)告子模式長(zhǎng)度、凈荷字符偏移和模式匹配結(jié)果。在示例實(shí)施例中,網(wǎng)絡(luò)服務(wù)處理器100可以基于用于搜尋給定的模式的遍歷的事務(wù)標(biāo)識(shí)符使得用于給定的模式的遍歷器結(jié)果信息相關(guān)。
[0108]圖5是用于基于選擇的子模式504的位置是至少一個(gè)模式506的中間位置并且選擇的子模式504的長(zhǎng)度固定來(lái)生成統(tǒng)一的DFA312和至少一個(gè)NFA 314的框圖500。根據(jù)圖5的示例實(shí)施例,至少一個(gè)模式506的用于生成至少一個(gè)NFA 314的部分包括至少一個(gè)模式506的滯后部分508和前導(dǎo)部分510。如圖5中所不,至少一個(gè)模式506的滯后部分508可以是排除選擇的子模式506和至少一個(gè)模式506的前導(dǎo)部分510的至少一個(gè)模式506。至少一個(gè)模式506的前導(dǎo)部分510排除選擇的子模式506和至少一個(gè)模式506的滯后部分508。
[0109]根據(jù)圖5的示例實(shí)施例,至少一個(gè)NFA 314包括滯后NFA 512和前導(dǎo)NFA 514。至少一個(gè)遍歷方向包括前向遍歷方向516和反向遍歷方向518。滯后NFA 512可以在前向遍歷方向516上被遍歷,并且前導(dǎo)NFA 514可以在反向遍歷方向518上被遍歷。至少一個(gè)模式506的滯后部分508可以用于生成滯后NFA 512,并且至少一個(gè)模式506的前導(dǎo)部分510可以用于生成前導(dǎo)NFA 514。
[0110]根據(jù)圖5的示例實(shí)施例,編譯器306可以關(guān)聯(lián)具有選擇的子模式504的最后元素522的、統(tǒng)一的DFA 312的DFA節(jié)點(diǎn)515與元數(shù)據(jù)520。元數(shù)據(jù)520可以向被配置為用凈荷、比如圖4的凈荷426對(duì)統(tǒng)一的DFA 312和至少一個(gè)NFA 314進(jìn)行遍歷的遍歷器進(jìn)行指示。元數(shù)據(jù)520可以包括指向滯后NFA 512的開(kāi)始節(jié)點(diǎn)526的指針524、用于轉(zhuǎn)變遍歷器320以在凈荷426中的結(jié)束偏移的字節(jié)之后的字節(jié)的偏移開(kāi)始用凈荷在前向遍歷方向516上對(duì)滯后NFA 512進(jìn)行遍歷的指令。滯后NFA 512的開(kāi)始節(jié)點(diǎn)526可以與滯后部分508的第一元素關(guān)聯(lián)。元數(shù)據(jù)520可以指示指向前導(dǎo)NFA 514的開(kāi)始節(jié)點(diǎn)532的指針530和用于遍歷器320轉(zhuǎn)變至在反向遍歷方向518上對(duì)前導(dǎo)NFA 514進(jìn)行遍歷的指令。前導(dǎo)NFA 514的開(kāi)始節(jié)點(diǎn)532可以與前導(dǎo)部分510的最后元素534關(guān)聯(lián)。元數(shù)據(jù)520可以向遍歷器320指示報(bào)告在DFA節(jié)點(diǎn)515的與選擇的子模式522的最后元素匹配的(字符430中的)字符在凈荷426內(nèi)的(偏移428中)的偏移作為選擇的子模式504的結(jié)束偏移、選擇的子模式的匹配和選擇的子模式的長(zhǎng)度。遍歷器320可以使用在元數(shù)據(jù)520中包括的長(zhǎng)度以便通過(guò)從選擇的子模式504的結(jié)束偏移減去在元數(shù)據(jù)520中的選擇的子模式的長(zhǎng)度來(lái)確定用于在開(kāi)始節(jié)點(diǎn)532開(kāi)始反向遍歷的起始凈荷偏移。
[0111]根據(jù)圖5的不例實(shí)施例,編譯器306可以關(guān)聯(lián)滯后NFA 512的與至少一個(gè)模式506的最后元素538關(guān)聯(lián)的滯后節(jié)點(diǎn)536與元數(shù)據(jù)540。元數(shù)據(jù)540可以向遍歷器320指示終止對(duì)滯后NFA 512進(jìn)行遍歷和報(bào)告凈荷426的與在滯后節(jié)點(diǎn)536的最后元素538匹配的(字符430中的)滯后字符在凈荷426內(nèi)的(偏移428中的)滯后偏移的指令。元數(shù)據(jù)540可以向遍歷器320指示報(bào)告至少一個(gè)模式506的滯后部分508的匹配。
[0112]根據(jù)圖5的示例實(shí)施例,編譯器306可以關(guān)聯(lián)前導(dǎo)NFA 514的與至少一個(gè)模式506的第一元素關(guān)聯(lián)的前導(dǎo)節(jié)點(diǎn)542與元數(shù)據(jù)546,該元數(shù)據(jù)向遍歷器320指示用于終止對(duì)前導(dǎo)NFA 514進(jìn)行遍歷的指令。元數(shù)據(jù)546可以向遍歷器320指示報(bào)告至少一個(gè)模式506的前導(dǎo)部分510的匹配。如果與至少一個(gè)模式506關(guān)聯(lián)的限定符、比如限定符308之一需要,則元數(shù)據(jù)546可以向遍歷器320指示報(bào)告凈荷426的與在前導(dǎo)節(jié)點(diǎn)542的第一元素544匹配的(字符430中的)前導(dǎo)字符在凈荷426內(nèi)的(偏移428中的)前導(dǎo)偏移作為至少一個(gè)模式506的開(kāi)始偏移。
[0113]圖6是用于基于選擇的子模式的位置是至少一個(gè)模式的中間位置或者開(kāi)始位置并且子模式的長(zhǎng)度是固定或者可變來(lái)生成統(tǒng)一的DFA 312和至少一個(gè)NFA 314的一個(gè)實(shí)施例的框圖600。根據(jù)圖6的示例實(shí)施例,至少一個(gè)模式606的用于生成至少一個(gè)NFA 314的部分包括至少一個(gè)模式606的滯后部分608和整個(gè)部分610。至少一個(gè)模式606的滯后部分608可以是排除至少一個(gè)模式606的前導(dǎo)部分612的至少一個(gè)模式606。前導(dǎo)部分612包括至少一個(gè)模式606的第一元素614、選擇的子模式604的最后元素616和在至少一個(gè)模式606中的在它們之間的所有兀素。至少一個(gè)模式606的整個(gè)部分610可以是至少一個(gè)模式 606。
[0114]如果選擇的子模式604的第一元素618不是至少一個(gè)模式606的第一元素并且選擇的子模式604的最后元素616不是至少一個(gè)模式606的最后元素620,則選擇的子模式的位置是至少一個(gè)模式606的中間位置,并且開(kāi)始部分622在至少一個(gè)模式606中先于選擇的子模式604。
[0115]如果選擇的子模式604的第一元素618是至少一個(gè)模式的第一元素614,則選擇的子模式的位置是至少一個(gè)模式606的開(kāi)始位置。如果選擇的子模式的位置是開(kāi)始位置,則開(kāi)始部分622不存在并且前導(dǎo)部分612是選擇的子模式604。
[0116]根據(jù)圖6的示例實(shí)施例,至少一個(gè)NFA包括滯后NFA 624和傘形NFA 626。至少一個(gè)遍歷方向包括前向遍歷方向628和反向遍歷方向630。滯后NFA 624具有前向遍歷方向628,并且傘形NFA 626具有反向遍歷方向630。至少一個(gè)模式606的滯后部分608可以由編譯器306用于生成滯后NFA 624。至少一個(gè)模式606的整個(gè)部分610可以由編譯器306用于生成傘形NFA 626。
[0117]根據(jù)圖6的示例實(shí)施例,編譯器306可以關(guān)聯(lián)具有選擇的子模式604的最后元素616的、統(tǒng)一的DFA 312的DFA節(jié)點(diǎn)632與元數(shù)據(jù)634。元數(shù)據(jù)634可以向遍歷器320指示指向滯后NFA 624的開(kāi)始節(jié)點(diǎn)638的指針636和用于轉(zhuǎn)變至在前向遍歷方向628上對(duì)滯后NFA 624進(jìn)行遍歷的指令。滯后NFA 624的開(kāi)始節(jié)點(diǎn)638可以與滯后部分608的第一元素640關(guān)聯(lián)。元數(shù)據(jù)634可以向遍歷器320指示報(bào)告選擇的子模式604的匹配,和在DFA節(jié)點(diǎn)的與選擇的子模式604的最后元素616匹配的(字符430中的)字符在凈荷426內(nèi)的(偏移428中的)偏移作為選擇的子模式604的結(jié)束偏移,并且如果選擇的子模式604的長(zhǎng)度固定則報(bào)告長(zhǎng)度。
[0118]根據(jù)圖6的不例實(shí)施例,編譯器306可以關(guān)聯(lián)滯后NFA 624的與至少一個(gè)模式606的最后元素620關(guān)聯(lián)的滯后節(jié)點(diǎn)642與元數(shù)據(jù)652。元數(shù)據(jù)652可以向遍歷器320指示指向傘形NFA 626的開(kāi)始節(jié)點(diǎn)646的指針644、用于轉(zhuǎn)變至在反向遍歷方向630上對(duì)傘形626進(jìn)行遍歷的指令。傘形626的開(kāi)始節(jié)點(diǎn)646可以與至少一個(gè)模式606的最后元素620關(guān)聯(lián)。元數(shù)據(jù)652可以向遍歷器指示可選地報(bào)告在滯后節(jié)點(diǎn)642的與至少一個(gè)模式606的最后元素620匹配的(字符430中的)字符在凈荷426內(nèi)的(偏移428中的)偏移并且可選地報(bào)告至少一個(gè)模式606的滯后部分608的匹配。
[0119]根據(jù)圖6的不例實(shí)施例,編譯器306可以關(guān)聯(lián)傘形NFA 626的與至少一個(gè)模式606的第一元素614關(guān)聯(lián)的傘形節(jié)點(diǎn)648與元數(shù)據(jù)650。元數(shù)據(jù)650可以向遍歷器320指示用于終止遍歷并且報(bào)告至少一個(gè)模式606的最終匹配的指令。如果限定符308中的與至少一個(gè)模式606關(guān)聯(lián)的限定符需要,則元數(shù)據(jù)650可以向遍歷器指示報(bào)告在傘形節(jié)點(diǎn)648的與至少一個(gè)模式606的第一元素614匹配的開(kāi)始字符在凈荷426內(nèi)的(偏移428中的)開(kāi)始偏移作為至少一個(gè)模式606的開(kāi)始偏移。
[0120]圖7是基于選擇的子模式704的位置是至少一個(gè)模式706的中間位置或者開(kāi)始位置并且選擇的子模式704的長(zhǎng)度固定或者可變來(lái)生成統(tǒng)一的DFA 312和至少一個(gè)NFA 314的另一實(shí)施例的框圖。根據(jù)圖7的示例實(shí)施例,至少一個(gè)模式的用于生成NFA 314的部分包括至少一個(gè)模式706的滯后部分708和前導(dǎo)部分712。至少一個(gè)模式706的滯后部分708可以是排除至少一個(gè)模式706的前導(dǎo)部分712的至少一個(gè)模式706。前導(dǎo)部分712包括至少一個(gè)模式706的第一元素714、選擇的子模式704的最后元素716和在至少一個(gè)模式706中的在它們之間的所有元素。如果選擇的子模式704的位置是開(kāi)始位置,則前導(dǎo)部分712可以是選擇的子模式。
[0121]如果選擇的子模式704的第一元素718不是至少一個(gè)模式706的第一元素714并且選擇的子模式704的最后元素716不是至少一個(gè)模式706的最后元素720,則選擇的子模式的位置是至少一個(gè)模式706的中間位置并且開(kāi)始部分722在至少一個(gè)模式706中先于選擇的子模式704。
[0122]如果選擇的子模式704的第一元素718是至少一個(gè)模式的第一元素714,則選擇的子模式的位置是至少一個(gè)模式706的開(kāi)始位置。如果選擇的子模式的位置是開(kāi)始位置,則開(kāi)始部分722不存在并且前導(dǎo)部分712是選擇的子模式704。
[0123]根據(jù)圖7的示例實(shí)施例,至少一個(gè)NFA 314包括滯后NFA 724和前導(dǎo)NFA 726,至少一個(gè)遍歷方向包括前向遍歷方向728和反向遍歷方向730。滯后NFA 724具有前向遍歷方向728。前導(dǎo)NFA 726具有反向遍歷方向730。至少一個(gè)模式706的滯后部分708可以用于生成滯后NFA 724。至少一個(gè)模式706的前導(dǎo)部分712可以用于生成前導(dǎo)NFA 726。
[0124]根據(jù)圖7的示例實(shí)施例,編譯器306可以關(guān)聯(lián)統(tǒng)一的DFA 312的與選擇的子模式704的最后元素716關(guān)聯(lián)的DFA節(jié)點(diǎn)732與元數(shù)據(jù)734。元數(shù)據(jù)734可以向遍歷器320指示指向滯后NFA 724的開(kāi)始節(jié)點(diǎn)738的指針736和用于轉(zhuǎn)變至在前向遍歷方向728上對(duì)滯后NFA 724進(jìn)行遍歷的指令。滯后NFA 724的開(kāi)始節(jié)點(diǎn)738可以與滯后部分708的第一元素740關(guān)聯(lián)。凈荷的用于開(kāi)始滯后NFA 724的前向遍歷的開(kāi)始偏移可以是在選擇的子模式704的結(jié)束偏移的字節(jié)之后的字節(jié)的偏移。元數(shù)據(jù)734可以向遍歷器320指示指向前導(dǎo)NFA726的開(kāi)始節(jié)點(diǎn)746的指針744和用于轉(zhuǎn)變至在反向遍歷方向730上對(duì)前導(dǎo)NFA 726進(jìn)行遍歷的指令。前導(dǎo)NFA 726的開(kāi)始節(jié)點(diǎn)746可以與選擇的子模式704的最后元素716關(guān)聯(lián)。用于開(kāi)始前導(dǎo)NFA726的反向遍歷的凈荷偏移可以是選擇的子模式704的結(jié)束偏移。元數(shù)據(jù)734可以向遍歷器320指示報(bào)告選擇的子模式704的匹配,和在DFA節(jié)點(diǎn)732的與選擇的子模式704的最后元素716匹配的(字符430中)的字符在凈荷426內(nèi)的(偏移428中的)偏移作為選擇的子模式704的結(jié)束偏移,并且如果選擇的子模式704的長(zhǎng)度固定則報(bào)告長(zhǎng)度。
[0125]根據(jù)圖7的示例實(shí)施例,編譯器306可以關(guān)聯(lián)滯后NFA 724的與至少一個(gè)模式706的最后元素720關(guān)聯(lián)的滯后節(jié)點(diǎn)742與元數(shù)據(jù)752。元數(shù)據(jù)752可以向遍歷器320指示終止對(duì)滯后NFA進(jìn)行遍歷并且報(bào)告在滯后節(jié)點(diǎn)742的與至少一個(gè)模式706的最后元素720匹配的(字符430中的)滯后字符在凈荷426內(nèi)的(偏移428中的)滯后偏移并且報(bào)告至少一個(gè)模式706的滯后部分708的匹配。
[0126]根據(jù)圖7的示例實(shí)施例,編譯器306可以關(guān)聯(lián)生成的前導(dǎo)NFA724的與至少一個(gè)模式706的第一元素714關(guān)聯(lián)的前導(dǎo)節(jié)點(diǎn)748與元數(shù)據(jù)750。元數(shù)據(jù)750可以向遍歷器320指示用于終止對(duì)前導(dǎo)NFA726進(jìn)行遍歷并且報(bào)告在前導(dǎo)節(jié)點(diǎn)748的與至少一個(gè)模式706的第一元素714匹配的(字符430中的)前導(dǎo)字符在凈荷內(nèi)的(偏移428中的)前導(dǎo)偏移的指令。
[0127]圖7的實(shí)施例可以視為圖6的實(shí)施例的優(yōu)化,因?yàn)楸闅v器320無(wú)需在反向方向上遍歷用于滯后部分708的NFA。
[0128]圖8是基于選擇的子模式804的位置是至少一個(gè)模式806的中間位置并且選擇的子模式804的長(zhǎng)度固定或者可變來(lái)生成統(tǒng)一的DFA 312和至少一個(gè)NFA 314的一個(gè)實(shí)施例的框圖800。根據(jù)圖8的示例實(shí)施例,至少一個(gè)NFA 314是單個(gè)NFA 854。至少一個(gè)遍歷方向包括用于單個(gè)NFA 854的與至少一個(gè)模式806的滯后部分808的元素關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的前向遍歷方向828和用于單個(gè)NFA 854的與至少一個(gè)模式806的所有元素關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的反向遍歷方向830。至少一個(gè)模式806的滯后部分808是排除至少一個(gè)模式806的前導(dǎo)部分812的至少一個(gè)模式806。前導(dǎo)部分812包括至少一個(gè)模式806的第一元素814、選擇的子模式804的最后元素816和在至少一個(gè)模式806中的在它們之間的所有元素。
[0129]根據(jù)圖8的示例實(shí)施例,編譯器806可以關(guān)聯(lián)統(tǒng)一的DFA 312的與選擇的子模式804的最后元素816關(guān)聯(lián)的DFA節(jié)點(diǎn)832與元數(shù)據(jù)834。元數(shù)據(jù)834可以向遍歷器320指示指向單個(gè)NFA 854的開(kāi)始節(jié)點(diǎn)856的指針836和用于轉(zhuǎn)變至在前向遍歷方向828上對(duì)單個(gè)NFA 854進(jìn)行遍歷的指令。開(kāi)始節(jié)點(diǎn)856可以與在至少一個(gè)模式806中的緊接地跟隨選擇的子模式804的最后元素816之后的下一元素840關(guān)聯(lián)。元數(shù)據(jù)834可以向遍歷器320指示報(bào)告選擇的子模式804的匹配、在DFA節(jié)點(diǎn)832的與選擇的子模式804的最后元素816匹配的(字符430中的)字符在凈荷426內(nèi)的(偏移428中的)偏移作為選擇的子模式804的結(jié)束偏移并且如果選擇的子模式804的長(zhǎng)度固定則報(bào)告長(zhǎng)度。
[0130]根據(jù)圖8的示例實(shí)施例,編譯器806可以關(guān)聯(lián)單個(gè)NFA 854的與至少一個(gè)模式806的最后元素820關(guān)聯(lián)的滯后節(jié)點(diǎn)842與元數(shù)據(jù)852,該元數(shù)據(jù)向遍歷器320指示用于轉(zhuǎn)變至在選擇的子模式804的結(jié)束偏移開(kāi)始用凈荷在相反遍歷方向830上對(duì)單個(gè)NFA 854進(jìn)行遍歷的指令。編譯器306可以關(guān)聯(lián)單個(gè)NFA 854的與至少一個(gè)模式806的第一元素814關(guān)聯(lián)的前導(dǎo)節(jié)點(diǎn)848與元數(shù)據(jù)850。元數(shù)據(jù)850可以向遍歷器320指示用于終止遍歷并且如果限定符308中的與至少一個(gè)模式806關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在前導(dǎo)節(jié)點(diǎn)848的與至少一個(gè)模式806的第一元素814匹配的(字符430中的)字符在凈荷426內(nèi)的(偏移428中)的偏移作為至少一個(gè)模式806的開(kāi)始偏移的指令以及至少一個(gè)模式806的最終匹配。
[0131]圖9是基于選擇的子模式904的位置是至少一個(gè)模式906的中間位置并且選擇的子模式904的長(zhǎng)度固定來(lái)生成統(tǒng)一的DFA 312和至少一個(gè)NFA 314的一個(gè)實(shí)施例的框圖。根據(jù)圖9的示例實(shí)施例,至少一個(gè)NFA 314可以是單個(gè)NFA 954,并且至少一個(gè)遍歷方向包括用于單個(gè)NFA 954的與至少一個(gè)模式906的前導(dǎo)部分912關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的反向遍歷方向930和用于單個(gè)NFA 954的與至少一個(gè)模式906的所有元素關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的前向遍歷方向928。前導(dǎo)部分912可以是排除至少一個(gè)模式906的滯后部分908的至少一個(gè)模式906。滯后部分908包括選擇的子模式904的第一元素918、至少一個(gè)模式906的最后元素920和在至少一個(gè)模式906中的在它們之間的所有元素。
[0132]根據(jù)圖9的示例實(shí)施例,編譯器306可以關(guān)聯(lián)統(tǒng)一的DFA 312的與選擇的子模式904的最后元素916關(guān)聯(lián)的DFA節(jié)點(diǎn)932與元數(shù)據(jù)956。元數(shù)據(jù)956可以向遍歷器320指示指向單個(gè)NFA 954的開(kāi)始節(jié)點(diǎn)946的指針和用于轉(zhuǎn)變至在反向遍歷方向930上對(duì)單個(gè)NFA954進(jìn)行遍歷的指令。開(kāi)始節(jié)點(diǎn)946可以與前導(dǎo)部分912的最后元素912關(guān)聯(lián)。元數(shù)據(jù)956可以向遍歷器320指示報(bào)告選擇的子模式904的匹配。元數(shù)據(jù)956可以向遍歷器320指示報(bào)告在DFA節(jié)點(diǎn)932的與選擇的子模式904的最后元素916關(guān)聯(lián)的(字符430中的)字符在凈荷426內(nèi)的(偏移428內(nèi)的)偏移作為選擇的子模式904的結(jié)束偏移以及選擇的子模式的長(zhǎng)度。遍歷器320可以使用長(zhǎng)度(如果在元數(shù)據(jù)956中包括的話)以便通過(guò)從選擇的子模式的結(jié)束偏移減去在元數(shù)據(jù)956中選擇的子模式的長(zhǎng)度來(lái)確定開(kāi)始節(jié)點(diǎn)946的凈荷開(kāi)始偏移。
[0133]根據(jù)圖9的示例實(shí)施例,編譯器306可以關(guān)聯(lián)單個(gè)NFA 954的與至少一個(gè)模式906的第一元素914關(guān)聯(lián)的前導(dǎo)節(jié)點(diǎn)948與元數(shù)據(jù)950。元數(shù)據(jù)950可以向遍歷器320指示用于轉(zhuǎn)變至前向遍歷方向928上對(duì)單個(gè)NFA 954進(jìn)行遍歷的指令。編譯器306可以關(guān)聯(lián)單個(gè)NFA 954的與至少一個(gè)模式906的最后元素920關(guān)聯(lián)的滯后節(jié)點(diǎn)942與元數(shù)據(jù)952。元數(shù)據(jù)952可以向遍歷器320指示用于終止遍歷的指令。元數(shù)據(jù)952可以向遍歷器指示報(bào)告在滯后節(jié)點(diǎn)942的與至少一個(gè)模式906的最后元素920匹配的(字符430中的)字符在凈荷426內(nèi)的(偏移428中的)偏移以及至少一個(gè)模式906的最終匹配。
[0134]圖10是基于選擇的子模式1004的位置是至少一個(gè)模式1006的中間位置并且選擇的子模式1004的長(zhǎng)度固定來(lái)生成統(tǒng)一的DFA312和至少一個(gè)NFA 314的一個(gè)實(shí)施例的框圖1000。根據(jù)圖10的示例實(shí)施例,如果選擇的子模式1004的最后元素1016可以是至少一個(gè)模式1016的最后元素,則選擇的子模式1004的位置可以是至少一個(gè)模式1006的結(jié)束位置并且至少一個(gè)NFA 314可以是單個(gè)NFA1054。如果選擇的子模式1004的長(zhǎng)度固定,則至少一個(gè)模式1006的用于生成單個(gè)NFA 1054的部分1012可以是排除選擇的子模式1004的至少一個(gè)模式1006。至少一個(gè)遍歷方向可以是用于對(duì)單個(gè)NFA 1054進(jìn)行遍歷的反向遍歷方向1030。
[0135]根據(jù)圖10的示例實(shí)施例,編譯器306可以關(guān)聯(lián)與選擇的子模式1004的最后元素1016對(duì)應(yīng)的DFA節(jié)點(diǎn)1032與元數(shù)據(jù)1052。元數(shù)據(jù)1052可以向遍歷器320指示指向單個(gè)NFA1054的開(kāi)始節(jié)點(diǎn)1045的指針1036和用于轉(zhuǎn)變至在反向遍歷方向1030上對(duì)單個(gè)NFA1054進(jìn)行遍歷的指令。單個(gè)NFA 1046的開(kāi)始節(jié)點(diǎn)1046與部分1012的最后元素1034關(guān)聯(lián)。元數(shù)據(jù)1052可以向遍歷器320指示報(bào)告選擇的子模式1004的匹配和在DFA節(jié)點(diǎn)1032的與選擇的子模式1004的最后元素1016匹配的(字符430中的)字符在凈荷426內(nèi)的(偏移428中的)偏移作為選擇的子模式1004的結(jié)束偏移以及選擇的子模式1004的長(zhǎng)度。遍歷器320可以使用長(zhǎng)度(如果在元數(shù)據(jù)1052中包括的話)以便通過(guò)從選擇的子模式1004的結(jié)束偏移減去在元數(shù)據(jù)1052中的選擇的子模式的長(zhǎng)度來(lái)確定開(kāi)始節(jié)點(diǎn)1046的凈荷開(kāi)始偏移。
[0136]根據(jù)圖10的示例實(shí)施例,編譯器306可以關(guān)聯(lián)與部分1012的第一元素1014關(guān)聯(lián)的NFA節(jié)點(diǎn)1048與元數(shù)據(jù)1050。元數(shù)據(jù)1050可以向遍歷器320指示終止遍歷并且報(bào)告至少一個(gè)模式1006的最終匹配并且如果限定符308中的與至少一個(gè)模式1006關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在NFA節(jié)點(diǎn)1048的與部分1012的第一元素1014匹配的(字符430中的)字符在凈荷426內(nèi)的(偏移428中的)偏移作為至少一個(gè)模式1006的開(kāi)始偏移。
[0137]圖11是基于選擇的子模式1104的位置是至少一個(gè)模式1106的結(jié)束位置并且選擇的子模式1104的長(zhǎng)度固定或者可變來(lái)生成統(tǒng)一的DFA 312和至少一個(gè)NFA 314的一個(gè)實(shí)施例的框圖。根據(jù)圖11的示例實(shí)施例,如果選擇的子模式1104的最后元素1116可以是至少一個(gè)模式1106的最后元素,則選擇的子模式1104的位置是至少一個(gè)模式1106的結(jié)束位置并且至少一個(gè)NFA 314可以是單個(gè)NFA1154。如果選擇的子模式1104的長(zhǎng)度固定或者可變,則至少一個(gè)模式1106的用于生成單個(gè)NFA 1154的部分1112可以是至少一個(gè)模式1106。至少一個(gè)遍歷方向可以是用于對(duì)單個(gè)NFA 1154進(jìn)行遍歷的反向遍歷方向1130。
[0138]根據(jù)圖11的示例實(shí)施例,編譯器306可以關(guān)聯(lián)與選擇的子模式1104的最后元素1116對(duì)應(yīng)的DFA節(jié)點(diǎn)1132與元數(shù)據(jù)1152。元數(shù)據(jù)1152可以向遍歷器320指示指向單個(gè)NFA1154的開(kāi)始節(jié)點(diǎn)1156的指針1136和用于轉(zhuǎn)變至在反向遍歷方向1130上對(duì)單個(gè)NFAl 154進(jìn)行遍歷的指令。單個(gè)NFA 1154的開(kāi)始節(jié)點(diǎn)1146可以與選擇的子模式1104的最后元素1116關(guān)聯(lián)。元數(shù)據(jù)1152可以向遍歷器320指示選擇的子模式1104的匹配和在DFA節(jié)點(diǎn)1132的與選擇的子模式1104的最后元素1116匹配的(字符430中的)字符在凈荷426內(nèi)的(偏移428中的)偏移作為選擇的子模式1104的結(jié)束偏移并且如果選擇的子模式1104的長(zhǎng)度固定則報(bào)告長(zhǎng)度。
[0139]根據(jù)圖11的示例實(shí)施例,編譯器306可以關(guān)聯(lián)與部分1112的第一元素1114關(guān)聯(lián)的NFA節(jié)點(diǎn)1148與元數(shù)據(jù)1150。元數(shù)據(jù)1150可以向遍歷器320指示終止遍歷并且報(bào)告至少一個(gè)模式1106的最終匹配。元數(shù)據(jù)1152可以向遍歷器320指示如果限定符304中的與至少一個(gè)模式1106關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在NFA節(jié)點(diǎn)1148的與部分1112的第一元素1114匹配的(字符430中的)字符在凈荷426內(nèi)的(偏移428中的)偏移作為至少一個(gè)模式1106的開(kāi)始偏移。
[0140]圖12是其中可以實(shí)施本發(fā)明的各種實(shí)施例的計(jì)算機(jī)1200的內(nèi)部結(jié)構(gòu)的示例的框圖。計(jì)算機(jī)1200包含系統(tǒng)總線1202,其中總線是用于在計(jì)算機(jī)或者處理系統(tǒng)的部件之中的數(shù)據(jù)傳送的硬件線集合。系統(tǒng)總線1202實(shí)質(zhì)上是連接計(jì)算機(jī)系統(tǒng)的不同單元(例如處理器、盤(pán)存儲(chǔ)裝置、存儲(chǔ)器、輸入/輸出端口、網(wǎng)絡(luò)端口等)的共享管道,該共享管道實(shí)現(xiàn)在單元之間傳送信息。與系統(tǒng)總線1202 —起操作的是用于將各種輸入和輸出設(shè)備(例如鍵盤(pán)、鼠標(biāo)、顯示器、打印機(jī)、揚(yáng)聲器等)連接到計(jì)算機(jī)1200的I/O設(shè)備接口 1204。網(wǎng)絡(luò)接口1206允許計(jì)算機(jī)1200連接到各種附著到網(wǎng)絡(luò)的其它設(shè)備。存儲(chǔ)器1208為可以用來(lái)實(shí)施本發(fā)明的實(shí)施例的計(jì)算機(jī)軟件指令1210和數(shù)據(jù)1212提供易失性存儲(chǔ)。盤(pán)存儲(chǔ)裝置1214為可以用來(lái)實(shí)施本發(fā)明的實(shí)施例的計(jì)算機(jī)軟件指令1210和數(shù)據(jù)1212提供非易失性存儲(chǔ)。中央處理單元1218也與系統(tǒng)總線1202操作并且提供執(zhí)行計(jì)算機(jī)指令。
[0141]可以使用計(jì)算機(jī)程序產(chǎn)品來(lái)配置本發(fā)明的更多示例實(shí)施例;例如可以在用于實(shí)施本發(fā)明的示例實(shí)施例的軟件中對(duì)控制進(jìn)行編程。本發(fā)明的更多示例實(shí)施例可以包括非瞬態(tài)計(jì)算機(jī)可讀介質(zhì),該非瞬態(tài)計(jì)算機(jī)可讀介質(zhì)包含可以由處理器執(zhí)行并且在被執(zhí)行時(shí)使處理器完成這里描述的方法的指令。應(yīng)當(dāng)理解可以以軟件、硬件、固件或者將來(lái)確定的其它相似實(shí)現(xiàn)方式實(shí)施這里描述的框圖和流程圖的單元。此外,可以以軟件、硬件或者固件的任何方式組合或者劃分這里描述的框圖和流程圖的單元。
[0142]應(yīng)當(dāng)理解術(shù)語(yǔ)“這里”可轉(zhuǎn)用到并入這里呈現(xiàn)的教導(dǎo)的申請(qǐng)或者專利,從而主題內(nèi)容、定義或者數(shù)據(jù)結(jié)轉(zhuǎn)到進(jìn)行該并入的申請(qǐng)或者專利中。
[0143]如果在軟件中實(shí)施,則可以用可以支持這里公開(kāi)的示例實(shí)施例的任何語(yǔ)言編寫(xiě)軟件。軟件可以存儲(chǔ)于任何形式的計(jì)算機(jī)可讀介質(zhì)、比如隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、緊致盤(pán)只讀存儲(chǔ)器(⑶-ROM)等中。在操作中,通用或者專用處理器以本領(lǐng)域很好理解的方式加載和執(zhí)行軟件。還應(yīng)當(dāng)理解框圖和流程圖可以包括更多或者更少單元、被不同地布置或者定向或者被不同地表征。應(yīng)當(dāng)理解實(shí)現(xiàn)方式可以規(guī)定舉例說(shuō)明本發(fā)明的實(shí)施例的實(shí)現(xiàn)的框圖、流程圖和/或網(wǎng)絡(luò)圖以及框圖和流程圖的數(shù)目。
[0144]盡管已經(jīng)參照本發(fā)明的示例實(shí)施例具體示出和描述本發(fā)明,但是本領(lǐng)域技術(shù)人員將理解其中可以進(jìn)行在形式和細(xì)節(jié)上的各種改變而未脫離所附權(quán)利要求涵蓋的本發(fā)明的范圍。
【權(quán)利要求】
1.一種操作地耦合到網(wǎng)絡(luò)的安全設(shè)備,所述安全設(shè)備包括: 至少一個(gè)存儲(chǔ)器; 操作地耦合到所述至少一個(gè)存儲(chǔ)器的至少一個(gè)處理器,所述至少一個(gè)處理器被配置為: 基于至少一個(gè)試探從在一個(gè)或者多個(gè)正則表達(dá)式模式的集合中的每個(gè)模式選擇子模式; 使用從在所述集合中的所有模式選擇的所述子模式來(lái)生成統(tǒng)一的確定性有限自動(dòng)機(jī)(DFA); 為在所述集合中的至少一個(gè)模式生成至少一個(gè)非確定性有限自動(dòng)機(jī)(NFA),所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的部分和用于所述至少一個(gè)NFA的運(yùn)行時(shí)間處理的至少一個(gè)遍歷方向基于所述選擇的子模式的長(zhǎng)度是固定還是可變和所述選擇的子模式在所述至少一個(gè)模式內(nèi)的位置來(lái)確定;并且 在所述至少一個(gè)存儲(chǔ)器中存儲(chǔ)所生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA。
2.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中所述至少一個(gè)試探包括最大化選擇的唯一子模式的數(shù)目和選擇的每個(gè)子模式的長(zhǎng)度。
3.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中所述處理器還被配置為確定所述選擇的子模式的長(zhǎng)度是固定還是可變。
4.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中所述至少一個(gè)處理器還被配置為: 計(jì)算選擇的每個(gè)子模式的哈希值;并且 與從其選擇所述子模式的模式的標(biāo)識(shí)符關(guān)聯(lián)地存儲(chǔ)計(jì)算的每個(gè)哈希值。
5.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中所述至少一個(gè)試探包括最大化選擇的唯一子模式的數(shù)目,并且為了最大化選擇的唯一子模式的數(shù)目,所述至少一個(gè)處理器還被配置用于為在所述集合中的每個(gè)模式: 計(jì)算所述選擇的子模式的哈希值; 將所述計(jì)算的哈希值與為在所述集合中的其它模式選擇的子模式的哈希值的列表相比較;并且 如果在所述列表中發(fā)現(xiàn)所述計(jì)算的哈希值,則確定是否(i)用來(lái)自所述模式的另一子模式替換所述選擇的子模式或者(ii)用從在所述集合中的其他模式選擇的備選子模式替換為在所述集合中的所述另一模式選擇的所述子模式,在所述集合中的所述其他模式基于在所述列表中的與所述計(jì)算的哈希值的關(guān)聯(lián)性來(lái)標(biāo)識(shí),其中所述用于是否進(jìn)行替換(i)或者(ii)的確定是基于比較被考慮用于所述替換的子模式的長(zhǎng)度,從而最大化選擇的所述唯一子模式的長(zhǎng)度。
6.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中所述至少一個(gè)試探包括標(biāo)識(shí)每個(gè)模式的子模式并且如果每個(gè)模式的標(biāo)識(shí)的所述子模式中的給定的子模式具有小于最小門(mén)限的長(zhǎng)度則忽略所述給定的子模式。
7.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中所述至少一個(gè)試探包括訪問(wèn)與歷史使用頻率指示符關(guān)聯(lián)的子模式的知識(shí)庫(kù)并且如果在訪問(wèn)的所述知識(shí)庫(kù)中的用于每個(gè)模式的標(biāo)識(shí)的所述子模式中的給定的子模式的歷史使用頻率指示符大于或者等于使用頻率門(mén)限則忽略所述給定的子模式。
8.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中所述至少一個(gè)試探包括標(biāo)識(shí)每個(gè)模式的子模式,并且為每個(gè)模式通過(guò)基于所述標(biāo)識(shí)的子模式中的給定的子模式具有所述標(biāo)識(shí)的子模式中最大數(shù)目的連續(xù)文本字符并且基于所述給定的子模式在為所述一個(gè)或者多個(gè)正則表達(dá)式的集合選擇的所有子模式之中唯一而選擇所述給定的子模式,來(lái)最大化在所述選擇的子模式中的連續(xù)文本字符的數(shù)目。
9.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中所述至少一個(gè)試探包括: 基于每個(gè)模式的給定的子模式中的每個(gè)子模式的子模式類型和所述給定的子模式的長(zhǎng)度為所述給定的子模式設(shè)置優(yōu)先級(jí),更長(zhǎng)長(zhǎng)度子模式被設(shè)置優(yōu)先級(jí)高于更少長(zhǎng)度的另一子模式; 基于所述優(yōu)先級(jí)設(shè)置來(lái)選擇唯一子模式作為所述選擇的子模式,所述選擇的唯一子模式具有至少最小長(zhǎng)度門(mén)限的長(zhǎng)度;并且 如果所述給定的子模式都不唯一和具有至少所述最小長(zhǎng)度門(mén)限的長(zhǎng)度,則基于所述優(yōu)先級(jí)設(shè)置來(lái)選擇非唯一子模式作為所述選擇的子模式。
10.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中所述至少一個(gè)試探包括基于每個(gè)模式的給定的子模式中的每個(gè)子模式的子模式類型為所述給定的子模式設(shè)置優(yōu)先級(jí),所述子模式類型是僅文本、備選、單字符重復(fù)或者多字符重復(fù),并且用于所述子模式類型的從最高到最低的優(yōu)先級(jí)是僅文本、備選、單字符重復(fù)和多字符重復(fù)。
11.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中如果所述選擇的子模式的第一元素是所述至少一個(gè)模式的第一元素并且所述選擇的子模式的長(zhǎng)度固定,則所述選擇的子模式的位置是所述至少一個(gè)模式的開(kāi)始位置,所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的部分是排除所述選擇的子模式的所述至少一個(gè)模式,所述至少一個(gè)NFA是單個(gè)NFA,并且所述至少一個(gè)NFA的所述至少一個(gè)遍歷方向是前向遍歷方向。
12.根據(jù)權(quán)利要求11所述的安全設(shè)備,其中為了生成所述統(tǒng)一的DFA,所述至少一個(gè)處理器還被配置為: 將所述生成的統(tǒng)一的DFA的與所述選擇的子模式的最后元素關(guān)聯(lián)的DFA節(jié)點(diǎn)與元數(shù)據(jù)相關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述生成的至少一個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在前向遍歷方向上對(duì)所述至少一個(gè)NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配、在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的前導(dǎo)字符在所述凈荷內(nèi)的前導(dǎo)偏移作為所述選擇的子模式的結(jié)束偏移和所述選擇的子模式的長(zhǎng)度的指令,所述至少一個(gè)NFA的所述開(kāi)始節(jié)點(diǎn)與所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的所述部分的第一元素關(guān)聯(lián),所述至少一個(gè)NFA在所述凈荷中的字符偏移與在所述選擇的子模式的結(jié)束偏移之后的字節(jié)關(guān)聯(lián),所述至少一個(gè)NFA的凈荷開(kāi)始偏移與在所述選擇的子模式的所述結(jié)束偏移的另一字節(jié)之后的字節(jié)關(guān)聯(lián)。
13.根據(jù)權(quán)利要求11所述的安全設(shè)備,其中為了生成所述至少一個(gè)NFA,所述至少一個(gè)處理器還被配置為: 關(guān)聯(lián)所述生成的至少一個(gè)NFA的NFA節(jié)點(diǎn)與元數(shù)據(jù),所述元數(shù)據(jù)向所述遍歷器指示用于終止所述遍歷并且報(bào)告在所述NFA節(jié)點(diǎn)匹配的滯后字符在所述凈荷內(nèi)的滯后偏移作為所述至少一個(gè)模式的結(jié)束偏移和所述至少一個(gè)模式的最終匹配的指令,所述NFA節(jié)點(diǎn)與所述至少一個(gè)模式的最后元素關(guān)聯(lián)。
14.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中如果所述選擇的子模式的第一元素不是所述至少一個(gè)模式的第一元素并且所述選擇的子模式的最后元素不是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的中間位置,并且如果所述選擇的子模式的長(zhǎng)度固定,則: 所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的部分包括所述至少一個(gè)模式的滯后部分和前導(dǎo)部分,所述至少一個(gè)模式的所述滯后部分是排除所述選擇的子模式和所述至少一個(gè)模式的所述前導(dǎo)部分的所述至少一個(gè)模式,所述至少一個(gè)模式的所述前導(dǎo)部分排除所述選擇的子模式和所述至少一個(gè)模式的所述滯后部分;并且 所述至少一個(gè)NFA包括滯后NFA和前導(dǎo)NFA,所述至少一個(gè)遍歷方向包括前向遍歷方向和反向遍歷方向,所述滯后NFA具有所述前向遍歷方向,所述前導(dǎo)NFA具有所述反向遍歷方向,所述至少一個(gè)模式的所述滯后部分用于生成所述滯后NFA,并且所述至少一個(gè)模式的所述前導(dǎo)部分用于生成所述前導(dǎo)NFA。
15.根據(jù)權(quán)利要求14所述的安全設(shè)備,其中為了生成所述統(tǒng)一的DFA,所述至少一個(gè)處理器還被配置為: 關(guān)聯(lián)所述生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),所述DFA節(jié)點(diǎn)與所述選擇的子模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述滯后NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述前向遍歷方向上對(duì)所述滯后NFA進(jìn)行遍歷的指令,所述滯后NFA的所述開(kāi)始節(jié)點(diǎn)與所述滯后部分的第一元素關(guān)聯(lián),所述滯后NFA的凈荷開(kāi)始偏移與在所述選擇的子模式的所述結(jié)束偏移的另一字節(jié)之后的字節(jié)關(guān)聯(lián),指示指向所述前導(dǎo)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述反向遍歷方向上對(duì)所述前導(dǎo)NFA進(jìn)行遍歷并且報(bào)告在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移、所述選擇的子模式的匹配和所述選擇的子模式的長(zhǎng)度的指令,所述前導(dǎo)NFA的所述開(kāi)始節(jié)點(diǎn)與所述前導(dǎo)部分的最后元素關(guān)聯(lián),所述前導(dǎo)NFA的凈荷開(kāi)始偏移通過(guò)從所述選擇的子模式的所述結(jié)束偏移減去所述選擇的子模式的長(zhǎng)度來(lái)確定。
16.根據(jù)權(quán)利要求14所述的安全設(shè)備,其中為了生成所述至少一個(gè)NFA,所述至少一個(gè)處理器還被配置為: 關(guān)聯(lián)所述滯后NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),所述滯后節(jié)點(diǎn)與所述至少一個(gè)模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于終止對(duì)所述生成的滯后NFA進(jìn)行遍歷并且報(bào)告在所述滯后節(jié)點(diǎn)的與所述最后元素匹配的、所述凈荷的滯后字符在所述凈荷內(nèi)的滯后偏移和所述至少一個(gè)模式的所述滯后部分的匹配的指令;并且 關(guān)聯(lián)所述前導(dǎo)NFA的前導(dǎo)節(jié)點(diǎn)與元數(shù)據(jù),所述前導(dǎo)節(jié)點(diǎn)與所述至少一個(gè)模式的所述第一元素關(guān)聯(lián),所述元數(shù)據(jù)向所述遍歷器指示用于終止對(duì)所述生成的前導(dǎo)NFA進(jìn)行遍歷并且報(bào)告所述至少一個(gè)模式的所述前導(dǎo)部分的匹配并且如果與所述至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在所述前導(dǎo)節(jié)點(diǎn)的與所述第一元素匹配的、所述凈荷的所述前導(dǎo)字符在所述凈荷內(nèi)的前導(dǎo)偏移作為所述至少一個(gè)模式的開(kāi)始偏移的指令。
17.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中如果所述選擇的子模式的第一元素不是所述至少一個(gè)模式的第一元素并且所述選擇的子模式的最后元素不是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的中間位置,并且如果所述選擇的子模式的所述第一元素是所述至少一個(gè)模式的所述第一元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的所述開(kāi)始位置,并且如果所述子模式的長(zhǎng)度固定或者可變,則: 所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的部分包括所述至少一個(gè)模式的滯后部分和整個(gè)部分,所述至少一個(gè)模式的所述滯后部分是排除所述至少一個(gè)模式的前導(dǎo)部分的所述至少一個(gè)模式,所述前導(dǎo)部分包括所述至少一個(gè)模式的所述第一元素、所述選擇的子模式的所述最后元素和在所述至少一個(gè)模式中的在它們之間的所有元素,所述至少一個(gè)模式的所述整個(gè)部分是所述至少一個(gè)模式,如果所述選擇的子模式的位置是開(kāi)始位置,則所述前導(dǎo)部分是所述選擇的子模式;并且 所述至少一個(gè)NFA包括滯后NFA和傘形NFA,所述至少一個(gè)遍歷方向包括前向遍歷方向和反向遍歷方向,所述滯后NFA具有所述前向遍歷方向,所述傘形NFA具有所述反向遍歷方向,所述至少一個(gè)模式的所述滯后部分用于生成所述滯后NFA,并且所述至少一個(gè)模式的所述整個(gè)部分用于生成所述傘形NFA。
18.根據(jù)權(quán)利要求17所述的安全設(shè)備,其中為了生成所述統(tǒng)一的DFA,所述至少一個(gè)處理器還被配置為: 關(guān)聯(lián)所述生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),所述DFA節(jié)點(diǎn)與所述選擇的子模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述滯后NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述前向遍歷方向上對(duì)所述滯后NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配和在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移并且如果所述選擇的子模式的長(zhǎng)度固定則報(bào)告所述長(zhǎng)度的指令,所述滯后NFA的所述開(kāi)始節(jié)點(diǎn)與所述滯后部分的第一元素關(guān)聯(lián)。
19.根據(jù)權(quán)利要求17所述的安全設(shè)備,其中為了生成所述至少一個(gè)NFA,所述至少一個(gè)處理器還被配置為: 關(guān)聯(lián)所述生成的滯后NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),所述滯后節(jié)點(diǎn)與所述至少一個(gè)模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述傘形NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述反向遍歷方向上對(duì)所述傘形NFA進(jìn)行遍歷并且可選地報(bào)告在所述滯后節(jié)點(diǎn)的與所述至少一個(gè)模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移并且可選地報(bào)告所述至少一個(gè)模式的所述滯后部分的匹配的指令,所述傘形NFA的所述開(kāi)始節(jié)點(diǎn)與所述至少一個(gè)模式的所述最后兀素關(guān)聯(lián);并且 關(guān)聯(lián)所述生成的傘形NFA的傘形節(jié)點(diǎn)與元數(shù)據(jù),所述傘形節(jié)點(diǎn)與所述至少一個(gè)模式的所述第一元素關(guān)聯(lián),所述元數(shù)據(jù)向所述遍歷器指示用于終止所述遍歷并且報(bào)告所述至少一個(gè)模式的最終匹配并且如果與所述至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在所述傘形節(jié)點(diǎn)的與所述至少一個(gè)模式的所述第一元素匹配的開(kāi)始字符在所述凈荷內(nèi)的開(kāi)始偏移作為所述至少一個(gè)模式的開(kāi)始偏移的指令。
20.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中如果所述選擇的子模式的第一元素不是所述至少一個(gè)模式的第一元素并且所述選擇的子模式的最后元素不是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的中間位置,并且如果所述選擇的子模式的所述第一元素是所述至少一個(gè)模式的所述第一元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的開(kāi)始位置,并且如果所述子模式的長(zhǎng)度固定或者可變,則: 所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的部分包括所述至少一個(gè)模式的滯后部分和前導(dǎo)部分,所述至少一個(gè)模式的所述滯后部分是排除所述至少一個(gè)模式的所述前導(dǎo)部分的所述至少一個(gè)模式,所述前導(dǎo)部分包括所述至少一個(gè)模式的所述第一元素、所述選擇的子模式的所述最后元素和在所述至少一個(gè)模式中的在它們之間的所有元素,如果所述選擇的所述子模式的位置是所述開(kāi)始位置,則所述滯后部分是所述選擇的子模式;并且 所述至少一個(gè)NFA包括滯后NFA和前導(dǎo)NFA,所述至少一個(gè)遍歷方向包括前向遍歷方向和反向遍歷方向,所述滯后NFA具有所述前向遍歷方向,所述前導(dǎo)NFA具有所述反向遍歷方向,所述至少一個(gè)模式的所述滯后部分用于生成所述滯后NFA,并且所述至少一個(gè)模式的所述前導(dǎo)部分用于生成所述前導(dǎo)NFA。
21.根據(jù)權(quán)利要求20所述的安全設(shè)備,其中為了生成所述統(tǒng)一的DFA,所述至少一個(gè)處理器還被配置為: 關(guān)聯(lián)所述生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),所述DFA節(jié)點(diǎn)與所述選擇的子模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述滯后NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述前向遍歷方向上對(duì)所述滯后NFA進(jìn)行遍歷的指令,所述滯后NFA的所述開(kāi)始節(jié)點(diǎn)與所述滯后部分的第一元素關(guān)聯(lián),指示指向所述前導(dǎo)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述反向遍歷方向上對(duì)所述前導(dǎo)NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配和在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移并且如果所述選擇的子模式的長(zhǎng)度固定則報(bào)告所述長(zhǎng)度的指令,所述前導(dǎo)NFA的所述開(kāi)始節(jié)點(diǎn)與所述選擇的子模式的最后元素關(guān)聯(lián)。
22.根據(jù)權(quán)利要求20所述的安全設(shè)備,其中為了生成所述至少一個(gè)NFA,所述至少一個(gè)處理器還被配置為: 關(guān)聯(lián)所述生成的滯后NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),所述滯后節(jié)點(diǎn)與所述至少一個(gè)模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于終止對(duì)所述滯后NFA進(jìn)行遍歷并且報(bào)告在所述滯后節(jié)點(diǎn)的與所述至少一個(gè)模式的所述最后元素匹配的滯后字符在所述凈荷內(nèi)的滯后偏移并且報(bào)告所述至少一個(gè)模式的所述滯后部分的匹配的指令;并且 關(guān)聯(lián)所述生成的前導(dǎo)NFA的前導(dǎo)節(jié)點(diǎn)與元數(shù)據(jù),所述前導(dǎo)節(jié)點(diǎn)與所述至少一個(gè)模式的所述第一元素關(guān)聯(lián),所述元數(shù)據(jù)向所述遍歷器指示用于終止對(duì)所述前導(dǎo)NFA進(jìn)行遍歷并且報(bào)告在所述前導(dǎo)節(jié)點(diǎn)的與所述至少一個(gè)模式的所述第一元素匹配的前導(dǎo)字符在所述凈荷內(nèi)的前導(dǎo)偏移的指令。
23.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中如果所述選擇的子模式的第一元素不是所述至少一個(gè)模式的第一元素并且所述選擇的子模式的最后元素不是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的中間位置,并且如果所述選擇的子模式的長(zhǎng)度固定或者可變,則: 所述至少一個(gè)NFA是單個(gè)NFA,并且所述至少一個(gè)遍歷方向包括用于所述單個(gè)NFA的與所述至少一個(gè)模式的滯后部分的元素關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的前向遍歷方向和用于所述單個(gè)NFA的與所述至少一個(gè)模式的所有元素關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的反向遍歷方向,所述至少一個(gè)模式的所述滯后部分是排除所述至少一個(gè)模式的前導(dǎo)部分的所述至少一個(gè)模式,所述前導(dǎo)部分包括所述至少一個(gè)模式的所述第一元素、所述選擇的子模式的所述最后元素和在所述至少一個(gè)模式中的在它們之間的所有元素。
24.根據(jù)權(quán)利要求23所述的安全設(shè)備,其中為了生成所述統(tǒng)一的DFA,所述至少一個(gè)處理器還被配置為: 關(guān)聯(lián)所述生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),所述DFA節(jié)點(diǎn)與所述選擇的子模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述單個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述前向遍歷方向上對(duì)所述生成的單個(gè)NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配、在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移并且如果所述選擇的子模式的長(zhǎng)度固定則報(bào)告所述長(zhǎng)度的指令,所述開(kāi)始節(jié)點(diǎn)與在所述至少一個(gè)模式中的緊接地跟隨所述選擇的子模式的所述最后元素的下一元素關(guān)聯(lián)。
25.根據(jù)權(quán)利要求23所述的安全設(shè)備,其中為了生成所述至少一個(gè)NFA,所述至少一個(gè)處理器還被配置為: 關(guān)聯(lián)所述單個(gè)NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),所述滯后節(jié)點(diǎn)與所述至少一個(gè)模式的最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生產(chǎn)的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于轉(zhuǎn)變至在用與所述選擇的子模式的所述結(jié)束偏移關(guān)聯(lián)的凈荷開(kāi)始偏移在所述反向遍歷方向上對(duì)所述單個(gè)NFA進(jìn)行遍歷的指令;并且 關(guān)聯(lián)所述單個(gè)NFA的前導(dǎo)節(jié)點(diǎn)與元數(shù)據(jù),所述前導(dǎo)節(jié)點(diǎn)與所述至少一個(gè)模式的所述第一元素關(guān)聯(lián),所述元數(shù)據(jù)向所述遍歷器指示用于終止所述遍歷并且如果與所述至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在所述前導(dǎo)節(jié)點(diǎn)的與所述至少一個(gè)模式的所述第一元素匹配的字符在所述凈荷內(nèi)的偏移作為所述至少一個(gè)模式的開(kāi)始偏移以及所述至少一個(gè)模式的最終匹配的指令。
26.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中如果所述選擇的子模式的第一元素不是所述至少一個(gè)模式的第一元素并且所述選擇的子模式的最后元素不是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的中間位置,并且如果所述選擇的子模式的長(zhǎng)度固定,則: 所述至少一個(gè)NFA是單個(gè)NFA,并且所述至少一個(gè)遍歷方向包括用于所述單個(gè)NFA的與所述至少一個(gè)模式的前導(dǎo)部分關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的反向遍歷方向和用于所述單個(gè)NFA的與所述至少一個(gè)模式的所有元素關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的前向遍歷方向,所述前導(dǎo)部分是排除所述至少一個(gè)模式的滯后部分的所述至少一個(gè)模式,所述滯后部分包括所述選擇的子模式的所述第一元素、所述至少一個(gè)模式的所述最后元素和所述至少一個(gè)模式中的在它們之間的所有元素。
27.根據(jù)權(quán)利要求26所述的安全設(shè)備,其中為了生成所述統(tǒng)一的DFA,所述至少一個(gè)處理器還被配置為: 關(guān)聯(lián)所述生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),所述節(jié)點(diǎn)與所述選擇的子模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述單個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述反向遍歷方向上對(duì)所述生成的單個(gè)NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配、在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移和所述選擇的子模式的長(zhǎng)度的指令,所述開(kāi)始節(jié)點(diǎn)與所述前導(dǎo)部分的最后元素關(guān)聯(lián),凈荷開(kāi)始偏移通過(guò)從所述選擇的子模式的所述結(jié)束偏移減去所述選擇的子模式的長(zhǎng)度來(lái)確定。
28.根據(jù)權(quán)利要求26所述的安全設(shè)備,其中為了生成所述至少一個(gè)NFA,所述至少一個(gè)處理器還被配置為: 關(guān)聯(lián)所述單個(gè)NFA的前導(dǎo)節(jié)點(diǎn)與元數(shù)據(jù),所述前導(dǎo)節(jié)點(diǎn)與所述至少一個(gè)模式的第一元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于轉(zhuǎn)變至在所述前向遍歷方向上對(duì)所述單個(gè)NFA進(jìn)行遍歷的指令;并且 關(guān)聯(lián)所述單個(gè)NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),所述滯后節(jié)點(diǎn)與所述至少一個(gè)模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向所述遍歷器指示用于終止所述遍歷并且報(bào)告在所述滯后節(jié)點(diǎn)的與所述至少一個(gè)模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移和所述至少一個(gè)模式的最終匹配的指令。
29.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中如果所述選擇的子模式的最后元素是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的結(jié)束位置,并且如果所述選擇的子模式的長(zhǎng)度固定,則所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的部分是排除所述選擇的子模式的所述至少一個(gè)模式,并且所述至少一個(gè)遍歷方向是反向遍歷方向。
30.根據(jù)權(quán)利要求29所述的安全設(shè)備,其中為了生成所述統(tǒng)一的DFA,所述處理器還被配置為: 關(guān)聯(lián)DFA節(jié)點(diǎn)與元數(shù)據(jù),所述DFA節(jié)點(diǎn)與所述選擇的子模式的所述最后元素相對(duì)應(yīng),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述生成的至少一個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在反向遍歷方向上對(duì)所述生成的至少一個(gè)NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配和在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移的指令,所述生成的至少一個(gè)NFA的所述開(kāi)始節(jié)點(diǎn)與所述部分的最后元素關(guān)聯(lián),所述生成的至少一個(gè)NFA的凈荷開(kāi)始偏移通過(guò)從所述選擇的子模式的所述結(jié)束偏移減去所述選擇的子模式的長(zhǎng)度來(lái)確定。
31.根據(jù)權(quán)利要求29所述的安全設(shè)備,其中為了生成所述至少一個(gè)NFA,所述處理器還被配置為: 關(guān)聯(lián)與所述部分的第一元素關(guān)聯(lián)的NFA節(jié)點(diǎn)與元數(shù)據(jù),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于終止所述遍歷并且報(bào)告所述至少一個(gè)模式的最終匹配并且如果與所述至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在所述NFA節(jié)點(diǎn)的與所述部分的所述第一元素匹配的字符在所述凈荷內(nèi)的偏移作為所述至少一個(gè)模式的開(kāi)始偏移的指令。
32.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中如果所述選擇的子模式的最后元素是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的結(jié)束位置,并且如果所述選擇的子模式的長(zhǎng)度可變或者固定,則所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的部分是所述至少一個(gè)模式,并且所述至少一個(gè)遍歷方向是反向遍歷方向。
33.根據(jù)權(quán)利要求32所述的安全設(shè)備,其中為了生成所述統(tǒng)一的DFA,所述處理器還被配置為: 關(guān)聯(lián)DFA節(jié)點(diǎn)與元數(shù)據(jù),所述DFA節(jié)點(diǎn)與所述選擇的子模式的所述最后元素相對(duì)應(yīng),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述生成的至少一個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在反向遍歷方向上對(duì)所述生成的至少一個(gè)NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配和在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移并且如果所述選擇的子模式的長(zhǎng)度固定則報(bào)告所述長(zhǎng)度的指令,所述生成的至少一個(gè)NFA的所述開(kāi)始節(jié)點(diǎn)與所述選擇的子模式的最后元素關(guān)聯(lián),所述生成的至少一個(gè)NFA的凈荷開(kāi)始偏移與所述選擇的子模式的所述結(jié)束偏移關(guān)聯(lián)。
34.根據(jù)權(quán)利要求32所述的安全設(shè)備,其中為了生成所述至少一個(gè)NFA,所述處理器還被配置為: 關(guān)聯(lián)與所述部分的第一元素關(guān)聯(lián)的NFA節(jié)點(diǎn)與元數(shù)據(jù),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于終止所述遍歷并且報(bào)告所述至少一個(gè)模式的最終匹配并且如果與所述至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在所述NFA節(jié)點(diǎn)的與所述部分的所述第一元素匹配的字符在所述凈荷內(nèi)的偏移作為所述至少一個(gè)模式的開(kāi)始偏移的指令。
35.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中為了在所述至少一個(gè)存儲(chǔ)器中存儲(chǔ)所述生成的統(tǒng)一 DFA和至少一個(gè)NFA,所述處理器還被配置為生成包括所述生成的統(tǒng)一 DFA和至少一個(gè)NFA的二進(jìn)制圖像。
36.根據(jù)權(quán)利要求1所述的安全設(shè)備,其中所述至少一個(gè)處理器包括DFA協(xié)同處理器和NFA協(xié)同處理器,其被配置作為加速單元來(lái)分別分流DFA和NFA運(yùn)行時(shí)間處理。
37.一種方法,包括: 在安全設(shè)備中的與至少一個(gè)存儲(chǔ)器操作地耦合的至少一個(gè)處理器中,所述安全設(shè)備操作地耦合到網(wǎng)絡(luò): 基于至少一個(gè)試探從在一個(gè)或者多個(gè)正則表達(dá)式模式的集合中的每個(gè)模式選擇子模式; 使用從在所述集合中的所有模式選擇的所述子模式來(lái)生成統(tǒng)一的確定性有限自動(dòng)機(jī)(DFA); 為在所述集合中的至少一個(gè)模式生成至少一個(gè)非確定性有限自動(dòng)機(jī)(NFA),所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的部分和用于所述至少一個(gè)NFA的運(yùn)行時(shí)間處理的至少一個(gè)遍歷方向基于所述選擇的子模式的長(zhǎng)度是固定還是可變和所述選擇的子模式在所述至少一個(gè)模式內(nèi)的位置來(lái)確定;并且 在所述至少一個(gè)存儲(chǔ)器中存儲(chǔ)所生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA。
38.根據(jù)權(quán)利要求37所述的方法,其中所述至少一個(gè)試探包括最大化選擇的唯一子模式的數(shù)目和選擇的每個(gè)子模式的長(zhǎng)度。
39.根據(jù)權(quán)利要求37所述的方法,還包括確定所述選擇的子模式的長(zhǎng)度是固定還是可變。
40.根據(jù)權(quán)利要求37所述的方法,還包括: 計(jì)算選擇的每個(gè)子模式的哈希值;并且 與從其選擇所述子模式的模式的標(biāo)識(shí)符關(guān)聯(lián)地存儲(chǔ)計(jì)算的每個(gè)哈希值。
41.根據(jù)權(quán)利要求37所述的方法,其中所述至少一個(gè)試探包括最大化選擇的唯一子模式的數(shù)目,并且還包括:為在所述集合中的每個(gè)模式, 計(jì)算所述選擇的子模式的哈希值; 比較所述計(jì)算的哈希值與為在所述集合中的其它模式選擇的子模式的哈希值的列表;并且 如果在所述列表中發(fā)現(xiàn)所述計(jì)算的哈希值,則確定是否(i)用來(lái)自所述模式的另一子模式替換所述選擇的子模式或者(ii)用從在所述集合中的其他模式選擇的備選子模式替換為在所述集合中的所述另一模式選擇的所述子模式,在所述集合中的所述其他模式基于在所述列表中的與所述計(jì)算的哈希值的關(guān)聯(lián)性來(lái)標(biāo)識(shí),其中所述用于是否替換(i)或者(ii)的確定是基于比較被考慮用于所述替換的子模式的長(zhǎng)度,從而最大化選擇的所述唯一子模式的長(zhǎng)度。
42.根據(jù)權(quán)利要求37所述的方法,其中所述至少一個(gè)試探包括標(biāo)識(shí)每個(gè)模式的子模式并且如果每個(gè)模式的標(biāo)識(shí)的所述子模式中的給定的子模式具有小于最小門(mén)限的長(zhǎng)度則忽略所述給定的子模式。
43.根據(jù)權(quán)利要求37所述的方法,其中所述至少一個(gè)試探包括訪問(wèn)與歷史使用頻率指示符關(guān)聯(lián)的子模式的知識(shí)庫(kù)并且如果在訪問(wèn)的所述知識(shí)庫(kù)中的用于每個(gè)模式的標(biāo)識(shí)的所述子模式中的給定的子模式的歷史使用頻率指示符大于或者等于使用頻率門(mén)限則忽略所述給定的子模式。
44.根據(jù)權(quán)利要求37所述的方法,其中所述至少一個(gè)試探包括標(biāo)識(shí)每個(gè)模式的子模式并且為每個(gè)模式通過(guò)基于所述標(biāo)識(shí)的子模式中的給定的子模式具有所述標(biāo)識(shí)的子模式中最大數(shù)目的連續(xù)文本字符并且基于所述給定的子模式在為所述一個(gè)或者多個(gè)正則表達(dá)式的集合選擇的所有子模式之中唯一而選擇所述給定的子模式,來(lái)最大化在所述選擇的子模式中的連續(xù)文本字符的數(shù)目。
45.根據(jù)權(quán)利要求37所述的方法,其中所述至少一個(gè)試探包括: 基于每個(gè)模式的給定的子模式中的每個(gè)子模式的子模式類型和所述給定的子模式的長(zhǎng)度為所述給定的子模式設(shè)置優(yōu)先級(jí),更長(zhǎng)長(zhǎng)度子模式被設(shè)置優(yōu)先級(jí)高于更少長(zhǎng)度的另一子模式; 基于所述優(yōu)先級(jí)設(shè)置來(lái)選擇唯一子模式作為所述選擇的子模式,所述選擇的唯一子模式具有至少最小長(zhǎng)度門(mén)限的長(zhǎng)度;并且 如果所述給定的子模式都不唯一和具有至少所述最小長(zhǎng)度門(mén)限的長(zhǎng)度,則基于所述優(yōu)先級(jí)設(shè)置選擇非唯一子模式作為所述選擇的子模式。
46.根據(jù)權(quán)利要求37所述的方法,其中所述至少一個(gè)試探包括基于每個(gè)模式的給定的子模式中的每個(gè)子模式的子模式類型為所述給定的子模式設(shè)置優(yōu)先級(jí),所述子模式類型是僅文本、備選、單字符重復(fù)或者多字符重復(fù),并且用于所述子模式類型的從最高到最低的優(yōu)先級(jí)是僅文本、備選、單字符重復(fù)和多字符重復(fù)。
47.根據(jù)權(quán)利要求37所述的方法,其中如果所述選擇的子模式的第一元素是所述至少一個(gè)模式的第一元素并且所述選擇的子模式的長(zhǎng)度固定,則所述選擇的子模式的位置是所述至少一個(gè)模式的開(kāi)始位置,所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的所述部分是排除所述選擇的子模式的所述至少一個(gè)模式,所述至少一個(gè)NFA是單個(gè)NFA,并且所述至少一個(gè)NFA的所述至少一個(gè)遍歷方向是前向遍歷方向。
48.根據(jù)權(quán)利要求47所述的方法,其中生成所述統(tǒng)一的DFA包括: 關(guān)聯(lián)所述生成的統(tǒng)一的DFA的與所述選擇的子模式的最后元素關(guān)聯(lián)的DFA節(jié)點(diǎn)與元數(shù)據(jù),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述生成的至少一個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在前向遍歷方向上對(duì)所述至少一個(gè)NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配、在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的前導(dǎo)字符在所述凈荷內(nèi)的前導(dǎo)偏移作為所述選擇的子模式的結(jié)束偏移和所述選擇的子模式的長(zhǎng)度的指令,所述至少一個(gè)NFA的所述開(kāi)始節(jié)點(diǎn)與所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的所述部分的第一元素關(guān)聯(lián),所述至少一個(gè)NFA的凈荷開(kāi)始偏移與在所述選擇的子模式的所述結(jié)束偏移的另一字節(jié)之后的字節(jié)關(guān)聯(lián)。
49.根據(jù)權(quán)利要求37所述的方法,其中生成所述至少一個(gè)NFA包括: 關(guān)聯(lián)所述生成的至少一個(gè)NFA的NFA節(jié)點(diǎn)與元數(shù)據(jù),所述元數(shù)據(jù)向所述遍歷器指示用于終止所述遍歷并且報(bào)告在所述NFA節(jié)點(diǎn)匹配的滯后字符在所述凈荷內(nèi)的滯后偏移作為所述至少一個(gè)模式的結(jié)束偏移和所述至少一個(gè)模式的最終匹配的指令,所述NFA節(jié)點(diǎn)與所述至少一個(gè)模式的最后元素關(guān)聯(lián)。
50.根據(jù)權(quán)利要求37所述的方法,其中如果所述選擇的子模式的第一元素不是所述至少一個(gè)模式的第一元素并且所述選擇的子模式的最后元素不是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的中間位置,并且如果所述選擇的子模式的長(zhǎng)度固定,則: 所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的所述部分包括所述至少一個(gè)模式的滯后部分和前導(dǎo)部分,所述至少一個(gè)模式的所述滯后部分是排除所述選擇的子模式和所述至少一個(gè)模式的所述前導(dǎo)部分的所述至少一個(gè)模式,所述至少一個(gè)模式的所述前導(dǎo)部分排除所述選擇的子模式和所述至少一個(gè)模式的所述滯后部分;并且 所述至少一個(gè)NFA包括滯后NFA和前導(dǎo)NFA,所述至少一個(gè)遍歷方向包括前向遍歷方向和反向遍歷方向,所述滯后NFA具有所述前向遍歷方向,所述前導(dǎo)NFA具有所述反向遍歷方向,所述至少一個(gè)模式的所述滯后部分用于生成所述滯后NFA,并且所述至少一個(gè)模式的所述前導(dǎo)部分用于生成所述前導(dǎo)NFA。
51.根據(jù)權(quán)利要求50所述的方法,其中生成所述統(tǒng)一的DFA包括: 關(guān)聯(lián)所述生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),所述DFA節(jié)點(diǎn)與所述選擇的子模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述滯后NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述前向遍歷方向上對(duì)所述滯后NFA進(jìn)行遍歷的指令,所述滯后NFA的所述開(kāi)始節(jié)點(diǎn)與所述滯后部分的第一元素關(guān)聯(lián),所述滯后NFA的凈荷開(kāi)始偏移與在所述選擇的子模式的所述結(jié)束偏移之后的字節(jié)關(guān)聯(lián),指示指向所述前導(dǎo)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述反向遍歷方向上對(duì)所述前導(dǎo)NFA進(jìn)行遍歷并且報(bào)告在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移、所述選擇的子模式的匹配和所述選擇的子模式的長(zhǎng)度的指令,所述前導(dǎo)NFA的所述開(kāi)始節(jié)點(diǎn)與所述前導(dǎo)部分的最后元素關(guān)聯(lián),所述前導(dǎo)NFA的凈荷開(kāi)始偏移通過(guò)從所述選擇的子模式的所述結(jié)束偏移減去所述選擇的子模式的長(zhǎng)度來(lái)確定。
52.根據(jù)權(quán)利要求50所述的方法,其中生成所述至少一個(gè)NFA包括: 關(guān)聯(lián)所述滯后NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),所述滯后節(jié)點(diǎn)與所述至少一個(gè)模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于終止對(duì)所述生成的滯后NFA進(jìn)行遍歷并且報(bào)告在所述滯后節(jié)點(diǎn)的與所述最后元素匹配的、所述凈荷的滯后字符在所述凈荷內(nèi)的滯后偏移和所述至少一個(gè)模式的所述滯后部分的匹配的指令;并且 關(guān)聯(lián)所述前導(dǎo)NFA的前導(dǎo)節(jié)點(diǎn)與元數(shù)據(jù),所述前導(dǎo)節(jié)點(diǎn)與所述至少一個(gè)模式的所述第一元素關(guān)聯(lián),所述元數(shù)據(jù)向所述遍歷器指示用于終止對(duì)所述生成的前導(dǎo)NFA進(jìn)行遍歷并且報(bào)告所述至少一個(gè)模式的所述前導(dǎo)部分的匹配并且如果與所述至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在所述前導(dǎo)節(jié)點(diǎn)的與所述第一元素匹配的、所述凈荷的所述前導(dǎo)字符在所述凈荷內(nèi)的前導(dǎo)偏移作為所述至少一個(gè)模式的開(kāi)始偏移的指令。
53.根據(jù)權(quán)利要求37所述的方法,其中如果所述選擇的子模式的第一元素不是所述至少一個(gè)模式的第一元素并且所述選擇的子模式的最后元素不是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的中間位置,并且如果所述選擇的子模式的所述第一元素是所述至少一個(gè)模式的所述第一元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的所述開(kāi)始位置,并且如果所述子模式的長(zhǎng)度固定或者可變,則: 所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的所述部分包括所述至少一個(gè)模式的滯后部分和整個(gè)部分,所述至少一個(gè)模式的所述滯后部分是排除所述至少一個(gè)模式的前導(dǎo)部分的所述至少一個(gè)模式,所述前導(dǎo)部分包括所述至少一個(gè)模式的所述第一元素、所述選擇的子模式的所述最后元素和在所述至少一個(gè)模式中的在它們之間的所有元素,所述至少一個(gè)模式的所述整個(gè)部分是所述至少一個(gè)模式,如果所述選擇的子模式的位置是開(kāi)始位置,則所述前導(dǎo)部分是所述選擇的子模式;并且 所述至少一個(gè)NFA包括滯后NFA和傘形NFA,所述至少一個(gè)遍歷方向包括前向遍歷方向和反向遍歷方向,所述滯后NFA具有所述前向遍歷方向,所述傘形NFA具有所述反向遍歷方向,所述至少一個(gè)模式的所述滯后部分用于生成所述滯后NFA,并且所述至少一個(gè)模式的所述整個(gè)部分用于生成所述傘形NFA。
54.根據(jù)權(quán)利要求53所述的方法,其中生成所述統(tǒng)一的DFA包括: 關(guān)聯(lián)所述生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),所述DFA節(jié)點(diǎn)與所述選擇的子模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷生成的對(duì)所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述滯后NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述前向遍歷方向上對(duì)所述滯后NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配和在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移并且如果所述選擇的子模式的長(zhǎng)度固定則報(bào)告所述長(zhǎng)度的指令,所述滯后NFA的所述開(kāi)始節(jié)點(diǎn)與所述滯后部分的第一元素關(guān)聯(lián)。
55.根據(jù)權(quán)利要求53所述的方法,其中生成所述至少一個(gè)NFA包括: 關(guān)聯(lián)所述生成的滯后NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),所述滯后節(jié)點(diǎn)與所述至少一個(gè)模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述傘形NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述反向遍歷方向上對(duì)所述傘形NFA進(jìn)行遍歷并且可選地報(bào)告在所述滯后節(jié)點(diǎn)的與所述至少一個(gè)模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移并且可選地報(bào)告所述至少一個(gè)模式的所述滯后部分的匹配的指令,所述傘形NFA的所述開(kāi)始節(jié)點(diǎn)與所述至少一個(gè)模式的所述最后兀素關(guān)聯(lián);并且 關(guān)聯(lián)所述生成的傘形NFA的傘形節(jié)點(diǎn)與元數(shù)據(jù),所述傘形節(jié)點(diǎn)與所述至少一個(gè)模式的所述第一元素關(guān)聯(lián),所述元數(shù)據(jù)向所述遍歷器指示用于終止所述遍歷并且報(bào)告所述至少一個(gè)模式的最終匹配并且如果與所述至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在所述傘形節(jié)點(diǎn)的與所述至少一個(gè)模式的所述第一元素匹配的開(kāi)始字符在所述凈荷內(nèi)的開(kāi)始偏移作為所述至少一個(gè)模式的開(kāi)始偏移的指令。
56.根據(jù)權(quán)利要求37所述的方法,其中如果所述選擇的子模式的第一元素不是所述至少一個(gè)模式的第一元素并且所述選擇的子模式的最后元素不是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的中間位置,并且如果所述選擇的子模式的所述第一元素是所述至少一個(gè)模式的所述第一元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的開(kāi)始位置,并且如果所述子模式的長(zhǎng)度固定或者可變,則: 所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的所述部分包括所述至少一個(gè)模式的滯后部分和前導(dǎo)部分,所述至少一個(gè)模式的所述滯后部分是排除所述至少一個(gè)模式的所述前導(dǎo)部分的所述至少一個(gè)模式,所述前導(dǎo)部分包括所述至少一個(gè)模式的所述第一元素、所述選擇的子模式的所述最后元素和在所述至少一個(gè)模式中的在它們之間的所有元素,如果所述選擇的所述子模式的位置是所述開(kāi)始位置,則所述滯后部分是所述選擇的子模式;并且 所述至少一個(gè)NFA包括滯后NFA和前導(dǎo)NFA,所述至少一個(gè)遍歷方向包括前向遍歷方向和反向遍歷方向,所述滯后NFA具有所述前向遍歷方向,所述前導(dǎo)NFA具有所述反向遍歷方向,所述至少一個(gè)模式的所述滯后部分用于生成所述滯后NFA,并且所述至少一個(gè)模式的所述前導(dǎo)部分用于生成所述前導(dǎo)NFA。
57.根據(jù)權(quán)利要求56所述的方法,其中生成所述統(tǒng)一的DFA包括: 關(guān)聯(lián)所述生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),所述DFA節(jié)點(diǎn)與所述選擇的子模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述滯后NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述前向遍歷方向上對(duì)所述滯后NFA進(jìn)行遍歷的指令,所述滯后NFA的所述開(kāi)始節(jié)點(diǎn)與所述滯后部分的第一元素關(guān)聯(lián),指示指向所述前導(dǎo)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述反向遍歷方向上對(duì)所述前導(dǎo)NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配和在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移并且如果所述選擇的子模式的長(zhǎng)度固定則報(bào)告所述長(zhǎng)度的指令,所述前導(dǎo)NFA的所述開(kāi)始節(jié)點(diǎn)與所述選擇的子模式的最后元素關(guān)聯(lián)。
58.根據(jù)權(quán)利要求56所述的方法,其中生成所述至少一個(gè)NFA包括: 關(guān)聯(lián)所述生成的滯后NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),所述滯后節(jié)點(diǎn)與所述至少一個(gè)模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于終止對(duì)所述滯后NFA進(jìn)行遍歷并且報(bào)告在所述滯后節(jié)點(diǎn)的與所述至少一個(gè)模式的所述最后元素匹配的滯后字符在所述凈荷內(nèi)的滯后偏移并且報(bào)告所述至少一個(gè)模式的所述滯后部分的匹配的指令;并且 關(guān)聯(lián)所述生成的前導(dǎo)NFA的前導(dǎo)節(jié)點(diǎn)與元數(shù)據(jù),所述前導(dǎo)節(jié)點(diǎn)與所述至少一個(gè)模式的所述第一元素關(guān)聯(lián),所述元數(shù)據(jù)向所述遍歷器指示用于終止對(duì)所述前導(dǎo)NFA進(jìn)行遍歷并且報(bào)告所述前導(dǎo)部分的匹配和在所述前導(dǎo)節(jié)點(diǎn)的與所述至少一個(gè)模式的所述第一元素匹配的前導(dǎo)字符在所述凈荷內(nèi)的前導(dǎo)偏移的指令。
59.根據(jù)權(quán)利要求37所述的方法,其中如果所述選擇的子模式的第一元素不是所述至少一個(gè)模式的第一元素并且所述選擇的子模式的最后元素不是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的中間位置,并且如果所述選擇的子模式的長(zhǎng)度固定或者可變,則: 所述至少一個(gè)NFA是單個(gè)NFA,并且所述至少一個(gè)遍歷方向包括用于所述單個(gè)NFA的與所述至少一個(gè)模式的滯后部分的元素關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的前向遍歷方向和用于所述單個(gè)NFA的與所述至少一個(gè)模式的所有元素關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的反向遍歷方向,所述至少一個(gè)模式的所述滯后部分是排除所述至少一個(gè)模式的前導(dǎo)部分的所述至少一個(gè)模式,所述前導(dǎo)部分包括所述至少一個(gè)模式的所述第一元素、所述選擇的子模式的所述最后元素和在所述至少一個(gè)模式中的在它們之間的所有元素。
60.根據(jù)權(quán)利要求59所述的方法,其中生成所述統(tǒng)一的DFA包括: 關(guān)聯(lián)所述生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),所述節(jié)點(diǎn)與所述選擇的子模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述單個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述前向遍歷方向上對(duì)所述生成的單個(gè)NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配、在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移并且如果所述選擇的子模式的長(zhǎng)度固定則報(bào)告所述長(zhǎng)度的指令,所述開(kāi)始節(jié)點(diǎn)與在所述至少一個(gè)模式中的緊接地跟隨所述選擇的子模式的所述最后元素的下一元素關(guān)聯(lián)。
61.根據(jù)權(quán)利要求59所述的方法,其中生成所述至少一個(gè)NFA包括: 關(guān)聯(lián)所述單個(gè)NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),所述滯后節(jié)點(diǎn)與所述至少一個(gè)模式的最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生產(chǎn)的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于轉(zhuǎn)變至用與所述選擇的子模式的所述結(jié)束偏移關(guān)聯(lián)的凈荷開(kāi)始偏移在所述反向遍歷方向上對(duì)所述單個(gè)NFA進(jìn)行遍歷的指令;并且 關(guān)聯(lián)所述單個(gè)NFA的前導(dǎo)節(jié)點(diǎn)與元數(shù)據(jù),所述前導(dǎo)節(jié)點(diǎn)與所述至少一個(gè)模式的所述第一元素關(guān)聯(lián),所述元數(shù)據(jù)向所述遍歷器指示用于終止所述遍歷并且如果與所述至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在所述前導(dǎo)節(jié)點(diǎn)的與所述至少一個(gè)模式的所述第一元素匹配的字符在所述凈荷內(nèi)的偏移作為所述至少一個(gè)模式的開(kāi)始偏移以及所述至少一個(gè)模式的最終匹配的指令。
62.根據(jù)權(quán)利要求37所述的方法,其中如果所述選擇的子模式的第一元素不是所述至少一個(gè)模式的第一元素并且所述選擇的子模式的最后元素不是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的中間位置,并且如果所述選擇的子模式的長(zhǎng)度固定,則: 所述至少一個(gè)NFA是單個(gè)NFA,并且所述至少一個(gè)遍歷方向包括用于所述單個(gè)NFA的與所述至少一個(gè)模式的前導(dǎo)部分關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的反向遍歷方向和用于所述單個(gè)NFA的與所述至少一個(gè)模式的所有元素關(guān)聯(lián)的運(yùn)行時(shí)間處理節(jié)點(diǎn)的前向遍歷方向,所述前導(dǎo)部分是排除所述至少一個(gè)模式的滯后部分的所述至少一個(gè)模式,所述滯后部分包括所述選擇的子模式的所述第一元素、所述至少一個(gè)模式的所述最后元素和所述至少一個(gè)模式中的在它們之間的所有元素。
63.根據(jù)權(quán)利要求62所述的方法,其中生成所述統(tǒng)一的DFA包括: 關(guān)聯(lián)所述生成的統(tǒng)一的DFA的DFA節(jié)點(diǎn)與元數(shù)據(jù),所述節(jié)點(diǎn)與所述選擇的子模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述單個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在所述反向遍歷方向上對(duì)所述生成的單個(gè)NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配、在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移和所述選擇的子模式的長(zhǎng)度的指令,所述開(kāi)始節(jié)點(diǎn)與所述前導(dǎo)部分的最后元素關(guān)聯(lián),凈荷開(kāi)始偏移通過(guò)從所述選擇的子模式的所述結(jié)束偏移減去所述選擇的子模式的長(zhǎng)度來(lái)確定。
64.根據(jù)權(quán)利要求62所述的方法,其中生成所述至少一個(gè)NFA包括: 關(guān)聯(lián)所述單個(gè)NFA的前導(dǎo)節(jié)點(diǎn)與元數(shù)據(jù),所述前導(dǎo)節(jié)點(diǎn)與所述至少一個(gè)模式的第一元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于轉(zhuǎn)變至在所述前向遍歷方向上對(duì)所述單個(gè)NFA進(jìn)行遍歷的指令;并且 關(guān)聯(lián)所述單個(gè)NFA的滯后節(jié)點(diǎn)與元數(shù)據(jù),所述滯后節(jié)點(diǎn)與所述至少一個(gè)模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向所述遍歷器指示用于終止所述遍歷并且報(bào)告在所述滯后節(jié)點(diǎn)的與所述至少一個(gè)模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移和所述至少一個(gè)模式的最終匹配的指令。
65.根據(jù)權(quán)利要求37所述的方法,其中如果所述選擇的子模式的最后元素是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的結(jié)束位置,并且如果所述選擇的子模式的長(zhǎng)度固定,則所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的所述部分是排除所述選擇的子模式的所述至少一個(gè)模式,并且所述至少一個(gè)遍歷方向是反向遍歷方向。
66.根據(jù)權(quán)利要求65所述的方法,其中生成所述統(tǒng)一的DFA包括: 關(guān)聯(lián)DFA節(jié)點(diǎn)與元數(shù)據(jù),所述DFA節(jié)點(diǎn)與所述選擇的子模式的所述最后元素關(guān)聯(lián),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述生成的至少一個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在反向遍歷方向上對(duì)所述生成的至少一個(gè)NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配和在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移的指令,所述生成的至少一個(gè)NFA的所述開(kāi)始節(jié)點(diǎn)與所述部分的最后元素關(guān)聯(lián)。
67.根據(jù)權(quán)利要求65所述的方法,其中生成所述至少一個(gè)NFA包括: 關(guān)聯(lián)與所述部分的第一元素關(guān)聯(lián)的NFA節(jié)點(diǎn)與元數(shù)據(jù),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于終止所述遍歷并且報(bào)告所述至少一個(gè)模式的最終匹配并且如果與所述至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在所述NFA節(jié)點(diǎn)的與所述部分的所述第一元素匹配的字符在所述凈荷內(nèi)的偏移作為所述至少一個(gè)模式的開(kāi)始偏移的指令。
68.根據(jù)權(quán)利要求37所述的方法,其中如果所述選擇的子模式的最后元素是所述至少一個(gè)模式的最后元素,則所述選擇的子模式的位置是所述至少一個(gè)模式的結(jié)束位置,并且如果所述選擇的子模式的長(zhǎng)度可變或者固定,則所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的所述部分是所述至少一個(gè)模式,并且所述至少一個(gè)遍歷方向是反向遍歷方向。
69.根據(jù)權(quán)利要求68所述的方法,其中生成所述統(tǒng)一的DFA包括: 關(guān)聯(lián)DFA節(jié)點(diǎn)與元數(shù)據(jù),所述DFA節(jié)點(diǎn)與所述選擇的子模式的所述最后元素相對(duì)應(yīng),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示指向所述生成的至少一個(gè)NFA的開(kāi)始節(jié)點(diǎn)的指針、用于轉(zhuǎn)變至在反向遍歷方向上對(duì)所述生成的至少一個(gè)NFA進(jìn)行遍歷并且報(bào)告所述選擇的子模式的匹配和在所述DFA節(jié)點(diǎn)的與所述選擇的子模式的所述最后元素匹配的字符在所述凈荷內(nèi)的偏移作為所述選擇的子模式的結(jié)束偏移并且如果所述選擇的子模式的長(zhǎng)度固定則報(bào)告所述長(zhǎng)度的指令,所述生成的至少一個(gè)NFA的所述開(kāi)始節(jié)點(diǎn)與所述選擇的子模式的最后元素關(guān)聯(lián),所述生成的至少一個(gè)NFA的凈荷開(kāi)始偏移與所述選擇的子模式的所述結(jié)束偏移關(guān)聯(lián)。
70.根據(jù)權(quán)利要求68所述的方法,其中生成所述至少一個(gè)NFA包括: 關(guān)聯(lián)與所述部分的第一元素關(guān)聯(lián)的NFA節(jié)點(diǎn)與元數(shù)據(jù),所述元數(shù)據(jù)向被配置為用凈荷對(duì)生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA進(jìn)行遍歷的遍歷器指示用于終止所述遍歷并且報(bào)告所述至少一個(gè)模式的最終匹配并且如果與所述至少一個(gè)模式關(guān)聯(lián)的限定符需要?jiǎng)t報(bào)告在所述NFA節(jié)點(diǎn)的與所述部分的所述第一元素匹配的字符在所述凈荷內(nèi)的偏移作為所述至少一個(gè)模式的開(kāi)始偏移的指令。
71.根據(jù)權(quán)利要求37所述的方法,其中在所述至少一個(gè)存儲(chǔ)器中存儲(chǔ)所述生成的統(tǒng)一DFA和至少一個(gè)NFA包括生成包括所述生成的統(tǒng)一 DFA和至少一個(gè)NFA的二進(jìn)制圖像。
72.根據(jù)權(quán)利要求37所述的方法,其中所述至少一個(gè)處理器包括DFA協(xié)同處理器和NFA協(xié)同處理器,其被配置作為加速單元以分別分流DFA和NFA運(yùn)行時(shí)間處理。
73.—種非瞬態(tài)計(jì)算機(jī)可讀介質(zhì),具有在其上存儲(chǔ)的指令序列,所述指令序列在被加載并且由處理器執(zhí)行時(shí)使所述處理器: 基于至少一個(gè)試探從在一個(gè)或者多個(gè)正則表達(dá)式模式的集合中的每個(gè)模式選擇子模式; 使用從在所述集合中的所有模式選擇的所述子模式來(lái)生成統(tǒng)一的確定性有限自動(dòng)機(jī)(DFA); 為在所述集合中的至少一個(gè)模式生成至少一個(gè)非確定性有限自動(dòng)機(jī)(NFA),所述至少一個(gè)模式的用于生成所述至少一個(gè)NFA的部分和用于所述至少一個(gè)NFA的運(yùn)行時(shí)間處理的至少一個(gè)遍歷方向基于所述選擇的子模式的長(zhǎng)度是固定還是可變和所述選擇的子模式在所述至少一個(gè)模式內(nèi)的位置來(lái)確定;并且 在所述至少一個(gè)存儲(chǔ)器中存儲(chǔ)所生成的所述統(tǒng)一的DFA和所述至少一個(gè)NFA。
【文檔編號(hào)】H04L29/06GK104426911SQ201410433321
【公開(kāi)日】2015年3月18日 申請(qǐng)日期:2014年8月28日 優(yōu)先權(quán)日:2013年8月30日
【發(fā)明者】S·L·比拉, R·戈亞爾, A·迪克西特 申請(qǐng)人:凱為公司