通过Session进行请求的方法技术

技术编号:10304637 阅读:136 留言:0更新日期:2014-08-08 01:18
本发明专利技术公开了通过Session进行请求的方法,本发明专利技术主要利用了Session的作用机制,通过分析Http请求中的Session数据,进而通过关联分析,寻找到属于同一个会话周期的所有的HTTP请求,旨在解决OSI七层架构的应用层的审计业务的解决方案中访问业务系统的Session数据的关键技术问题;本发明专利技术能够将数量庞大、错综复杂的诸多HTTP请求,关联梳理成为一个个会话,而每个会话能够拥有清晰、明确的相关HTTP请求,从而使得审计系统能够在宛如数据海洋般的众多HTTP请求中,将各个会话、HTTP请求之间的归属、关联、时间顺序、请求回应等等各种关系,掌握的清清楚楚、一目了然,从而使得审计系统能够从各个角度进行全面的审计。

【技术实现步骤摘要】
通过Session进行请求的方法
本专利技术涉及通过Session进行请求的方法,属于数据挖掘、数据分析

技术介绍
目前,在审计业务的功能目标中,识别出一个用户在登录之后的会话周期具有哪些请求,是一项重要的功能目标,也是后期审计业务功能的基础,因此,通过某种方法获得属于同一个会话的HTTP请求,对于审计系统的实现来说,具有非常重要的价值。通过此项功能,寻找到属于同一个会话的所有HTTP请求,可以完整地追溯、重现该会话对应的各种行为。而这是审计业务的一个重点功能诉求。经过专利检索,传统的关于HTTP请求方面的专利和技术较多,大多应用于特殊的业务比如打印、同步、数据采集等等,但是因为基于HTTP审计的技术发展时间较短,尚未能够检索到基于HTTP请求关联进行专业分析的相关专利。当前安全行业内主流的审计系统,都是针对的是单条的HTTP请求的审计,基于HTTP访问的会话周期进行审计的计算机系统尚处于萌芽状态,而从大量的HTTP请求中,进行关联分析获得HTTP会话的技术,对于OSI七层架构的应用层的审计业务来说是一项必须的技术,只有解决了该问题,才能够帮助审计系统获知HTTP的会话数据,才能够获知某个会话所对应的各个HTTP请求,这对于应用层的审计系统来说具有重要意义。
技术实现思路
本专利技术的目的在于提供一种能够克服上述技术问题的通过Session进行请求的方法,本专利技术主要利用了Session的作用机制,通过分析Http请求中的Session数据,进而通过关联分析,寻找到属于同一个会话周期的所有的HTTP请求,旨在解决OSI七层架构的应用层的审计业务的解决方案中访问业务系统的Session数据的关键技术问题。审计系统会通过一个独立的子系统,通过网络监测的方式,获取到所有客户端与被审计的业务系统之间的HTTP通讯的数据,同时这些HTTP通讯的数据是采用明文的方式进行传输的,而不是采用HTTPS的加密传输方式。本专利技术包括以下步骤:1)分析所有HTTP请求的数据,获得其中最大的HTTP请求的长度MaxReqLen(非负整数),获得HTTP请求的总数量CntReq(自然数)。HTTP请求的信息包括:HTTP请求发生的时间(精确到毫秒),HTTP请求的客户端的IP地址、端口,HTTP请求的服务端的IP地址、端口,HTTP请求的明文数据记录。2)建立存储HTTP请求的数组ArrayHttp;数组的容量设定为CntReq,以便能够保存所有的HTTP请求的记录。数组的开始下标为0,结束下标为CntReq-1。数组的每个项目采用结构类型,包含以下成员变量:a.sTime,精确到毫秒的时间,采用“2013-11-2509:34:59.012”格式进行表示;b.sClientIP,客户端IP地址,采用“192.168.1.23”字符串格式进行表示;c.nClientPort,客户端端口,采用整数类型表示;d.sServerIP,服务端IP地址,采用“192.168.1.23”字符串格式进行表示;e.nServerPort,服务端端口,采用整数类型表示;f.sHttpReq,HTTP请求的明文数据,采用长度为MaxReqLen+1的字符串类型;g.nFlag,处理完成标志,整数类型,等于0表示未处理,不等于0表示已经处理;h.sSessionID,存储本HTTP请求解析出来的SessionID(或者说JSESSIONID),初始化为空字符串。3)将所有的HTTP请求的数据,按照HTTP请求发生的时间从小到大(从最早发生到最后发生)进行排序,并按照顺序将HTTP请求的信息复制到数组ArrayHttp的相应项目中,并将成员变量nFlag赋值为0。4)预设一个长度变量LenSessionID(整数类型),预设一个长度大小,以使得该长度变量的值能够大于任何一个HTTP请求的JSESSIONID的值的字符串长度。5)建立存储Session数据的数组ArraySession;数组的容量设定为CntReq,数组的开始下标为0,结束下标为CntReq-1。数组的每个项目采用结构类型,包含以下成员变量:a)sSessionID,采用长度为LenSessionID的字符串类型;b)nIndexStt,当前会话开始下标,采用整数类型;c)nIndexEnd,当前会话结束下标,采用整数类型。6)初始化数组ArraySession,将数组的每个项目进行一下初始化:a.清空sSessionID成员变量,赋值为空字符串””;b.nIndexStt赋值为-1;c.nIndexEnd赋值为-1。7)设定ArraySession数组的遍历游标变量CursorIndex,用来当前循环所在的数组下标,并初始化为-1。8)通过循环方式,进行遍历:a)如果CursorIndex大于等于0并且小于等于CntReq-1,将CursorHttp对应的nFlag设置为1(已经处理)。b)将CursorIndex递增(CursorIndex=CursorIndex+1),然后判别CursorIndex,是否小于0或者大于(CntReq-1),如果符合任何一个判断,中断当前循环,进入步骤9。c)选取ArraySession数组的下标为CursorIndex的项目CursorHttp。d)判别CursorHttp的nFlag,如果不为0,跳到循环开始(步骤8的步骤a),继续。e)分析CursorHttp的sHttpReq,在该字符串中,寻找字符串”\x0D\x0A\x0D\x0A”(对应四个字符,依次的ASCII码值为13、10、13、10),如果找不到,跳到循环开始(步骤8的步骤a),继续。f)找到之后,相应的位置通过字符指针变量pcHeadEnd保存,并进行字符串截断处理(*pcHeadEnd=‘\0’);g)通过字符串匹配函数,在sHttpReq中,忽略大小写寻找字符串”JSESSIONID”,如果寻找不到,跳到循环开始(步骤8的步骤a),继续。h)找到之后,相应的位置通过字符指针变量pcJSess保存,然后将pcJSess正向移动10个字符(pcJSess=pcJSess+10)。i)跳过所有的空白字符(while(isspace(*pcJSess)){pcJSess++;})。j)如果pcJSess所指的字符不为’=’,跳到循环开始(步骤8的步骤a),继续。否则将pcJSess正向移动1个字符(pcJSess=pcJSess+1)。k)跳过所有的空白字符(while(isspace(*pcJSess)){pcJSess++;})。l)设定整数变量nLen=0,然后获取从pcJSess所指向的位置开始,连续的数字或者’a’~’f’、’A’~’F’的字符的数量,并将数量赋值到nLen;m)如果nLen小于等于0(nLen<=0),跳到循环开始(步骤8的步骤a),继续。n)设定临时变量sSess(字符串变量,长度为LenSessionID),并初始化为空字符串。然后通过定长拷贝的方式,将从pcJSess开始nLen指定的长度的内容复制给sSess(strncpy(sSess,pcJSess,nLen))。o)将sSess拷贝给CursorHttp的成员变量sSessi本文档来自技高网...

【技术保护点】
通过Session进行请求的方法,其特征在于,包括以下步骤:1)分析所有HTTP请求的数据,获得其中最大的HTTP请求的长度MaxReqLen(非负整数),获得HTTP请求的总数量CntReq(自然数);HTTP请求的信息包括:HTTP请求发生的时间(精确到毫秒),HTTP请求的客户端的IP地址、端口,HTTP请求的服务端的IP地址、端口,HTTP请求的明文数据记录;2)建立存储HTTP请求的数组ArrayHttp;数组的容量设定为CntReq,以便能够保存所有的HTTP请求的记录;数组的开始下标为0,结束下标为CntReq‑1;数组的每个项目采用结构类型,包含以下成员变量:a.sTime,精确到毫秒的时间,采用“2013‑11‑2509:34:59.012”格式进行表示;b.sClientIP,客户端IP地址,采用“192.168.1.23”字符串格式进行表示;c.nClientPort,客户端端口,采用整数类型表示;d.sServerIP,服务端IP地址,采用“192.168.1.23”字符串格式进行表示;e.nServerPort,服务端端口,采用整数类型表示;f.sHttpReq,HTTP请求的明文数据,采用长度为MaxReqLen+1的字符串类型;g.nFlag,处理完成标志,整数类型,等于0表示未处理,不等于0表示已经处理;h.sSessionID,存储本HTTP请求解析出来的SessionID(或者说JSESSIONID),初始化为空字符串;3)将所有的HTTP请求的数据,按照HTTP请求发生的时间从小到大(从最早发生到最后发生)进行排序,并按照顺序将HTTP请求的信息复制到数组ArrayHttp的相应项目中,并将成员变量nFlag赋值为0;4)预设一个长度变量LenSessionID(整数类型),预设一个长度大小,以使得该长度变量的值能够大于任何一个HTTP请求的JSESSIONID的值的字符串长度;5)建立存储Session数据的数组ArraySession;数组的容量设定为CntReq,数组的开始下标为0,结束下标为CntReq‑1;数组的每个项目采用结构类型,包含以下成员变量:a)sSessionID,采用长度为LenSessionID的字符串类型;b)nIndexStt,当前会话开始下标,采用整数类型;c)nIndexEnd,当前会话结束下标,采用整数类型;6)初始化数组ArraySession,将数组的每个项目进行一下初始化:a.清空sSessionID成员变量,赋值为空字符串””;b.nIndexStt赋值为‑1;c.nIndexEnd赋值为‑1;7)设定ArraySession数组的遍历游标变量CursorIndex,用来当前循环所在的数组下标,并初始化为‑1;8)通过循环方式,进行遍历:a)如果CursorIndex大于等于0并且小于等于CntReq‑1,将CursorHttp对应的nFlag设置为1(已经处理);b)将CursorIndex递增(CursorIndex=CursorIndex+1),然后判别CursorIndex,是否小于0或者大于(CntReq‑1),如果符合任何一个判断,中断当前循环,进入步骤9;c)选取ArraySession数组的下标为CursorIndex的项目CursorHttp;d)判别CursorHttp的nFlag,如果不为0,跳到循环开始(步骤8的步骤a),继续;e)分析CursorHttp的sHttpReq,在该字符串中,寻找字符串”\x0D\x0A\x0D\x0A”(对应四个字符,依次的ASCII码值为13、10、13、10),如果找不到,跳到循环开始(步骤8的步骤a),继续;f)找到之后,相应的位置通过字符指针变量pcHeadEnd保存,并进行字符串截断处理(*pcHeadEnd=‘\0’);g)通过字符串匹配函数,在sHttpReq中,忽略大小写寻找字符串”JSESSIONID”,如果寻找不到,跳到循环开始(步骤8的步骤a),继续;h)找到之后,相应的位置通过字符指针变量pcJSess保存,然后将pcJSess正向移动10个字符(pcJSess=pcJSess+10);i)跳过所有的空白字符(while(isspace(*pcJSess)){pcJSess++;});j)如果pcJSess所指的字符不为’=’,跳到循环开始(步骤8的步骤a),继续。否则将pcJSess正向移动1个字符(pcJSess=pcJSess+1);k)跳过所有的空白字符(while(isspace(*pcJSess)){pcJSess++;});l)设定整数变量nLen=0,然后获取从pcJSess所指向的位置开始,连续的数字或者’a’~’f’、’A’~’F’的字符的数量,并...

【技术特征摘要】
1.通过Session进行请求的方法,其特征在于,包括以下步骤:1)分析所有HTTP请求的数据,获得其中最大的HTTP请求的长度MaxReqLen,获得HTTP请求的总数量CntReq;HTTP请求的信息包括:HTTP请求发生的时间,HTTP请求的客户端的IP地址、端口,HTTP请求的服务端的IP地址、端口,HTTP请求的明文数据记录;2)建立存储HTTP请求的数组ArrayHttp;数组的容量设定为CntReq,以便能够保存所有的HTTP请求的记录;数组的开始下标为0,结束下标为CntReq-1;数组的每个项目采用结构类型,包含以下成员变量:a.sTime,精确到毫秒的时间,采用“2013-11-2509:34:59.012”格式进行表示;b.sClientIP,客户端IP地址,采用“192.168.1.23”字符串格式进行表示;c.nClientPort,客户端端口,采用整数类型表示;d.sServerIP,服务端IP地址,采用“192.168.1.23”字符串格式进行表示;e.nServerPort,服务端端口,采用整数类型表示;f.sHttpReq,HTTP请求的明文数据,采用长度为MaxReqLen+1的字符串类型;g.nFlag,处理完成标志,整数类型,等于0表示未处理,不等于0表示已经处理;h.sSessionID,存储本HTTP请求解析出来的SessionID,初始化为空字符串;3)将所有的HTTP请求的数据,按照HTTP请求发生的时间从小到大进行排序,并按照顺序将HTTP请求的信息复制到数组ArrayHttp的相应项目中,并将成员变量nFlag赋值为0;4)预设一个长度变量LenSessionID,预设一个长度大小,以使得该长度变量的值能够大于任何一个HTTP请求的JSESSIONID的值的字符串长度;5)建立存储Session数据的数组ArraySession;数组的容量设定为CntReq,数组的开始下标为0,结束下标为CntReq-1;数组的每个项目采用结构类型,包含以下成员变量:a)sSessionID,采用长度为LenSessionID的字符串类型;b)nIndexStt,当前会话开始下标,采用整数类型;c)nIndexEnd,当前会话结束下标,采用整数类型;6)初始化数组ArraySession,将数组的每个项目进行一下初始化:a.清空sSessionID成员变量,赋值为空字符串””;b.nIndexStt赋值为-1;c.nIndexEnd赋值为-1;7)设定ArraySession数组的遍历游标变量CursorIndex,用来当前循环所在的数组下标,并初始化为-1;8)通过循环方式,进行遍历:a)如果CursorIndex大于等于0并且小于等于CntReq-1,将CursorHttp对应的nFlag设置为1;b)将CursorIndex递增,然后判别CursorIndex,是否小于0或者大于CntReq-1,如果符合任何一个判断,中断当前循环,进入步骤9;c)选取ArraySession数组的下标为CursorIndex的项目CursorHttp;d)判别CursorHttp的nFlag,如果不为0,跳到循环开始步骤8的步骤a,继续;e)分析Cursor...

【专利技术属性】
技术研发人员:李超张琦刘志宇李秋香徐晓军吴薇印晓天
申请(专利权)人:公安部第一研究所杭州安恒信息技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1