具体实施方式
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
图1为本发明一个实施例的解析RDP明文数据及日志封装方法流程图。
在步骤S101,对输入的RDP明文数据进行处理,以获取一条完整的RDP明文数据报文。
一个例子中,对输入的RDP明文数据进行拆分和/或拼接,以获取一条完整的RDP明文数据报文,便于解析。
在步骤S102,判定该完整RDP明文数据报文的类型,依据该类型过滤不需要进行信息提取的RDP明文数据报文。
具体地,RDP明文数据报文类型包括RDP5格式数据报文类型、RDP4格式数据报文类型;其中,RDP4格式数据报文包括连接认证阶段数据报文及非连接认证阶段的RDP4数据报文,而该非连接认证阶段的RDP4数据报文包括Channel格式数据报文(通道格式数据报文)、非Channel格式的RDP4数据报文(非通道格式的RDP4数据报文)。
需要提取信息的RDP数据报文包括:RDP5数据报文、连接认证阶段数据报文中的MCS Connect Init ial PDU(MCS层初始化连接数据单元)和MCSConnect Response PDU(MCS层连接确认数据单元)、Channel格式数据报文、非Channel格式RDP4数据报文中的Cl ient Info PDU(客户端登陆注册数据单元)和字段为DATA PDU(功能数据单元)的PDU type(数据单元类型)。
在步骤S103,对不同类型的RDP明文数据报文进行差异化处理,以提取客户端与服务端之间交互的功能数据。
具体地,上述需要提取的功能数据包括:登录信息、鼠标键盘等操作的输入数据、图形界面等输出数据、虚拟通道传输的打印机数据、剪贴板内容数据、声音数据等。
在本发明的一个优选实施例中,包括步骤S104,即将上述步骤S103提取到的功能数据封装到固定格式的日志中。
在本发明的一个实施例中,上述固定格式的日志内容包括:单字节(即1字节)的日志标识起始位,多字节(如4字节)的日志长度,多字节(n字节)的数据,单字节(即1字节)的日志标识结束位。较佳地,上述n字节的数据包括:30字节的登陆时间、2字节的源端口、2字节的目的端口、4字节的源IP、变量数据ID、变量会话ID、8字节的数据详细类型、变量域名、变量登陆名、变量登陆密码、变量提取的数据类型、变量提取的数据,如下表1所示:
表1
较佳地,上述一条日志所包含的信息包括一次或多次客户端的请求以及该请求所对应的服务端响应;其中,该请求与响应之间的对应是根据本次请求开始到下次请求之前的所有请求与响应之间的对应。
图2是本发明一个实施例的获取完整RDP明文数据报文流程图。
在步骤S201,判断是否有RDP明文数据信息输入,若有则转到步骤S202,否则流程结束。
具体地,上述输入的RDP明文数据信息包括RDP明文数据长度、传输方向(是客户端到服务端还是服务端到客户端)以及RDP明文数据内容。
在步骤S202,接收上述RDP明文数据信息,并与缓存数据形成新的数据报文。
在步骤S203,判定上述新数据报文(即当前数据报文)的封装类型,若未知该当前数据的封装类型,则转到步骤S204;若已知该当前数据的封装类型,且其封装类型为RDP4封装,则转到步骤S205;若已知该当前数据的封装类型,且其封装类型为RDP5封装,则转到步骤S210。
需要说明的是,初始数据报文封装类型为未知封装类型。
具体地,设置一个变量flag,flag表示当前数据报文封装类型标志;若flag=0,表示未知当前数据报文封装类型;若flag=1,表示当前数据报文封装类型为RDP4封装;若flag=2,表示当前数据报文封装类型为RDP5封装;flag初始值为0。
在步骤S204,根据当前数据的首字节,判断其是RDP4封装或是RDP5封装,然后转到步骤S203。
具体地,若当前数据的首字节为03,则该当前数据封装为RDP4封装,且其封装格式为TCP层、ISO层、MCS层、SEC层、RDP层;若当前数据首字节的最后两位为00,则该当前数据封装为RDP5封装,且其封装格式为TCP层、SEC层和RDP5层。
在步骤S205,判断该当前数据(封装类型为RDP4封装)长度是否大于等于4字节,若大于等于4字节则转到步骤S206,否则转到步骤S201;其中,该当前数据长度信息由步骤S202得到。
需要说明的是,在RDP4格式封装中,数据的前4个字节是TCP层数据,且该4个字节的最后两个字节表示一条RDP完整数据报文的长度。
在步骤S206,从该当前数据的起始4字节中,获取到一条完整的RDP数据报文的长度信息。
在步骤S207,判断该当前数据长度是否大于等于完整RDP数据报文长度,若满足条件则转到步骤S208,否则转到步骤S201;其中,当前数据长度由步骤S202得到,RDP完整数据报文长度由步骤S206得到。
在步骤S208,依据上述完整RDP数据报文长度,从该当前数据报文中获取到一条完整RDP数据报文,并设置f lag=0。
在步骤S209,判断剩余数据报文长度是否大于0,若大于0,则转到步骤S204,否则转到步骤S201。
在步骤S210,判断上述当前数据长度是否大于等于3字节,若大于等于3字节则转到步骤S211,否则转到步骤S201;其中,该当前数据长度信息由步骤S202得到。
需要说明的是,在RDP5格式封装中,数据的前两个或三个字节为TCP层数据;若该TCP层数据第二个字节的首位为1,则表示该RDP完整数据报文长度信息在该当前数据的第二、第三字节中,否则表示该长度信息在该当前数据的第二个字节中。
在步骤S211,从该当前数据的起始3字节中,获取到一条完整的RDP数据报文的长度信息,然后转到步骤S207。
图3是本发明一个实施例的判断RDP明文数据报文格式类型的流程图。
在步骤S301,判断是否有完整的RDP明文数据报文输入,若有则转到步骤S302,否则流程结束。
较佳地,上述是否有完整RDP明文数据报文输入的判定方法可通过步骤S201至步骤S211获得,具体参见流程图2。
在步骤S302,判断该完整RDP明文数据报文是否为RDP4报文,若是则转到步骤S303,否则转到步骤S308。
具体地,通过判断该完整RDP明文数据报文的首字节是否为03来判断该数据报文是否为RDP4数据报文;若该完整RDP明文数据报文首字节为03则该数据报文为RDP4数据报文,否则不是RDP4数据报文。
在步骤S303,判断该完整RDP明文数据报文是否包含ISO层、MCS层、SEC层头部的全部;若包含ISO层、MCS层、SEC层头部的全部则转到步骤S305,若仅包含ISO层、MCS层、SEC层头部的一个或者两个或者均不包含,则转到步骤S304。
具体地,上述判断完整RDP明文数据报文是否包含ISO层、MCS层、SEC层头部的方法是,将该完整RDP数据报文与现有技术的RDP格式文档进行比较,若该完整RDP数据报文满足现有RDP格式文档中ISO层、MCS层、SEC层头部格式,则说明包含ISO层、MCS层、SEC层头部的全部。
在步骤S304,确认该完整RDP明文数据报文类型为连接认证阶段数据报文,提取该连接认证阶段数据报文中MCS Connect Initial PDU(MCS层初始化连接数据单元)的通道号和通道名称之间的对应关系信息,以及提取该连接认证阶段数据报文中MCS Connect Response PDU(MCS层连接确认数据单元)的通道号和通道名称之间的对应关系信息,然后转到步骤S301。
需要说明的是,MCS通道号主要有虚拟通道对应的通道号、RDP4通道号(即I/O通道号);其中,RDP4通道号包括用户通道号及其他RDP4通道号,且I/O通道号、用户通道号表示的是通道为传输RDP4数据报文的通道。
具体地,将上述连接认证数据报文与现有的RDP格式文档进行比较,并从该连接认证数据报文中得到其MCS Connect Initial PDU通道号和通道名称之间的对应关系,以及MCS Connect Response PDU通道号和通道名称之间的对应关系。
在步骤S305,判定该RDP数据报文的MCS层通道号是否为虚拟通道对应的通道号;若该MCS层通道号为虚拟通道对应的通道号,则转到步骤S307;若该MCS层通道号为RDP4通道号(即I/O通道号,且该RDP4通道号包括用户通道号及其他RDP4通道号),则转到步骤S306。
具体地,在该完整RDP数据报文中,首先跳过4字节的TCP层数据和3字节的ISO层数据,然后就是MCS层数据,而该MCS层数据的第四、第五字节即为MCS层通道号。
此外,将该RDP数据报文与现有的RDP格式文档进行比较,并根据该RDP数据报文的MCS层通道号,即可判定该MCS层通道号是否为虚拟通道对应的通道号。
在步骤S306,确认该RDP数据报文类型为非Channel格式的RDP4数据报文;其中,Client Info PDU(客户端登陆注册数据单元)和字段为DATA PDU(功能数据单元)的PDU type(数据单元类型)数据报文需要进行信息提取,然后转到步骤S301。
具体地,对照现有RDP格式文档,并根据该RDP4数据报文的SEC层数据中加密标志字段,来判定该RDP数据报文是否为Client Info PDU(客户端登陆注册数据单元)。
此外,RDP4数据报文的RDP层数据前六个头字节中包含了PDU type(数据单元类型)字段,该PDU type包括:DEMAND AVCTIVE PDU(要求激活数据单元)、CONFIRM ACTIVE PDU(确认激活数据单元)、DEACTIVATE ALL PDU(解散数据单元)以及DATA PDU(功能数据单元);其中,DATA PDU是在正常会话过程中发送和接收信息,即需要获取的信息。因此,将该RDP数据报文与现有RDP格式文档进行对照,获取该RDP数据报文中字段为DATA PDU的PDU type信息,并将其提取出来。
在步骤S307,确认该RDP数据报文类型为Channel格式类型数据报文,将其去除头部后再封装,进行信息提取,然后转到步骤S301。
在步骤S308,判断该完整RDP数据报文的首字节最后两位是否为00,如果是则转到步骤S309,否则转到步骤S301;此步骤是用来判断该完整RDP数据报文是否为RDP5数据报文。
在步骤S309,确认该RDP数据报文类型为RDP5格式数据报文,将其去除头部后再封装,进行信息提取,然后转到步骤S301。
在本发明的上述实施例中,对于不同类型的数据报文进行的是差异化处理(即不同的处理);其中,RDP5格式数据报文、Channel格式数据报文、可直接去除头部各层封装获取功能数据;而非Channel格式RDP4数据报文中仅对Client Info PDU和字段为DATA PDU的PDU type的报文进行处理,且处理时不仅需要跳过头部各层封装,还要去除不需要提取的字段。此外,在Client Info PDU数据报文中可获取用户相关登录信息的缓存信息;RDP5数据报文和PDU type字段为DATA PDU的数据报文可获取到客户端鼠标键盘操作信息和服务端返回的图形界面数据等信息;Channel格式数据报文可获取到传输的打印机设备数据、剪贴板数据、声音数据等。
图4是本发明一个实施例的解析RDP明文数据及日志封装系统框图。在该系统中,客户端410与服务端420进行信息交互,且该交互信息是以RDP明文数据形式存在;RDP解析模块430用于获取该RDP明文数据,并对该明文数据进行解析,以得到客户端410与服务端420之间交互的功能数据。
该RDP解析模块430包括RDP完整数据获取模块431、RDP数据类型判定模块432、交互数据提取模块433;较佳地,该RDP解析模块430还包括封装模块434。
该RDP完整数据获取模块431用于对输入的RDP数据进行处理,以获取一条完整的RDP数据报文。
该RDP数据类型判定模块432用于判定该完整RDP数据报文的类型,并依据该类型过滤不需要进行信息提取的RDP数据报文。
该交互数据提取模块433用于对不同类型的RDP数据报文进行差异化处理,以提取客户端与服务端之间交互的功能数据。
该封装模块434用于将上述提取到的功能数据封装到固定格式的日志中。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。