專利名稱:一種網(wǎng)絡數(shù)據(jù)包解析方法
技術領域:
本發(fā)明涉及網(wǎng)絡技術領域,特別涉及一種網(wǎng)絡數(shù)據(jù)包解析方法。
背景技術:
為了實現(xiàn)網(wǎng)絡數(shù)據(jù)正常交換而建立的規(guī)則、約定或標準稱為網(wǎng)絡協(xié)議。需要傳輸?shù)臄?shù)據(jù)按照一定的協(xié)議格式打包封裝成數(shù)據(jù)包后才能在網(wǎng)絡中正確傳輸。對網(wǎng)絡中傳輸?shù)臄?shù)據(jù)包進行解析是維護網(wǎng)絡正常通信、保障網(wǎng)絡安全的重要手段之一。通過解析數(shù)據(jù)包,可以清楚地了解到相互通信的設備之間的通信目的;可以確定網(wǎng)絡是否受到攻擊入侵;可以診斷網(wǎng)絡應用程序可能出現(xiàn)問題的原因,以及了解整個網(wǎng)絡在各個時段內(nèi)的 網(wǎng)絡負載情況
坐寸O傳統(tǒng)的數(shù)據(jù)包解析方法,為每種協(xié)議配置一個解碼模塊,即,使用專業(yè)的編程語言(例如C語言等)針對每種協(xié)議特定的協(xié)議結構,將解析數(shù)據(jù)包的具體流程編寫成解碼模塊,將各種協(xié)議解碼模塊通過編譯加入到數(shù)據(jù)包解析系統(tǒng)中,待解析的數(shù)據(jù)包傳入數(shù)據(jù)包解析系統(tǒng)后,從系統(tǒng)中調(diào)取相應的解碼模塊對數(shù)據(jù)包進行解析,獲取數(shù)據(jù)包中各字段解碼。隨著網(wǎng)絡技術的不斷發(fā)展,網(wǎng)絡用戶的迅速增加,各種新的網(wǎng)絡協(xié)議不斷涌現(xiàn)。為了更準確的分析網(wǎng)絡中傳輸?shù)臄?shù)據(jù)包,傳統(tǒng)的數(shù)據(jù)包解析方法需要針對新的協(xié)議不斷地編寫相應的解碼模塊。由于解碼模塊使用專業(yè)的編程語言而配置,數(shù)據(jù)包解析系統(tǒng)更新只能一直由專業(yè)的程序員進行,不便于數(shù)據(jù)包解析系統(tǒng)中新協(xié)議的添加,即數(shù)據(jù)包解析系統(tǒng)的擴展性較差。另一方面,數(shù)據(jù)包解析系統(tǒng)更新必須由專業(yè)程序員進行,使得數(shù)據(jù)包解析系統(tǒng)更新成本較高。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服現(xiàn)有技術中所存在的數(shù)據(jù)包解析系統(tǒng)擴展性較差的不足,提供一種可提高擴展性的網(wǎng)絡數(shù)據(jù)包解析方法。為了實現(xiàn)上述發(fā)明目的,本發(fā)明提供了以下技術方案一種網(wǎng)絡數(shù)據(jù)包解析方法,包括如下步驟I)、根據(jù)協(xié)議的協(xié)議結構,生成所述協(xié)議的協(xié)議腳本,并存儲;2)、根據(jù)協(xié)議腳本生成語句表和邏輯樹;3)、載入待解析的數(shù)據(jù)包,獲取待解析的數(shù)據(jù)包的協(xié)議名稱,根據(jù)協(xié)議名稱查找相應的協(xié)議腳本,并獲取相應的語句表和邏輯樹,對待解析的數(shù)據(jù)包進行解析,輸出解析結
果O根據(jù)本發(fā)明實施例,所述步驟I)中生成協(xié)議腳本的方法是按照協(xié)議結構中各字段的順序,將各字段的屬性載入?yún)f(xié)議腳本中。進一步的,所述協(xié)議腳本中的每條語句由語句類型關鍵字和語句屬性組成,所述語句類型關鍵字表明語句的類型,語句屬性為各字段的屬性,所述語句的類型包括字段描述語句、判斷語句和循環(huán)語句,所述判斷語句包括if、elseif、else和endif語句,所述循環(huán)語句包括do和while語句。根據(jù)本發(fā)明實施例,所述步驟2)中生成語句表的方法是2-11):根據(jù)協(xié)議腳本中語句的語句類型關鍵字確定語句的類型;2-12):取得語句中的各個屬性,并存儲在對應的語句類中,然后將該語句類記錄到語句表中,并對語句類進行編號。一個語句類對應協(xié)議腳本中的一行語句,即一個語句類存儲一條語句中所有的屬性,語句表由多個語句類組成,一個語句類占語句表的一行。根據(jù)本發(fā)明實施例,所述步驟2)中生成邏輯樹的方法是從語句表頭至語句表尾,順序掃描語句表,對語句表中的判斷語句和循環(huán)語句進行分析,確定判斷語句的執(zhí)行順序和對應的執(zhí)行條件,確定循環(huán)語句的循環(huán)體和循環(huán)條件,建立所述邏輯樹。進一步的,生成邏輯樹包括步驟 2-21):掃描整個語句表,按照單一語句塊、判斷語句塊和循環(huán)語句塊三種語句塊類型,將整個語句表分解為若干個語句塊BI,B2,…,Βη,η為自然數(shù);2-22):將若干個語句塊BI,Β2,…,Bn中的每一個語句塊存儲到邏輯樹的根節(jié)點下。2-23):將若干個語句塊BI,Β2,…,Bn中的判斷語句塊和循環(huán)語句塊分解成單一類型的語句塊,然后將每一個單一類型的語句塊存儲到邏輯樹相應的子節(jié)點下,完成邏輯樹建立;其中,若一段連續(xù)的語句不包括if、elseif、else和endif語句,也不包括do和while語句,則稱這個語句塊為單一語句塊;判斷語句塊為if語句和對應的endif語句,以及之間包含的一段連續(xù)的語句,稱為判斷語句塊;do語句和對應的while語句,以及之間包含的一段連續(xù)語句,稱為循環(huán)語句塊。進一步的,所述步驟2-23)將若干個語句塊B1,B2,…,Bn中的判斷語句塊和循環(huán)語句塊分解成單一類型的語句塊,然后將每一個單一類型的語句塊存儲到邏輯樹相應的子節(jié)點下,方法是2-23-1):對于判斷語句塊,則以最外層if語句、elseif語句、else語句和endif語句為分隔符,將該判斷語句塊中所有的語句分解成若干個帶執(zhí)行條件的子語句塊,并將所述若干個帶執(zhí)行條件的語句塊存儲到該判斷語句塊的子節(jié)點下,且將各自的判斷條件也存儲在該子節(jié)點下;對于循環(huán)語句塊,則將do語句和while語句之間的語句作為一個帶循環(huán)條件的語句塊,并將所述帶循環(huán)條件的語句塊存儲到該循環(huán)語句塊的子節(jié)點下,同時將循環(huán)條件也存儲在該子節(jié)點下;2-23-2):將經(jīng)過步驟2_23_1)分解后的語句塊中不是單一類型的語句塊,按照單一語句塊、判斷語句塊和循環(huán)語句塊三種類型進行分解,將分解得到的語句塊存儲在分解前相應語句塊的子節(jié)點下;2-23-3):循環(huán)步驟2_23_1)至2_23_2),直到邏輯樹中的每一個葉子節(jié)點中的語句塊都為單一語句塊。根據(jù)本發(fā)明實施例,所述步驟3)中,獲取待解析的數(shù)據(jù)包中每層協(xié)議的協(xié)議名稱,查找各協(xié)議的協(xié)議腳本,并獲取所述協(xié)議的語句表和邏輯樹。根據(jù)本發(fā)明實施例,所述步驟3)中,對待解析的數(shù)據(jù)包進行解析的方法是從邏輯樹的根節(jié)點開始,順序進入各個子節(jié)點,根據(jù)子節(jié)點中的判斷條件和循環(huán)條件,確定語句的執(zhí)行順序,并從語句表中獲取語句的各個屬性,然后根據(jù)語句的各個屬性從數(shù)據(jù)包中取出相應的數(shù)據(jù),獲取數(shù)據(jù)包的各字段解碼。進一步的,順序進入各個子節(jié)點,獲取當前子節(jié)點中的各個語句塊的語句塊信息,本步驟中,B-1 :若語句塊為單一語句塊,則根據(jù)語句塊中的各條語句的編號,順序地從語句表中取得各條語句相應的各個屬性,然后根據(jù)各條語句的各個屬性從數(shù)據(jù)包中取出相應的數(shù)據(jù),獲取數(shù)據(jù)包的各字段解碼;B-2:若語句塊為判斷語句塊,則對該子節(jié)點中存儲的各個語句塊的判斷條件進行判定,第一個滿足條件的語句塊即為當前應該執(zhí)行的語句塊,再根據(jù)此語句塊的類型執(zhí)行B-1 或 B-2 或 B-3 ; B-3:若語句塊為循環(huán)語句塊,則首先執(zhí)行該語句塊中的語句,然后判斷語句塊中存儲的循環(huán)條件是否滿足,若滿足則再次執(zhí)行該語句塊的子節(jié)點中的語句塊中的語句,直到循環(huán)條件不滿足為止。此處所述執(zhí)行語句塊中的語句的含義是,根據(jù)此語句塊的類型執(zhí)行 B-1 或 B-2 或 B-3。每種類型的語句都定義了對應的操作函數(shù),根據(jù)取得的語句的類型,調(diào)用對應的操作函數(shù),根據(jù)語句的各個屬性即可從數(shù)據(jù)包中取得不同長度的數(shù)據(jù),獲取數(shù)據(jù)包的具體字段解碼。與現(xiàn)有技術相比,本發(fā)明的有益效果1、本發(fā)明網(wǎng)絡數(shù)據(jù)包解析方法,首先根據(jù)協(xié)議的協(xié)議結構生成協(xié)議腳本,再根據(jù)協(xié)議腳本生成語句表和邏輯樹,最后利用語句表和邏輯樹對數(shù)據(jù)包進解析。添加新協(xié)議的解碼時只需要添加新協(xié)議的協(xié)議腳本,而協(xié)議腳本的添加不必需要專業(yè)的程序員執(zhí)行,任何了解新協(xié)議的協(xié)議名稱和協(xié)議結構的普通用戶都可完成新協(xié)議的添加,新協(xié)議添加方便,擴展性強。2、通過私有協(xié)議用戶書寫私有協(xié)議的協(xié)議腳本,本發(fā)明方法可以完成私有協(xié)議數(shù)據(jù)包解析。由于協(xié)議腳本中對于私有協(xié)議的協(xié)議結構進行了詳細的說明,在解析私有協(xié)議數(shù)據(jù)包時,只需要根據(jù)語句表中各語句的屬性,從數(shù)據(jù)包中對應的位置獲取數(shù)據(jù),即可完成私有協(xié)議數(shù)據(jù)包解析。
圖
圖
圖
圖
圖
圖
圖
圖
具體實施例方式下面結合試驗例及具體實施方式
對本發(fā)明作進一步的詳細描述。但不應將此理解為本發(fā)明上述主題的范圍僅限于以下的實施例,凡基于本發(fā)明內(nèi)容所實現(xiàn)的技術均屬于本發(fā)明的范圍。參考圖1,本發(fā)明提供的一種網(wǎng)絡數(shù)據(jù)包解析方法,包括步驟SlOO :根據(jù)協(xié)議的協(xié)議結構生成相應的協(xié)議腳本,所述協(xié)議的協(xié)議結構即是指遵循該協(xié)議傳輸?shù)臄?shù)據(jù)包的頭部結構,所述協(xié)議腳本中包括協(xié)議名稱和協(xié)議結構。本步驟中,所述協(xié)議腳本由多條語句組成,一條語句為一行,每條語句由語句類型關鍵字和語句屬性組成。語句類型關鍵字表明了協(xié)議腳本中各語句的類型,協(xié)議腳本中語句的類型包括protocol語句、#語句、comment語句等,如表I所示。不同類型語句的語句屬性不同,例如,字段描述語句(即#語句),語句屬性為數(shù)據(jù)包頭部結構中各字段的屬性,數(shù) 據(jù)包頭部結構中各字段的屬性包括字段名、字段顯示名、字段長度(所述字段長度表明該字段在數(shù)據(jù)包中的長度)和類型。又例如,move語句,語句屬性為移動的字節(jié)數(shù)。協(xié)議腳本中第一行語句為協(xié)議名稱描述語句,然后按照數(shù)據(jù)包頭部結構中各字段的順序,將各字段的屬性載入?yún)f(xié)議腳本中。表I
權利要求
1.一種網(wǎng)絡數(shù)據(jù)包解析方法,其特征在于,包括如下步驟 1)、根據(jù)協(xié)議的協(xié)議結構,生成所述協(xié)議的協(xié)議腳本,并存儲; 2)、根據(jù)協(xié)議腳本生成語句表和邏輯樹; 3)、載入待解析的數(shù)據(jù)包,獲取待解析的數(shù)據(jù)包的協(xié)議名稱,根據(jù)協(xié)議名稱查找相應的協(xié)議腳本,并獲取相應的語句表和邏輯樹,對待解析的數(shù)據(jù)包進行解析,輸出解析結果。
2.根據(jù)權利要求1所述的網(wǎng)絡數(shù)據(jù)包解析方法,其特征在于,所述步驟I)中生成協(xié)議腳本的方法是按照協(xié)議結構中各字段的順序,將各字段的屬性載入?yún)f(xié)議腳本中。
3.根據(jù)權利要求2所述的網(wǎng)絡數(shù)據(jù)包解析方法,其特征在于,所述協(xié)議腳本中的每條語句由語句類型關鍵字和語句屬性組成,所述語句類型關鍵字表明語句的類型,語句屬性為各字段的屬性,所述語句的類型包括字段描述語句、判斷語句和循環(huán)語句,所述判斷語句包括if、elseif、else和endif語句,所述循環(huán)語句包括do和while語句。
4.根據(jù)權利要求1所述的網(wǎng)絡數(shù)據(jù)包解析方法,其特征在于,所述步驟2)中生成語句表的方法是 2-11):根據(jù)協(xié)議腳本中語句的語句類型關鍵字確定語句的類型; 2-12):取得語句中的各個屬性,并存儲在對應的語句類中,然后將該語句類記錄到語句表中,并對語句類進行編號。
5.根據(jù)權利要求4所述的網(wǎng)絡數(shù)據(jù)包解析方法,其特征在于,所述步驟2)中生成邏輯樹的方法是從語句表頭至語句表尾,順序掃描語句表,對語句表中的判斷語句和循環(huán)語句進行分析,確定判斷語句的執(zhí)行順序和對應的執(zhí)行條件,確定循環(huán)語句的循環(huán)體和循環(huán)條件,建立所述邏輯樹。
6.根據(jù)權利要求5所述的網(wǎng)絡數(shù)據(jù)包解析方法,其特征在于,生成邏輯樹包括步驟 2-21):掃描整個語句表,按照單一語句塊、判斷語句塊和循環(huán)語句塊三種語句塊類型,將整個語句表分解為若干個語句塊BI,B2,…,Bn, η為自然數(shù); 2-22):將若干個語句塊BI,Β2,…,Bn存儲到邏輯樹的根節(jié)點下; 2-23):將若干個語句塊BI,Β2,…,Bn中的判斷語句塊和循環(huán)語句塊分解成單一類型的語句塊,然后將每一個單一類型的語句塊存儲到邏輯樹相應的子節(jié)點下,完成邏輯樹建立; 其中,若一段連續(xù)的語句不包括if、elseif、else和endif語句,也不包括do和while語句,則稱這個語句塊為單一語句塊;判斷語句塊為if語句和對應的end if語句,以及之間包含的一段連續(xù)的語句,稱為判斷語句塊;do語句和對應的while語句,以及之間包含的一段連續(xù)語句,稱為循環(huán)語句塊。
7.根據(jù)權利要求6所述的網(wǎng)絡數(shù)據(jù)包解析方法,其特征在于,所述步驟2-23)將若干個語句塊B1,B2,…,Bn中的判斷語句塊和循環(huán)語句塊分解成單一類型的語句塊,然后將每一個單一類型的語句塊存儲到邏輯樹相應的子節(jié)點下,方法是 2-23-1):對于判斷語句塊,則以最外層if語句、elseif語句、else語句和endif語句為分隔符,將該判斷語句塊中所有的語句分解成若干個帶執(zhí)行條件的子語句塊,并將所述若干個帶執(zhí)行條件的語句塊存儲到該判斷語句塊的子節(jié)點下,且將各自的判斷條件也存儲在該子節(jié)點下; 對于循環(huán)語句塊,則將do語句和while語句之間的語句作為一個帶循環(huán)條件的語句塊,并將所述帶循環(huán)條件的語句塊存儲到該循環(huán)語句塊的子節(jié)點下,同時將循環(huán)條件也存儲在該子節(jié)點下; 2-23-2):將經(jīng)過步驟2-23-1)分解后的語句塊中不是單一類型的語句塊,按照單一語句塊、判斷語句塊和循環(huán)語句塊三種類型進行分解,將分解得到的語句塊存儲在分解前相應語句塊的子節(jié)點下; 2-23-3):循環(huán)步驟2-23-1)至2_23_2),直到邏輯樹中的每一個葉子節(jié)點中的語句塊都為單一語句塊。
8.根據(jù)權利要求1所述的網(wǎng)絡數(shù)據(jù)包解析方法,其特征在于,所述步驟3)中,獲取待解析的數(shù)據(jù)包中每層協(xié)議的協(xié)議名稱,查找各協(xié)議的協(xié)議腳本,并獲取所述協(xié)議的語句表和邏輯樹。
9.根據(jù)權利要求8所述的網(wǎng)絡數(shù)據(jù)包解析方法,其特征在于,所述步驟3)中,對待解析的數(shù)據(jù)包進行解析的方法是從邏輯樹的根節(jié)點開始,順序進入各個子節(jié)點,根據(jù)子節(jié)點中的判斷條件和循環(huán)條件,確定語句的執(zhí)行順序,并從語句表中獲取語句的各個屬性,然后根據(jù)語句的各個屬性從數(shù)據(jù)包中取出相應的數(shù)據(jù),獲取數(shù)據(jù)包的各字段解碼。
10.根據(jù)權利要求9所述的網(wǎng)絡數(shù)據(jù)包解析方法,其特征在于,順序進入各個子節(jié)點,獲取當前子節(jié)點中的各個語句塊的語句塊信息,本步驟中, B-1 :若語句塊為單一語句塊,則根據(jù)語句塊中的各條語句的編號,順序地從語句表中取得各條語句相應的各個屬性,然后根據(jù)各條語句的各個屬性從數(shù)據(jù)包中取出相應的數(shù)據(jù),獲取數(shù)據(jù)包的各字段解碼; B-2 :若語句塊為判斷語句塊,則對該子節(jié)點中存儲的各個語句塊的判斷條件進行判定,第一個滿足條件的語句塊即為當前應該執(zhí)行的語句塊,再根據(jù)此語句塊的類型執(zhí)行B-1或 B-2 或 B-3 ; B-3 :若語句塊為循環(huán)語句塊,則首先執(zhí)行該語句塊中的語句,然后判斷語句塊中存儲的循環(huán)條件是否滿足,若滿足則再次執(zhí)行該語句塊的子節(jié)點中語句塊中的語句,直到循環(huán)條件不滿足為止;所述執(zhí)行語句塊中的語句的含義是根據(jù)此語句塊的類型執(zhí)行B-1或B-2或 B-3。
全文摘要
本發(fā)明公開了1、一種網(wǎng)絡數(shù)據(jù)包解析方法,包括步驟1)、根據(jù)協(xié)議的協(xié)議結構,生成所述協(xié)議的協(xié)議腳本,并存儲;2)、根據(jù)協(xié)議腳本生成語句表和邏輯樹;3)、載入待解析的數(shù)據(jù)包,獲取待解析的數(shù)據(jù)包的協(xié)議名稱,根據(jù)協(xié)議名稱查找相應的協(xié)議腳本,并獲取相應的語句表和邏輯樹,對待解析的數(shù)據(jù)包進行解析,輸出解析結果。本發(fā)明方法擴展性強,便于新協(xié)議的添加,且成本低。本發(fā)明方法還可以解析私有協(xié)議的數(shù)據(jù)包。
文檔編號H04L29/06GK103001971SQ201210570198
公開日2013年3月27日 申請日期2012年12月25日 優(yōu)先權日2012年12月25日
發(fā)明者羅鷹, 彭晶 申請人:成都科來軟件有限公司