一種規(guī)則匹配方法及裝置制造方法
【專利摘要】本發(fā)明實(shí)施例提供一種規(guī)則匹配方法及裝置,涉及通信領(lǐng)域,能夠提高報(bào)文處理速度、減少規(guī)則的存儲(chǔ)空間,以及提高報(bào)文的匹配效率。該方法包括:接收第一報(bào)文;通過DFA匹配第一報(bào)文中的多個(gè)字符;當(dāng)確定DFA的當(dāng)前狀態(tài)為前綴接受態(tài),且滿足匹配條件時(shí),開啟第一計(jì)數(shù)器,保存第一字符的偏移地址;同時(shí)以每次匹配x個(gè)連續(xù)字符的方式對(duì)該多個(gè)字符進(jìn)行匹配,以確定匹配的n個(gè)連續(xù)字符,并根據(jù)該次確定的n個(gè)連續(xù)字符的偏移地址對(duì)更新第一計(jì)數(shù)器的值;當(dāng)確定DFA的當(dāng)前狀態(tài)為后綴接受態(tài)時(shí),保存第二字符的偏移地址;根據(jù)第一字符和第二字符的偏移地址、更新后的第一計(jì)數(shù)器的值、規(guī)則的后綴長度及字符重復(fù)次數(shù)判斷第一報(bào)文是否滿足第一規(guī)則。
【專利說明】—種規(guī)則匹配方法及裝置【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信領(lǐng)域,尤其涉及一種規(guī)則匹配方法及裝置。
【背景技術(shù)】
[0002]隨著網(wǎng)絡(luò)技術(shù)的深入發(fā)展,網(wǎng)絡(luò)應(yīng)用越來越廣泛,網(wǎng)絡(luò)應(yīng)用中攻擊報(bào)文的形式和種類也越來越復(fù)雜。
[0003]目前通常采用正則表達(dá)式來描述報(bào)文的特征,并使用有限自動(dòng)機(jī)匹配該正則表達(dá)式,以快速識(shí)別出具有攻擊性的報(bào)文。
[0004]現(xiàn)有技術(shù)中,對(duì)于重復(fù)次數(shù)較多的正則表達(dá)式,一般采用NFA (NondeterministicFinite Automaton,不確定的有限自動(dòng)機(jī))和 DFA (Deterministic Finite Automaton,確定的有限自動(dòng)機(jī))來進(jìn)行匹配。若采用NFA進(jìn)行匹配,則需將整個(gè)匹配規(guī)則編譯為NFA,從而以判別接收到的報(bào)文的正則表達(dá)式是否與該匹配規(guī)則匹配;若采用DFA,則需將匹配規(guī)則的前綴和后綴編譯為包含有前綴接受態(tài)和后綴接受態(tài)的DFA,并采用計(jì)數(shù)器和DFA同步對(duì)接收到的報(bào)文的正則表達(dá)式中的每個(gè)字符進(jìn)行判斷,從而以判別該報(bào)文的正則表達(dá)式是否與該匹配規(guī)則匹配。
[0005]然而,在采用NFA進(jìn)行匹配的過程中,由于NFA的狀態(tài)跳轉(zhuǎn)具有不確定性而使得報(bào)文處理速度較慢,且將整條匹配規(guī)則編譯為NFA時(shí)需要較大的存儲(chǔ)空間;在采用DFA進(jìn)行匹配的過程中,由于無法找到前綴接受態(tài)的死狀態(tài),從而不能提前結(jié)束DFA的狀態(tài)跳轉(zhuǎn),因此,導(dǎo)致匹配效率較低。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實(shí)施例提供一種規(guī)則匹配方法及裝置,能夠提高報(bào)文處理速度,減少規(guī)則的存儲(chǔ)空間,以及提高報(bào)文的匹 配效率。
[0007]為達(dá)到上述目的,本發(fā)明實(shí)施例采用如下技術(shù)方案:
[0008]第一方面,本發(fā)明實(shí)施例提供一種規(guī)則匹配方法,用于對(duì)符合第一規(guī)則的報(bào)文進(jìn)行匹配,所述第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù),包括:
[0009]接收第一報(bào)文,所述第一報(bào)文包括多個(gè)字符;
[0010]通過有限自動(dòng)機(jī)DFA對(duì)所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,所述DFA包括前綴接受態(tài)和后綴接受態(tài),所述DFA由更新后的第一規(guī)則編譯后得到,所述更新后的第一規(guī)則包括所述前綴部分,更新后的中間部分,以及所述后綴部分;所述更新后的中間部分的正則表達(dá)式為
[0011]當(dāng)通過所述DFA匹配確定所述DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),開啟第一計(jì)數(shù)器,并保存第一字符的偏移地址,所述第一字符為所述第一報(bào)文中使得所述DFA跳轉(zhuǎn)至所述前綴接受態(tài)的字符,所述第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù);
[0012]在通過所述DFA進(jìn)行匹配的同時(shí),以每次匹配X個(gè)連續(xù)字符的方式對(duì)所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)所述中間部分的字符,每當(dāng)確定有η個(gè)連續(xù)字符是所述中間部分的字符時(shí),保存該次確定的所述η個(gè)連續(xù)字符的偏移地址對(duì),以及根據(jù)所述偏移地址對(duì)更新所述第一計(jì)數(shù)器的值,所述偏移地址對(duì)包括起始地址以及結(jié)束地址,所述起始地址為所述η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,所述結(jié)束地址為所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址;其中,X為大于等于2的整數(shù);η為大于等于I的整數(shù);
[0013]當(dāng)通過所述DFA匹配確定所述DFA的當(dāng)前狀態(tài)為所述后綴接受態(tài)時(shí),保存第二字符的偏移地址,所述第二字符為所述第一報(bào)文中使得所述DFA跳轉(zhuǎn)至所述后綴接受態(tài)的字符;[0014]根據(jù)所述第一字符的偏移地址、所述第二字符的偏移地址、更新后的所述第一計(jì)數(shù)器的值、所述第一規(guī)則的后綴部分的長度及所述字符重復(fù)次數(shù)判斷所述第一報(bào)文是否滿足所述第一規(guī)則。
[0015]在第一方面的第一種可能的實(shí)現(xiàn)方式中,當(dāng)更新所述第一計(jì)數(shù)器的次數(shù)不等于所述字符重復(fù)次數(shù)時(shí),所述方法還包括:
[0016]若Offset≥Begin且End-Offset+1 <m,則關(guān)閉所述第一計(jì)數(shù)器,其中,Offset為輸入所述DFA的當(dāng)前字符的偏移地址,Begin為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,End為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為所述字符重復(fù)次數(shù)。
[0017]結(jié)合前述的第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述匹配條件包括:
[0018]End-Offset+Ι≥m,其中,Offset為輸入所述DFA的當(dāng)前字符的偏移地址,End為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為所述字符重復(fù)次數(shù);
[0019]或者,
[0020]未保存所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址。
[0021]結(jié)合前述的第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式至第二種可能的實(shí)現(xiàn)方式中的任一種實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,
[0022]當(dāng)通過所述DFA匹配確定所述DFA的當(dāng)前狀態(tài)時(shí),查詢所述DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志;
[0023]若所述DFA的狀態(tài)設(shè)置有所述死狀態(tài)標(biāo)志,且所述第一計(jì)數(shù)器關(guān)閉,則結(jié)束所述DFA的狀態(tài)跳轉(zhuǎn)。
[0024]結(jié)合第一方面的第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述查詢所述DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志之前,所述方法還包括:
[0025]獲取所述DFA的有向圖;
[0026]若在所述DFA的有向圖中,獲取到未與所述前綴接受態(tài)連接的狀態(tài),則將所述未與所述前綴接受態(tài)連接的狀態(tài)設(shè)置一個(gè)所述死狀態(tài)標(biāo)志。
[0027]結(jié)合前述的第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式至第四種可能的實(shí)現(xiàn)方式中的任一種實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述第一字符的偏移地址、所述第二字符的偏移地址、更新后的所述第一計(jì)數(shù)器的值、所述第一規(guī)則的后綴部分的長度及所述字符重復(fù)次數(shù)判斷所述第一報(bào)文是否滿足所述第一規(guī)則,具體包括:
[0028]若所述第二字符的偏移地址與所述第一規(guī)則的后綴部分的長度之差大于等于,所述第一字符的偏移地址與所述字符重復(fù)次數(shù)之和,且所述第二字符的偏移地址與所述第一規(guī)則的后綴部分的長度之差小于等于,所述第一字符的偏移地址、所述字符重復(fù)次數(shù)及更新后的所述第一計(jì)數(shù)器的值之和,則判斷所述第一報(bào)文滿足所述第一規(guī)則。
[0029]結(jié)合前述的第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式至第五種可能的實(shí)現(xiàn)方式中的任一種實(shí)現(xiàn)方式,在第六種可能的實(shí)現(xiàn)方式中,所述根據(jù)所述偏移地址對(duì)更新所述第一計(jì)數(shù)器的值,具體包括:
[0030]獲取所述偏移地址對(duì)的長度,所述偏移地址對(duì)的長度為所述結(jié)束地址與所述起始地址之差,再加上I ;
[0031]將所述第一計(jì)數(shù)器的值減去所述偏移地址對(duì)的長度。
[0032]結(jié)合前述的第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式至第六種可能的實(shí)現(xiàn)方式中的任一種實(shí)現(xiàn)方式,在第七種可能的實(shí)現(xiàn)方式中,所述前綴部分和所述后綴部分保存在所述DFA中,所述中間部分保存在字符判別模塊中,其中,所述DFA用于對(duì)所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,并當(dāng)通過匹配確定當(dāng)前狀態(tài)為所述前綴接受態(tài),并滿足所述匹配條件時(shí),開啟所述第一計(jì)數(shù)器,并保存所述第一字符的偏移地址,以及當(dāng)通過匹配確定所述當(dāng)前狀態(tài)為所述后綴接受態(tài)時(shí),保存所述第二字符的偏移地址;所述字符判別模塊用于在通過所述DFA進(jìn)行匹配的同時(shí),以每次匹配所述X個(gè)連續(xù)字符的方式對(duì)所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)所述中間部分的字符,每當(dāng)確定有所述η個(gè)連續(xù)字符是所述中間部分的字符時(shí),保存該次確定的所述η個(gè)連續(xù)字符的偏移地址對(duì),以及根據(jù)所述偏移地址對(duì)更新所述第一計(jì)數(shù)器的值。
[0033]結(jié)合前述的第一方面或第一方面的第一種可能的實(shí)現(xiàn)方式至第七種可能的實(shí)現(xiàn)方式中的任一種實(shí)現(xiàn)方式,在第八種可能的實(shí)現(xiàn)方式中,
[0034]所述中間部分的字符為一個(gè)確定的字符,或者為多個(gè)可選字符中的任意一個(gè)字符;
[0035]所述字符重復(fù)次數(shù)為一個(gè)固定次數(shù),或者為由一個(gè)下限值和一個(gè)上限值組成的次數(shù)范圍。
[0036]第二方面,本發(fā)明實(shí)施例提供一種規(guī)則匹配裝置,用于對(duì)符合第一規(guī)則的報(bào)文進(jìn)行匹配,所述第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù),包括:
[0037]接收單元,用于接收第一報(bào)文,所述第一報(bào)文包括多個(gè)字符;
[0038]匹配單元,用于通過有限自動(dòng)機(jī)DFA對(duì)所述接收單元接收的所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,所述DFA包括前綴接受態(tài)和后綴接受態(tài),所述DFA由更新后的第一規(guī)則編譯后得到,所述更新后的第一規(guī)則包括所述前綴部分,更新后的中間部分,以及所述后綴部分;所述更新后的中間部分的正則表達(dá)式為*” ;
[0039]開啟單元,用于當(dāng)通過所述匹配單元匹配確定所述DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),開啟設(shè)置第一計(jì)數(shù)器,所述第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù),
[0040]以及第一保存單元,用于保存第一字符的偏移地址,所述第一字符為所述接收單元接收到的所述第一報(bào)文中使得所述DFA跳轉(zhuǎn)至所述前綴接受態(tài)的字符;
[0041]確定單元,用于在通過所述匹配單元進(jìn)行匹配的同時(shí),以每次匹配X個(gè)連續(xù)字符的方式對(duì)所述接收單元接收的所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)所述中間部分的字符;
[0042]第二保存單元,用于每當(dāng)所述確定單元確定有η個(gè)連續(xù)字符是所述中間部分的字符時(shí),保存該次所述確定單元確定的所述η個(gè)連續(xù)字符的偏移地址,所述偏移地址對(duì)包括起始地址以及結(jié)束地址,所述起始地址為所述η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,所述結(jié)束地址為所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址;其中,X為大于等于2的整數(shù);η為大于等于I的整數(shù);
[0043]更新單元,用于根據(jù)所述第二保存單元保存的所述偏移地址對(duì)更新所述第一計(jì)數(shù)器的值; [0044]所述第一保存單元,還用于通過匹配單元確定所述DFA的當(dāng)前狀態(tài)為所述后綴接受態(tài)時(shí),保存第二字符的偏移地址,所述第二字符為所述接收單元接收到的所述第一報(bào)文中使得所述DFA跳轉(zhuǎn)至所述后綴接受態(tài)的字符;
[0045]判斷單元,用于根據(jù)所述第一保存單元保存的所述第一字符的偏移地址、所述第二字符的偏移地址、所述更新單元更新后的所述第一計(jì)數(shù)器的值、后綴的長度及所述字符重復(fù)次數(shù)判斷所述接收單元接收的第一報(bào)文是否滿足所述第一規(guī)則。
[0046]在第二方面的第一種可能的實(shí)現(xiàn)方式中,所述規(guī)則匹配裝置還包括關(guān)閉單元;
[0047]所述關(guān)閉單元,用于當(dāng)所述更新單元更新所述第一計(jì)數(shù)器的次數(shù)不等于所述字符重復(fù)次數(shù)時(shí),若Offset ^ Begin且End-Offset+1 < m,則關(guān)閉所述第一計(jì)數(shù)器,其中,Offset為輸入所述DFA的當(dāng)前字符的偏移地址,Begin為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,End為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為所述字符重復(fù)次數(shù)。
[0048]結(jié)合前述的第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述匹配條件包括:
[0049]End-Offset+Ι≥m,其中,Offset為輸入所述DFA的當(dāng)前字符的偏移地址,End為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為所述字符重復(fù)次數(shù);
[0050]或者,
[0051]所述第二保存單元未保存所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址。
[0052]結(jié)合前述的第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式至第二種可能的實(shí)現(xiàn)方式中的任一種實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述規(guī)則匹配裝置還包括處理單元;
[0053]所述處理單元,用于當(dāng)通過所述匹配單元匹配確定所述DFA的當(dāng)前狀態(tài)時(shí),查詢所述DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志,以及若所述DFA的狀態(tài)設(shè)置有所述死狀態(tài)標(biāo)志,且所述關(guān)閉單元將所述第一計(jì)數(shù)關(guān)閉,則結(jié)束所述DFA的狀態(tài)跳轉(zhuǎn)。
[0054]結(jié)合第二方面的第三種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,
[0055]所述處理單元,還用于在所述查詢所述DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志之前,獲取所述DFA的有向圖,以及若在所述DFA的有向圖中,獲取到未與所述前綴接受態(tài)連接的狀態(tài),則將所述未與所述前綴接受態(tài)連接的狀態(tài)設(shè)置一個(gè)所述死狀態(tài)標(biāo)志。
[0056]結(jié)合前述的第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式至第四種可能的實(shí)現(xiàn)方式中的任一種實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,
[0057]所述判斷單元,具體用于若所述第一保存單元保存的所述第二字符的偏移地址與所述第一規(guī)則的后綴部分的長度之差大于等于,所述第一保存單元保存的所述第一字符的偏移地址與所述字符重復(fù)次數(shù)之和,且所述第一保存單元保存的所述第二字符的偏移地址與所述第一規(guī)則的后綴部分的長度之差小于等于,所述第一保存單元保存的所述第一字符的偏移地址、所述字符重復(fù)次數(shù)及所述更新單元更新后的所述第一計(jì)數(shù)器的值之和,則判斷所述接收單元接收到的所述第一報(bào)文滿足所述第一規(guī)則。
[0058]結(jié)合前述的第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式至第五種可能的實(shí)現(xiàn)方式中的任一種實(shí)現(xiàn)方式,在第六種可能的實(shí)現(xiàn)方式中,
[0059]所述更新單元,具體用于獲取所述第二保存單元保存的所述偏移地址對(duì)的長度,所述偏移地址對(duì)的長度為所述結(jié)束地址與所述起始地址之差,再加上1,以及將所述第一計(jì)數(shù)器的值減去所述偏移地址對(duì)的長度。
[0060]結(jié)合前述的第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式至第六種可能的實(shí)現(xiàn)方式中的任一種實(shí)現(xiàn)方式,在第七種可能的實(shí)現(xiàn)方式中,所述前綴部分和所述后綴部分保存在所述DFA中,所述中間部分保存在字符判別模塊中,其中,所述DFA包括所述匹配單元、所述開啟單元和所述第一保存單元;所述字符判別模塊包括所述確定單元和所述第二保存單元。
[0061]結(jié)合前述的第二方面或第二方面的第一種可能的實(shí)現(xiàn)方式至第七種可能的實(shí)現(xiàn)方式中的任一種實(shí)現(xiàn)方式,在第八種可能的實(shí)現(xiàn)方式中,所述中間部分的字符為一個(gè)確定的字符,或者為多個(gè)可選字符中的任意一個(gè)字符;
[0062]所述字符重復(fù)次數(shù)為一個(gè)固定次數(shù),或者為由一個(gè)下限值和一個(gè)上限值組成的次數(shù)范圍。
[0063]本發(fā)明實(shí)施例提供一種規(guī)則匹配方法及裝置,用于對(duì)符合第一規(guī)則的報(bào)文進(jìn)行匹配,該第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù),通過接收第一報(bào)文,該第一報(bào)文包括多個(gè)字符,并通過有限自動(dòng)機(jī)DFA對(duì)該第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,DFA包括前綴接受態(tài)和后綴接受態(tài),該DFA由更新后的第一規(guī)則編譯后得到,更新后的第一規(guī)則包括該前綴部分,更新后的中間部分,以及該后綴部分,該更新后的中間部分的正則表達(dá)式為*”,及當(dāng)通過該DFA匹配確定該DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),開啟第一計(jì)數(shù)器,并保存第一字符的偏移地址,該第一字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至前綴接受態(tài)的字符,該第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù),以及在通過DFA進(jìn)行匹配的同時(shí),以每次匹配X個(gè)連續(xù)字符的方式對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)中間部分的字符,每當(dāng)確定有η個(gè)連續(xù)字符是中間部分的字符時(shí),保存該次確定的η個(gè)連續(xù)字符的偏移地址對(duì),并根據(jù)該偏移地址對(duì)更新第一計(jì)數(shù)器的值,該偏移地址對(duì)包括起始地址以及結(jié)束地址,該起始地址為η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,該結(jié)束地址為η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,其中,X為大于等于2的整數(shù);η為大于等于I的整數(shù),然后當(dāng)通過DFA匹配確定DFA的當(dāng)前狀態(tài)為后綴接受態(tài)時(shí),保存第二字符的偏移地址,該第二字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至后綴接受態(tài)的字符,最后根據(jù)第一字符的偏移地址、第二字符的偏移地址、更新后的第一計(jì)數(shù)器的值、第一規(guī)則的后綴部分的長度及字符重復(fù)次數(shù)判斷第一報(bào)文是否滿足第一規(guī)則。通過該方案,由于每次可以對(duì)第一報(bào)文中的多個(gè)連續(xù)字符同時(shí)進(jìn)行判斷,且只在DFA中設(shè)置了規(guī)則的前綴接受態(tài)和后綴接受態(tài),因此,能夠提高報(bào)文處理速度、減少規(guī)則的存儲(chǔ)空間,以及提高報(bào)文的匹配效率。
【專利附圖】
【附圖說明】
[0064]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0065]圖1為本發(fā)明實(shí)施例提供的一種規(guī)則匹配方法的流程圖一;
[0066]圖2為本發(fā)明實(shí)施例提供的一種規(guī)則匹配方法的流程圖二 ;
[0067]圖3為本發(fā)明實(shí)施例提供的一種規(guī)則匹配方法的流程示意圖;
[0068]圖4為本發(fā)明實(shí)施例提供的規(guī)則匹配裝置的結(jié)構(gòu)示意圖一;
[0069]圖5為本發(fā)明實(shí)施例提供的規(guī)則匹配裝置的結(jié)構(gòu)示意圖二 ;
[0070]圖6為本發(fā)明實(shí)施例提供的規(guī)則匹配裝置的結(jié)構(gòu)示意圖三;
[0071]圖7為本發(fā)明實(shí)施例提供的規(guī)則匹配裝置的結(jié)構(gòu)示意圖四;
[0072]圖8為本發(fā)明實(shí)施例提供的單板的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0073]下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例提供的一種規(guī)則匹配方法及裝置進(jìn)行詳細(xì)地描述。
[0074]實(shí)施例一
[0075]本發(fā)明實(shí)施例提供一種規(guī)則匹配方法,如圖1所示,該方法可以包括:
[0076]S101、規(guī)則匹配裝置接收第一報(bào)文,該第一報(bào)文包括多個(gè)字符。
[0077]報(bào)文(message)是網(wǎng)絡(luò)中交換與傳輸?shù)臄?shù)據(jù)單元,即網(wǎng)絡(luò)中的站點(diǎn)一次性需發(fā)送的數(shù)據(jù)塊。報(bào)文中包含了完整的待發(fā)送的數(shù)據(jù)信息,其長度不限且可變。
[0078]具體的,當(dāng)規(guī)則匹配裝置與網(wǎng)絡(luò)側(cè)設(shè)備進(jìn)行通信時(shí),網(wǎng)絡(luò)側(cè)設(shè)備發(fā)送第一報(bào)文至規(guī)則匹配裝置,即規(guī)則匹配裝置接收第一報(bào)文,該第一報(bào)文包括多個(gè)字符。
[0079]需要說明的是,第一報(bào)文可以包括前綴、后綴和字符。
[0080]不例性的,第一報(bào)文可以為:~abc\s*ef abcOOaaaOlccclOO…wyz,其中,第一報(bào)文的前綴為:~abc\s*ef,后綴為wyz, abcOOaaaOlccclOO…為字符。
[0081]S102、規(guī)則匹配裝置通過DFA對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,DFA包括前綴接受態(tài)和后綴接受態(tài),該DFA由更新后的第一規(guī)則編譯后得到,該更新后的第一規(guī)則包括前綴部分,更新后的中間部分,以及后綴部分,該更新后的中間部分的正則表達(dá)式為“.*”。
[0082]FA (Finite Automat on,有限自動(dòng)機(jī))是為了研究某些語言類和有限內(nèi)存的計(jì)算過程而抽象出來的一種計(jì)算模型。FA可以表示為一個(gè)有向圖,該有向圖的每個(gè)結(jié)點(diǎn)對(duì)應(yīng)一個(gè)狀態(tài),即FA的狀態(tài),兩個(gè)FA的狀態(tài)之間的連線對(duì)應(yīng)一種狀態(tài)的跳轉(zhuǎn),F(xiàn)A可以包括有限數(shù)量的FA的狀態(tài),且每個(gè)FA的狀態(tài)可以跳轉(zhuǎn)至其他FA的狀態(tài)。使用FA時(shí),通過輸入不同的字符使得FA進(jìn)行狀態(tài)的跳轉(zhuǎn)。FA可以分為兩種形式:DFA和NFA。其中,DFA可以實(shí)現(xiàn)確定的狀態(tài)的跳轉(zhuǎn),即對(duì)于一個(gè)給定的有向圖和與該有向圖對(duì)應(yīng)的多個(gè)字符,DFA可以分別根據(jù)各個(gè)字符及預(yù)先設(shè)定的跳轉(zhuǎn)函數(shù)從一個(gè)狀態(tài)跳轉(zhuǎn)至另一個(gè)狀態(tài)。
[0083]DFA是由一個(gè)非空有限的狀態(tài)集合、一個(gè)輸入字母表(例如:報(bào)文),一個(gè)跳轉(zhuǎn)函數(shù)、一個(gè)開始狀態(tài),及一個(gè)接受態(tài)的集合所組成。當(dāng)啟動(dòng)DFA后,DFA處于開始狀態(tài),若依次將報(bào)文中的字符輸入至DFA,DFA則根據(jù)預(yù)先設(shè)定的跳轉(zhuǎn)函數(shù)依次跳轉(zhuǎn)至各個(gè)狀態(tài)。當(dāng)依次將報(bào)文中的字符輸入至DFA時(shí),若DFA接收某個(gè)字符后,DFA可以跳轉(zhuǎn)至接受態(tài)集合中的某個(gè)接受態(tài),則表示報(bào)文中該某個(gè)字符之前的所有字符與預(yù)設(shè)的第一規(guī)則相對(duì)應(yīng),即DFA可以繼續(xù)接收?qǐng)?bào)文中的其他字符。其中,預(yù)設(shè)的第一規(guī)則為將與第一報(bào)文對(duì)應(yīng)的第一規(guī)則更新后的第一規(guī)則。
[0084]需要說明的是,第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù)。
[0085]規(guī)則匹配裝置接收第一報(bào)文之后,規(guī)則匹配裝置通過DFA對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,DFA包括前綴接受態(tài)和后綴接受態(tài),該DFA由更新后的第一規(guī)則編譯后得到,該更新后的第一規(guī)則包括前綴部分,更新后的中間部分,以及后綴部分,該更新后的中間部分的正則表達(dá)式為*”。
[0086]需要說明的是,本發(fā)明實(shí)施例提供的規(guī)則匹配方法中,DFA的接受態(tài)可以包括兩個(gè)接受態(tài),即前綴接受態(tài)和后綴接受態(tài),這是由于為了節(jié)省第一規(guī)則的存儲(chǔ)空間,只需將第一規(guī)則的前綴部分和后綴部分分別編譯為包括前綴接受態(tài)和后綴接受態(tài)的DFA即可。
[0087]示例性的,第 一規(guī)則為~abC\S*ef[a-Z] {1000}wyz,規(guī)則匹配裝置接收到的第一報(bào)文為~abc\s*ef abcOOaaaOlccclOO…wyz。對(duì)于這種重復(fù)次數(shù)(1000次)較多的第一規(guī)貝U,為了提高規(guī)則匹配裝置對(duì)第一報(bào)文的匹配效率,開發(fā)人員一般會(huì)根據(jù)編程語言將這種重復(fù)次數(shù)較多的第一規(guī)則進(jìn)行相應(yīng)的更新,即可以將~abc\S*ef [a-Z] {1000}wyz規(guī)則改寫為~abc\S*ef.*wyz,其中,”表示256種字符中的任意字符,表示任意多個(gè)字符,即字符的個(gè)數(shù)可以為任意多個(gè)。其中,對(duì)于該條第一規(guī)則,中間部分的字符為[a-ζ]中的任意字符,字符重復(fù)次數(shù)為1000。
[0088]S103、當(dāng)規(guī)則匹配裝置通過DFA匹配確定該DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),規(guī)則匹配裝置開啟第一計(jì)數(shù)器,并保存第一字符的偏移地址,第一字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至前綴接受態(tài)的字符,第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù)。
[0089]當(dāng)規(guī)則匹配裝置通過DFA對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配時(shí),對(duì)于該DFA,規(guī)則匹配裝置啟動(dòng)該DFA后,該DFA處于開始狀態(tài),當(dāng)規(guī)則匹配裝置將接收到的第一報(bào)文中的首個(gè)字符輸入該DFA時(shí),該DFA可以從開始狀態(tài)跳轉(zhuǎn)至與首個(gè)字符對(duì)應(yīng)的DFA的狀態(tài),且規(guī)則匹配裝置可以獲取DFA的當(dāng)前狀態(tài)。
[0090]規(guī)則匹配裝置繼續(xù)將第一報(bào)文中的其他字符依次輸入該DFA,以使得該DFA根據(jù)輸入的字符及預(yù)先設(shè)定的跳轉(zhuǎn)函數(shù)依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài),且規(guī)則匹配裝置獲取DFA的當(dāng)前狀態(tài),若DFA的當(dāng)前狀態(tài)為前綴接受態(tài),則使得DFA跳轉(zhuǎn)至前綴接受態(tài)的字符為第一報(bào)文的前綴的最后一個(gè)字符,即第一字符。至此,規(guī)則匹配裝置判斷第一報(bào)文的前綴滿足第一規(guī)則的前綴部分和匹配條件。若第一報(bào)文的前綴滿足第一規(guī)則的前綴部分和匹配條件,規(guī)則匹配裝置則開啟設(shè)置有字符重復(fù)次數(shù)的第一計(jì)數(shù)器,并保存第一字符的偏移地址。其中,第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù)。
[0091]可選的,字符重復(fù)次數(shù)可以為第一規(guī)則中,除第一規(guī)則的前綴部分的字符和第一規(guī)則的后綴部分的字符之外的其他字符的個(gè)數(shù),即中間部分的字符的個(gè)數(shù)。
[0092]需要說明的是,上述匹配條件將在后續(xù)實(shí)施例中進(jìn)行詳細(xì)地描述,此處不再贅述。
[0093]S104、規(guī)則匹配裝置在通過DFA進(jìn)行匹配的同時(shí),規(guī)則匹配裝置以每次匹配X個(gè)連續(xù)字符的方式對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)中間部分的字符,每當(dāng)規(guī)則匹配裝置確定有η個(gè)連續(xù)字符是中間部分的字符時(shí),規(guī)則匹配裝置保存該次確定的η個(gè)連續(xù)字符的偏移地址對(duì),以及規(guī)則匹配裝置根據(jù)偏移地址對(duì)更新第一計(jì)數(shù)器的值,該偏移地址對(duì)包括起始地址以及結(jié)束地址,該起始地址為η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,該結(jié)束地址為η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,其中,X為大于等于2的整數(shù),η為大于等于I的整數(shù)。
[0094]規(guī)則匹配裝置在通過DFA進(jìn)行匹配的同時(shí),規(guī)則匹配裝置以每次匹配X個(gè)連續(xù)字符的方式對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)中間部分的字符,每當(dāng)規(guī)則匹配裝置確定有η個(gè)連續(xù)字符是中間部分的字符時(shí),規(guī)則匹配裝置保存該次確定的η個(gè)連續(xù)字符的偏移地址對(duì),以及規(guī)則匹配裝置根據(jù)偏移地址對(duì)更新第一計(jì)數(shù)器的值,該偏移地址對(duì)包括起始地址以及結(jié)束地址,該起始地址為η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,該結(jié)束地址為η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,其中,X為大于等于2的整數(shù),η為大于等于I的整數(shù)。
[0095]示例性的,規(guī)則匹配裝置可以通過該η個(gè)連續(xù)字符中的結(jié)束字符的偏移地址減去該η個(gè)連續(xù)字符中的起始字符的偏移地址,再加I得到該η個(gè)連續(xù)字符的長度,即η的值,并通過將第一計(jì)數(shù)器的值減去η的值,從而以更新第一計(jì)數(shù)器。
[0096]需要說明的是,本發(fā)明實(shí)施例提供的規(guī)則匹配方法中,第一規(guī)則的中間部分保存在規(guī)則匹配裝置的字符判別模塊中。
[0097]S105、當(dāng)規(guī)則匹配裝置通過DFA匹配確定該DFA的當(dāng)前狀態(tài)為后綴接受態(tài)時(shí),規(guī)則匹配裝置保存第二字符的偏移地址,第二字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至后綴接受態(tài)的字符。
[0098]規(guī)則匹配裝置依次將第一報(bào)文中的各個(gè)字符輸入DFA,以使得該DFA根據(jù)輸入的字符及預(yù)先設(shè)定的跳轉(zhuǎn)函數(shù)依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài),且規(guī)則匹配裝置獲取DFA的當(dāng)前狀態(tài),若DFA的當(dāng)前狀態(tài)為后綴接受態(tài),則使得DFA跳轉(zhuǎn)至后綴接受態(tài)的字符為第一報(bào)文的后綴的最后一個(gè)字符,即第二字符。至此,規(guī)則匹配裝置判斷第一報(bào)文的后綴是否滿足第一規(guī)則。由于該第一規(guī)則為對(duì)與第一報(bào)文對(duì)應(yīng)的第一規(guī)則更新后的第一規(guī)則,因此,若需判斷第一報(bào)文是否滿足未更新的第一規(guī)則(真正的第一規(guī)則),規(guī)則匹配裝置則還需根據(jù)上述步驟保存的相關(guān)信息進(jìn)行進(jìn)一步判斷,具體如S104的描述。若第一報(bào)文中的字符滿足該第一規(guī)則的后綴部分,規(guī)則匹配裝置則保存第二字符的偏移地址。
[0099]特別的,當(dāng)DFA的狀態(tài)跳轉(zhuǎn)至前綴接受態(tài)后,規(guī)則匹配裝置仍然繼續(xù)將報(bào)文中位于第一字符后的各個(gè)字符依次輸入至DFA,以使得DFA根據(jù)規(guī)則匹配裝置輸入的各個(gè)字符依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài),直至DFA跳轉(zhuǎn)至后綴接受態(tài)。
[0100]S106、規(guī)則匹配裝置根據(jù)第一字符的偏移地址、第二字符的偏移地址、更新后的第一計(jì)數(shù)器的值、第一規(guī)則的后綴部分的長度及字符重復(fù)次數(shù)判斷第一報(bào)文是否滿足第一規(guī)則。
[0101]規(guī)則匹配裝置可根據(jù)上述步驟保存的第一字符的偏移地址和第二字符的偏移地址,及第一規(guī)則的后綴部分的長度、字符重復(fù)次數(shù),以及更新后的第一計(jì)數(shù)器的值判斷第一報(bào)文是否滿足第一規(guī)則。
[0102]具體的,規(guī)則匹配裝置可以將第二字符的偏移地址與第一規(guī)則的后綴部分的長度之差,和第一字符的偏移地址與字符重復(fù)次數(shù)之和進(jìn)行比較,并將第二字符的偏移地址與第一規(guī)則的后綴部分的長度之差,和第一字符的偏移地址、字符重復(fù)次數(shù)及更新后的第一計(jì)數(shù)器的值之和進(jìn)行比較,從而以判斷第一報(bào)文是否滿足第一規(guī)則。
[0103]需要說明的是,第一規(guī)則的后綴的長度為第一規(guī)則中后綴部分的字符的個(gè)數(shù),字符重復(fù)次數(shù)為第一規(guī)則中的字符重復(fù)次數(shù)。
[0104]特別的,第一規(guī)則的前綴部分和后綴部分保存在規(guī)則匹配裝置中的DFA中,而第一規(guī)則的中間部分保存在規(guī)則匹配裝置中的字符判別模塊中,其中,該DFA用于執(zhí)行S102-S103及S105,以及該字符判別模塊用于執(zhí)行S104。
[0105]進(jìn)一步地,規(guī)則匹配裝置中的字符判別模塊的可以通過一個(gè)狀態(tài)機(jī)實(shí)現(xiàn),也可以通過其他可編程邏輯實(shí)現(xiàn)同時(shí)多個(gè)字符進(jìn)行比較功能的結(jié)構(gòu),具體的實(shí)施方式不發(fā)明不作限制。
[0106]本發(fā)明實(shí)施例提供一種規(guī)則匹配方法,用于規(guī)則匹配裝置對(duì)符合第一規(guī)則的報(bào)文進(jìn)行匹配,該第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù),規(guī)則匹配裝置通過接收第一報(bào)文,該第一報(bào)文包括多個(gè)字符,并規(guī)則匹配裝置通過有限自動(dòng)機(jī)DFA對(duì)該第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,DFA包括前綴接受態(tài)和后綴接受態(tài),該DFA由更新后的第一規(guī)則編譯后得到,更新后的第一規(guī)則包括該前綴部分,更新后的中間部分,以及該后綴部分,該更新后的中間部分的正則表達(dá)式為*”,及當(dāng)規(guī)則匹配裝置通過該DFA匹配確定該DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),規(guī)則匹配裝置開啟第一計(jì)數(shù)器,并保存第一字符的偏移地址,該第一字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至前綴接受態(tài)的字符,該第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù),以及在規(guī)則匹配裝置通過DFA進(jìn)行匹配的同時(shí),規(guī)則匹配裝置以每次匹配X個(gè)連續(xù)字符的方式對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)中間部分的字符,每當(dāng)規(guī)則匹配裝置確定有η個(gè)連續(xù)字符是中間部分的字符時(shí),規(guī)則匹配裝置保存該次確定的η個(gè)連續(xù)字符的偏移地址對(duì),并根據(jù)該偏移地址對(duì)更新第一計(jì)數(shù)器的值,該偏移地址對(duì)包括起始地址以及結(jié)束地址,該起始地址為η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,該結(jié)束地址為η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,其中,X為大于等于2的整數(shù);η為大于等于I的整數(shù),然后當(dāng)規(guī)則匹配裝置通過DFA匹配確定DFA的當(dāng)前狀態(tài)為后綴接受態(tài)時(shí),規(guī)則匹配裝置保存第二字符的偏移地址,該第二字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至后綴接受態(tài)的字符,最后規(guī)則匹配裝置根據(jù)第一字符的偏移地址、第二字符的偏移地址、更新后的第一計(jì)數(shù)器的值、第一規(guī)則的后綴部分的長度及字符重復(fù)次數(shù)判斷第一報(bào)文是否滿足第一規(guī)則。通過該方案,由于每次可以對(duì)第一報(bào)文中的多個(gè)連續(xù)字符同時(shí)進(jìn)行判斷,且只在DFA中設(shè)置了規(guī)則的前綴接受態(tài)和后綴接受態(tài),因此,能夠提高報(bào)文處理速度、減少規(guī)則的存儲(chǔ)空間,以及提高報(bào)文的匹配效率。[0107]實(shí)施例二
[0108]本發(fā)明實(shí)施例提供一種規(guī)則匹配方法,如圖2所示,該方法可以包括:
[0109]S201、規(guī)則匹配裝置接收來自網(wǎng)絡(luò)側(cè)設(shè)備的第一報(bào)文,該第一報(bào)文包括多個(gè)字符。
[0110]報(bào)文是網(wǎng)絡(luò)中交換與傳輸?shù)臄?shù)據(jù)單元,即網(wǎng)絡(luò)中的站點(diǎn)一次性需發(fā)送的數(shù)據(jù)塊。報(bào)文中包含了完整的待發(fā)送的數(shù)據(jù)信息,其長度不限且可變。
[0111]具體的,當(dāng)規(guī)則匹配裝置與網(wǎng)絡(luò)側(cè)設(shè)備進(jìn)行通信時(shí),網(wǎng)絡(luò)側(cè)設(shè)備發(fā)送第一報(bào)文至規(guī)則匹配裝置,即規(guī)則匹配裝置接收第一報(bào)文,該第一報(bào)文包括多個(gè)字符。
[0112]需要說明的是,第一報(bào)文可以包括前綴、后綴和字符。
[0113]不例性的,第一報(bào)文可以為:~abc\s*ef abcOOaaaOlccclOO…wyz,其中,第一報(bào)文的前綴為:~abc\s*ef,后綴為wyz, abcOOaaaOlccclOO…為字符。
[0114]S202、規(guī)則匹配裝置通過DFA對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,DFA包括前綴接受態(tài)和后綴接受態(tài),該DFA由更新后的第一規(guī)則編譯后得到,該更新后的第一規(guī)則包括前綴部分,更新后的中間部分,以及后綴部分,該更新后的中間部分的正則表達(dá)式為“.*”。
[0115]FA是為了研究某些語言類和有限內(nèi)存的計(jì)算過程而抽象出來的一種計(jì)算模型。FA可以表示為一個(gè)有向圖,該有向圖的每個(gè)結(jié)點(diǎn)對(duì)應(yīng)一個(gè)狀態(tài),即FA的狀態(tài),兩個(gè)FA的狀態(tài)之間的連線對(duì)應(yīng)一種狀態(tài)的跳轉(zhuǎn),F(xiàn)A可以包括有限數(shù)量的FA的狀態(tài),且每個(gè)FA的狀態(tài)可以跳轉(zhuǎn)至其他FA的狀態(tài)。使用FA時(shí),通過輸入不同的字符使得FA進(jìn)行狀態(tài)的跳轉(zhuǎn)。FA可以分為兩種形式:DFA和NFA。其中,DFA可以實(shí)現(xiàn)確定的狀態(tài)的跳轉(zhuǎn),即對(duì)于一個(gè)給定的有向圖和與該有向圖對(duì)應(yīng)的多個(gè)字符,DFA可以分別根據(jù)各個(gè)字符及預(yù)先設(shè)定的跳轉(zhuǎn)函數(shù)從一個(gè)狀態(tài)跳轉(zhuǎn)至另一個(gè)狀態(tài)。
[0116]DFA是由一個(gè)非空有限的狀態(tài)集合、一個(gè)輸入字母表(例如:報(bào)文),一個(gè)跳轉(zhuǎn)函數(shù)、一個(gè)開始狀態(tài),及一個(gè)接受態(tài)的集合所組成。當(dāng)啟動(dòng)DFA后,DFA處于開始狀態(tài),若依次將報(bào)文中的字符輸入至DFA,DFA則根據(jù)預(yù)先設(shè)定的跳轉(zhuǎn)函數(shù)依次跳轉(zhuǎn)至各個(gè)狀態(tài)。當(dāng)依次將報(bào)文中的字符輸入至DFA時(shí),若DFA接收某個(gè)字符后,DFA可以跳轉(zhuǎn)至接受態(tài)集合中的某個(gè)接受態(tài),則表示報(bào)文中該某個(gè)字符之前的所有字符與預(yù)設(shè)的第一規(guī)則相對(duì)應(yīng),即DFA可以繼續(xù)接收?qǐng)?bào)文中的其他字符。其中,預(yù)設(shè)的第一規(guī)則為將與第一報(bào)文對(duì)應(yīng)的第一規(guī)則更新后的第一規(guī)則。
[0117]需要說明的是,第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù)。
[0118]規(guī)則匹配裝置接收第一報(bào)文之后,規(guī)則匹配裝置通過DFA對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,DFA包括前綴接受態(tài)和后綴接受態(tài),該DFA由更新后的第一規(guī)則編譯后得到,該更新后的第一規(guī)則包括前綴部分,更新后的中間部分,以及后綴部分,該更新后的中間部分的正則表達(dá)式為*”。
[0119]規(guī)則匹配裝置接收來 自網(wǎng)絡(luò)側(cè)設(shè)備的第一報(bào)文后,規(guī)則匹配裝置獲取第一報(bào)文中的各個(gè)字符,以便后續(xù)判斷第一報(bào)文中的各個(gè)字符是否滿足第一規(guī)則。
[0120]具體的,規(guī)則匹配裝置依次輸入各個(gè)字符至DFA,以使得DFA根據(jù)各個(gè)字符依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài)。
[0121 ] 規(guī)則匹配裝置獲取第一報(bào)文中的各個(gè)字符之后,規(guī)則匹配裝置可以依次輸入各個(gè)字符至DFA,以使得DFA可根據(jù)各個(gè)字符依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài)。
[0122]具體的,規(guī)則匹配裝置啟動(dòng)該DFA后,該DFA處于開始狀態(tài),當(dāng)規(guī)則匹配裝置將接收到的第一報(bào)文中的首個(gè)字符輸入該DFA時(shí),該DFA可以從開始狀態(tài)跳轉(zhuǎn)至與該首個(gè)字符對(duì)應(yīng)的DFA的狀態(tài),規(guī)則匹配裝置繼續(xù)將第一報(bào)文中的其他字符依次輸入該DFA,以使得該DFA可根據(jù)規(guī)則匹配裝置輸入的字符及預(yù)先設(shè)定的跳轉(zhuǎn)函數(shù)依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài)。
[0123]需要說明的是,本發(fā)明實(shí)施例提供的規(guī)則匹配方法中,DFA的接受態(tài)可以包括兩個(gè)接受態(tài),即前綴接受態(tài)和后綴接受態(tài),這是由于為了節(jié)省第一規(guī)則的存儲(chǔ)空間,只需將第一規(guī)則的前綴部分和后綴部分分別編譯為包括前綴接受態(tài)和后綴接受態(tài)的DFA即可。
[0124]示例性的,第一規(guī)則為~abC\S*ef[a-Z] {1000}wyz,規(guī)則匹配裝置接收到的第一報(bào)文為~abc\s*ef abcOOaaaOlccclOO…wyz。對(duì)于這種重復(fù)次數(shù)(1000次)較多的第一規(guī)貝U,為了提高規(guī)則匹配裝置對(duì)第一報(bào)文的匹配效率,開發(fā)人員一般會(huì)根據(jù)編程語言將這種重復(fù)次數(shù)較多的第一規(guī)則進(jìn)行相應(yīng)的更新,即可以將~abc\S*ef [a-Z] {1000}wyz規(guī)則改寫為~abc\S*ef.*wyz,其中,”表示256種字符中的任意字符,表示任意多個(gè)字符,即字符的個(gè)數(shù)可以為任意多個(gè)。其中,對(duì)于該條第一規(guī)則,中間部分的字符為[a-ζ]中的任意字符,字符重復(fù)次數(shù)為1000。
[0125] S203、當(dāng)規(guī)則匹配裝置通過DFA匹配確定該DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),規(guī)則匹配裝置開啟第一計(jì)數(shù)器,并保存第一字符的偏移地址,第一字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至前綴接受態(tài)的字符,第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù)。
[0126]當(dāng)規(guī)則匹配裝置通過DFA對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配時(shí),對(duì)于該DFA,規(guī)則匹配裝置啟動(dòng)該DFA后,該DFA處于開始狀態(tài),當(dāng)規(guī)則匹配裝置將接收到的第一報(bào)文中的首個(gè)字符輸入該DFA時(shí),該DFA可以從開始狀態(tài)跳轉(zhuǎn)至與該首個(gè)字符對(duì)應(yīng)的DFA的狀態(tài),且規(guī)則匹配裝置可以獲取DFA的當(dāng)前狀態(tài)。
[0127]規(guī)則匹配裝置繼續(xù)將第一報(bào)文中的其他字符依次輸入該DFA,以使得該DFA可根據(jù)規(guī)則匹配裝置輸入的字符及預(yù)先設(shè)定的跳轉(zhuǎn)函數(shù)依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài),且規(guī)則匹配裝置獲取DFA的當(dāng)前狀態(tài),若DFA的當(dāng)前狀態(tài)為前綴接受態(tài),規(guī)則匹配裝置則可以獲知使得DFA跳轉(zhuǎn)至前綴接受態(tài)的字符為第一報(bào)文的前綴的最后一個(gè)字符,即第一字符。至此,規(guī)則匹配裝置判斷第一報(bào)文的前綴滿足第一規(guī)則的前綴部分和匹配條件。若第一報(bào)文的前綴滿足第一規(guī)則和匹配條件,規(guī)則匹配裝置則開啟設(shè)置有字符重復(fù)次數(shù)的第一計(jì)數(shù)器,并保存第一字符的偏移地址。其中,第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù)。
[0128]可選的,當(dāng)規(guī)則匹配裝置通過DFA匹配確定該DFA的當(dāng)前狀態(tài)為前綴接受態(tài)時(shí),匹配條件可以為規(guī)則匹配裝置開啟計(jì)數(shù)器的判別條件,具體的,匹配條件可以包括下述的任意一個(gè):
[0129](l)End-0ffset+l≥m,其中,Offset為規(guī)則匹配裝置輸入至DFA的當(dāng)前字符的偏移地址,End為與Offset的差值最小的η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為字符
重復(fù)次數(shù)。
[0130](2)規(guī)則匹配裝置未保存η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址。
[0131]需要說明的是,當(dāng)規(guī)則匹配裝置通過DFA匹配確定該DFA的當(dāng)前狀態(tài)為前綴接受態(tài)時(shí),匹配條件中的Offset為規(guī)則匹配裝置輸入至DFA的前綴接受態(tài)時(shí)的字符的偏移地址。
[0132]可以理解的是,若規(guī)則匹配裝置確定DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),規(guī)則匹配裝置開啟第一計(jì)數(shù),可以避免規(guī)則匹配裝置確定DFA的當(dāng)前狀態(tài)為前綴接受態(tài),但是完全不可能匹配上的報(bào)文的匹配,從而節(jié)省了計(jì)數(shù)器,避免在規(guī)則匹配裝置匹配報(bào)文的過程中因沒有空閑的計(jì)數(shù)器,而造成漏匹配的情況的發(fā)生。
[0133]可選的,字符重復(fù)次數(shù)可以為第一規(guī)則中,除第一規(guī)則的前綴部分的字符和第一規(guī)則的后綴部分的字符之外的其他字符的個(gè)數(shù),即中間部分的字符的個(gè)數(shù)。
[0134]S204、規(guī)則匹配裝置繼續(xù)依次輸入各個(gè)字符至DFA,以使得DFA根據(jù)各個(gè)字符依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài),并繼續(xù)獲取DFA的狀態(tài)。
[0135]當(dāng)規(guī)則匹配裝置通過DFA匹配確定該DFA的當(dāng)前狀態(tài)為前綴接受態(tài)之后,規(guī)則匹配裝置繼續(xù)依次輸入各個(gè)字符至DFA,以使得DFA根據(jù)各個(gè)字符依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài),并繼續(xù)獲取DFA的狀態(tài)。
[0136]需要說明的是,S203中規(guī)則匹配裝置依次輸入的各個(gè)字符為第一報(bào)文中位于第一字符后的各個(gè)字符。
[0137]S205、規(guī)則匹配裝置在通過DFA進(jìn)行匹配的同時(shí),規(guī)則匹配裝置以每次匹配X個(gè)連續(xù)字符的方式對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)中間部分的字符,其中,X為大于等于2的整數(shù)。
[0138]規(guī)則匹配裝置在通過DFA進(jìn)行匹配的同時(shí),規(guī)則匹配裝置可以將第一報(bào)文中位于第一字符后的X個(gè)連續(xù)字符與第一規(guī)則的中間部分進(jìn)行對(duì)比,以確定滿足第一規(guī)則的中間部分的字符,其中,X為大于等于2的整數(shù)。
[0139]具體的,如圖3所示,規(guī)則匹配裝置將第一報(bào)文中位于第一字符后的其他字符依次輸入該字符判別模塊,以使得該字符判別模塊可以根據(jù)規(guī)則匹配裝置可以將第一報(bào)文中位于第一字符后的X個(gè)連續(xù)字符與第一規(guī)則的中間部分進(jìn)行對(duì)比,以確定滿足第一規(guī)則的中間部分的字符,其中,X為大于等于2的整數(shù)。
[0140]需要說明的是,字符判別模塊是由FPGA(Field — Programmable Gate Array,現(xiàn)場可編程門陣列)編譯的可編程邏輯結(jié)構(gòu),且一般在規(guī)則匹配裝置的FPGA中,X可以為8或16,本發(fā)明實(shí)施例中選取x=8進(jìn)行說明。
[0141]示例性的,第一報(bào)文中的第一字符后的字符可以為sjfhdkajsabc,當(dāng)x為8時(shí),SP規(guī)則匹配裝置通過字符判別模塊將sjfhdkaj與第一規(guī)則的中間部分進(jìn)行對(duì)比,以確定滿足第一規(guī)則的中間部分的字符的個(gè)數(shù)。
[0142]可以理解的是,X為大于等于2的整數(shù),規(guī)則匹配裝置可以同時(shí)對(duì)X個(gè)連續(xù)字符進(jìn)行匹配確定,從而提高了提高第一報(bào)文處理速度,以及提高第一報(bào)文的匹配效率。
[0143]S206、每當(dāng)規(guī)則匹配裝置確定有η個(gè)連續(xù)字符是中間部分的字符時(shí),規(guī)則匹配裝置保存該次確定的η個(gè)連續(xù)字符的偏移地址對(duì),以及規(guī)則匹配裝置根據(jù)偏移地址對(duì)更新第一計(jì)數(shù)器的值,該偏移地址對(duì)包括起始地址以及結(jié)束地址,該起始地址為η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,該結(jié)束地址為η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,其中,η為大于等于I的整數(shù)。
[0144]規(guī)則匹配裝置在通過DFA進(jìn)行匹配的同時(shí),規(guī)則匹配裝置將第一報(bào)文中位于第一字符后的X個(gè)連續(xù)字符與第一規(guī)則的中間部分進(jìn)行對(duì)比,當(dāng)規(guī)則匹配裝置每次確定滿足第一規(guī)則的中間部分的η個(gè)連續(xù)字符后,規(guī)則匹配裝置保存該次確定的η個(gè)連續(xù)字符的偏移地址對(duì),其中,該偏移地址對(duì)包括起始地址以及結(jié)束地址,該起始地址為η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,該結(jié)束地址為η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,以及規(guī)則匹配裝置可根據(jù)該η個(gè)連續(xù)字符中的起始字符的偏移地址和該η個(gè)連續(xù)字符中的結(jié)束字符的偏移地址更新第一計(jì)數(shù)器的值。
[0145]需要說明的是,η個(gè)連續(xù)字符可以包括X個(gè)連續(xù)字符中的滿足第一規(guī)則的中間部分的連續(xù)字符,如圖3所示,規(guī)則匹配裝置可以保存滿足第一規(guī)則的中間部分的連續(xù)字符的起始字符的偏移地址和結(jié)束字符的偏移地址。
[0146]本發(fā)明實(shí)施例中,規(guī)則匹配裝置根據(jù)偏移地址對(duì)更新第一計(jì)數(shù)器的值具體為獲取偏移地址對(duì)的長度,該偏移地址對(duì)的長度為結(jié)束地址與起始地址之差,再加上1,以及將第一計(jì)數(shù)器的值減去偏移地址對(duì)的長度。
[0147]示例性的,規(guī)則匹配裝置可以通過該η個(gè)連續(xù)字符中的結(jié)束字符的偏移地址減去該η個(gè)連續(xù)字符中的起始字符的偏移地址,再加I得到該η個(gè)連續(xù)字符的長度,即η的值,并通過將第一計(jì)數(shù)器的值減去η的值,從而以更新第一計(jì)數(shù)器。
[0148]可以理解的是,第一計(jì)數(shù)器的計(jì)數(shù)方式可以為正計(jì)數(shù)或倒計(jì)數(shù)的方式進(jìn)行計(jì)數(shù),本發(fā)明實(shí)施例不作限制。
[0149]需要說明的是,本發(fā)明實(shí)施例提供的規(guī)則匹配方法中,第一規(guī)則可以包括字符重復(fù)次數(shù)和第一規(guī)則的中間部分。具體的第一規(guī)則的中間部分和字符重復(fù)次數(shù),將在例子中進(jìn)行詳細(xì)地示例性的說明。
[0150]可選的,當(dāng)規(guī)則匹配裝置更新第一計(jì)數(shù)器的次數(shù)不等于字符重復(fù)次數(shù)時(shí),若Offset≥Begin且End-Offset+1 < m,則關(guān)閉第一計(jì)數(shù)器,其中,Offset為規(guī)則匹配裝置輸入至DFA的當(dāng)前字符的偏移地址,Begin為與Offset的差值最小的η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,End為與Offset的差值最小的η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為字符重復(fù)次數(shù)。通過上述步驟,規(guī)則匹配裝置可以提前發(fā)現(xiàn)第一計(jì)數(shù)器將會(huì)由于重復(fù)次數(shù)不足導(dǎo)致第一報(bào)文無法真正滿足第一規(guī)則,而將第一計(jì)數(shù)器提前關(guān)閉,故可以降低規(guī)則匹配裝置對(duì)第一報(bào)文誤判斷的發(fā)生概率。
[0151]特別的,規(guī)則匹配裝置依次將第一報(bào)文中的各個(gè)字符輸入DFA時(shí),DFA可以跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài),且DFA也可輸出各個(gè)字符的偏移地址。
[0152]S207、當(dāng)規(guī)則匹配裝置通過DFA匹配確定該DFA的當(dāng)前狀態(tài)為后綴接受態(tài)時(shí),規(guī)則匹配裝置則保存第二字符的偏移地址,第二字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至后綴接受態(tài)的字符。
[0153]規(guī)則匹配裝置依次將第一報(bào)文中的各個(gè)字符輸入DFA,以使得該DFA可根據(jù)規(guī)則匹配裝置輸入的字符及預(yù)先設(shè)定的跳轉(zhuǎn)函數(shù)依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài),且規(guī)則匹配裝置獲取DFA的當(dāng)前狀態(tài),若DFA的當(dāng)前狀態(tài)為后綴接受態(tài),則使得DFA跳轉(zhuǎn)至后綴接受態(tài)的字符為第一報(bào)文的后綴的最后一個(gè)字符,即第二字符。至此,規(guī)則匹配裝置判斷第一報(bào)文的后綴是否滿足第一規(guī)則。由于該第一規(guī)則為將用來判斷第一報(bào)文的第一規(guī)則更新后的第一 規(guī)則,因此,若需判斷第一報(bào)文是否滿足未更新的第一規(guī)則(真正的第一規(guī)則),規(guī)則匹配裝置則還需根據(jù)上述步驟保存的相關(guān)信息進(jìn)行進(jìn)一步判斷,具體如S205-S206的描述。若第一報(bào)文中的字符滿足該第一規(guī)則的后綴部分,規(guī)則匹配裝置則保存第二字符的偏移地址。
[0154]需要說明的是,當(dāng)DFA的狀態(tài)跳轉(zhuǎn)至前綴接受態(tài)后,規(guī)則匹配裝置仍然繼續(xù)將第一報(bào)文中位于第一字符后的各個(gè)字符依次輸入至DFA,以使得DFA根據(jù)規(guī)則匹配裝置輸入的各個(gè)字符依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài),直至DFA跳轉(zhuǎn)至后綴接受態(tài)。
[0155]特別的,當(dāng)DFA的狀態(tài)跳轉(zhuǎn)至前綴接受態(tài)后,規(guī)則匹配裝置仍然繼續(xù)將報(bào)文中位于第一字符后的各個(gè)字符依次輸入至DFA,以使得DFA根據(jù)規(guī)則匹配裝置輸入的各個(gè)字符依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài),直至DFA跳轉(zhuǎn)至后綴接受態(tài)。
[0156]S208、規(guī)則匹配裝置根據(jù)第一字符的偏移地址、第二字符的偏移地址、更新后的第一計(jì)數(shù)器的值、第一規(guī)則的后綴部分的長度及字符重復(fù)次數(shù)判斷第一報(bào)文是否滿足第一規(guī)則。
[0157]規(guī)則匹配裝置可根據(jù)上述步驟保存的第一字符的偏移地址和第二字符的偏移地址、第一規(guī)則的后綴部分的長度、字符重復(fù)次數(shù),以及更新后的第一計(jì)數(shù)器的值判斷第一報(bào)文是否滿足第一規(guī)則。
[0158]特別的,規(guī)則匹配裝置可以將第二字符的偏移地址與第一規(guī)則的后綴部分的長度之差,和第一字符的偏移地址與字符重復(fù)次數(shù)之和進(jìn)行比較,并將第二字符的偏移地址與第一規(guī)則的后綴部分的長度之差,和第一字符的偏移地址、字符重復(fù)次數(shù)及更新后的第一計(jì)數(shù)器的值之和進(jìn)行比較,從而以判斷第一報(bào)文是否滿足第一規(guī)則。
[0159]具體的,若規(guī)則匹配裝置保存的第二字符的偏移地址與第一規(guī)則的后綴部分的長度之差大于等于,規(guī)則匹配裝置保存的第一字符的偏移地址與字符重復(fù)次數(shù)之和,且規(guī)則匹配裝置保存的第二字符的偏移地址與第一規(guī)則的后綴部分的長度之差小于等于,規(guī)則匹配裝置保存的第一字符的偏移地址、字符重復(fù)次數(shù)及更新后的第一計(jì)數(shù)器的值之和,規(guī)則匹配裝置則判斷第一報(bào)文滿足第一規(guī)則。
[0160]進(jìn)一步地,若規(guī)則匹配裝置保存的第二字符的偏移地址與第一規(guī)則的后綴部分的長度之差小于,規(guī)則匹配裝置保存的第一字符的偏移地址與字符重復(fù)次數(shù)之和,或規(guī)則匹配裝置保存的第二字符的偏移地址與第一規(guī)則的后綴部分的長度之差大于,規(guī)則匹配裝置保存的第一字符的偏移地址、字符重復(fù)次數(shù)及更新后的第一計(jì)數(shù)器的值之和,規(guī)則匹配裝置則判斷第一報(bào)文不滿足第一規(guī)則。
[0161]其中,第一規(guī)則的后綴部分的長度為第一規(guī)則中后綴部分的字符的個(gè)數(shù),字符重復(fù)次數(shù)為第一規(guī)則中的字符重復(fù)次數(shù)。
[0162]具體的,第一規(guī)則的中間部分的字符為一個(gè)確定的字符,或者為多個(gè)可選字符中的任意一個(gè)字符,以及第一規(guī)則的中間部分的字符重復(fù)次數(shù)為一個(gè)固定次數(shù),或者為由一個(gè)下限值和一個(gè)上限值組成的次數(shù)范圍。
[0163]例如,在規(guī)則~abc\s*ef[a_z] {1000} wyz中,該規(guī)則的中間部分的字符為[a_z]中的任意一個(gè)字符,該規(guī)則的中間部分的字符重復(fù)次數(shù)為一個(gè)固定次數(shù)1000,而在規(guī)則~abc\s*ef [d] {1200-2000} wyz中,該規(guī)則的中間部分的字符為確定的字符“d”,該規(guī)則的中間部分的字符重復(fù)次數(shù)為由一個(gè)下限值1200和一個(gè)上限值2000組成的次數(shù)范圍。
[0164]可選的,規(guī)則匹配裝置依次輸入各個(gè)字符至DFA,以使得DFA可根據(jù)各個(gè)字符依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài)之后,規(guī)則匹配裝置查詢DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志,若DFA的狀態(tài)設(shè)置有死狀態(tài)標(biāo)志,且第一計(jì)數(shù)器關(guān)閉,規(guī)則匹配裝置則結(jié)束DFA的狀態(tài)跳轉(zhuǎn),即結(jié)束第一報(bào)文與該條第一規(guī)則的匹配。
[0165]可以理解的是,由于規(guī)則匹配裝置能夠提前判斷出相對(duì)于前綴接受態(tài)的死狀態(tài)而提前結(jié)束DFA的狀態(tài)的跳轉(zhuǎn),故而大大提高了規(guī)則匹配裝置對(duì)第一報(bào)文中的字符的匹配效率。
[0166]進(jìn)一步地,規(guī)則匹配裝置查詢DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志之前,規(guī)則匹配裝置獲取該DFA的有向圖,以及若在該DFA的有向圖中,規(guī)則匹配裝置獲取到未與該DFA前綴接受態(tài)連接的狀態(tài),規(guī)則匹配裝置則將該未與DFA的前綴接受態(tài)連接的狀態(tài)設(shè)置一個(gè)死狀態(tài)標(biāo)志。
[0167]需要說明的是,開發(fā)人員編譯出與第一規(guī)則對(duì)應(yīng)的DFA后,可將該DFA看作一個(gè)有向圖,并在該有向圖中找到所有不與該DFA中的前綴接受態(tài)連接的頂點(diǎn)(某個(gè)DFA的狀態(tài)),該頂點(diǎn)則為相對(duì)于前綴接受態(tài)的死狀態(tài),開發(fā)人員找到相對(duì)于前綴接受態(tài)的死狀態(tài)之后,可在該相對(duì)于前綴接受態(tài)的死狀態(tài)中設(shè)置一個(gè)死狀態(tài)標(biāo)志,以用于指示該某個(gè)DFA的狀態(tài)為相對(duì)于前綴接受態(tài)的死狀態(tài)。
[0168]特別的,規(guī)則匹配裝置在查詢DFA的某個(gè)狀態(tài)設(shè)置有死狀態(tài)標(biāo)志后,若此時(shí)規(guī)則匹配裝置已開啟了多個(gè)第一計(jì)數(shù)器,則需該多個(gè)第一計(jì)數(shù)器都關(guān)閉后才能結(jié)束DFA的狀態(tài)的跳轉(zhuǎn)。
[0169]其中,規(guī)則匹配裝置關(guān)閉第一計(jì)數(shù)器條件可以包括:當(dāng)?shù)谝挥?jì)數(shù)器的更新次數(shù)或第二計(jì)數(shù)器的更新次數(shù)小于字符重復(fù)次數(shù)時(shí),若Offset≥Begin且End-Offset+l < m,規(guī)則匹配裝置則將對(duì)應(yīng)的第一計(jì)數(shù)器關(guān)閉,其中,Offset為規(guī)則匹配裝置輸入至DFA的當(dāng)前字符的偏移地址,Begin為與Offset的差值最小的η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,End為與Offset的差值最小的η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為字符重復(fù)次數(shù)。
[0170]需要說明的是,第一規(guī)則的前綴部分和后綴部分保存在規(guī)則匹配裝置中的DFA中,而第一規(guī)則的中間部分保存在規(guī)則匹配裝置中的字符判別模塊中,其中,該DFA用于執(zhí)行S202-S203-S204及S207 ;該字符判別模塊用于執(zhí)行S205-S206。
[0171]進(jìn)一步地,規(guī)則匹配裝置中的字符判別模塊的可以通過一個(gè)狀態(tài)機(jī)實(shí)現(xiàn),也可以通過其他可編程邏輯實(shí)現(xiàn)同時(shí)多個(gè)字符進(jìn)行比較功能的結(jié)構(gòu),具體的實(shí)施方式不發(fā)明不作限制。
[0172]具體的,如圖3所示,圖3為第一報(bào)文與第一規(guī)則匹配的流程示意圖。規(guī)則匹配裝置通過DFA對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,并輸出DFA當(dāng)前狀態(tài)的字符的偏移地址。同時(shí),規(guī)則匹配裝置通過字符判別模塊也對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,并保存第一報(bào)文中與第一規(guī)則的中間部分每次匹配的η個(gè)連續(xù)字符的偏移地址對(duì),以及規(guī)則匹配裝置根據(jù)DFA的前綴接受態(tài)和該每次匹配的η個(gè)連續(xù)字符的偏移地址對(duì)開啟第一計(jì)數(shù)器,并根據(jù)該每次匹配的η個(gè)連續(xù)字符的偏移地址對(duì)更新第一計(jì)數(shù)器的值,以用于第一報(bào)文與第一規(guī)則的中間部分的字符匹配個(gè)數(shù)的計(jì)數(shù),最后規(guī)則匹配裝置根據(jù)DFA到達(dá)前綴接受態(tài)時(shí)字符的偏移地址、DFA到達(dá)后綴接受態(tài)時(shí)字符的偏移地址、更新后的第一計(jì)數(shù)器的值、第一規(guī)則的后綴部分的長度及字符重復(fù)次數(shù)判斷第一報(bào)文是否滿足第一規(guī)則。
[0173]下面以一條具體的一條規(guī)則為例來對(duì)本發(fā)明實(shí)施例提供的一種規(guī)則匹配方法進(jìn)行詳細(xì)地說明。[0174]假設(shè)未進(jìn)行改寫的第一規(guī)則為~abC\S*ef[a-Z] {1000} wyz,規(guī)則匹配裝置接收到的第一報(bào)文為~abc\s*ef對(duì)于這種重復(fù)次數(shù)(1000次)較多的第一規(guī)則,為了提高規(guī)則匹配裝置對(duì)第一報(bào)文的匹配效率,開發(fā)人員一般會(huì)根據(jù)編程語言將這種重復(fù)次數(shù)較多的第一規(guī)則進(jìn)行相應(yīng)的更新,即可以將~abc\s*ef [a-z] {1000}wyz規(guī)則改寫為~abc\S*ef.*wyz,其中,”表示256種字符中的任意字符,表示任意多個(gè)字符,即字符的個(gè)數(shù)可以為任意多個(gè)。對(duì)于該條第一規(guī)則,第一規(guī)則的中間部分為[a-ζ],設(shè)置于第一計(jì)數(shù)器中的字符重復(fù)次數(shù)為1000。
[0175]規(guī)則匹配裝置接收來自網(wǎng)絡(luò)側(cè)設(shè)備的第一報(bào)文:~abc\s*efabc00aaa01cccl00…wyz,并依次輸入第一報(bào)文中的各個(gè)字符,即“~”、“a”、“b”、“c”、“\”……至DFA,該DFA接收到規(guī)則匹配裝置輸入的字符后,可根據(jù)各個(gè)字符及預(yù)先設(shè)定的跳轉(zhuǎn)函數(shù)依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài)。當(dāng)規(guī)則匹配裝置將接收到的第一報(bào)文中的首個(gè)字符輸入該DFA時(shí),該DFA可以從開始狀態(tài)跳轉(zhuǎn)至與首個(gè)字符“ ~ ”對(duì)應(yīng)的DFA的狀態(tài),規(guī)則匹配裝置繼續(xù)將第一報(bào)文中的其他字符“a”、“b”、“c”、“\”……依次輸入該DFA,以使得該DFA可根據(jù)輸入的字符及預(yù)先設(shè)定的跳轉(zhuǎn)函數(shù)依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的DFA的狀態(tài)。當(dāng)規(guī)則匹配裝置將“f”輸入至該DFA時(shí),規(guī)則匹配裝置獲取到的該DFA的當(dāng)前狀態(tài)為前綴接受態(tài),其中,“f”為第一字符,且規(guī)則匹配裝置保存第一字符的偏移地址,即字符“f”的偏移地址9。規(guī)則匹配裝置依次輸入字符“a”、“b”、“c”、“0”、“0”……至該DFA,以使得該DFA可繼續(xù)根據(jù)字符“a”、“b”、“c”、“0”、“0”……依次跳轉(zhuǎn)至與各個(gè)字符對(duì)應(yīng)的該DFA的狀態(tài),規(guī)則匹配裝置繼續(xù)獲取該DFA的狀態(tài),當(dāng)規(guī)則匹配裝置將第一報(bào)文的后綴“wyz”中的字符“z”輸入至該DFA時(shí),該DFA可根據(jù)字符“z”及預(yù)先設(shè)定的跳轉(zhuǎn)函數(shù)跳轉(zhuǎn)至與字符“z”對(duì)應(yīng)的DFA的狀態(tài),即后綴接受態(tài),其中,字符“z”為第二字符,且規(guī)則匹配裝置保存字符“z”的偏移地址。
[0176]同時(shí),規(guī)則匹配裝置將接收到的第一報(bào)文中位于第一字符后的X個(gè)連續(xù)字符通過字符判別模塊與第一規(guī)則的中間部分進(jìn)行對(duì)比,以確定滿足第一規(guī)則的中間部分的η個(gè)連續(xù)字符。一般在規(guī)則匹配裝置的FPGA中,X為8或16,本例選取χ=8進(jìn)行說明。規(guī)則匹配裝置可以將位于字符“f”后的8個(gè)連續(xù)字符與第一規(guī)則的中間部分[a-z]進(jìn)行對(duì)比,若該8個(gè)連續(xù)字符中有滿足[a-z]的η個(gè)連續(xù)字符,規(guī)則匹配裝置則保存該η個(gè)連續(xù)字符的起始字符的偏移地址(Begin) 和 該η個(gè)連續(xù)字符的結(jié)束字符的偏移地址(End),其中,x≤2,η≤1,本例中位于字符“f”后的8個(gè)連續(xù)字符為“abcOOaaa”,其中“abc”、“aaa”分別為2組滿足[a-z]的3個(gè)連續(xù)字符,則規(guī)則匹配裝置保存的第一個(gè)(Begin,End)為(10,12),第二個(gè)(Begin,End)為(15,17)。以此類推,規(guī)則匹配裝置繼續(xù)每次判斷第一報(bào)文中的x個(gè)連續(xù)字符,直至判斷到第一報(bào)文的后綴“wyz”前的一個(gè)字符,并保存滿足[a-z]的每η個(gè)連續(xù)字符的起始字符的偏移地址和每η個(gè)連續(xù)字符的結(jié)束字符的偏移地址。此外,在規(guī)則匹配裝置確定DFA的當(dāng)前狀態(tài)為前綴接收態(tài)且規(guī)則匹配裝置接收的第一報(bào)文中的字符滿足匹配條件時(shí),開啟第一計(jì)數(shù)器。
[0177]需要說明的是,匹配條件為End-Offset+Ι≤m,其中,Offset為輸入DFA的當(dāng)前字符的偏移地址,End為與Offset的差值最小的η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為字符重復(fù)次數(shù);或者,未保存η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址。由上面的規(guī)則可知,第一報(bào)文為~abc\s*ef abc00aaa01cccl00…wyz, DFA到達(dá)前綴接受態(tài)時(shí)的第一字符的偏移地址為9,此時(shí),規(guī)則匹配裝置若通過字符判別模塊判斷的(Begin,End)為(10,12),則與該第一字符的偏移地址9差值最小的End值為12,由于12-9=3,且3小于1000,因此,該報(bào)文與第一規(guī)則不可能匹配,規(guī)則匹配裝置不開啟計(jì)數(shù)器。
[0178]若第一報(bào)文為~abc\s*ef abcftaaayucccsd…wyz, DFA到達(dá)前綴接受態(tài)時(shí)的第一字符的偏移地址為9,此時(shí),規(guī)則匹配裝置若通過字符判別模塊判斷的到字符“y”,由于“&”、“13”、“(3”、“廣、“儼、“&”、“&”、“&”、“/’都滿足第一規(guī)則的中間部分[a-z],因此,規(guī)則匹配裝置還未保存與第一個(gè)字符“a”為起始字符的End值,從而規(guī)則匹配裝置開啟第一計(jì)數(shù)器。
[0179]若規(guī)則匹配裝置獲取的DFA的當(dāng)前狀態(tài)為后綴接受態(tài),則表示規(guī)則匹配裝置判斷第一報(bào)文的后綴滿足第一規(guī)則的后綴部分。然而,由于該第一規(guī)則為將用來判斷第一報(bào)文的第一規(guī)則更新后的第一規(guī)則,因此,若需判斷第一報(bào)文是否滿足未更新的第一規(guī)則(真正的第一規(guī)則),規(guī)則匹配裝置則還需通過字符判別模塊進(jìn)行進(jìn)一步判斷,從而判斷第一報(bào)文是否滿足第一規(guī)則。
[0180]具體的,若規(guī)則匹配裝置保存的第二字符的偏移地址與第一規(guī)則的后綴部分的長度之差大于等于,規(guī)則匹配裝置保存的第一字符的偏移地址與字符重復(fù)次數(shù)之和,且規(guī)則匹配裝置保存的第二字符的偏移地址與第一規(guī)則的后綴部分的長度之差小于等于,規(guī)則匹配裝置保存的第一字符的偏移地址、字符重復(fù)次數(shù)及更新后的第一計(jì)數(shù)器的值之和,規(guī)則匹配裝置則判斷該報(bào)文滿足第一規(guī)則。
[0181]假設(shè),本例中的第一報(bào)文:~abc\s*efabcftaaayucccsd...wyz 在前綴“ 'abc\s*ef”和后綴“wyz”之間的字符數(shù)為1007,其中滿足第一規(guī)則的中間部分的字符數(shù)為1000。
[0182]本例中的規(guī)則匹 配裝置保存的第二字符“z”的偏移地址為1012,第一規(guī)則的后綴“wyz”的長度為3,規(guī)則匹配裝置保存的第一字符“f”的偏移地址為9,字符重復(fù)次數(shù)為1000,由于該第一報(bào)文中的滿足第一規(guī)則的中間部分的字符有1000,規(guī)則匹配裝置根據(jù)起始地址和結(jié)束地址更新第一計(jì)數(shù)器后,更新后的第一計(jì)數(shù)器的值為0,則規(guī)則匹配裝置保存的第二字符的偏移地址與第一規(guī)則的后綴部分的長度之差為1012-3=1009,規(guī)則匹配裝置保存的第一字符的偏移地址與字符重復(fù)次數(shù)之和為9+1000=1009,規(guī)則匹配裝置保存的第一字符的偏移地址、字符重復(fù)次數(shù)及更新后的第一計(jì)數(shù)器的值之和為9+1000+0=1009,可以看出上述三者相等,即規(guī)則匹配裝置保存的第二字符的偏移地址與第一規(guī)則的后綴部分的長度之差,等于規(guī)則匹配裝置保存的第一字符的偏移地址與字符重復(fù)次數(shù)之和,并等于戶終端保存的第一字符的偏移地址、字符重復(fù)次數(shù)及更新后的第一計(jì)數(shù)器的值之和,故規(guī)則匹配裝置可以判斷該第一報(bào)文滿足第一規(guī)則。
[0183]本發(fā)明實(shí)施例提供一種規(guī)則匹配方法,用于規(guī)則匹配裝置對(duì)符合第一規(guī)則的報(bào)文進(jìn)行匹配,該第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù),規(guī)則匹配裝置通過接收第一報(bào)文,該第一報(bào)文包括多個(gè)字符,并規(guī)則匹配裝置通過有限自動(dòng)機(jī)DFA對(duì)該第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,DFA包括前綴接受態(tài)和后綴接受態(tài),該DFA由更新后的第一規(guī)則編譯后得到,更新后的第一規(guī)則包括該前綴部分,更新后的中間部分,以及該后綴部分,該更新后的中間部分的正則表達(dá)式為*”,及當(dāng)規(guī)則匹配裝置通過該DFA匹配確定該DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),規(guī)則匹配裝置開啟第一計(jì)數(shù)器,并保存第一字符的偏移地址,該第一字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至前綴接受態(tài)的字符,該第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù),以及在規(guī)則匹配裝置通過DFA進(jìn)行匹配的同時(shí),規(guī)則匹配裝置以每次匹配X個(gè)連續(xù)字符的方式對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)中間部分的字符,每當(dāng)規(guī)則匹配裝置確定有η個(gè)連續(xù)字符是中間部分的字符時(shí),規(guī)則匹配裝置保存該次確定的η個(gè)連續(xù)字符的偏移地址對(duì),并根據(jù)該偏移地址對(duì)更新第一計(jì)數(shù)器的值,該偏移地址對(duì)包括起始地址以及結(jié)束地址,該起始地址為η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,該結(jié)束地址為η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,其中,X為大于等于2的整數(shù);η為大于等于1的整數(shù),然后當(dāng)規(guī)則匹配裝置通過DFA匹配確定DFA的當(dāng)前狀態(tài)為后綴接受態(tài)時(shí),規(guī)則匹配裝置保存第二字符的偏移地址,該第二字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至后綴接受態(tài)的字符,最后規(guī)則匹配裝置根據(jù)第一字符的偏移地址、第二字符的偏移地址、更新后的第一計(jì)數(shù)器的值、第一規(guī)則的后綴部分的長度及字符重復(fù)次數(shù)判斷第一報(bào)文是否滿足第一規(guī)則。通過該方案,由于每次可以對(duì)第一報(bào)文中的多個(gè)連續(xù)字符同時(shí)進(jìn)行判斷,且只在DFA中設(shè)置了規(guī)則的前綴接受態(tài)和后綴接受態(tài),因此,能夠提高報(bào)文處理速度、減少規(guī)則的存儲(chǔ)空間,以及提高報(bào)文的匹配效率。
[0184]實(shí)施例三
[0185]如圖4所示,本發(fā)明的實(shí)施例提供一種規(guī)則匹配裝置1,該規(guī)則匹配裝置1用于對(duì)符合第一規(guī)則的報(bào)文進(jìn)行匹配,該第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù),該規(guī)則匹配裝置1可以包括:
[0186]接收單元10,用于接收第一報(bào)文,所述第一報(bào)文包括多個(gè)字符。
[0187]匹配單元11,用于通過有限自動(dòng)機(jī)DFA對(duì)所述接收單元10接收的所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,所述DFA包括前綴接受態(tài)和后綴接受態(tài),所述DFA由更新后的第一規(guī)則編譯后得到,所述更新后的第一規(guī)則包括所述前綴部分,更新后的中間部分,以及所述后綴部分;所述更新后的中間部分的正則表達(dá)式為*”。
[0188]開啟單元12,用于當(dāng)通過所述匹配單元11匹配確定所述DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),開啟設(shè)置第一計(jì)數(shù)器,所述第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù)。
[0189]以及第一保存單元13,用于保存第一字符的偏移地址,所述第一字符為所述接收單元10接收到的所述第一報(bào)文中使得所述DFA跳轉(zhuǎn)至所述前綴接受態(tài)的字符。
[0190]確定單元14,用于在通過所述匹配單元11進(jìn)行匹配的同時(shí),以每次匹配X個(gè)連續(xù)字符的方式對(duì)所述接收單元10接收的所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)所述中間部分的字符。
[0191]第二保存單元15,用于每當(dāng)所述確定單元14確定有η個(gè)連續(xù)字符是所述中間部分的字符時(shí),保存該次所述確定單元14確定的所述η個(gè)連續(xù)字符的偏移地址,所述偏移地址對(duì)包括起始地址以及結(jié)束地址,所述起始地址為所述η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,所述結(jié)束地址為所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址;其中,X為大于等于2的整數(shù);η為大于等于1的整數(shù)。
[0192]更新單元16,用于根據(jù)所述第二保存單元15保存的所述偏移地址對(duì)更新所述第一計(jì)數(shù)器的值。
[0193]所述第一保存單元13,還用于通過匹配單元11確定所述DFA的當(dāng)前狀態(tài)為所述后綴接受態(tài)時(shí),保存第二字符的偏移地址,所述第二字符為所述接收單元10接收到的所述第一報(bào)文中使得所述DFA跳轉(zhuǎn)至所述后綴接受態(tài)的字符。
[0194]判斷單元17,用于根據(jù)所述第一保存單元13保存的所述第一字符的偏移地址、所述第二字符的偏移地址、所述更新單元16更新后的所述第一計(jì)數(shù)器的值、后綴的長度及所述字符重復(fù)次數(shù)判斷所述接收單元10接收的第一報(bào)文是否滿足所述第一規(guī)則。
[0195]可選的,如圖5所示,所述規(guī)則匹配裝置1還包括關(guān)閉單元18。
[0196]所述關(guān)閉單元18,用于當(dāng)所述更新單元16更新所述第一計(jì)數(shù)器的次數(shù)不等于所述字符重復(fù)次數(shù)時(shí),若Offset≥Begin且End-Offset+l < m,則關(guān)閉所述第一計(jì)數(shù)器,其中,Offset為輸入所述DFA的當(dāng)前字符的偏移地址,Begin為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,End為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為所述字符重復(fù)次數(shù)。
[0197]可選的,所述匹配條件包括:
[0198]End-Offset+Ι≥m,其中,Offset為輸入所述DFA的當(dāng)前字符的偏移地址,End為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為所述字符重復(fù)次數(shù)。
[0199]或者,
[0200]所述第二保存單元15未保存所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址。
[0201]可選的,如圖6所示,該所述規(guī)則匹配裝置1還包括處理單元19。
[0202]所述處理單元19,用于當(dāng)通過所述匹配單元11匹配確定所述DFA的當(dāng)前狀態(tài)時(shí),查詢所述DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志,以及若所述DFA的狀態(tài)設(shè)置有所述死狀態(tài)標(biāo)志,且所述關(guān)閉單元18將所述第一計(jì)數(shù)關(guān)閉,則結(jié)束所述DFA的狀態(tài)跳轉(zhuǎn)。
[0203]可選的,所述處理單元19,還用于在所述查詢所述DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志之前,獲取所述DFA的有向圖,以及若在所述DFA的有向圖中,獲取到未與所述前綴接受態(tài)連接的狀態(tài),則將所述未與所述前綴接受態(tài)連接的狀態(tài)設(shè)置一個(gè)所述死狀態(tài)標(biāo)志。
[0204]所述判斷單元17,具體用于若所述第一保存單元13保存的所述第二字符的偏移地址與所述第一規(guī)則的后綴部分的長度之差大于等于,所述第一保存單元13保存的所述第一字符的偏移地址與所述字符重復(fù)次數(shù)之和,且所述第一保存單元13保存的所述第二字符的偏移地址與所述第一規(guī)則的后綴部分的長度之差小于等于,所述第一保存單元13保存的所述第一字符的偏移地址、所述字符重復(fù)次數(shù)及所述更新單元16更新后的所述第一計(jì)數(shù)器的值之和,則判斷所述接收單元10接收到的所述第一報(bào)文滿足所述第一規(guī)則。
[0205]可選的,所述更新單元16,具體用于獲取所述第二保存單元15保存的所述偏移地址對(duì)的長度,所述偏移地址對(duì)的長度為所述結(jié)束地址與所述起始地址之差,再加上1,以及將所述第一計(jì)數(shù)器的值減去所述偏移地址對(duì)的長度。
[0206]可選的,所述前綴部分和所述后綴部分保存在所述DFA中,所述中間部分保存在字符判別模塊中,其中,所述DFA包括所述匹配單元11、所述開啟單元12和所述第一保存單元13 ;所述字符判別模塊包括所述確定單元14和所述第二保存單元15。
[0207]可選的,所述中間部分的字符為一個(gè)確定的字符,或者為多個(gè)可選字符中的任意一個(gè)字符,以及所述字符重復(fù)次數(shù)為一個(gè)固定次數(shù),或者為由一個(gè)下限值和一個(gè)上限值組成的次數(shù)范圍。[0208]本發(fā)明實(shí)施例提供一種規(guī)則匹配裝置,該規(guī)則匹配裝置用于對(duì)符合第一規(guī)則的報(bào)文進(jìn)行匹配,該第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù),該規(guī)則匹配裝置通過接收第一報(bào)文,該第一報(bào)文包括多個(gè)字符,并該規(guī)則匹配裝置通過有限自動(dòng)機(jī)DFA對(duì)該第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,DFA包括前綴接受態(tài)和后綴接受態(tài),該DFA由更新后的第一規(guī)則編譯后得至IJ,更新后的第一規(guī)則包括該前綴部分,更新后的中間部分,以及該后綴部分,該更新后的中間部分的正則表達(dá)式為*”,及當(dāng)該規(guī)則匹配裝置通過該DFA匹配確定該DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),該規(guī)則匹配裝置開啟第一計(jì)數(shù)器,并保存第一字符的偏移地址,該第一字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至前綴接受態(tài)的字符,該第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù),以及在該規(guī)則匹配裝置通過DFA進(jìn)行匹配的同時(shí),該規(guī)則匹配裝置以每次匹配X個(gè)連續(xù)字符的方式對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)中間部分的字符,每當(dāng)該規(guī)則匹配裝置確定有η個(gè)連續(xù)字符是中間部分的字符時(shí),該規(guī)則匹配裝置保存該次確定的η個(gè)連續(xù)字符的偏移地址對(duì),并根據(jù)該偏移地址對(duì)更新第一計(jì)數(shù)器的值,該偏移地址對(duì)包括起始地址以及結(jié)束地址,該起始地址為η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,該結(jié)束地址為η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,其中,X為大于等于2的整數(shù);η為大于等于1的整數(shù),然后當(dāng)該規(guī)則匹配裝置通過DFA匹配確定DFA的當(dāng)前狀態(tài)為后綴接受態(tài)時(shí),該規(guī)則匹配裝置保存第二字符的偏移地址,該第二字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至后綴接受態(tài)的字符,最后該規(guī)則匹配裝置根據(jù)第一字符的偏移地址、第二字符的偏移地址、更新后的第一計(jì)數(shù)器的值、第一規(guī)則的后綴部分的長度及字符重復(fù)次數(shù)判斷第一報(bào)文是否滿足第一規(guī)則。通過該方案,由于每次可以對(duì)第一報(bào)文中的多個(gè)連續(xù)字符同時(shí)進(jìn)行判斷,且只在DFA中設(shè)置了規(guī)則的前綴接受態(tài)和后綴接受態(tài),因此,能夠提高報(bào)文處理速度、減少規(guī)則的存儲(chǔ)空間,以及提高報(bào)文的匹配效率。
[0209]實(shí)施例四
[0210]如圖7所示,本發(fā)明的實(shí)施例提供一種規(guī)則匹配裝置,該規(guī)則匹配裝置用于對(duì)符合第一規(guī)則的報(bào)文進(jìn)行匹配,第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù),該規(guī)則匹配裝置包括邏輯器件20以及存儲(chǔ)器21,其中,
[0211]邏輯器件20為規(guī)則匹配裝置的控制以及處理中心,通過運(yùn)行存儲(chǔ)在存儲(chǔ)器21中的軟件程序,并調(diào)用及處理存儲(chǔ)在存儲(chǔ)器21中的數(shù)據(jù),從而控制規(guī)則匹配裝置進(jìn)行收發(fā)信號(hào),以及實(shí)現(xiàn)規(guī)則匹配裝置的其他功能。
[0212]存儲(chǔ)器21可用于存儲(chǔ)軟件程序及數(shù)據(jù),以使得邏輯器件20可通過運(yùn)行存儲(chǔ)在存儲(chǔ)器21中的軟件程序,從而實(shí)現(xiàn)規(guī)則匹配裝置的收發(fā)信號(hào)以及其他功能。
[0213]具體的,所述邏輯器件20可用于接收第一報(bào)文,所述第一報(bào)文包括多個(gè)字符,及通過有限自動(dòng)機(jī)DFA對(duì)所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,所述DFA包括前綴接受態(tài)和后綴接受態(tài),所述DFA由更新后的第一規(guī)則編譯后得到,所述更新后的第一規(guī)則包括所述前綴部分,更新后的中間部分,以及所述后綴部分,所述更新后的中間部分的正則表達(dá)式為*”,及當(dāng)通過所述DFA匹配確定所述DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),開啟第一計(jì)數(shù)器,并保存第一字符的偏移地址,所述第一字符為所述第一報(bào)文中使得所述DFA跳轉(zhuǎn)至所述前綴接受態(tài)的字符,所述第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù),并且在通過所述DFA進(jìn)行匹配的同時(shí),以每次匹配X個(gè)連續(xù)字符的方式對(duì)所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)所述中間部分的字符,每當(dāng)確定有η個(gè)連續(xù)字符是所述中間部分的字符時(shí),保存該次確定的所述η個(gè)連續(xù)字符的偏移地址對(duì),以及根據(jù)所述偏移地址對(duì)更新所述第一計(jì)數(shù)器的值,所述偏移地址對(duì)包括起始地址以及結(jié)束地址,所述起始地址為所述η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,所述結(jié)束地址為所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,其中,X為大于等于2的整數(shù),η為大于等于1的整數(shù),然后當(dāng)通過所述DFA匹配確定所述DFA的當(dāng)前狀態(tài)為所述后綴接受態(tài)時(shí),保存第二字符的偏移地址,所述第二字符為所述第一報(bào)文中使得所述DFA跳轉(zhuǎn)至所述后綴接受態(tài)的字符,最后根據(jù)所述第一字符的偏移地址、所述第二字符的偏移地址、更新后的所述第一計(jì)數(shù)器的值、所述第一規(guī)則的后綴部分的長度及所述字符重復(fù)次數(shù)判斷所述第一報(bào)文是否滿足所述第一規(guī)則;所述存儲(chǔ)器21可用于存儲(chǔ)所述第一字符的偏移地址的軟件代碼、所述η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址的軟件代碼、所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址的軟件代碼、所述第二字符的偏移地址的軟件代碼,以及控制所述規(guī)則匹配裝置完成上述步驟的軟件程序,從而使得所述邏輯器件20可通過執(zhí)行所述存儲(chǔ)器21中存儲(chǔ)的所述軟件程序及調(diào)用相應(yīng)的軟件代碼完成上述步驟。
[0214]可選的,所述邏輯器件20,還用于當(dāng)更新所述第一計(jì)數(shù)器的次數(shù)不等于所述字符重復(fù)次數(shù)時(shí),若Offset ^ Begin且End-Offset+1 < m,則關(guān)閉所述第一計(jì)數(shù)器,其中,Offset為輸入所述DFA的當(dāng)前字符的偏移地址,Begin為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,End為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為所述字符重復(fù)次數(shù)。
[0215]可選的,所述匹配條件包括:
[0216]End-Offset+Ι≥m,其中,Offset為輸入所述DFA的當(dāng)前字符的偏移地址,End為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為所述字符重復(fù)次數(shù)。
[0217]或者,
[0218]未保存所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址。
[0219]可選的,所述邏輯器件20,還用于當(dāng)通過所述DFA匹配確定所述DFA的當(dāng)前狀態(tài)時(shí),查詢所述DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志,以及若所述DFA的狀態(tài)設(shè)置有所述死狀態(tài)標(biāo)志,且所述第一計(jì)數(shù)器關(guān)閉,則結(jié)束所述DFA的狀態(tài)跳轉(zhuǎn)。
[0220]可選的,所述邏輯器件20,還用于所述查詢所述DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志之前,獲取所述DFA的有向圖,以及若在所述DFA的有向圖中,獲取到未與所述前綴接受態(tài)連接的狀態(tài),則將所述未與所述前綴接受態(tài)連接的狀態(tài)設(shè)置一個(gè)所述死狀態(tài)標(biāo)志。
[0221]可選的,所述邏輯器件20,具體用于若所述第二字符的偏移地址與所述第一規(guī)則的后綴部分的長度之差大于等于,所述第一字符的偏移地址與所述字符重復(fù)次數(shù)之和,且所述第二字符的偏移地址與所述第一規(guī)則的后綴部分的長度之差小于等于,所述第一字符的偏移地址、所述字符重復(fù)次數(shù)及更新后的所述第一計(jì)數(shù)器的值之和,則判斷所述第一報(bào)文滿足所述第一規(guī)則。
[0222]可選的,所述邏輯器件20,具體用于獲取所述偏移地址對(duì)的長度,所述偏移地址對(duì)的長度為所述結(jié)束地址與所述起始地址之差,再加上1,以及將所述第一計(jì)數(shù)器的值減去所述偏移地址對(duì)的長度。
[0223]可選的,所述前綴部分和所述后綴部分保存在所述DFA中,所述中間部分保存在字符判別模塊中,其中,所述邏輯器件20包括第一子邏輯器件和第二子邏輯器件,所述第一子邏輯器件為所述DFA的邏輯器件,所述第二子邏輯器件為所述字符判別模塊的邏輯器件,所述第一子邏輯器件,用于對(duì)所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,并當(dāng)通過匹配確定當(dāng)前狀態(tài)為所述前綴接受態(tài),并滿足所述匹配條件時(shí),開啟所述第一計(jì)數(shù)器,并保存所述第一字符的偏移地址,以及當(dāng)通過匹配確定所述當(dāng)前狀態(tài)為所述后綴接受態(tài)時(shí),保存所述第二字符的偏移地址,所述第二字邏輯器件用于在通過所述DFA進(jìn)行匹配的同時(shí),以每次匹配所述X個(gè)連續(xù)字符的方式對(duì)所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)所述中間部分的字符,每當(dāng)確定有所述η個(gè)連續(xù)字符是所述中間部分的字符時(shí),保存該次確定的所述η個(gè)連續(xù)字符的偏移地址對(duì),以及根據(jù)所述偏移地址對(duì)更新所述第一計(jì)數(shù)器的值;所述存儲(chǔ)器21包括第一子存儲(chǔ)器和第二子存儲(chǔ)器,所述第一子存儲(chǔ)器,用于存儲(chǔ)所述第一字符的偏移地址的軟件代碼及所述第二字符的偏移地址的軟件代碼,所述第二子存儲(chǔ)器,用于存儲(chǔ)確定的所述η個(gè)連續(xù)字符的偏移地址對(duì)的軟件代碼。
[0224]可選的,所述中間部分的字符為一個(gè)確定的字符,或者為多個(gè)可選字符中的任意一個(gè)字符,以及所述字符重復(fù)次數(shù)為一個(gè)固定次數(shù),或者為由一個(gè)下限值和一個(gè)上限值組成的次數(shù)范圍。
[0225]如圖8所示,本發(fā)明的實(shí)施例提供一種單板,該單板包括規(guī)則匹配裝置30、中央處理器31、系統(tǒng)總線32、硬盤33及內(nèi)存34,其中,
[0226]規(guī)則匹配裝置30、中央處理器31、硬盤33及內(nèi)存34通過系統(tǒng)總線32進(jìn)行通信。
[0227]規(guī)則匹配裝置30,用于對(duì)符合第一規(guī)則的報(bào)文進(jìn)行匹配,第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù),規(guī)則匹配裝置30包括邏輯器件20以及存儲(chǔ)器21。
[0228]中央處理器31,為單板的控制以及處理中心,通過運(yùn)行存儲(chǔ)在硬盤33或內(nèi)存34中的軟件程序及數(shù)據(jù),從而控制單板進(jìn)行收發(fā)信號(hào),以及單板的其他功能。
[0229]硬盤33及內(nèi)存34,可用于存儲(chǔ)軟件程序及數(shù)據(jù),以使得中央處理器31可通過運(yùn)行存儲(chǔ)在其中的軟件程序,從而實(shí)現(xiàn)單板的收發(fā)信號(hào)以及其他功能。
[0230]具體的,所述規(guī)則匹配裝置30對(duì)接收的報(bào)文進(jìn)行規(guī)則匹配后,將規(guī)則匹配的結(jié)果通過所述系統(tǒng)總線32發(fā)送至所述中央處理器31,所述中央處理器32根據(jù)所述規(guī)則匹配的結(jié)果,對(duì)所述報(bào)文進(jìn)行刪除或不處理操作,并通過所述系統(tǒng)總線32將所述刪除或不處理操作記錄在所述硬盤33或所述內(nèi)存34中,以供所述中央處理器31下次處理所述報(bào)文時(shí)使用。
[0231]本發(fā)明實(shí)施例提供一種規(guī)則匹配裝置,該規(guī)則匹配裝置用于對(duì)符合第一規(guī)則的報(bào)文進(jìn)行匹配,該第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù),該規(guī)則匹配裝置通過接收第一報(bào)文,該第一報(bào)文包括多個(gè)字符,并該規(guī)則匹配裝置通過有限自動(dòng)機(jī)DFA對(duì)該第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,DFA包括前綴接受態(tài)和后綴接受態(tài),該DFA由更新后的第一規(guī)則編譯后得至IJ,更新后的第一規(guī)則包括該前綴部分,更新后的中間部分,以及該后綴部分,該更新后的中間部分的正則表達(dá)式為*”,及當(dāng)該規(guī)則匹配裝置通過該DFA匹配確定該DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),該規(guī)則匹配裝置開啟第一計(jì)數(shù)器,并保存第一字符的偏移地址,該第一字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至前綴接受態(tài)的字符,該第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù),以及在該規(guī)則匹配裝置通過DFA進(jìn)行匹配的同時(shí),該規(guī)則匹配裝置以每次匹配X個(gè)連續(xù)字符的方式對(duì)第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)中間部分的字符,每當(dāng)該規(guī)則匹配裝置確定有η個(gè)連續(xù)字符是中間部分的字符時(shí),該規(guī)則匹配裝置保存該次確定的η個(gè)連續(xù)字符的偏移地址對(duì),并根據(jù)該偏移地址對(duì)更新第一計(jì)數(shù)器的值,該偏移地址對(duì)包括起始地址以及結(jié)束地址,該起始地址為η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,該結(jié)束地址為η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,其中,X為大于等于2的整數(shù);η為大于等于1的整數(shù),然后當(dāng)該規(guī)則匹配裝置通過DFA匹配確定DFA的當(dāng)前狀態(tài)為后綴接受態(tài)時(shí),該規(guī)則匹配裝置保存第二字符的偏移地址,該第二字符為第一報(bào)文中使得DFA跳轉(zhuǎn)至后綴接受態(tài)的字符,最后該規(guī)則匹配裝置根據(jù)第一字符的偏移地址、第二字符的偏移地址、更新后的第一計(jì)數(shù)器的值、第一規(guī)則的后綴部分的長度及字符重復(fù)次數(shù)判斷第一報(bào)文是否滿足第一規(guī)則。通過該方案,由于每次可以對(duì)第一報(bào)文中的多個(gè)連續(xù)字符同時(shí)進(jìn)行判斷,且只在DFA中設(shè)置了規(guī)則的前綴接受態(tài)和后綴接受態(tài),因此,能夠提高報(bào)文處理速度、減少規(guī)則的存儲(chǔ)空間,以及提高報(bào)文的匹配效率。
[0232]所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為描述的方便和簡潔,僅以上述各功能模塊的劃分進(jìn)行舉例說明,實(shí)際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。上述描述的系統(tǒng),裝置和單元的具體工作過程,可以參考前述方法實(shí)施例中的對(duì)應(yīng)過程,在此不再贅述。
[0233]在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的系統(tǒng),裝置和方法,可以通過其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
[0234]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部單元來實(shí)現(xiàn)本實(shí)施例方案的目的。
[0235]另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
[0236]所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤、移動(dòng)硬盤、只讀存儲(chǔ)器(ROM, Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM, Random Access Memory)、磁碟或者光盤等各種可以存儲(chǔ)程序代碼的介質(zhì)。
[0237]以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1.一種規(guī)則匹配方法,其特征在于,用于對(duì)符合第一規(guī)則的報(bào)文進(jìn)行匹配,所述第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù),所述方法包括: 接收第一報(bào)文,所述第一報(bào)文包括多個(gè)字符; 通過有限自動(dòng)機(jī)DFA對(duì)所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,所述DFA包括前綴接受態(tài)和后綴接受態(tài),所述DFA由更新后的第一規(guī)則編譯后得到,所述更新后的第一規(guī)則包括所述前綴部分,更新后的中間部分,以及所述后綴部分;所述更新后的中間部分的正則表達(dá)式為*” ; 當(dāng)通過所述DFA匹配確定所述DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),開啟第一計(jì)數(shù)器,并保存第一字符的偏移地址,所述第一字符為所述第一報(bào)文中使得所述DFA跳轉(zhuǎn)至所述前綴接受態(tài)的字符,所述第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù); 在通過所述DFA進(jìn)行匹配的同時(shí),以每次匹配X個(gè)連續(xù)字符的方式對(duì)所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)所述中間部分的字符,每當(dāng)確定有η個(gè)連續(xù)字符是所述中間部分的字符時(shí),保存該次確定的所述η個(gè)連續(xù)字符的偏移地址對(duì),以及根據(jù)所述偏移地址對(duì)更新所述第一計(jì)數(shù)器的值,所述偏移地址對(duì)包括起始地址以及結(jié)束地址,所述起始地址為所述η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,所述結(jié)束地址為所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址;其中,X為大于等于2的整數(shù);η為大于等于I的整數(shù); 當(dāng)通過所述DFA匹配確定所述DFA的當(dāng)前狀態(tài)為所述后綴接受態(tài)時(shí),保存第二字符的偏移地址,所述第二字符為所述第一報(bào)文中使得所述DFA跳轉(zhuǎn)至所述后綴接受態(tài)的字符; 根據(jù)所述第一字符的偏移地址、所述第二字符的偏移地址、更新后的所述第一計(jì)數(shù)器的值、所述第一規(guī)則的后綴部分的長度及所述字符重復(fù)次數(shù)判斷所述第一報(bào)文是否滿足所述第一規(guī)則。
2.根據(jù)權(quán)利要求1所述的規(guī)則匹配方法,其特征在于,當(dāng)更新所述第一計(jì)數(shù)器的次數(shù)不等于所述字符重復(fù)次數(shù)時(shí),所述方法還包括: 若Offset≥Begin且End-Offset+1 < m,則關(guān)閉所述第一計(jì)數(shù)器,其中,Offset為輸入所述DFA的當(dāng)前字符的偏移地址,Begin為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,End為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為所述字符重復(fù)次數(shù)。
3.根據(jù)權(quán)利要求1或2所述的規(guī)則匹配方法,其特征在于,所述匹配條件包括: End-Offset+Ι≥m,其中,Offset為輸入所述DFA的當(dāng)前字符的偏移地址,End為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為所述字符重復(fù)次數(shù); 或者, 未保存所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址。
4.根據(jù)權(quán)利要求1-3任一項(xiàng)所述的規(guī)則匹配方法,其特征在于,所述方法還包括: 當(dāng)通過所述DFA匹配確定所述DFA的當(dāng)前狀態(tài)時(shí),查詢所述DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志; 若所述DFA的狀態(tài)設(shè)置有所述死狀態(tài)標(biāo)志,且所述第一計(jì)數(shù)器關(guān)閉,則結(jié)束所述DFA的狀態(tài)跳轉(zhuǎn)。
5.根據(jù)權(quán)利要求4所述的規(guī)則匹配方法,其特征在于,所述查詢所述DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志之前,所述方法還包括: 獲取所述DFA的有向圖; 若在所述DFA的有向圖中,獲取到未與所述前綴接受態(tài)連接的狀態(tài),則將所述未與所述前綴接受態(tài)連接的狀態(tài)設(shè)置一個(gè)所述死狀態(tài)標(biāo)志。
6.根據(jù)權(quán)利要求1-5任一項(xiàng)所述的規(guī)則匹配方法,其特征在于,所述根據(jù)所述第一字符的偏移地址、所述第二字符的偏移地址、更新后的所述第一計(jì)數(shù)器的值、所述第一規(guī)則的后綴部分的長度及所述字符重復(fù)次數(shù)判斷所述第一報(bào)文是否滿足所述第一規(guī)則,具體包括: 若所述第二字符的偏移地址與所述第一規(guī)則的后綴部分的長度之差大于等于,所述第一字符的偏移地址與所述字符重復(fù)次數(shù)之和,且所述第二字符的偏移地址與所述第一規(guī)則的后綴部分的長度之差小于等于,所述第一字符的偏移地址、所述字符重復(fù)次數(shù)及更新后的所述第一計(jì)數(shù)器的值之和,則判斷所述第一報(bào)文滿足所述第一規(guī)則。
7.根據(jù)權(quán)利要求1-6任一項(xiàng)所述的規(guī)則匹配方法,其特征在于,所述根據(jù)所述偏移地址對(duì)更新所述第一計(jì)數(shù)器的值,具體包括: 獲取所述偏移地址對(duì)的長度,所述偏移地址對(duì)的長度為所述結(jié)束地址與所述起始地址之差,再加上I ; 將所述第一計(jì)數(shù)器的值減去所述偏移地址對(duì)的長度。
8.根據(jù)權(quán)利要求1-7任一項(xiàng)所述的規(guī)則匹配方法,其特征在于,所述前綴部分和所述后綴部分保存在所述DFA中,所述中間部分保存在字符判別模塊中,其中,所述DFA用于對(duì)所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,并當(dāng)通過匹配確定當(dāng)前狀態(tài)為所述前綴接受態(tài),并滿足所述匹配條件時(shí),開啟所述第一計(jì)數(shù)器,并保存所述第一字符的偏移地址,以及當(dāng)通過匹配確定所述當(dāng)前狀態(tài)為所述后綴接受態(tài)時(shí),保存所述第二字符的偏移地址;所述字符判別模塊用于在通過所述DFA進(jìn)行匹配的同時(shí),以每次匹配所述X個(gè)連續(xù)字符的方式對(duì)所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)所述中間部分的字符,每當(dāng)確定有所述η個(gè)連續(xù)字符是所述中間部分的字符時(shí),保存該次確定的所述η個(gè)連續(xù)字符的偏移地址對(duì),以及根據(jù)所述偏移地址對(duì)更新所述第一計(jì)數(shù)器的值。
9.根據(jù)權(quán)利要求1-8任一項(xiàng)所述的規(guī)則匹配方法,其特征在于, 所述中間部分的字符為一個(gè)確定的字符,或者為多個(gè)可選字符中的任意一個(gè)字符; 所述字符重復(fù)次數(shù)為一個(gè)固定次數(shù),或者為由一個(gè)下限值和一個(gè)上限值組成的次數(shù)范圍。
10.一種規(guī)則匹配裝置,其特征在于,用于對(duì)符合第一規(guī)則的報(bào)文進(jìn)行匹配,所述第一規(guī)則為基于正則表達(dá)式的規(guī)則,包括前綴部分、中間部分、以及后綴部分,其中,中間部分包括字符以及字符重復(fù)次數(shù),包括: 接收單元,用于接收第一報(bào)文,所述第一報(bào)文包括多個(gè)字符; 匹配單元,用于通過有限自動(dòng)機(jī)DFA對(duì)所述接收單元接收的所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,其中,所述DFA包括前綴接受態(tài)和后綴接受態(tài),所述DFA由更新后的第一規(guī)則編譯后得到,所述更新后的第一規(guī)則包括所述前綴部分,更新后的中間部分,以及所述后綴部分;所述更新后的中間部分的正則表達(dá)式為*”; 開啟單元,用于當(dāng)通過所述匹配單元匹配確定所述DFA的當(dāng)前狀態(tài)為前綴接受態(tài),并滿足匹配條件時(shí),開啟設(shè)置第一計(jì)數(shù)器,所述第一計(jì)數(shù)器用于對(duì)匹配的字符進(jìn)行計(jì)數(shù), 以及第一保存單元,用于保存第一字符的偏移地址,所述第一字符為所述接收單元接收到的所述第一報(bào)文中使得所述DFA跳轉(zhuǎn)至所述前綴接受態(tài)的字符; 確定單元,用于在通過所述匹配單元進(jìn)行匹配的同時(shí),以每次匹配X個(gè)連續(xù)字符的方式對(duì)所述接收單元接收的所述第一報(bào)文中的多個(gè)字符進(jìn)行匹配,以確定是否有一個(gè)或多個(gè)所述中間部分的字符; 第二保存單元,用于每當(dāng)所述確定單元確定有η個(gè)連續(xù)字符是所述中間部分的字符時(shí),保存該次所述確定單元確定的所述η個(gè)連續(xù)字符的偏移地址,所述偏移地址對(duì)包括起始地址以及結(jié)束地址,所述起始地址為所述η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,所述結(jié)束地址為所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址;其中,X為大于等于2的整數(shù);η為大于等于I的整數(shù);更新單元,用于根據(jù)所述第二保存單元保存的所述偏移地址對(duì)更新所述第一計(jì)數(shù)器的值; 所述第一保存單元,還用于通過匹配單元確定所述DFA的當(dāng)前狀態(tài)為所述后綴接受態(tài)時(shí),保存第二字符的偏移地址,所述第二字符為所述接收單元接收到的所述第一報(bào)文中使得所述DFA跳轉(zhuǎn)至所述后綴接受態(tài)的字符; 判斷單元,用于根據(jù)所述第一保存單元保存的所述第一字符的偏移地址、所述第二字符的偏移地址、所述更新單元更新后的所述第一計(jì)數(shù)器的值、后綴的長度及所述字符重復(fù)次數(shù)判斷所述接收單元接收的第一報(bào)文是否滿足所述第一規(guī)則。
11.根據(jù)權(quán)利要求10所述的規(guī)則匹配裝置,其特征在于,所述規(guī)則匹配裝置還包括關(guān)閉單元; 所述關(guān)閉單元,用于當(dāng)所述更新單元更新所述第一計(jì)數(shù)器的次數(shù)不等于所述字符重復(fù)次數(shù)時(shí),若Offset≥Begin且End-Offset+1 < m,則關(guān)閉所述第一計(jì)數(shù)器,其中,Offset為輸入所述DFA的當(dāng)前字符的偏移地址,Begin為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第一個(gè)字符的偏移地址,End為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為所述字符重復(fù)次數(shù)。
12.根據(jù)權(quán)利要求10或11所述的規(guī)則匹配裝置,其特征在于,所述匹配條件包括: End-Offset+Ι≥m,其中,Offset為輸入所述DFA的當(dāng)前字符的偏移地址,End為與Offset的差值最小的所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址,m為所述字符重復(fù)次數(shù); 或者, 所述第二保存單元未保存所述η個(gè)連續(xù)字符中的第η個(gè)字符的偏移地址。
13.根據(jù)權(quán)利要求10-12任一項(xiàng)所述的規(guī)則匹配裝置,其特征在于,所述規(guī)則匹配裝置還包括處理單元; 所述處理單元,用于當(dāng)通過所述匹配單元匹配確定所述DFA的當(dāng)前狀態(tài)時(shí),查詢所述DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志,以及若所述DFA的狀態(tài)設(shè)置有所述死狀態(tài)標(biāo)志,且所述關(guān)閉單元將所述第一計(jì)數(shù)關(guān)閉,則結(jié)束所述DFA的狀態(tài)跳轉(zhuǎn)。
14.根據(jù)權(quán)利要13所述的規(guī)則匹配裝置,其特征在于, 所述處理單元,還用于在所述查詢所述DFA的狀態(tài)是否設(shè)置有死狀態(tài)標(biāo)志之前,獲取所述DFA的有向圖,以及若在所述DFA的有向圖中,獲取到未與所述前綴接受態(tài)連接的狀態(tài),則將所述未與所述前綴接受態(tài)連接的狀態(tài)設(shè)置一個(gè)所述死狀態(tài)標(biāo)志。
15.根據(jù)權(quán)利要求10-14任一項(xiàng)所述的規(guī)則匹配裝置,其特征在于, 所述判斷單元,具體用于若所述第一保存單元保存的所述第二字符的偏移地址與所述第一規(guī)則的后綴部分的長度之差大于等于,所述第一保存單元保存的所述第一字符的偏移地址與所述字符重復(fù)次數(shù)之和,且所述第一保存單元保存的所述第二字符的偏移地址與所述第一規(guī)則的后綴部分的長度之差小于等于,所述第一保存單元保存的所述第一字符的偏移地址、所述字符重復(fù)次數(shù)及所述更新單元更新后的所述第一計(jì)數(shù)器的值之和,則判斷所述接收單元接收到的所述第一報(bào)文滿足所述第一規(guī)則。
16.根據(jù)權(quán)利要求10-15任一項(xiàng)所述的規(guī)則匹配裝置,其特征在于, 所述更新單元,具體用于獲取所述第二保存單元保存的所述偏移地址對(duì)的長度,所述偏移地址對(duì)的長度為所述結(jié)束地址與所述起始地址之差,再加上1,以及將所述第一計(jì)數(shù)器的值減去所述偏移地址對(duì)的長度。
17.根據(jù)權(quán)利要求10-16任一項(xiàng)所述的規(guī)則匹配裝置,其特征在于,所述前綴部分和所述后綴部分保存在所述DFA中,所述中間部分保存在字符判別模塊中,其中,所述DFA包括所述匹配單元、所述開啟單元和所述第一保存單元;所述字符判別模塊包括所述確定單元和所述第二保存單元。
18.根據(jù)權(quán)利要求10-17任一項(xiàng)所述的規(guī)則匹配裝置,其特征在于,所述中間部分的字符為一個(gè)確定的字符,或者為多個(gè)可選字符中的任意一個(gè)字符; 所述字符重復(fù)次數(shù)為一個(gè)固定次數(shù),或者為由一個(gè)下限值和一個(gè)上限值組成的次數(shù)范圍。
【文檔編號(hào)】G06F17/30GK103729452SQ201310755396
【公開日】2014年4月16日 申請(qǐng)日期:2013年12月31日 優(yōu)先權(quán)日:2013年12月31日
【發(fā)明者】李朋凱, 孫靈燕, 耿玉磊 申請(qǐng)人:杭州華為數(shù)字技術(shù)有限公司