[發明專利]解析和還原TNS協議314版本中SQL命令和參數的方法有效
| 申請號: | 201710091069.3 | 申請日: | 2017-02-20 |
| 公開(公告)號: | CN107038208B | 公開(公告)日: | 2020-04-28 |
| 發明(設計)人: | 黎琳;常曉林;李振寰;韓臻;劉吉強 | 申請(專利權)人: | 北京交通大學 |
| 主分類號: | G06F16/28 | 分類號: | G06F16/28;G06F9/44;H04L29/06 |
| 代理公司: | 北京市商泰律師事務所 11255 | 代理人: | 黃曉軍 |
| 地址: | 100044 北*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 解析 還原 tns 協議 314 版本 sql 命令 參數 方法 | ||
1.一種解析和還原TNS協議314版本中SQL命令和參數的方法,其特征在于,該方法包括:
旁路獲取網絡中客戶端向Oracle數據庫服務器發送的TNS協議314版本的Data類型數據包,對所述TNS協議314版本的Data類型數據包進行過濾,獲取所述TNS協議314版本的Data類型數據包的負載部分數據;
根據所述TNS協議314版本的Data類型數據包的負載部分中的第一和第二個字節的值,通過解析處理獲取所述TNS協議314版本的Data類型數據包中的0x035e命令位置,根據所述0x035e命令位置通過TNS協議SQL語句解析處理流程得到所述客戶端的SQL命令和包含參數的SQL語句;
所述的根據所述TNS協議314版本的Data類型數據包的負載部分中的第一和第二個字節的值,通過解析處理獲取所述TNS協議314版本的Data類型數據包中的0x035e命令位置,包括:
步驟1,分別讀取TNS協議數據包Data負載的第一個和第二個字節值并將其保存到firstByte和secondByte中;
步驟2,若firstByte值為0x03,secondByte值為0x5e,則執行步驟6,否則執行步驟3;
步驟3,若firstByte值為0x11,secondByte值為0x69,則執行步驟4,否則結束;
步驟4,賦值變量skip為8,若firstByte+skip值為0x03,secondByte+skip值為0x5e,則執行步驟6,否則執行步驟5;
步驟5,將skip值加2,并判斷firstByte+skip和secondByte+skip值,若firstByte+skip值為0x03,secondByte+skip值為0x5e,則執行步驟6,否則結束;
步驟6,指針p指向命令0x035e的子命令0x5e,并進行模塊一解析處理流程;
所述模塊一解析處理流程,包括:
步驟11,獲取指針p+14指向字節的值并賦給變量type,若type的值為0x04,則該數據包sql語句為select語句,執行步驟12;若type的值為0x00,則該數據包sql語句為CREATE、DROP、ALTER、INSERT、UPDATE或DELETE命令語句,執行步驟13;
步驟12,賦值給變量offset為43,并進行模塊二解析處理;
步驟13,賦值給變量offset為37,并進行模塊三解析處理;
所述模塊二解析處理流程包括:
步驟21,若p+offset值為0x00,則執行步驟22,否則進行模塊三解析處理;
步驟22,將指針p+offset指向的字節值賦值給變量sqlcmdlen;
步驟23,指針sqlcmdstart=p+offset+1,指針sqlcmdend=p+offset+1+sqlcmdlen;
步驟24,讀取sqlcmdstart開始到sqlcmdend結束的字符串,將字符串拷貝出來即為完整的sql命令;
所述模塊三解析處理流程包括:
判斷位置[p+offset+1]字節的值是否為0xfe,并獲取返回值result,若result值為true,則本數據包傳送的sql語句長度超過了255個字節,選擇模塊四解析處理,若result值為false,則本數據包傳送的sql語句長度不超過255字節且包含參數,選擇模塊五解析處理流程;
所述模塊四解析處理流程包括:
步驟41,指針pos=p+offset+3,賦值變量len=0x40,i=0;
步驟42,讀取第pos位到第pos+len位字節為buffer(i),pos=pos+len+1;將i的值加1;
步驟43,若指針pos指向的字節值為0x40,則pos=pos+1,并重復執行步驟42,否則執行步驟44;
步驟44,將指針pos指向的字節值賦值給變量len,讀取第pos+1位到第pos+1+len位字節為最后一個sql語句塊bufferfinal,并組合buffer=sum(buffer(i))+bufferfinal,輸出長度大于255個字節的完整sql命令buffer,指針sqlcmdend=pos+1+len;
步驟45,若指針sqlcmdend+18指向的字節為Data負載最后一個字節,則結束,否則,定義指針paranum為sqlcmdend+19,賦值給變量paracount為0;
步驟46,若指針paranum和paranum+1指向的字節值為0x01,0x03,則執行步驟47,否則執行步驟48;
步驟47,將paracount加1,賦值變量skip為17,paranum=paranum+skip,并重復執行步驟46;
步驟48,輸出變量paracount的值;
步驟49,若指針paranum指向的字節值為0x07,則執行步驟10,否則結束;
步驟410,將指針paranum+1指向的字節值賦給變量paralen,指針parastart=paranum+2,賦值給變量j為1;
步驟411,指針paraend=parastart+paralen;
步驟412,拷貝parastart開始到paraend結束的字符串為parameter(j),并輸出,將j的值加1;
步驟413,若j的值等于paracount,則結束,否則執行步驟414;
步驟414,將指針paraend+1指向字節的值賦給變量paralen,指針parastart=paraend+2,并重復執行步驟411;
所述模塊五解析處理流程包括:
步驟51,將[p+offset+1]字節的值賦給變量sqlcmdlen;
步驟52,記指針Sqlcmdstart=p+offset+2,指針Sqlcmdend=p+offset+2+sqlcmdlen;
步驟53,拷貝Sqlcmdstart開始到Sqlcmdend結束的字符串為完整的sql語句,并輸出;
步驟54,sql語句結束后跳過17個字節為參數部分,定義指針paranum為sqlcmdend+18,賦值給變量paracount為0;
步驟55,若指針paranum和paranum+1指向的字節值為0x01,0x03,則執行步驟56,否則執行步驟57;
步驟56,將paracount加1,賦值變量skip為17,paranum=paranum+skip,并重復執行步驟55;
步驟57,輸出變量paracount的值;
步驟58,若指針paranum指向的字節值為0x07,則執行步驟59,否則結束;
步驟59,將指針paranum+1指向的字節值賦給變量paralen,指針parastart=paranum+2,賦值給變量j為1;
步驟510,指針paraend=parastart+paralen;
步驟511,拷貝parastart開始到paraend結束的字符串為parameter(j),并輸出,將j的值加1;
步驟512,若j的值等于paracount,則結束,否則執行步驟513;
步驟513,將指針paraend+1指向字節的值賦給變量paralen,指針parastart=paraend+2,并重復執行步驟510。
2.根據權利要求1所述的方法,其特征在于,所述的對TNS協議314版本的Data類型數據包進行過濾,獲取所述TNS協議314版本的Data類型數據包的負載部分數據,包括:
提取TNS協議314版本數據包的包頭部分,當所述包頭部分的第5個字節值為0x06,則確定所述包頭部分為Data類型數據包,該Data類型數據包的數據部分的前4個字節為Dataflag,且Data flag的值為0x00,數據部分的前4個字節之后的字節為Data負載部分。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京交通大學,未經北京交通大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201710091069.3/1.html,轉載請聲明來源鉆瓜專利網。





