本發(fā)明涉及一種基于多狀態(tài)機的協(xié)議解析系統(tǒng)及解析方法。
背景技術(shù):
現(xiàn)有的協(xié)議一般都是以鍵-值對的形式定義的。鍵也就是通常所說的特征碼,值則是通常所說的有效數(shù)據(jù)。在實際操作時,通過對特征碼的循環(huán)匹配,將相應(yīng)的有效數(shù)據(jù)進行保存,當(dāng)識別到的特征碼為結(jié)束特征碼的時候,則輸出匹配結(jié)果。
現(xiàn)有的解析方法存在著如下幾點不足:
(I)解析速度慢;
(II)在網(wǎng)絡(luò)數(shù)據(jù)傳輸中,特征碼可能被分段傳輸,導(dǎo)致特征碼匹配不到;
(III)無法定義特征碼出現(xiàn)的先后順序;
(V)所有的特征碼都聚集在一個狀態(tài)機里面,可能造成狀態(tài)機爆炸;
(IV)沒有容錯機制和跳轉(zhuǎn)機制。
以下對本案涉及到的幾個名詞進行解釋:
(I)狀態(tài):用于匹配的最小單位。比如特征碼China包含有C、h、i、n和a五個狀態(tài)。
(II)狀態(tài)機:一個有向圖形,由一組節(jié)點和一組相應(yīng)的轉(zhuǎn)移函數(shù)組成。
(III)前置狀態(tài):用于保存上次匹配結(jié)束時的最終狀態(tài)。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的,在于提供一種基于多狀態(tài)機的協(xié)議解析方法,其可提高解析效率,解決特征碼被分段傳輸?shù)膯栴},并可進行容錯處理。
為了達成上述目的,本發(fā)明的解決方案是:
一種基于多狀態(tài)機的協(xié)議解析系統(tǒng),包括:
多狀態(tài)機生成模塊,用于定義需要的狀態(tài)機以及狀態(tài)機之間的跳轉(zhuǎn)關(guān)系;以及,
狀態(tài)機匹配模塊,用于待匹配數(shù)據(jù)的輸入、中間匹配結(jié)果的保存以及最終匹配結(jié)果的輸出。
一種基于多狀態(tài)機的協(xié)議解析方法,包括如下步驟:
步驟1,初始化所有狀態(tài)機,并定義各狀態(tài)機之間的跳轉(zhuǎn)關(guān)系,形成多狀態(tài)機;
步驟2,將待匹配的數(shù)據(jù)輸入多狀態(tài)機進行匹配,輸出匹配結(jié)果。
上述步驟1中,對基于Http協(xié)議的多狀態(tài)機,將特征碼“POST”作為根狀態(tài)機下的特征碼,“\r\n\r\n”為“POST”特征碼下的結(jié)束特征碼。
上述步驟1中,對基于Smtp協(xié)議的多狀態(tài)機,將特征碼“To:”作為根狀態(tài)機下的特征碼,“\r\n\r\n”為“To:”特征碼下的結(jié)束特征碼。
上述步驟2的具體內(nèi)容是:
步驟21,將待匹配的數(shù)據(jù)輸入多狀態(tài)機進行匹配;如果前置狀態(tài)不為空,則將當(dāng)前狀態(tài)恢復(fù)為前置狀態(tài);否則從根狀態(tài)機開始匹配;
步驟22,如果匹配到特征碼,則執(zhí)行步驟23,否則執(zhí)行步驟25;
步驟23,如果特征碼為結(jié)束特征碼,則執(zhí)行步驟24,否則保存對應(yīng)的有效數(shù)據(jù),并跳轉(zhuǎn)到該特征碼對應(yīng)的狀態(tài)機,并執(zhí)行步驟22;
步驟24,將獲取到的有效數(shù)據(jù)進行整合并分析:如果有效數(shù)據(jù)符合解析的協(xié)議特征,則輸出解析結(jié)果并跳轉(zhuǎn)到該特征碼對應(yīng)的狀態(tài)機;否則判定匹配結(jié)果為臟數(shù)據(jù),丟棄獲取到的有效數(shù)據(jù),并跳轉(zhuǎn)到容錯狀態(tài)機;執(zhí)行完上述操作后執(zhí)行步驟22;
步驟25,匹配結(jié)束,將最后匹配到的狀態(tài)保存為前置狀態(tài)。
上述步驟24中,容錯狀態(tài)機為根狀態(tài)機。
采用上述方案后,本發(fā)明具有以下特點:
(1)本發(fā)明采用多狀態(tài)機間跳轉(zhuǎn)的方式,可以解耦狀態(tài)之間的關(guān)系,可以避免狀態(tài)機爆炸,提高解析效率;
(2)本發(fā)明可以解決特征碼被分段傳輸而導(dǎo)致的匹配失敗問題;
(3)本發(fā)明具有容錯機制,可以對臟數(shù)據(jù)進行識別和處理;
(4)狀態(tài)機匹配之后,輸出的即是最終數(shù)據(jù),而不是一堆無序的狀態(tài)。
附圖說明
圖1是本發(fā)明的多狀態(tài)機的拓?fù)鋱D;
圖2是本發(fā)明的多狀態(tài)機匹配流程圖。
具體實施方式
以下將結(jié)合附圖,對本發(fā)明的技術(shù)方案進行詳細(xì)說明。
本發(fā)明提供一種基于多狀態(tài)機的協(xié)議解析系統(tǒng),包括如下兩個模塊:
(1)多狀態(tài)機生成模塊,用于定義需要的狀態(tài)機以及狀態(tài)機之間的跳轉(zhuǎn)關(guān)系;
(2)狀態(tài)機匹配模塊,用于待匹配數(shù)據(jù)的輸入、中間匹配結(jié)果的保存以及最終匹配結(jié)果的輸出。
基于以上系統(tǒng),本發(fā)明還提供一種基于多狀態(tài)機的協(xié)議解析方法,包括如下步驟:
步驟1,生成多狀態(tài)機
包含:
步驟11,初始化所有狀態(tài)機;
步驟12,定義各狀態(tài)機之間的跳轉(zhuǎn)關(guān)系,形成多狀態(tài)機。
以下將以基于Http協(xié)議和Smtp協(xié)議的多狀態(tài)機的生成為例,說明步驟1的實現(xiàn)過程。
a.根據(jù)Http協(xié)議的RFC協(xié)議規(guī)范,Http在上傳數(shù)據(jù)的時候,具有特征碼“POST”;在“POST”特征碼下,具有特征碼“Host:”、“Content-Length:”和“\r\n\r\n”等;其中“\r\n\r\n”為“POST”特征碼下的結(jié)束特征碼;
b.根據(jù)Smtp協(xié)議的RFC協(xié)議規(guī)范,Smtp協(xié)議在發(fā)送郵件的時候,具有特征碼“To:”,在“To:”特征碼下,具有特征碼“From:”,“Subject:”和“\r\n\r\n”等;其中“\r\n\r\n”為“To:”特征碼下的結(jié)束特征碼;
c.根據(jù)Http協(xié)議和Smtp的協(xié)議特征,將特征碼“POST”和“To:”作為根狀態(tài)機下的特征碼;
d.根據(jù)以上描述,基于Http協(xié)議和Smtp協(xié)議的多狀態(tài)機的拓?fù)鋱D如圖1所示。
步驟2,多狀態(tài)機匹配
配合圖2所示,包含:
步驟21,將待匹配的數(shù)據(jù)輸入多狀態(tài)機進行匹配;如果前置狀態(tài)不為空,則將當(dāng)前狀態(tài)恢復(fù)為前置狀態(tài);否則從根狀態(tài)機開始匹配;
步驟22,如果匹配到特征碼,則執(zhí)行步驟23,否則執(zhí)行步驟25;
步驟23,如果特征碼為結(jié)束特征碼,則執(zhí)行步驟24,否則保存對應(yīng)的有效數(shù)據(jù),并跳轉(zhuǎn)到該特征碼對應(yīng)的狀態(tài)機,并執(zhí)行步驟22;
步驟24,將獲取到的有效數(shù)據(jù)進行整合并分析:如果有效數(shù)據(jù)符合我們所解析的協(xié)議特征,則輸出解析結(jié)果并跳轉(zhuǎn)到該特征碼對應(yīng)的狀態(tài)機;否則判定匹配結(jié)果為臟數(shù)據(jù),丟棄獲取到的有效數(shù)據(jù),并跳轉(zhuǎn)到容錯狀態(tài)機(一般為根狀態(tài)機)。執(zhí)行完上述操作后執(zhí)行步驟22;
步驟25,匹配結(jié)束,將最后匹配到的狀態(tài)保存為前置狀態(tài)。
以下將給出步驟2的實施實例。
實例1:匹配一段正確的Http協(xié)議報文
a、輸入以下內(nèi)容到多狀態(tài)機進行匹配:POST index.jsp\r\nHost:127.0.0.1\r\nContent-;
b、前置狀態(tài)為空,從根狀態(tài)機開始匹配;
c、根狀態(tài)機匹配到特征碼“POST”,由于特征碼“POST”不是結(jié)束特征碼,獲取有效數(shù)據(jù)“index.jsp”后跳轉(zhuǎn)到預(yù)設(shè)好的Http狀態(tài)機對如下內(nèi)容進行匹配:\r\nHost:127.0.0.1\r\nContent-;
d、Http狀態(tài)機匹配到特征碼“Host:”,由于特征碼“Host:”不是結(jié)束特征碼,獲取有效數(shù)據(jù)“127.0.0.1”后,跳轉(zhuǎn)到預(yù)設(shè)好的Http狀態(tài)機對如下內(nèi)容進行匹配:\r\nContent-;
e、匹配結(jié)束,設(shè)置隸屬于Http狀態(tài)機的特征碼“Content-Length:”的“-”狀態(tài)為前置狀態(tài);
f、輸入以下內(nèi)容到狀態(tài)機進行匹配:Length:8\r\n\r\nHttpData;
g、前置狀態(tài)不為空,恢復(fù)隸屬于Http狀態(tài)機的特征碼“Content-Length:”的“-”狀態(tài)為當(dāng)前狀態(tài);
h、Http狀態(tài)機匹配到特征碼“Content-Length:”,由于特征碼“Content-Length:”不是結(jié)束特征碼,獲取有效數(shù)據(jù)“8”后,跳轉(zhuǎn)到預(yù)設(shè)好的Http狀態(tài)機對如下內(nèi)容進行匹配:\r\n\r\nHttpData;
i、Http狀態(tài)機匹配到特征碼“\r\n\r\n”,由于特征碼“\r\n\r\n”是結(jié)束特征碼,獲取有效數(shù)據(jù)“HttpData”后,判定獲取到的有效數(shù)據(jù)符合Http協(xié)議特征后輸出“index.jsp 127.0.0.1 HttpData”,跳轉(zhuǎn)到預(yù)設(shè)好的根狀態(tài)機,對如下內(nèi)容進行匹配:(內(nèi)容為空);
j、匹配結(jié)束,由于當(dāng)前處于根狀態(tài)機,并沒有處于任何狀態(tài),設(shè)置前置狀態(tài)為空。
實例2:匹配一段錯誤的Smtp協(xié)議報文
a、輸入以下內(nèi)容到根狀態(tài)機進行匹配:Welcome To:\r\n Beijing.\r\n\r\n;
b、前置狀態(tài)為空,從根狀態(tài)機開始匹配;
c、根狀態(tài)機匹配到特征碼“To:”,由于特征碼“To:”不是結(jié)束特征碼,獲取有效數(shù)據(jù)“”(空)后預(yù)跳轉(zhuǎn)到預(yù)設(shè)好的Smtp狀態(tài)機對如下內(nèi)容進行匹配:\r\nBeijing.\r\n\r\n;
d、Smtp狀態(tài)機匹配到特征碼“\r\n\r\n”,由于特征碼“\r\n\r\n”是結(jié)束特征碼,判定獲取到的有效數(shù)據(jù)不符合Smtp特征,故斷定獲取到了臟數(shù)據(jù)。清空數(shù)據(jù)并跳轉(zhuǎn)到容錯狀態(tài)機(根狀態(tài)機)對如下內(nèi)容進行匹配:(內(nèi)容為空);
5、匹配結(jié)束,由于當(dāng)前處于根狀態(tài)機,并沒有處于任何狀態(tài),設(shè)置前置狀態(tài)為空。
綜合上述,本發(fā)明一種基于多狀態(tài)機的協(xié)議解析系統(tǒng)及方法,通過解耦狀態(tài)機之間的邏輯關(guān)系,定義狀態(tài)機與狀態(tài)機之間的跳轉(zhuǎn)關(guān)系,從而實現(xiàn)用于解析協(xié)議的多狀態(tài)機模型,避免狀態(tài)機爆炸的問題,提高解析效率;同時,本發(fā)明可以識別臟數(shù)據(jù)并進行容錯處理。
以上實施例僅為說明本發(fā)明的技術(shù)思想,不能以此限定本發(fā)明的保護范圍,凡是按照本發(fā)明提出的技術(shù)思想,在技術(shù)方案基礎(chǔ)上所做的任何改動,均落入本發(fā)明保護范圍之內(nèi)。