欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于字典樹剪枝搜索的協(xié)議關(guān)鍵字識別方法與流程

文檔序號:12068116閱讀:275來源:國知局
一種基于字典樹剪枝搜索的協(xié)議關(guān)鍵字識別方法與流程

本發(fā)明涉及一種關(guān)鍵字識別技術(shù),特別是一種基于字典樹剪枝搜索的協(xié)議關(guān)鍵字識別方法。



背景技術(shù):

協(xié)議逆向工程是指在不依賴于協(xié)議描述的情況下,通過對協(xié)議實體的網(wǎng)絡(luò)輸入輸出、系統(tǒng)行為和指令執(zhí)行流程等信息進行監(jiān)控和分析,提取協(xié)議語法、語義和工作流程。協(xié)議逆向分為格式逆向和狀態(tài)機逆向兩大類。在格式逆向中,對協(xié)議中關(guān)鍵字的識別和提取是一項基本而重要的工作。協(xié)議的關(guān)鍵字是指在協(xié)議傳輸單元,即報文中,由協(xié)議規(guī)范所規(guī)定的對通信的控制起關(guān)鍵作用的信息,一般會頻繁地出現(xiàn)在通信數(shù)據(jù)流中,現(xiàn)有的對協(xié)議關(guān)鍵字進行識別的方法主要有以下幾種:

(1)基于多序列比對的協(xié)議關(guān)鍵字識別

在協(xié)議格式逆向的工作中,Beddoe首先將生物信息學(xué)中的多序列比對(Multiple Sequence Alignment,MSA)算法引入到工程中,并嘗試獲得報文的結(jié)構(gòu)信息。在生物信息學(xué)中,通過對多個DNA序列進行比對,可以發(fā)現(xiàn)某序列片段的功能、結(jié)構(gòu)和進化信息。具體地說,多序列比對針對給定的多個字符串,通過對每個字符串分別添加、刪除字母或加入空格,使它們具有最大的相似性。與此類似,通過比對相同格式的不同報文實例,可以識別報文中的不變字段與可變字段,從而初步獲得報文結(jié)構(gòu)信息。Beddoe等人利用構(gòu)造系統(tǒng)樹的啟發(fā)式方法引導(dǎo)多序列比對的執(zhí)行,有效地降低了算法的時間復(fù)雜度,提高了執(zhí)行的效率。該方法的主要缺點在于,該方法對于緊湊、簡單的報文識別效果較好,對于復(fù)雜、冗余字段較多的報文,其效率和準(zhǔn)確度較低。

(2)基于報文內(nèi)容變化分布特征的協(xié)議關(guān)鍵字識別

Trifilo等人提出了基于報文內(nèi)容變化分布特征的報文格式挖掘方案。具體來說,首先以字節(jié)為單位獲得每次會話過程中,每個字節(jié)在多個報文中取值的頻率分布。然后以字節(jié)為單位獲得多次會話過程中,每個字節(jié)的頻率分布。根據(jù)頻率分布推斷出哪幾個字節(jié)屬于關(guān)鍵字或固定字段,哪幾個字節(jié)屬于參數(shù)字段。然而,這種方法存在兩點不足:第一,有的字段寬度是變化的,如果在某個位置出現(xiàn)“錯位”的情況,則后面的統(tǒng)計信息是沒有意義的;第二,判斷字段變化范圍的閾值是經(jīng)驗值,缺乏客觀性。

(3)基于字典樹的協(xié)議特征字挖掘

字典樹又稱單詞查找樹、Trie樹,是一種樹形結(jié)構(gòu),也是一種哈希樹的變種。它常常被應(yīng)用于統(tǒng)計,排序和保存大量的字符串,其查找效率優(yōu)于哈希樹,所以經(jīng)常被搜索引擎系統(tǒng)用于文本詞頻統(tǒng)計。字典樹的根節(jié)點不包含字符,除根節(jié)點外每一個節(jié)點都只包含一個字符,從根節(jié)點到某一節(jié)點,路徑上經(jīng)過的字符連接起來,為該節(jié)點對應(yīng)的字符串,每個節(jié)點的所有子節(jié)點包含的字符都不相同。

對數(shù)據(jù)流進行協(xié)議特征字挖掘時,傳統(tǒng)的方法是設(shè)定一個固定大小的滑動窗口,將數(shù)據(jù)流開頭的單詞作為字典樹的第一個單詞,然后將窗口依次向后移動直到數(shù)據(jù)的結(jié)尾,將數(shù)據(jù)中出現(xiàn)的可能的單詞全部存儲在字典樹中。在字典樹建立好后,再次掃描整個數(shù)據(jù),統(tǒng)計字典樹中的所有單詞出現(xiàn)的頻率,將出現(xiàn)頻率相對大的單詞,即協(xié)議特征字作為可能的關(guān)鍵字,在接下來的分析過程中將這些協(xié)議特征字作為分析目標(biāo),最終挖掘出真正的協(xié)議關(guān)鍵字。采用傳統(tǒng)的字典樹對協(xié)議關(guān)鍵字進行挖掘存在兩個重要的缺陷。

(1)存儲空間占用過大:對于常見的二進制通信數(shù)據(jù)流,若采用長度為n的滑動窗口進行協(xié)議特征字挖掘,可能的單詞組合最多有2的n次方種。隨著協(xié)議特征字長度的增加,用于存儲字典樹的空間呈指數(shù)增加。在滑動窗口的大小n較大時,計算機的存儲空間無法完整地存儲整棵字典樹。

(2)協(xié)議特征字長度固定:由于滑動窗口的大小是固定的,因此挖掘出的協(xié)議特征字的長度顯然也是固定的。而對于實際的通信協(xié)議來說,協(xié)議關(guān)鍵字的長度往往是不可知的,有時甚至是不固定的。這種情況造成通過傳統(tǒng)的字典樹所挖掘出的協(xié)議特征字僅僅是真正的協(xié)議關(guān)鍵字的一部分,進而影響分析的準(zhǔn)確性。



技術(shù)實現(xiàn)要素:

本發(fā)明解決的技術(shù)問題是:克服現(xiàn)有技術(shù)的不足,提供了一種基于字典樹剪枝搜索的協(xié)議關(guān)鍵字識別方法,解決了現(xiàn)有的采用傳統(tǒng)字典樹對協(xié)議關(guān)鍵字進行挖掘帶來的存儲空間占用過大、協(xié)議特征字長度固定影響分析準(zhǔn)確性的問題,提高協(xié)議關(guān)鍵字識別的效率和適用性。

本發(fā)明的技術(shù)解決方案是:一種基于字典樹剪枝搜索的協(xié)議關(guān)鍵字識別方法,包括如下步驟:

(1)獲取需要進行協(xié)議關(guān)鍵字識別的數(shù)據(jù)流,建立長度為24的循環(huán)隊列buffer,將迭代器index定位在數(shù)據(jù)流第1位,建立變量DataCount記錄掃描過的數(shù)據(jù)流長度,建立變量NodeNum記錄字典樹中節(jié)點數(shù)量,建立字典樹root其中,DataCount的初值為0,NodeNum的初值為0;

(2)將以index為起點的數(shù)據(jù)流中的24位數(shù)據(jù)存入循環(huán)隊列buffer,將buffer中存放的數(shù)據(jù)字符串記為A(a1a2...a24),從a1開始掃描字符串,將當(dāng)前掃描的字符記為ai,若字典樹root中某個節(jié)點存放的字符與ai相同,則將當(dāng)前節(jié)點的計數(shù)值count加1,并將該字符賦值給當(dāng)前節(jié)點,然后繼續(xù)掃描字符串A(a1a2...a24),若字典樹root中任何節(jié)點對應(yīng)的字符都與ai不同,i=1,2,3…24,則將aiai+1…a24中的字符分別作為24-i+1個節(jié)點,并連接在字符為ai-1的節(jié)點上,包括字符aj的節(jié)點的深度depth為j、計數(shù)值count為1,NodeNum=NodeNum+(24-i+1),j=i,i+1,…24,其中,存儲字符為a0的節(jié)點為根節(jié)點;

(3)index=index+1,DataCount=DataCount+1;

(4)判斷變量NodeNum、DataCount,如果NodeNum>MaxNodeNum或者DataCount%CycleTime=0,則轉(zhuǎn)入步驟(5),否則轉(zhuǎn)入步驟(2),直至DataCount+24等于數(shù)據(jù)流長度,轉(zhuǎn)入步驟(7);其中,符號%代表求模運算;

(7)計算得到深度為depth的節(jié)點的剪枝閾值MinCountList[depth]=DataCount/(2^depth)*10;

(8)從字典樹的根節(jié)點開始遍歷字典樹,將當(dāng)前遍歷到的節(jié)點temp的深度記為deptht、計數(shù)值記為countt,如果countt小于MinCountList[deptht],則將temp節(jié)點、temp節(jié)點的所有子節(jié)點從字典樹中刪除,否則繼續(xù)遍歷字典樹直至遍歷完畢,并轉(zhuǎn)入步驟(2);

(7)用字符串列表StrList記錄協(xié)議關(guān)鍵字,獲取精煉比例PurifyRate,從根節(jié)點開始遍歷字典樹,將當(dāng)前遍歷到節(jié)點記為temp,節(jié)點temp的深度記為deptht、計數(shù)值記為countt,節(jié)點temp的直接父節(jié)點記為parent,節(jié)點parent深度記為depthp、計數(shù)值記為countp,若countt/countp<PurifyRate,則將根節(jié)點到節(jié)點parent的分支上的所有節(jié)點記錄的字符組成字符串,加入到StrList中,完成關(guān)鍵字識別。

所述的檢測周期CycleTime為數(shù)據(jù)流長度的二十分之一到十分之一。

所述的MaxNodeNum的取值為1000000。

所述的精煉比例PurifyRate取值為一個大于0小于1的實數(shù)。

本發(fā)明與現(xiàn)有技術(shù)相比的優(yōu)點在于:

(1)本發(fā)明通過引入字典樹剪枝算法,解決了使用傳統(tǒng)字典樹算法進行協(xié)議關(guān)鍵字識別時使用的存儲空間過大的缺陷,具有提高了計算機的空間利用效率的優(yōu)點;

(2)本發(fā)明通過使用邊建樹邊剪枝策略,解決了使用傳統(tǒng)字典樹算法進行協(xié)議關(guān)鍵字識別時搜索速度偏慢的缺陷,將不相關(guān)的模式串從字典樹中剔除出去,具有使后序的統(tǒng)計和分析工作的效率顯著提高的優(yōu)點。

(3)本發(fā)明通過使用“關(guān)鍵字提煉”策略,解決了從字典樹中提取候選協(xié)議關(guān)鍵字的問題,具有較好的使用價值。

附圖說明

圖1為本發(fā)明一種基于字典樹剪枝搜索的協(xié)議關(guān)鍵字識別方法原理流程圖;

圖2為本發(fā)明方法中字符串加入字典樹原理示意圖;

圖3為本發(fā)明方法中剪枝過程原理示意圖;

圖4為本發(fā)明方法中協(xié)議關(guān)鍵字提取原理示意圖。

具體實施方式

本發(fā)明針對現(xiàn)有技術(shù)的不足,提供了一種基于字典樹剪枝搜索的協(xié)議關(guān)鍵字識別方法,解決了現(xiàn)有的采用傳統(tǒng)字典樹對協(xié)議關(guān)鍵字進行挖掘帶來的存儲空間占用過大、協(xié)議特征字長度固定影響分析準(zhǔn)確性的問題,提高協(xié)議關(guān)鍵字識別的效率和適用性,如圖1為本發(fā)明一種基于字典樹剪枝搜索的協(xié)議關(guān)鍵字識別方法原理流程圖,本發(fā)明方法包括如下步驟:

(1)獲取需要進行協(xié)議關(guān)鍵字識別的數(shù)據(jù)流,建立長度為24的循環(huán)隊列buffer,將迭代器index定位在數(shù)據(jù)流第1位,建立變量DataCount記錄掃描過的數(shù)據(jù)流長度,建立變量NodeNum記錄字典樹中節(jié)點數(shù)量,建立字典樹root其中,DataCount的初值為0,NodeNum的初值為0,字典樹是一個多叉樹結(jié)構(gòu),本發(fā)明方法中字典樹root除根節(jié)點外,其余節(jié)點均記錄一個字符c、深度depth、計數(shù)值count。

(2)如圖2所示為本發(fā)明方法中字符串加入字典樹原理示意圖,將以index為起點的數(shù)據(jù)流中的24位數(shù)據(jù)存入循環(huán)隊列buffer,然后將循環(huán)隊列buffer中數(shù)據(jù)存入到字典樹。

將循環(huán)隊列buffer中數(shù)據(jù)存入字典樹的過程如下:若當(dāng)前buffer中存放的字符串為A(a1a2...a24),從a1開始掃描字符串,當(dāng)前掃描到的字符為ai:若字典樹中某個子節(jié)點存放的字符與ai相同,則將該子節(jié)點的計數(shù)值count加1,并將該字符賦值給當(dāng)前節(jié)點,繼續(xù)進行掃描字符串A(a1a2...a24);若字典樹中子節(jié)點中任何節(jié)點存放的字符都與ai不同,i=1,2,3…24,則將ai到a24中的字符建立一條樹枝接在字典樹節(jié)點之上,即樹枝的每個節(jié)點記錄字符aj(i<=j(luò)<=24),depth為j,計數(shù)值為1,NodeNum=NodeNum+(24-i+1)。

(3)index=index+1,DataCount=DataCount+1。

(4)判斷變量NodeNum、DataCount,如果NodeNum>MaxNodeNum或者DataCount%CycleTime=0,則轉(zhuǎn)入步驟(5),否則轉(zhuǎn)入步驟(2),直至DataCount+24等于數(shù)據(jù)流長度,當(dāng)DataCount+24等于數(shù)據(jù)流長度時,轉(zhuǎn)入步驟(7);其中,符號%代表求模運算,即a%b等于以a為被除數(shù),b為除數(shù),a除以b所得的余數(shù);檢測周期CycleTime根據(jù)數(shù)據(jù)流長度來進行設(shè)置,一般情況下取值范圍為數(shù)據(jù)流長度的二十分之一到十分之一之間。在某些特殊應(yīng)用場景下可以根據(jù)實際需要對CycleTime的取值進行適當(dāng)調(diào)整;MaxNodeNum的取值根據(jù)不同計算機系統(tǒng)的內(nèi)存大小自行進行調(diào)整,默認(rèn)取值為1000000。

(9)如圖3為本發(fā)明方法中剪枝過程原理示意圖,計算深度為depth的節(jié)點的剪枝閾值,使用數(shù)組MinCountList[1:24]記錄每一個深度的節(jié)點的下限閾值,深度為depth的節(jié)點的剪枝閾值MinCountList[depth]=DataCount/(2^depth)*10,0<depth<24。

(10)從root樹根開始遍歷字典樹。對于當(dāng)前遍歷到的節(jié)點temp,temp的深度為deptht,計數(shù)值為countt:如果countt小于MinCountList[deptht],則將temp節(jié)點和temp節(jié)點的所有子節(jié)點從字典樹中刪除;否則,不進行任何操作,若字典樹遍歷完畢,轉(zhuǎn)入步驟(2)。

(7)如圖4所示為本發(fā)明方法中協(xié)議關(guān)鍵字提取原理示意圖,對字典樹進行精煉,并提取協(xié)議關(guān)鍵字:用字符串列表StrList記錄協(xié)議關(guān)鍵字。精煉比例為PurifyRate,從樹根開始遍歷字典樹root,對于當(dāng)前遍歷到的節(jié)點temp,temp的深度為deptht,計數(shù)值為countt;temp的直接父節(jié)點為parent,parent深度為depthp,parent的計數(shù)值為countp:若countt/countp<PurifyRate,則將字典樹root根節(jié)點到parent的分枝上的所有節(jié)點記錄的字符組成字符串,加入到StrList中,停止遍歷temp的子樹,完成關(guān)鍵字識別,其中,精煉比例PurifyRate取值為一個大于0小于1的實數(shù),默認(rèn)值為1/4。PurifyRate的具體取值可根據(jù)實際情況進行適當(dāng)調(diào)整。

本發(fā)明說明書中未作詳細(xì)描述的內(nèi)容屬本領(lǐng)域技術(shù)人員的公知技術(shù)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
喀什市| 韩城市| 高州市| 闽清县| 天长市| 临高县| 类乌齐县| 扎兰屯市| 叶城县| 伊宁市| 山西省| 循化| 延川县| 古交市| 云林县| 合水县| 通江县| 龙州县| 长丰县| 宁安市| 漠河县| 阳新县| 浠水县| 洛扎县| 嘉荫县| 陵川县| 梧州市| 芒康县| 扎鲁特旗| 凯里市| 六枝特区| 宁远县| 谷城县| 安义县| 白银市| 黄梅县| 舒城县| 阳曲县| 富蕴县| 惠水县| 屏南县|