一種字符串匹配方法和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設(shè)及有線\無線網(wǎng)絡(luò)領(lǐng)域,特別設(shè)及網(wǎng)絡(luò)協(xié)議分析中一種字符串匹配方法 和系統(tǒng)。
【背景技術(shù)】
[0002] 在數(shù)據(jù)通信過程中,分析通信協(xié)議帖頭/報(bào)文頭結(jié)構(gòu)、提取識(shí)別網(wǎng)絡(luò)協(xié)議及網(wǎng)絡(luò) 文本內(nèi)容是處理截獲通信信號(hào)后一個(gè)重要的后續(xù)工作;隨著各種網(wǎng)絡(luò)業(yè)務(wù)種類快速增長和 越來越多的安全事件發(fā)生,迫切需要提高網(wǎng)絡(luò)協(xié)議識(shí)別與分析的效率與準(zhǔn)確性,其工作量 也急劇增大。傳統(tǒng)的協(xié)議分析字符串匹配方法已經(jīng)不能滿足目前日益爆炸式網(wǎng)絡(luò)應(yīng)用的要 求。
[0003] 另外,無論是進(jìn)行網(wǎng)絡(luò)信息的捜索,還是進(jìn)行網(wǎng)絡(luò)安全的防護(hù),都離不開對(duì)網(wǎng)絡(luò)比 特流的挖掘與分析。模式匹配算法在文本挖掘、信息檢索、模式識(shí)別、圖像處理W及網(wǎng)絡(luò)安 全等領(lǐng)域中被普遍采用??焖佟?zhǔn)確的字符串模式匹配算法一直是研究人員追求的目標(biāo)。
[0004] 目前,已有一些學(xué)者對(duì)字符串的快速匹配方法進(jìn)行了大量的研究,Boyer和Moore 兩人在KMP算法的啟發(fā)下,提出了一種經(jīng)典的字符串快速匹配算法BM度oyer-Moore)算 法;BMH度oyer-Moore化rspool)算法是在BM的基礎(chǔ)上做的改進(jìn);Sunday算法是Daniel M.Sunday提出的一種比BM算法捜索速度更快的算法;另外還有QS(如ick-Search)算法、 多模式雙向快速字符串匹配方法等?,F(xiàn)有研究在協(xié)議字符串快速匹配方面已經(jīng)取得了較好 的實(shí)際應(yīng)用效果。但是,目前方法還存在計(jì)算量較大、沒有并行考慮串匹配的問題。
【發(fā)明內(nèi)容】
陽0化]為了解決上述問題,或者至少部分地解決上述問題,本發(fā)明提供了一種字符串匹 配方法和系統(tǒng)。
[0006] 依據(jù)本發(fā)明的一個(gè)方面,本發(fā)明提供了一種字符串匹配方法,包括:
[0007] 將被匹配字符串分解成預(yù)先設(shè)定數(shù)目的若干塊數(shù)據(jù)塊;
[0008] 將所述各數(shù)據(jù)塊與模式串進(jìn)行快速匹配,直到找出所有相互匹配的字符串或達(dá)到 停止條件;
[0009] 對(duì)所述各數(shù)據(jù)塊的結(jié)合處進(jìn)行匹配處理。
[0010] 其中,被匹配字符串分解得到的所述各數(shù)據(jù)塊長度相等,且遠(yuǎn)遠(yuǎn)大于模式串的長 度。
[0011] 其中,所述將所述各數(shù)據(jù)塊與模式串進(jìn)行快速匹配的方法包括:
[0012] 保持BM算法的好后綴不變,結(jié)合改進(jìn)后的QS算法,同時(shí)進(jìn)行字符串的快速匹配; [001引其中,利用BM算法的好后綴:當(dāng)出現(xiàn)錯(cuò)誤匹配時(shí),從不匹配點(diǎn)向左看,判斷已匹配 的子字符串在模式串中是否還有重復(fù),若已匹配的子字符串在模式串中有重復(fù),則直接將 模式串中重復(fù)的部分與已匹配的子字符串對(duì)齊;
[0014] 利用改進(jìn)后的QS算法:被匹配字符串T[tlt2t3…tn],當(dāng)前匹配點(diǎn)為T[t],當(dāng)出 現(xiàn)錯(cuò)誤匹配時(shí),判斷T[t+m]、T[t+m+1]是否在模式串中,若都在,則移動(dòng)距離為I,然后利用BM算法的好后綴進(jìn)行匹配;若僅有T[t+m+l]在模式串中,則讓模式串與T[t+m,t巧卻1-1] 進(jìn)行匹配,使得匹配跳過m+1步;否則讓模式串與T[t+m+l,t巧卻1]進(jìn)行匹配,使得匹配跳 過m+2步;其中m為模式串的長度;
[0015] 比較所述兩種算法得到的模式串移動(dòng)距離,W其中較大的值作為模式串本次的移 動(dòng)距離。
[0016] 其中,所述對(duì)所述各數(shù)據(jù)塊的結(jié)合處進(jìn)行匹配處理包括:
[0017] 對(duì)所述各數(shù)據(jù)塊的結(jié)合處進(jìn)行散列化處理,計(jì)算其散列碼,將得到的散列碼分別 與模式串的散列碼對(duì)比;若對(duì)比不成功,說明該結(jié)合處不存在模式串;若對(duì)比成功,說明該 結(jié)合處存在模式串,且對(duì)比成功的散列碼對(duì)應(yīng)的子串就是與模式串匹配的字符串。
[0018] 其中,所述各數(shù)據(jù)塊的結(jié)合處是長度等于2*m的字符串,分別由相鄰的兩塊所述 數(shù)據(jù)塊的結(jié)尾m個(gè)字符和開頭m個(gè)字符組成,每個(gè)結(jié)合處字符串的散列碼有m-2個(gè);其中, m為模式串的長度。
[0019] 依據(jù)本發(fā)明的另一方面,本發(fā)明提供了一種字符串匹配系統(tǒng),包括:
[0020] 分解單元,用于將被匹配字符串分解成預(yù)先設(shè)定數(shù)目的若干塊數(shù)據(jù)塊;
[0021] 數(shù)據(jù)塊匹配單元,用于將所述各數(shù)據(jù)塊與模式串進(jìn)行快速匹配,直到找出所有相 互匹配的字符串或達(dá)到停止條件;
[0022] 結(jié)合處匹配單元,用于對(duì)所述各數(shù)據(jù)塊的結(jié)合處進(jìn)行匹配處理。
[0023] 其中,所述分解單元,具體用于將被匹配字符串分解,得到的所述各數(shù)據(jù)塊長度相 等,且遠(yuǎn)遠(yuǎn)大于模式串的長度。
[0024] 其中,所述數(shù)據(jù)塊匹配單元包括:
[00巧]BM匹配模塊,用于利用BM算法的好后綴,當(dāng)出現(xiàn)錯(cuò)誤匹配時(shí),從不匹配點(diǎn)向左看, 判斷已匹配的子字符串在模式串中是否還有重復(fù),若已匹配的子字符串在模式串中有重 復(fù),則直接將模式串中重復(fù)的部分與已匹配的子字符串對(duì)齊; 陽0%] QS匹配模塊,用于利用改進(jìn)后的QS算法,被匹配字符串T[tlt2t3…tn],當(dāng)前匹 配點(diǎn)為T[t],當(dāng)出現(xiàn)錯(cuò)誤匹配時(shí),判斷T[t+m]、T[t+m+1]是否在模式串中,若都在,則移動(dòng) 距離為1,然后利用BM的好后綴進(jìn)行匹配;若僅有T[t+m+l]在模式串中,則讓模式串與 T[t+m,t巧卻1-1]進(jìn)行匹配,使得匹配跳過m+1步;否則讓模式串與T[t+m+l,t巧卻1]進(jìn)行 匹配,使得匹配跳過m+2步;其中m為模式串的長度;
[0027] 移動(dòng)距離判定模塊:比較BM匹配模塊和QS匹配模塊中模式串的移動(dòng)距離,W其中 較大的值作為模式串本次的移動(dòng)距離。
[0028] 其中,所述結(jié)合處匹配單元包括:
[0029] 散列碼計(jì)算模塊,用于對(duì)所述各數(shù)據(jù)塊的結(jié)合處做散列化處理,計(jì)算其散列碼;W 及計(jì)算模式串的散列碼;
[0030] 散列碼比較模塊,用于將各結(jié)合處的散列碼分別與模式串的散列碼對(duì)比;若對(duì)比 不成功,說明該結(jié)合處不存在模式串;若對(duì)比成功,說明該結(jié)合處存在模式串,對(duì)比成功的 散列碼對(duì)應(yīng)的子串就是與模式串匹配的字符串。
[0031] 其中,所述各數(shù)據(jù)塊的結(jié)合處是長度等于2*m的字符串,分別由相鄰的兩塊所述 數(shù)據(jù)塊的結(jié)尾m個(gè)字符和開頭m個(gè)字符組成,每個(gè)結(jié)合處字符串的散列碼有m-2個(gè);其中, m為模式串的長度。
[0032] 本發(fā)明實(shí)施例的有益效果是:在字符串與模式串匹配前,先對(duì)字符串進(jìn)行分解,將 一個(gè)大串分解成若干個(gè)較小的字符塊進(jìn)行并行分析處理,可W大大提升字符串匹配效率。 在對(duì)每個(gè)小字符塊內(nèi)部進(jìn)行匹配時(shí),保持BM算法的好后綴不變,結(jié)合改進(jìn)后的QS算法,同 時(shí)進(jìn)行字符串的快速匹配,從而跳過盡可能多的字符,減少匹配次數(shù),降低匹配過程中的 "過匹配"現(xiàn)象,提高算法效率。對(duì)各數(shù)據(jù)塊結(jié)合處進(jìn)行散列化處理,有效防止"漏匹配"現(xiàn) 象發(fā)生,降低字符串"漏匹配"率問題。在對(duì)結(jié)合處字符串進(jìn)行處理時(shí),由于字符串長度為 2*m,每個(gè)結(jié)合處只需要計(jì)算m-2個(gè)散列碼;因此,在整體匹配前進(jìn)行一次散列化處理,得到 相應(yīng)的散列碼。該法在結(jié)合處短字符串情況下優(yōu)勢(shì)非常明顯,整體計(jì)算量小,適合對(duì)實(shí)時(shí)性 處理要求高的應(yīng)用場(chǎng)景。
【附圖說明】
[0033] 圖1為本發(fā)明提供的一種字符串匹配方法的流程圖;
[0034] 圖2為本發(fā)明中數(shù)據(jù)塊內(nèi)部匹配過程的流程圖;
[0035] 圖3為本發(fā)明中數(shù)據(jù)塊結(jié)合處字符串散列化處理過程的流程圖;
[0036] 圖4為本發(fā)明提供的一種字符串匹配系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0037] 為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方 式作進(jìn)一步地詳細(xì)描述。
[0038] 為了清楚闡述本發(fā)明提出的字符串匹配方法,先定義一些相關(guān)的定義和概念:
[0039] 定義1 :待匹配字符串T--表示為T[t