亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

通過Session進(jìn)行請求的方法

文檔序號:6546400閱讀:249來源:國知局
通過Session進(jìn)行請求的方法
【專利摘要】本發(fā)明公開了通過Session進(jìn)行請求的方法,本發(fā)明主要利用了Session的作用機(jī)制,通過分析Http請求中的Session數(shù)據(jù),進(jìn)而通過關(guān)聯(lián)分析,尋找到屬于同一個會話周期的所有的HTTP請求,旨在解決OSI七層架構(gòu)的應(yīng)用層的審計業(yè)務(wù)的解決方案中訪問業(yè)務(wù)系統(tǒng)的Session數(shù)據(jù)的關(guān)鍵技術(shù)問題;本發(fā)明能夠?qū)?shù)量龐大、錯綜復(fù)雜的諸多HTTP請求,關(guān)聯(lián)梳理成為一個個會話,而每個會話能夠擁有清晰、明確的相關(guān)HTTP請求,從而使得審計系統(tǒng)能夠在宛如數(shù)據(jù)海洋般的眾多HTTP請求中,將各個會話、HTTP請求之間的歸屬、關(guān)聯(lián)、時間順序、請求回應(yīng)等等各種關(guān)系,掌握的清清楚楚、一目了然,從而使得審計系統(tǒng)能夠從各個角度進(jìn)行全面的審計。
【專利說明】 通過Sess i on進(jìn)行請求的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通過Session進(jìn)行請求的方法,屬于數(shù)據(jù)挖掘、數(shù)據(jù)分析【技術(shù)領(lǐng)域】?!颈尘凹夹g(shù)】
[0002]目前,在審計業(yè)務(wù)的功能目標(biāo)中,識別出一個用戶在登錄之后的會話周期具有哪些請求,是一項(xiàng)重要的功能目標(biāo),也是后期審計業(yè)務(wù)功能的基礎(chǔ),因此,通過某種方法獲得屬于同一個會話的HTTP請求,對于審計系統(tǒng)的實(shí)現(xiàn)來說,具有非常重要的價值。通過此項(xiàng)功能,尋找到屬于同一個會話的所有HTTP請求,可以完整地追溯、重現(xiàn)該會話對應(yīng)的各種行為。而這是審計業(yè)務(wù)的一個重點(diǎn)功能訴求。
[0003]經(jīng)過專利檢索,傳統(tǒng)的關(guān)于HTTP請求方面的專利和技術(shù)較多,大多應(yīng)用于特殊的業(yè)務(wù)比如打印、同步、數(shù)據(jù)采集等等,但是因?yàn)榛贖TTP審計的技術(shù)發(fā)展時間較短,尚未能夠檢索到基于HTTP請求關(guān)聯(lián)進(jìn)行專業(yè)分析的相關(guān)專利。
[0004]當(dāng)前安全行業(yè)內(nèi)主流的審計系統(tǒng),都是針對的是單條的HTTP請求的審計,基于HTTP訪問的會話周期進(jìn)行審計的計算機(jī)系統(tǒng)尚處于萌芽狀態(tài),而從大量的HTTP請求中,進(jìn)行關(guān)聯(lián)分析獲得HTTP會話的技術(shù),對于OSI七層架構(gòu)的應(yīng)用層的審計業(yè)務(wù)來說是一項(xiàng)必須的技術(shù),只有解決了該問題,才能夠幫助審計系統(tǒng)獲知HTTP的會話數(shù)據(jù),才能夠獲知某個會話所對應(yīng)的各個HTTP請求,這對于應(yīng)用層的審計系統(tǒng)來說具有重要意義。

【發(fā)明內(nèi)容】

[0005]本發(fā)明的目的在于提供一種能夠克服上述技術(shù)問題的通過Session進(jìn)行請求的方法,本發(fā)明主要利用了 Session的作用機(jī)制,通過分析Http請求中的Session數(shù)據(jù),進(jìn)而通過關(guān)聯(lián)分析,尋找到屬于同一個會話周期的所有的HTTP請求,旨在解決OSI七層架構(gòu)的應(yīng)用層的審計業(yè)務(wù)的解決方案中訪問業(yè)務(wù)系統(tǒng)的Session數(shù)據(jù)的關(guān)鍵技術(shù)問題。
[0006]審計系統(tǒng)會通過一個獨(dú)立的子系統(tǒng),通過網(wǎng)絡(luò)監(jiān)測的方式,獲取到所有客戶端與被審計的業(yè)務(wù)系統(tǒng)之間的HTTP通訊的數(shù)據(jù),同時這些HTTP通訊的數(shù)據(jù)是采用明文的方式進(jìn)行傳輸?shù)?,而不是采用HTTPS的加密傳輸方式。
[0007]本發(fā)明包括以下步驟:
[0008]I)分析所有HTTP請求的數(shù)據(jù),獲得其中最大的HTTP請求的長度MaxReqLen (非負(fù)整數(shù)),獲得HTTP請求的總數(shù)量CntReq (自然數(shù))。HTTP請求的信息包括:HTTP請求發(fā)生的時間(精確到毫秒),HTTP請求的客戶端的IP地址、端口,HTTP請求的服務(wù)端的IP地址、端口,HTTP請求的明文數(shù)據(jù)記錄。
[0009]2)建立存儲HTTP請求的數(shù)組ArrayHttp ;數(shù)組的容量設(shè)定為CntReq,以便能夠保存所有的HTTP請求的記錄。數(shù)組的開始下標(biāo)為0,結(jié)束下標(biāo)為CntReq-Ι。數(shù)組的每個項(xiàng)目采用結(jié)構(gòu)類型,包含以下成員變量:a.sTime,精確到毫秒的時間,采用“2013-11-2509:34:59.012”格式進(jìn)行表示;b.sClientIP,客戶端IP地址,采用“192.168.1.23”字符串格式進(jìn)行表示;c.nClientPort,客戶端端口,采用整數(shù)類型表示;d.sServerIP,服務(wù)端IP地址,采用“192.168.1.23”字符串格式進(jìn)行表示;e.nServerPort,服務(wù)端端口,采用整數(shù)類型表示;f.sHttpReq, HTTP請求的明文數(shù)據(jù),采用長度為MaxReqLen+Ι的字符串類型;g.nFlag,處理完成標(biāo)志,整數(shù)類型,等于O表示未處理,不等于O表示已經(jīng)處理;h.sSessionID,存儲本HTTP請求解析出來的SessionID(或者說JSESSIONID),初始化為空字符串。
[0010]3)將所有的HTTP請求的數(shù)據(jù),按照HTTP請求發(fā)生的時間從小到大(從最早發(fā)生到最后發(fā)生)進(jìn)行排序,并按照順序?qū)TTP請求的信息復(fù)制到數(shù)組ArrayHttp的相應(yīng)項(xiàng)目中,并將成員變量nFlag賦值為O。
[0011]4)預(yù)設(shè)一個長度變量LenSessionID (整數(shù)類型),預(yù)設(shè)一個長度大小,以使得該長度變量的值能夠大于任何一個HTTP請求的JSESSIONID的值的字符串長度。
[0012]5)建立存儲Session數(shù)據(jù)的數(shù)組ArraySession ;數(shù)組的容量設(shè)定為CntReq,數(shù)組的開始下標(biāo)為0,結(jié)束下標(biāo)為CntReq-Ι。數(shù)組的每個項(xiàng)目采用結(jié)構(gòu)類型,包含以下成員變量:
[0013]a) sSessionID,米用長度為LenSessionID的字符串類型;
[0014]b)nlndexStt,當(dāng)前會話開始下標(biāo),采用整數(shù)類型;
[0015]c) nlndexEnd,當(dāng)前會話結(jié)束下標(biāo),采用整數(shù)類型。
[0016]6)初始化數(shù)組ArraySession,將數(shù)組的每個項(xiàng)目進(jìn)行一下初始化:a.清空sSessionID成員變量,賦值為空字符串””;b.nlndexStt賦值為-1 ;c.nlndexEnd賦值為-1。
[0017]7)設(shè)定ArraySession數(shù)組的遍歷游標(biāo)變量Cursorlndex,用來當(dāng)前循環(huán)所在的數(shù)組下標(biāo),并初始化為-1。
[0018]8)通過循環(huán)方式,進(jìn)行遍歷:
[0019]a)如果Cursorlndex大于等于O并且小于等于CntReq-Ι,將CursorHttp對應(yīng)的nFlag設(shè)置為I (已經(jīng)處理)。
[0020]b)將 Cursorlndex 遞增(Cursorlndex = Cursorlndex+l),然后判別Cursorlndex,是否小于O或者大于(CntReq-1),如果符合任何一個判斷,中斷當(dāng)前循環(huán),進(jìn)入步驟9。
[0021]c)選取 ArraySession 數(shù)組的下標(biāo)為 Cursorlndex 的項(xiàng)目 CursorHttp。
[0022]d)判別CursorHttp的nFlag,如果不為O,跳到循環(huán)開始(步驟8的步驟a),繼續(xù)。
[0023]e)分析CursorHttp的sHttpReq,在該字符串中,尋找字符串” \xOD\xOA\xOD\xOA”(對應(yīng)四個字符,依次的ASCII碼值為13、10、13、10),如果找不到,跳到循環(huán)開始(步驟8的步驟a),繼續(xù)。
[0024]f)找到之后,相應(yīng)的位置通過字符指針變量pcHeadEnd保存,并進(jìn)行字符串截斷處理(*pcHeadEnd = ‘\0’);
[0025]g)通過字符串匹配函數(shù),在sHttpReq中,忽略大小寫尋找字符串” JSESSIONID”,如果尋找不到,跳到循環(huán)開始(步驟8的步驟a),繼續(xù)。
[0026]h)找到之后,相應(yīng)的位置通過字符指針變量pcJSess保存,然后將pcJSess正向移動 10 個字符(pcJSess = pcJSess+10)。
[0027]i)跳過所有的空白字符(while (isspace OpcJSess)) {pcJSess++ ;})。
[0028]j)如果pcJSess所指的字符不為’=’,跳到循環(huán)開始(步驟8的步驟a),繼續(xù)。否則將pcJSess正向移動I個字符(pcJSess = pcJSess+1)。
[0029]k)跳過所有的空白字符(while (isspace (*pcJSess)) {pcJSess++ ;})?
[0030] I)設(shè)定整數(shù)變量nLen = 0,然后獲取從pcJSess所指向的位置開始,連續(xù)的數(shù)字或者’ a’~’ f ’、’ A’~’ F’的字符的數(shù)量,并將數(shù)量賦值到nLen ;
[0031]m)如果nLen小于等于0(nLen〈 = O),跳到循環(huán)開始(步驟8的步驟a),繼續(xù)。
[0032]η)設(shè)定臨時變量sSess (字符串變量,長度為LenSessionID),并初始化為空字符串。然后通過定長拷貝的方式,將從pcJSess開始nLen指定的長度的內(nèi)容復(fù)制給sSess(strncpy (sSess,pcJSess, nLen))。
[0033]ο)將 sSess 拷貝給 CursorHttp 的成員變量 sSessionID (strcpy (CursorHttp.sSessionID,sSess));
[0034]p)獲取 CursorHttp 在數(shù)組 ArrayHttp 中對應(yīng)的下標(biāo) nlndexHttp ;
[0035]q)遍歷數(shù)組ArraySession,如果其中有某個項(xiàng)目CursorSession對應(yīng)的sSessionID 的值與 sSess 相同(O == strcmp (sSess,sSessionID)):
[0036]1.如果 CursorSession 的成員變量 nlndexStt 小于 0,將 nlndexStt 賦值為
[0037]nlndexHttp(if(CursorSession.nIndexStt<0) {CursorSession.nlndexStt =nlndexHttp ;});
[0038]i1.如果 CursorSession 的成員變量 nlndexEnd 小于 nlndexHttp,將 nlndexEnd賦值為 nlndexHttp
[0039](if(CursorSession.nIndexEnd<nIndexHttp) {CursorSession.nlndexStt =nlndexHttp ;});
[0040]r)如果在遍歷數(shù)組ArraySession之后,都找不到符合條件(O ==strcmp (sSess,sSessionID))的記錄,那么從數(shù)組中找到第一條sSessionID為空字符串(O==strlen (CursorSession.sSessionID))的記錄 CursorSession:
[0041]1.將 sSess 復(fù)制給 sSessionID (strcpy (CursorSession.sSessionID,sSess));
[0042]i1.將 nlndexHttp 賦值給 nlndexStt 和 nlndexEnd (CursorSession.nlndexStt =nlndexHttp ;CursorSession.nlndexEnd = nlndexHttp ;);
[0043]s)跳到循環(huán)開始(步驟8的步驟a),繼續(xù)。
[0044]9)在上述循環(huán)結(jié)束之后,在ArraySession中,就已經(jīng)匯總得到了所有根據(jù)HTTP請求的JSESSIONID進(jìn)行關(guān)聯(lián)的分析結(jié)果。ArraySession數(shù)組中,每一條非空記錄(成員變量sSessionID不是空字符串)CursorFilled,都描述了一組Session (—個會話)的相關(guān)匯總信息:
[0045]a) sSessionID 是這個會話的 SessionID (或者說 JSESSIONID);
[0046]b) nlndexStt表示了這個會話對應(yīng)的第一個HTTP請求在ArrayHttp中對應(yīng)的記錄的下標(biāo);
[0047]c) nlndexEnd表示了這個會話對應(yīng)的最后一個HTTP請求在ArrayHttp中對應(yīng)的記錄的下標(biāo);
[0048]d)而在nlndexStt、nlndexEnd兩個下標(biāo)之間,ArrayHttp數(shù)組中,其成員變量sSessionID 與 CursorFilled 的成員變量 sSessionID 相同的項(xiàng)目 CursorHttpBelong(O ==strcmp (CursorFilled.sSessionID, CursorHttpBelong.sSessionID),都是屬于這個會話的HTTP請求。
[0049]本發(fā)明的優(yōu)點(diǎn)是對于基于應(yīng)用層的HTTP協(xié)議進(jìn)行主要交互方式的B/S系統(tǒng)的審計來說具有重要意義,能夠?qū)?shù)量龐大、錯綜復(fù)雜的諸多HTTP請求,關(guān)聯(lián)梳理成為一個個會話,而每個會話能夠擁有清晰、明確的相關(guān)HTTP請求,從而使得審計系統(tǒng)能夠在宛如數(shù)據(jù)海洋般的眾多HTTP請求中,將各個會話、HTTP請求之間的歸屬、關(guān)聯(lián)、時間順序、請求回應(yīng)等等各種關(guān)系,掌握的清清楚楚、一目了然,從而使得審計系統(tǒng)能夠從各個角度進(jìn)行全面的審計。
【具體實(shí)施方式】
[0050]下面對本發(fā)明進(jìn)行詳細(xì)描述。本發(fā)明所述方法包括以下具體步驟:
[0051]I)分析所有HTTP請求的數(shù)據(jù),獲得其中最大的HTTP請求的長度MaxReqLen (非負(fù)整數(shù)),獲得HTTP請求的總數(shù)量CntReq (自然數(shù))。HTTP請求的信息包括:HTTP請求發(fā)生的時間(精確到毫秒),HTTP請求的客戶端的IP地址、端口,HTTP請求的服務(wù)端的IP地址、端口,HTTP請求的明文數(shù)據(jù)記錄。
[0052]2)建立存儲HTTP請求的數(shù)組ArrayHttp ;數(shù)組的容量設(shè)定為CntReq,以便能夠保存所有的HTTP請求的記錄。數(shù)組的開始下標(biāo)為0,結(jié)束下標(biāo)為CntReq-Ι。數(shù)組的每個項(xiàng)目采用結(jié)構(gòu)類型,包含以下成員變量:a.sTime,精確到毫秒的時間,采用”2013-11-2509:34:59.012” 格式進(jìn)行表示;b.sClientIP,客戶端 IP 地址,采用” 192.168.1.23”字符串格式進(jìn)行表示;c.nClientPort,客戶端端口,采用整數(shù)類型表示;d.sServerIP,服務(wù)端IP地址,采用” 192.168.1.23”字符串格式進(jìn)行表示;e.nServerPort,服務(wù)端端口,采用整數(shù)類型表示;f.sHttpReq, HTTP請求的明文數(shù)據(jù),采用長度為MaxReqLen+Ι的字符串類型;g.nFlag,處理完成標(biāo)志,整數(shù)類型,等于O表示未處理,不等于O表示已經(jīng)處理;h.sSessionID,存儲本HTTP請求解析出來的SessionID (或者說JSESSIONID),初始化為空字符串。
[0053]3)將所有的HTTP請求的數(shù)據(jù),按照HTTP請求發(fā)生的時間從小到大(從最早發(fā)生到最后發(fā)生)進(jìn)行排序,并按照順序?qū)TTP請求的信息復(fù)制到數(shù)組ArrayHttp的相應(yīng)項(xiàng)目中,并將成員變量nFlag賦值為O。
[0054]4)預(yù)設(shè)一個長度變量LenSessionID (整數(shù)類型),預(yù)設(shè)一個長度大小,以使得該長度變量的值能夠大于任何一個HTTP請求的JSESSIONID的值的字符串長度。
[0055]5)建立存儲Session數(shù)據(jù)的數(shù)組ArraySession ;數(shù)組的容量設(shè)定為CntReq,數(shù)組的開始下標(biāo)為0,結(jié)束下標(biāo)為CntReq-Ι。數(shù)組的每個項(xiàng)目采用結(jié)構(gòu)類型,包含以下成員變量:
[0056]d) sSessionID,米用長度為LenSessionID的字符串類型;
[0057]e)nlndexStt,當(dāng)前會話開始下標(biāo),采用整數(shù)類型;
[0058]f)nlndexEnd,當(dāng)前會話結(jié)束下標(biāo),采用整數(shù)類型。
[0059]6)初始化數(shù)組ArraySession,將數(shù)組的每個項(xiàng)目進(jìn)行一下初始化:a.清空sSessionID成員變量,賦值為空字符串””;b.nlndexStt賦值為-1 ;c.nlndexEnd賦值為-1。
[0060]7)設(shè)定ArraySession數(shù)組的遍歷游標(biāo)變量Cursorlndex,用來當(dāng)前循環(huán)所在的數(shù)組下標(biāo),并初始化為-1。[0061]8)通過循環(huán)方式,進(jìn)行遍歷:
[0062]a)如果Cursorlndex大于等于O并且小于等于CntReq-lJ# CursorHttp對應(yīng)的nFlag設(shè)置為I (已經(jīng)處理)。
[0063]b)將 Cursorlndex 遞增(Cursorlndex = Cursorlndex+l),然后判別Cursorlndex,是否小于O或者大于(CntReq-1),如果符合任何一個判斷,中斷當(dāng)前循環(huán),進(jìn)入步驟9。
[0064]c)選取 ArraySession 數(shù)組的下標(biāo)為 Cursorlndex 的項(xiàng)目 CursorHttp。
[0065]d)判別CursorHttp的nFlag,如果不為0,跳到循環(huán)開始(步驟8的步驟a),繼續(xù)。
[0066]e)分析CursorHttp的sHttpReq,在該字符串中,尋找字符串” \x0D\x0A\x0D\χΟΑ”(對應(yīng)四個字符,依次的ASCII碼值為13、10、13、10),如果找不到,跳到循環(huán)開始(步驟8的步驟a),繼續(xù)。
[0067]f)找到之后,相應(yīng)的位置通過字符指針變量pcHeadEnd保存,并進(jìn)行字符串截斷處理(^pcHeadEnd = ‘\0’);
[0068]g)通過字符串匹配函數(shù),在sHttpReq中,忽略大小寫尋找字符串” JSESSIONID”,如果尋找不到,跳到循環(huán)開始(步驟8的步驟a),繼續(xù)。
[0069]h)找到之后,相應(yīng)的位置通過字符指針變量pcJSess保存,然后將pcJSess正向移動 10 個字符(pcJSess = pcJSess+10)。
[0070]i)跳過所有的空白字符(while (isspace (^pcJSess)) {pcJSess++ ;})?
[0071]j)如果pcJSess所指的字符不為’=’,跳到循環(huán)開始(步驟8的步驟a),繼續(xù)。否則將pcJSess正向移動I個字符(pcJSess = pcJSess+1)。
[0072]k)跳過所有的空白字符(while (isspace (*pcJSess)) {pcJSess++ ;})?
[0073]I)設(shè)定整數(shù)變量nLen = 0,然后獲取從pcJSess所指向的位置開始,連續(xù)的數(shù)字或者’ a’~’ f ’、’ A’~’ F’的字符的數(shù)量,并將數(shù)量賦值到nLen ;
[0074]m)如果nLen小于等于O (nLen〈 = 0),跳到循環(huán)開始(步驟8的步驟a),繼續(xù)。
[0075]η)設(shè)定臨時變量sSess (字符串變量,長度為LenSessionID),并初始化為空字符串。然后通過定長拷貝的方式,將從pcJSess開始nLen指定的長度的內(nèi)容復(fù)制給sSess(strncpy (sSess,pcJSess, nLen))。
[0076]ο)將 sSess 拷貝給 CursorHttp 的成員變量 sSessionID (strcpy (CursorHttp.sSessionID,sSess));
[0077]p)獲取 CursorHttp 在數(shù)組 ArrayHttp 中對應(yīng)的下標(biāo) nlndexHttp ;
[0078]q)遍歷數(shù)組ArraySession,如果其中有某個項(xiàng)目CursorSession對應(yīng)的sSessionID 的值與 sSess 相同(O == strcmp (sSess,sSessionID)): [0079]1.如果 CursorSession 的成員變量 nlndexStt 小于 0,將 nlndexStt 賦值為 nlndexHttp (if (CursorSession.nIndexStt<0) {CursorSession.nlndexStt =nlndexHttp ;});
[0080]i1.如果CursorSession 的成員變量nlndexEnd 小于nlndexHttp,將nlndexEnd賦值為 nlndexHttp (if (CursorSession.nIndexEnd<nIndexHttp) {CursorSession.nlndexStt=nlndexHttp ;});
[0081]r)如果在遍歷數(shù)組ArraySession之后,都找不到符合條件(O ==strcmp (sSess,sSessionID))的記錄,那么從數(shù)組中找到第一條sSessionID為空字符串(O==strlen (CursorSession.sSessionID))的記錄 CursorSession:
[0082]1.將 sSess 復(fù)制給 sSessionID (strcpy (CursorSession.sSessionID,sSess));
[0083]i1.將 nlndexHttp 賦值給 nlndexStt 和 nlndexEnd (CursorSession.nlndexStt =nlndexHttp ;CursorSession.nlndexEnd = nlndexHttp ;);
[0084]s)跳到循環(huán)開始(步驟8的步驟a),繼續(xù)。
[0085]9)在上述循環(huán)結(jié)束之后,在ArraySession中,就已經(jīng)匯總得到了所有根據(jù)HTTP請求的JSESSIONID進(jìn)行關(guān)聯(lián)的分析結(jié)果。AiraySession數(shù)組中,每一條非空記錄(成員變量sSessionID不是空字符串)CursorFilled,都描述了一組Session (—個會話)的相關(guān)匯總信息:a.sSessionID是這個會話的SessionID(或者說JSESSIONID);b.nlndexStt表示了這個會話對應(yīng)的第一個HTTP請求在ArrayHttp中對應(yīng)的記錄的下標(biāo);c.nlndexEnd表示了這個會話對應(yīng)的最后一個HTTP請求在ArrayHttp中對應(yīng)的記錄的下標(biāo);d.而在nlndexStt、nlndexEnd兩個下標(biāo)之間,ArrayHttp數(shù)組中,其成員變量sSessionID 與 CursorFilled 的成員變量 sSessionID 相同的項(xiàng)目 CursorHttpBelong(O ==strcmp (CursorFilled.sSessionID, CursorHttpBelong.sSessionID),都是屬于這個會話的HTTP請求。
[0086]以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明公開的范圍內(nèi),能夠輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。
【權(quán)利要求】
1.通過Session進(jìn)行請求的方法,其特征在于,包括以下步驟: 1)分析所有HTTP請求的數(shù)據(jù),獲得其中最大的HTTP請求的長度MaxReqLen(非負(fù)整數(shù)),獲得HTTP請求的總數(shù)量CntReq(自然數(shù));HTTP請求的信息包括:HTTP請求發(fā)生的時間(精確到毫秒),HTTP請求的客戶端的IP地址、端口,HTTP請求的服務(wù)端的IP地址、端口,HTTP請求的明文數(shù)據(jù)記錄; 2)建立存儲HTTP請求的數(shù)組ArrayHttp;數(shù)組的容量設(shè)定為CntReq,以便能夠保存所有的HTTP請求的記錄;數(shù)組的開始下標(biāo)為0,結(jié)束下標(biāo)為CntReq-1 ;數(shù)組的每個項(xiàng)目采用結(jié)構(gòu)類型,包含以下成員變量:a.sTime,精確到毫秒的時間,采用“2013-11-2509:34:59.012”格式進(jìn)行表示;b.sClientIP,客戶端IP地址,采用“192.168.1.23”字符串格式進(jìn)行表示;c.nClientPort,客戶端端口,采用整數(shù)類型表示;d.sServerIP,服務(wù)端IP地址,采用“192.168.1.23”字符串格式進(jìn)行表示;e.nServerPort,服務(wù)端端口,采用整數(shù)類型表示;f.sHttpReq, HTTP請求的明文數(shù)據(jù),采用長度為MaxReqLen+1的字符串類型;g.nFlag,處理完成標(biāo)志,整數(shù)類型,等于O表示未處理,不等于O表示已經(jīng)處理;h.sSessionID,存儲本HTTP請求解析出來的SessionID(或者說JSESS10NID),初始化為空字符串; 3)將所有的HTTP請求的數(shù)據(jù),按照HTTP請求發(fā)生的時間從小到大(從最早發(fā)生到最后發(fā)生)進(jìn)行排序,并按照順序?qū)TTP請求的信息復(fù)制到數(shù)組ArrayHttp的相應(yīng)項(xiàng)目中,并將成員變量nFlag賦值為O ; 4)預(yù)設(shè)一個長度變量LenSessionID(整數(shù)類型),預(yù)設(shè)一個長度大小,以使得該長度變量的值能夠大于任何一個HTTP請求的JSESS10NID的值的字符串長度; 5)建立存儲Session數(shù)據(jù)的數(shù)組ArraySession;數(shù)組的容量設(shè)定為CntReq,數(shù)組的開始下標(biāo)為0,結(jié)束下標(biāo)為CntReq-1 ;數(shù)組的每個項(xiàng)目采用結(jié)構(gòu)類型,包含以下成員變量: a)sSessionID,米用長度為LenSessionID的字符串類型; b)nIndexStt,當(dāng)前會話開始下標(biāo),采用整數(shù)類型; c)nIndexEnd,當(dāng)前會話結(jié)束下標(biāo),采用整數(shù)類型; 6)初始化數(shù)組ArraySession,將數(shù)組的每個項(xiàng)目進(jìn)行一下初始化:a.清空sSessionID成員變量,賦值為空字符串””;b.nlndexStt賦值為-1 ;c.nlndexEnd賦值為-1 ; 7)設(shè)定ArraySession數(shù)組的遍歷游標(biāo)變量CursorIndex,用來當(dāng)前循環(huán)所在的數(shù)組下標(biāo),并初始化為_1 ; 8)通過循環(huán)方式,進(jìn)行遍歷: a)如果CursorIndex大于等于O并且小于等于CntReq-Ι,將CursorHttp對應(yīng)的nFlag設(shè)置為I (已經(jīng)處理); b)將CursorIndex 遞增(Cursorlndex = Cursorlndex+l),然后判別 CursorIndex,是否小于O或者大于(CntReq-1),如果符合任何一個判斷,中斷當(dāng)前循環(huán),進(jìn)入步驟9 ; c)選取ArraySession 數(shù)組的下標(biāo)為 CursorIndex 的項(xiàng)目 CursorHttp ; d)判別CursorHttp的nFlag,如果不為O,跳到循環(huán)開始(步驟8的步驟a),繼續(xù); e)分析CursorHttp的sHttpReq,在該字符串中,尋找字符串”\xOD\xOA\xOD\xOA”(對應(yīng)四個字符,依次的ASCII碼值為13、10、13、10),如果找不到,跳到循環(huán)開始(步驟8的步驟a),繼續(xù); f)找到之后,相應(yīng)的位置通過字符指針變量pcHeadEnd保存,并進(jìn)行字符串截斷處理(^pcHeadEnd = ‘\0’ ); g)通過字符串匹配函數(shù),在sHttpReq中,忽略大小寫尋找字符串”JSESSIONID”,如果尋找不到,跳到循環(huán)開始(步驟8的步驟a),繼續(xù); h)找到之后,相應(yīng)的位置通過字符指針變量pcJSess保存,然后將pcJSess正向移動.10 個字符(pcJSess = pcJSess+10); i)跳過所有的空白字符(while(isspace (^pcJSess)) {pcJSess++;}); j)如果pcJSess所指的字符不為’=’,跳到循環(huán)開始(步驟8的步驟a),繼續(xù)。否則將 pcJSess 正向移動 I 個字符(pcJSess = pcJSess+1); k)跳過所有的空白字符(while (isspace (^pcJSess)) {pcJSess++;}); I)設(shè)定整數(shù)變量nLen = 0,然后獲取從pcJSess所指向的位置開始,連續(xù)的數(shù)字或者’ a’~’ f ’、’ A’~’ F’的字符的數(shù)量,并將數(shù)量賦值到nLen ; m)如果nLen小于等于O (nLen〈 = O),跳到循環(huán)開始(步驟8的步驟a),繼續(xù);η)設(shè)定臨時變量sSess (字符串變量,長度為LenSessionID),并初始化為空字符串;然后通過定長拷貝的方式,將從pcJSess開始nLen指定的長度的內(nèi)容復(fù)制給sSess (strncpy(sSess,pcJSess,nLen)); ο)將 sSess 拷貝給 CursorHttp 的成員變量 sSessionID (strcpy (CursorHttp.sSessionID,sSess)); P)獲取CursorHttp在 數(shù)組ArrayHttp中對應(yīng)的下標(biāo)nlndexHttp ;q)遍歷數(shù)組ArraySession,如果其中有某個項(xiàng)目CursorSession對應(yīng)的sSessionID的值與 sSess 相同(O == strcmp (sSess,sSessionID)):i.如果CursorSession的成員變量nlndexStt小于0,將nlndexStt賦值為 nlndexHttp (if (CursorSession.nIndexStt〈O) {CursorSession.nlndexStt =nlndexHttp ;}); i1.如果CursorSession 的成員變量 nlndexEnd 小于 nlndexHttp,將 nlndexEnd 賦值為 nlndexHttp (if(CursorSession.nIndexEnd<nIndexHttp) {CursorSession.nlndexStt =nlndexHttp ;}); r)如果在遍歷數(shù)組ArraySession之后,都找不到符合條件(O ==strcmp (sSess,sSessionID))的記錄,那么從數(shù)組中找到第一條sSessionID為空字符串(O==strlen (CursorSession.sSessionID))的記錄 CursorSession: . i.將sSess 復(fù)制給 sSessionID (strcpy (CursorSession.sSessionID, sSess)); i1.將nlndexHttp 賦值給 nlndexStt 和 nlndexEnd (CursorSession.nlndexStt =nlndexHttp ;CursorSession.nlndexEnd = nlndexHttp ;); s)跳到循環(huán)開始(步驟8的步驟a),繼續(xù); 9)在上述循環(huán)結(jié)束之后,在ArraySession中,就已經(jīng)匯總得到了所有根據(jù)HTTP請求的JSESSIONID進(jìn)行關(guān)聯(lián)的分析結(jié)果,ArraySession數(shù)組中,每一條非空記錄(成員變量sSessionID不是空字符串)CursorFilled,都描述了一組Session (—個會話)的相關(guān)匯總信息: a)sSessionID 是這個會話的 SessionID (或者說 JSESSIONID);b)nlndexStt表示了這個會話對應(yīng)的第一個HTTP請求在ArrayHttp中對應(yīng)的記錄的下標(biāo); c)nlndexEnd表示了這個會話對應(yīng)的最后一個HTTP請求在ArrayHttp中對應(yīng)的記錄的下標(biāo); d)而在nlndexStt、nlndexEnd兩個下標(biāo)之間,ArrayHttp數(shù)組中,其成員變量sSessionID 與 CursorFilled 的成員變量 sSessionID 相同的項(xiàng)目 CursorHttpBelong(O ==strcmp (CursorFilled.sSessionID, CursorHttpBelong.sSessionID),都是屬于這個會話的HTTP請求。
【文檔編號】G06F17/30GK103973797SQ201410200631
【公開日】2014年8月6日 申請日期:2014年5月13日 優(yōu)先權(quán)日:2014年5月13日
【發(fā)明者】李超, 張琦, 劉志宇, 李秋香, 徐曉軍, 吳薇, 印曉天 申請人:公安部第一研究所, 杭州安恒信息技術(shù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1