一种WinNT操作系统中截获端口数据的方法和系统的制作方法

文档序号:6337443阅读:279来源:国知局
专利名称:一种WinNT操作系统中截获端口数据的方法和系统的制作方法
技术领域
本发明涉及数据截获领域,特别是涉及一种WinNT操作系统中截获端口数据的方法和系统。
背景技术
微软公司的WinNT操作系统是基于NT技术的32位操作系统,它包括Windows 2000、Windows 2003和Windows XP系统。目前,WinNT操作系统已成为大多数日常办公用计算机的主流操作系统。办公用计算机中常常会保存一些重要数据,例如财务数据、客户名单以及各类统计数据等,如果这些数据被泄露出去,会给单位带来巨大的风险和损失,因此,需要对这些计算机输入或输出的数据进行严格监控,从而保证重要数据的安全。由于计算机输入或者输出数据都是通过端口进行的,因此,可以采用监控计算机端口的方式来监控计算机输入或输出的数据,这就不可避免地要对端口读写的数据进行截获。图1为现有的WinNT操作系统中截获端口数据的系统结构图。如图1所示,现有技术是将专门的硬件截获设备103连接在所要监控的端口 101与端口读写设备102之间。当端口读写设备102向端口 101发出读数据的请求时,该读请求被硬件截获设备103截获,该硬件截获设备103从端口 101获得该读请求所要求的数据后,首先存储到自身的存储装置中,然后再将该数据送至端口读写设备102,从而实现对从端口 101读取的数据的截获。当端口读写设备102向端口 101发出写数据的请求以及所要写入的数据时,该写请求和待写入的数据也也被硬件截获设备103截获,该硬件截获设备103首先将待写入的数据保存到自身的存储装置中,然后将该写请求和待写入数据送至端口 101,从而实现对写入端口 101 的数据的截获。由此可见,现有技术利用硬件截获方式,实现了对从端口 101读取的数据以及写入端口 101的数据的截获,有效地保证了端口 101所在的计算机的数据安全。但是,现有技术采用硬件截获设备来截获端口数据,所使用的硬件截获设备的数量不能少于要监控的端口的数量,对每个要实现计算机数据监控的单位来说,本单位内待监控的计算机数量通常比较多,而且有些计算机还有多个输入输出端口需要进行监控,这造成采用现有技术进行计算机端口数据截获的成本很高。

发明内容
本发明所要解决的技术问题是提供一种WinNT操作系统中截获端口数据的方法和系统,能降低端口数据截获的成本。本发明解决上述技术问题的技术方案如下一种WinNT操作系统中截获端口数据的方法,该方法包括在内核模式下,创建与端口相对应的日志文件;截获针对端口的每一操作请求,根据与所述操作请求的IRP数据结构相关联的 I0_STACK_L0CATI0N数据结构,判断所述操作请求是否为读/写请求,如果是,则将所述读/写请求所要读/写的数据保存到与该端口相对应的日志文件,然后执行所述读/写请求;否贝U,执行所述操作请求。本发明的有益效果是本发明中,由于在内核模式下创建了与端口相对应的日志文件,在截获针对端口的每一操作请求之后,都根据与该操作请求的IRP数据结构相关联的I0_STACK_L0CATI0N数据结构,判断出该操作请求是否为读/写请求,对于读/写请求, 则将其要读/写的数据保存到与该端口相对应的日志文件,然后再执行该读/写请求,而对于读/写请求之外的其他操作请求,则不进行处理,直接执行该操作请求即可,因此,本发明能够实现对从端口读取的数据和写入端口的数据的截获,从而有效地监控计算机的输入输出数据,保证数据的安全,同时,本发明所采用的端口数据截获方法完全是软件方法,只需将该软件加载到各待监控计算机而无需采用任何专门的硬件截获设备来实现数据截获功能,因此,本发明大大降低了端口数据截获的成本。在上述技术方案的基础上,本发明还可以做如下改进进一步,在判断所述操作请求为读/写请求之后,该方法进一步包括将所述读/ 写请求所要读/写的数据顺序保存到缓冲区;则将所述读/写请求所要读/写的数据保存到与该端口相对应的日志文件,为确定所述读/写请求所要读/写的数据保存在所述缓冲区中的首地址和数据长度;根据所述读/写请求所要读/写的数据保存在所述缓冲区中的首地址和数据长度,将首地址为所述缓冲区中的首地址、长度为所述数据长度的数据从所述缓冲区中取出, 保存到与该端口相对应的日志文件。进一步,在判断所述操作请求为读/写请求之后,该方法进一步包括将根据所述读/写请求进行数据读/写的时间与所述读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件;和/ 或,将读/写请求标志与所述读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件。进一步,所述端口为一个以上的端口,则所述创建与端口相对应的日志文件为创建与每个端口相对应的日志文件;所述截获针对端口的每一操作请求为截获针对每个端口的每一操作请求。进一步,所述端口为串行接口,和/或,所述端口为并行接口。另外,本发明还提供了一种WinNT操作系统中截获端口数据的系统,所述端口具有端口编号,该系统包括日志创建与保存模块、过滤模块、操作请求执行模块,其中所述日志创建与保存模块用于,在内核模式下,创建与端口相对应的日志文件;根据所述读/写请求所针对的端口的端口编号,确定所述读/写请求所针对的端口,将所述过滤模块送来的读/写请求所要读/写的数据保存到与所述读/写请求所针对的端口相对应的日志文件,将所述读/写请求发送到所述操作请求执行模块;所述过滤模块用于,截获针对端口的每一操作请求,根据与所述操作请求的IRP 数据结构相关联的I0_STACK_L0CATI0N数据结构,判断所述操作请求是否为读/写请求;将读/写请求所要读/写的数据和所述读/写请求所针对的端口的端口编号发送到所述日志创建与保存模块;将读/写请求之外的其他操作请求发送到所述操作请求执行模块;所述操作请求执行模块用于,执行所述日志创建与保存模块送来的所述读/写请求;执行所述过滤模块送来的所述读/写请求之外的其他操作请求。进一步,所述过滤模块进一步用于,将所述读/写请求所要读/写的数据顺序保存到缓冲区;则所述日志创建与保存模块用于,确定所述读/写请求所要读/写的数据保存在所述缓冲区中的首地址和数据长度;根据所述读/写请求所要读/写的数据保存在所述缓冲区中的首地址和数据长度,将首地址为所述缓冲区中的首地址、长度为所述数据长度的数据从所述缓冲区中取出,保存到与所述读/写请求所针对的端口相对应的日志文件。进一步,所述日志创建与保存模块进一步用于,将根据所述读/写请求进行数据读/写的时间与所述读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件;和/或,将读/写请求标志与所述读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件。进一步,所述端口为一个以上的端口,则所述日志创建与保存模块用于,创建与每个端口相对应的日志文件;所述过滤模块用于,截获针对每个端口的每一操作请求。进一步,所述端口为串行接口,和/或,所述端口为并行接口。


图1为现有的WinNT操作系统中截获端口数据的系统结构图;图2为本发明提供的WinNT操作系统中截获端口数据的方法流程图;图3为本发明提供的WinNT操作系统中截获端口数据的系统结构图。
具体实施例方式以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。图2为本发明提供的WinNT操作系统中截获端口数据的方法流程图。如图2所示, 该方法包括步骤201 在内核模式下,创建与端口相对应的日志文件。这里,不同于其他操作系统,WinNT操作系统是采用分层设计思路而设计的,即将操作系统分为用户模式和内核模式。其中,操作系统的核心代码运行在内核模式下,这些核心代码能够直接访问物理端口、物理内存等,而非核心代码运行在用户模式下,这些非核心代码要访问物理端口,需要向核心代码提出请求,然后由核心代码来执行访问物理端口的操作,执行完毕后将执行结果返回给非核心代码。因此,本步骤在内核模式下创建与端口相对应的日志文件,步骤202至步骤205也在WinNT操作系统的内核模式下进行,可以方便快捷地用软件实现截获端口数据的功能。本发明中,要进行监控的端口的数量可以为一个,也可以为多个,每个端口都有自己的端口编号,不同端口的端口编号不同,在各种操作请求对某个端口进行访问时,需要区分出该操作请求所要执行的操作是针对哪个端口进行的,因而该操作请求中可以包含端口编号,用来指示自身所针对的端口。在需要进行监控的端口的数量为一个以上的情况下,针对每个端口,本发明都创建一个与该端口相对应的日志文件,用于存储从该端口读出或写入该端口的数据,对不同端口进行读/写的数据是存储到不同的日志文件中的。步骤202 截获针对端口的每一操作请求。这里,对端口的操作请求多种多样,每一种操作请求都涉及一种对端口的操作,例如,读请求、写请求、打开请求、关闭请求等,分别实现从端口读出数据、向端口写入数据、打开端口以及关闭端口等功能,其中,只有写请求和读请求涉及输入输出数据,因此,本发明需要将针对端口的所有操作请求都截获,然后从中分辨出对端口进行读操作或写操作的请求,从而实现对端口读写的数据的截获。步骤203 根据与操作请求的IRP数据结构相关联的I0_STACK_L0CATI0N数据结构,判断该操作请求是否为读/写请求,如果是,则依次执行步骤204和205,否则,执行步骤 205。这里,当步骤202截获针对端口的一项操作请求时,通过本步骤可以判断出该操作请求是否为读/写请求,如果是读请求或写请求,则依次执行步骤204的保存数据和步骤205的执行读/写请求的步骤,如果是读请求和写请求之外的其他操作请求,则直接执行步骤205执行该操作请求的步骤,这种对操作请求直接执行步骤205的操作方式,称为 Pass-Through 方式。判断该操作请求是否为读/写请求的方法,可以是根据与该操作请求的IRP(IA) Request lockage,输入输出请求包)数据结构相关联的I0_STACK_L0CATI0N数据结构来判断该操作请求是否为读/写请求。在WinNT操作系统中,操作请求是与IRP数据结构相对应的,并且每种IRP数据结构都与一种I0_STACK_L0CATI0N数据结构相关联,即不同IRP数据结构所关联的I0_STACK_L0CATI0N数据结构是不同的,这样,不同操作请求的IRP数据结构所关联的I0_STACK_L0CATI0N数据结构也就不同,因此,可以根据与操作请求的IRP数据结构相关联的I0_STACK_L0CATI0N数据结构来判断该操作请求是否为读/写请求。I0_STACK_L0CATI0N数据结构中有多个参数,可以选取其中的一个特定参数作为判断依据,该特定参数具有如下特征读请求和写请求的IRP数据结构所关联的I0_STACK_ LOCATION数据结构中的该特定参数,与其他操作请求的IRP数据结构所关联的I0_STACK_ LOCATION数据结构中的该特定参数是不同的,进一步地,读请求和写请求的IRP数据结构所关联的I0_STACK_L0CATI0N数据结构中的该特定参数也是不同的。这样,在截取了针对端口的操作请求之后,利用I0_STACK_L0CATI0N数据结构中的该特定参数,即可判断该操作请求是否为读请求或写请求,进而采取不同的处理方式。例如,该特定参数可以选取 I0_STACK_L0CATI0N数据结构中的MajorFunction参数,该参数用于指示与该I0_STACK_ LOCATION数据结构关联的IRP数据结构的主功能码,对于不同的IRP数据结构来说,其关联的I0_STACK_L0CATI0N数据结构中的MajorFunction参数是不同的,因而可以用该参数来作为判断一个操作请求是否为读请求或写请求的依据。具体地,WinNT操作系统中的读请求和写请求分别对应着IRP_MJ_READ和IRP_MJ_ WRITE这两个IRP数据结构,这两个IRP数据结构所关联的I0_STACK_L0CATI0N数据结构中的MajorFimction参数是不同的,因此,本步骤根据与该操作请求的IRP数据结构关联的I0_STACK_L0CATI0N数据结构,即可判断出该操作请求是否为读/写请求,从而决定后续的步骤。当然,本发明还可以采用其他方式来判断该操作请求是否为读/写请求,例如,根据该操作请求是否包含读/写数据项来判断。步骤204 将读/写请求所要读/写的数据保存到与该端口相对应的日志文件。这里,步骤203对步骤202中截获的操作请求的判断结果为是读/写请求,故为了实现对端口输入输出数据的监控,在本步骤中将该读/写请求所要读/写的数据保存到步骤201创建的与该端口相对应的日志文件。对于要从端口读出数据的读请求,本发明按照该读请求,将该读请求所要求读出的数据先送至特定的存储空间,例如内存中的缓冲区,或者硬盘中的特定文件,或者其他存储空间,然后从该特定的存储空间将这些数据发送到与该端口相对应的日志文件中进行保存,这样就实现了对从该端口读出的数据的截获。截获完成之后,即可执行步骤205。对于要将数据写入端口的写请求,本发明是先截获该写请求以及要写入端口的数据,在把要写入端口的数据保存到该端口对应的日志文件、实现了对要写入端口的数据的截获之后,再执行步骤205,按照该写请求将数据写入端口。将数据保存到日志文件中后,在用户模式下,利用应用程序就可以访问日志文件, 从而获知对该日志文件对应的端口所读/写过的数据,进而判断是否泄密。当然,也可以在应用层创建专门的虚拟过滤设备,用于接收应用层的应用程序的请求,帮助这些应用程序实现对日志文件的访问,同时,该虚拟过滤设备作为内核模式下本发明所述的方法在用户模式下的虚拟对应实体,实现本发明所述的步骤201至步骤205的方法。步骤205 执行该操作请求。这里,本步骤为按照操作请求对端口执行相应的操作,S卩,如果是在执行完步骤 204所述的对读/写数据的截获之后,本步骤就按照读/写请求,完成数据的读/写;如果在步骤203中判断所截获的操作请求为读/写请求之外的其他操作请求后,直接执行本步骤, 则按照该操作请求执行相应的操作,例如,该操作请求为打开请求,则本步骤就执行打开端口的操作。由此可见,本发明中,由于在内核模式下创建了与端口相对应的日志文件,在截获针对端口的每一操作请求之后,都根据与该操作请求的IRP数据结构相关联的I0_STACK_ LOCATION数据结构,判断该操作请求是否为读/写请求,对于读/写请求,则将其要读/写的数据保存到与该端口相对应的日志文件,然后再执行该读/写请求,而对于读/写请求之外的其他操作请求,则不进行处理,直接执行该操作请求即可,因此,本发明能够实现对从端口读取的数据和写入端口的数据的截获,从而有效地监控计算机的输入输出数据,保证数据的安全,同时,本发明所采用的端口数据截获方法完全是软件方法,只需将该软件加载到各待监控计算机而无需采用任何专门的硬件截获设备来实现数据截获功能,因此,本发明大大降低了端口数据截获的成本。WinNT操作系统对Wiri^c操作系统做了改进,其端口无需独占即可进行访问,这意味着对于应用WinNT操作系统的计算机来说,设备或应用程序在访问其端口时,无需在访问前申请端口的使用权,也不必在访问结束后释放端口的使用权。
在步骤203判断一个操作请求为读/写请求之后,该方法进一步包括将读/写请求所要读/写的数据顺序保存到缓冲区;则步骤204所述的将读/写请求所要读/写的数据保存到与该端口相对应的日志文件,为确定读/写请求所要读/写的数据保存在缓冲区中的首地址和数据长度;根据读/写请求所要读/写的数据保存在缓冲区中的首地址和数据长度,将首地址为缓冲区中的首地址、长度为数据长度的数据从缓冲区中取出,保存到与该端口相对应的日志文件。这里,由于在端口读或写数据的速度与数据在端口以外的线路中传输的速度是不同的,因此,本发明将读/写请求所要读/写的数据保存到缓冲区,可以使二者的速度达到匹配,同时也可以在步骤204将数据保存到日志文件中之后,无需重新从计算机取数据送出端口以实现对从端口读出数据或重新取数据送至端口以实现向端口写入数据,节约数据读/写的时间。将要读/写的数据保存到缓冲区的方式为顺序保存,这样,可以在确定该数据保存在缓冲区中的首地址以及数据长度之后,方便地取出数据,否则,如果数据是以非顺序保存的方式保存到缓冲区的,则根据数据保存的首地址和数据长度,是无法全部取出数据的, 这样就增加了取出数据的难度,因此,本发明将数据采取顺序保存的方式保存到缓冲区中, 大大方便了从缓冲区中取出数据。在步骤203判断操作请求为读/写请求之后,该方法进一步包括将根据读/写请求进行数据读/写的时间与读/写请求所要读/写的数据相对应, 保存到与该端口相对应的日志文件;将读/写请求标志与读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件。这里,读/写请求标志可以为读标志,也可以为写标志,其中,读标志意味着与该读标志相对应的数据为从端口读出的数据,写标志意味着与该写标志对应的数据为向端口写入的数据。将根据读/写请求进行数据读/写的时间与读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件,能进一步确定读/写这些数据的时间,从而使本发明对端口输入输出数据的监控更加有效和方便。 同样,将读/写请求标志与读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件,也可以进一步确定所保存的数据是从端口读出的数据还是向端口写入的数据,从而使本发明对端口输入输出数据的监控更加有效和方便。本发明中,端口可以为一个以上的端口,则步骤201中创建与端口相对应的日志文件的方法为创建与每个端口相对应的日志文件;步骤202中截获针对端口的每一操作请求的方法为截获针对每个端口的每一操作请求。这里,利用本发明进行监控的端口的数量可以为一个,也可以为两个以上。如果端口的数量为两个以上,则本发明可以同时对这些端口进行实时监控,当然,也可以不同时对这些端口进行监控。
针对每个端口,本发明在步骤201中创建与每个端口分别对应的日志文件,步骤 202中截获针对每个端口的每一操作请求,这样,本发明就可以实现对一个或两个以上的端口同时或不同时地进行数据截获和实时监控。本发明中所述的端口可以为串行接口,也可以为并行接口,当然,还可以为其他端口,例如红外接口、蓝牙接口、USB接口等。只要该端口能实现数据的输入输出,就在本发明的保护范围之内。上述各方法是通过软件方式实现的,该软件可利用微软公司发行的DDK2006驱动开发工具和Compuware公司开发的DriverMudio工具包开发得到。由于端口可以为串行接口,也可以为并行接口,还可以为其他接口,这些接口的驱动程序不同,这意味着对这些端口进行读/写,其读/写速度、读/写请求格式都有所不同, 而且各种端口的数量也可以多于一个,因此,在步骤201中创建与端口对应的日志文件之前,可以首先记录各端口的参数,形成记录各端口参数的配置文件,然后在步骤201中创建与端口相应的日志文件时,即可根据该配置文件,获得相应端口的参数信息,从而针对不同的端口创建不同的日志文件。步骤202截获针对端口的每一操作请求的工作,可以由DriverMudi0封装的 KLowerDevice类和KFilterDevice类来执行,本发明利用KLowerDevice类的构造函数和配置文件的端口参数来指定待监控的端口,然后利用KFilterDevice类的构造函数在应用层建立虚拟过滤设备,当虚拟过滤设备建立后,该虚拟过滤设备就可以在应用层实现对每一操作请求的截获。其中,KLowerDevice类的构造函数形式为KLowerDevice(PUNICODE_STRING name,ACCESS_MASK access);其中,name是被监控的端口的名称;access是访问端口的方式,常见的访问端口的方式包括读端口、写端口、同时读写端口等。KFilterDevice类的构造函数形式为KFilterDevice(PCffSTR NameOfDeviceToFilter,ULONG DevType,ULONG DevFlags);其中,NameOfDeviceToFilter是虚拟过滤设备的名称;DevType为虚拟过滤设备的类型,虚拟过滤设备的类型包括串行接口,并行接口等;DevFlags为虚拟过滤设备的标志,虚拟过滤设备的标志包括独占访问、通过缓冲访问等。当虚拟过滤设备在应用层建立之后,将在WinNT操作系统的驱动设备管理中出现该虚拟过滤设备的名称,这样,用户模式下,应用层的应用程序就可以通过直接操作该虚拟过滤设备来查看日志文件中的数据。本本发明所提供的端口数据截获方案已在Windows 2000\2003\XP操作系统下得到了验证,从而证明了该软件对于WinNT操作系统的可行性。图3为本发明提供的WinNT操作系统中截获端口数据的系统结构图。该系统中的端口具有端口编号,如图3所示,该系统包括日志创建与保存模块301、过滤模块302、操作
10请求执行模块303,其中日志创建与保存模块301用于,在内核模式下,创建与端口相对应的日志文件;根据读/写请求所针对的端口的端口编号,确定读/写请求所针对的端口,将过滤模块302送来的读/写请求所要读/写的数据保存到与读/写请求所针对的端口相对应的日志文件, 将读/写请求发送到操作请求执行模块303 ;过滤模块302用于,截获针对端口的每一操作请求,根据与该操作请求的IRP数据结构相关联的I0_STACK_L0CATI0N数据结构,判断操作请求是否为读/写请求;将读/写请求所要读/写的数据和读/写请求所针对的端口的端口编号发送到日志创建与保存模块 301 ;将读/写请求之外的其他操作请求发送到操作请求执行模块303 ;操作请求执行模块303用于,执行日志创建与保存模块301送来的读/写请求;执行过滤模块302送来的读/写请求之外的其他操作请求。这里,每个端口都具有自身的端口编号,该端口编号可以用于识别该端口,从而方便日志创建与保存模块301来创建与各端口相应的日志文件、确定包括读/写请求在内的各种操作请求所针对的端口,以及实现对端口的读写。该系统中,过滤模块302用于,根据与操作请求的IRP数据结构相关联的10_ STACK_L0CATI0N数据结构,判断操作请求是否为读/写请求。WinNT操作系统中,由于操作请求与IRP数据结构相对应,而每种IRP数据结构都与一种I0_STACK_L0CATI0N数据结构相关联,不同IRP数据结构所关联的I0_STACK_ LOCATION数据结构也不同,因此,不同操作请求的IRP数据结构所关联的I0_STACK_ LOCATION数据结构就不同,具体表现为I0_STACK_L0CATI0N数据结构中的特定参数,例如MajorFimction参数,有所不同,如打开请求、关闭请求、读请求、写请求就分别对应四个IRP数据结构,而每个IRP数据结构所关联的I0_STACK_L0CATI0N数据结构中的 MajorFunction参数是不同的。这样,通过读请求的IRP数据结构IRP_MJ_READ所关联的 I0_STACK_L0CATI0N数据结构中的MajorFunction参数,即可判断出该操作请求为读请求。 同样,通过写请求的IRP数据结构IRP_MJ_WRITE所关联的I0_STACK_L0CATI0N数据结构中的MajorFunction参数,即可判断出该操作请求为写请求。本发明需要进行的是截获对端口进行读/写的原始数据,因而过滤模块302只需要对读/写请求所涉及的数据进行截获, 其他类型的操作请求只需采用I^ss-Through方式,按照其对应的操作请求直接进行处理即可。由于计算机的端口多种多样,可以为串行接口,也可以为并行接口,还可以为红外接口、蓝牙接口以及USB接口等,不同端口的数据读/写格式、速度不同,因此,通过端口编号可以方便地针对不同种类的端口进行相应的操作。例如,如果端口编号Port = 1,该端口为串行接口,则日志创建与保存模块301就需要创建与该串行接口相应的日志文件,并根据过滤模块302发送的端口编号为1的读请求,确定该读请求针对的端口为该串行接口,然后将相应的数据保存到该串行接口对应的日志文件中,最后由操作请求执行模块303执行该读请求,将数据读出。包括端口编号在内的关于端口的各种参数可以记录在预先设定的配置文件中,这样,通过读取该配置文件,就可以方便地了解各端口的编号以及其他各种参数,从而进行相应的读/写端口、打开端口、关闭端口等操作。
该系统中,由于日志创建与保存模块301在内核模式下创建了与端口相对应的日志文件,过滤模块302在截获针对端口的每一操作请求之后,可以判断被截获的操作请求是否为读/写请求,对于读/写请求,则由日志创建与保存模块301将其要读/写的数据保存到与该端口相对应的日志文件,然后再由操作请求执行模块303执行该读/写请求,而对于读/写请求之外的其他操作请求,则不进行处理,直接由操作请求执行模块303执行该操作请求即可,因此,本发明能够实现对从端口读取的数据和写入端口的数据的截获,从而有效地监控计算机的输入输出数据,保证数据的安全,同时,本发明提出的端口数据截获系统中的各模块均为软件模块,只需将该软件加载到各待监控计算机而无需采用任何专门的硬件截获设备来实现数据截获功能,因此,本发明大大降低了端口数据截获的成本。该系统中,过滤模块302进一步用于,将读/写请求所要读/写的数据顺序保存到缓冲区;则日志创建与保存模块301用于,确定读/写请求所要读/写的数据保存在缓冲区中的首地址和数据长度;根据读/写请求所要读/写的数据保存在缓冲区中的首地址和数据长度,将首地址为缓冲区中的首地址、长度为数据长度的数据从缓冲区中取出,保存到与读/写请求所针对的端口相对应的日志文件。这里,缓冲区可以起到对端口读/写速度和线路传输速度的匹配作用,同时,也起到数据缓存作用,节约了数据读写的时间,提高了计算机数据监控的速度。缓冲区可以为内存中的缓冲区,也可以为硬盘中的某一特定存储空间,无需另外添加硬件存储设备,利用该计算机中的原有存储设备即可。过滤模块302将数据顺序保存到缓冲区,这样,日志创建与保存模块301就可以根据该数据在缓冲区中的首地址和数据长度,从缓冲区中取出该数据,否则,日志创建与保存模块301将无法根据数据在缓冲区中的首地址和数据长度将数据从缓冲区中读出,必须采用其他更复杂的方法。该系统中,日志创建与保存模块301进一步用于,将根据读/写请求进行数据读/ 写的时间与读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件;和/ 或,将读/写请求标志与读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件。这里,将数据读/写的时间和读/写标志与数据相对应,保存在日志文件中,可以进一步这些数据是被读出端口还是写入端口,以及确定所读/写的时间,这样就可以使本发明对端口输入输出数据的监控更加有效和方便。该系统中的端口可以为一个以上的端口,则日志创建与保存模块301用于,创建与每个端口相对应的日志文件;过滤模块302用于,截获针对每个端口的每一操作请求。另外,本发明中的端口可以为串行接口,也可以为并行接口,还可以为其他种类的可实现输入输出功能的端口。由此可见,本发明具有以下优点(1)本发明中,由于在内核模式下创建了与端口相对应的日志文件,在截获针对端口的每一操作请求之后,都根据与该操作请求的IRP数据结构相关联的I0_STACK_ LOCATION数据结构,判断该操作请求是否为读/写请求,对于读/写请求,则将其要读/写的数据保存到与该端口相对应的日志文件,然后再执行该读/写请求,而对于读/写请求之外的其他操作请求,则不进行处理,直接执行该操作请求即可,因此,本发明能够实现对从端口读取的数据和写入端口的数据的截获,从而有效地监控计算机的输入输出数据,保证数据的安全,同时,本发明所采用的端口数据截获方法完全是软件方法,只需将该软件加载到各待监控计算机而无需采用任何专门的硬件截获设备来实现数据截获功能,因此,本发明大大降低了端口数据截获的成本。(2)本发明中,将读/写请求所要读/写的数据采取顺序保存的方式保存到缓冲区中,大大方便了从缓冲区中取出数据。(3)本发明中,将读/写数据的时间以及读/写请求标志与读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件,能进一步确定读/写这些数据的时间, 从而使本发明对端口输入输出数据的监控更加有效和方便。(4)本发明只需要在WinNT操作系统下安装相应的监控软件,即可实现对端口数据的截获,因此,相对于现有技术,本发明使用简单、安全、方便。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
1权利要求
1.一种WinNT操作系统中截获端口数据的方法,其特征在于,该方法包括 在内核模式下,创建与端口相对应的日志文件;截获针对端口的每一操作请求,根据与所述操作请求的IRP数据结构相关联的10_ STACK_L0CATI0N数据结构,判断所述操作请求是否为读/写请求,如果是,则将所述读/写请求所要读/写的数据保存到与该端口相对应的日志文件,然后执行所述读/写请求;否贝U,执行所述操作请求。
2.根据权利要求1所述的方法,其特征在于,在判断所述操作请求为读/写请求之后, 该方法进一步包括将所述读/写请求所要读/写的数据顺序保存到缓冲区;则将所述读/写请求所要读/写的数据保存到与该端口相对应的日志文件,为 确定所述读/写请求所要读/写的数据保存在所述缓冲区中的首地址和数据长度; 根据所述读/写请求所要读/写的数据保存在所述缓冲区中的首地址和数据长度,将首地址为所述缓冲区中的首地址、长度为所述数据长度的数据从所述缓冲区中取出,保存到与该端口相对应的日志文件。
3.根据权利要求1或2所述的方法,其特征在于,在判断所述操作请求为读/写请求之后,该方法进一步包括将根据所述读/写请求进行数据读/写的时间与所述读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件; 和/或,将读/写请求标志与所述读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件。
4.根据权利要求1或2所述的方法,其特征在于,所述端口为一个以上的端口,则 所述创建与端口相对应的日志文件为创建与每个端口相对应的日志文件;所述截获针对端口的每一操作请求为截获针对每个端口的每一操作请求。
5.根据权利要求1或2所述的方法,其特征在于,所述端口为串行接口,和/或,所述端口为并行接口。
6.一种WinNT操作系统中截获端口数据的系统,所述端口具有端口编号,其特征在于, 该系统包括日志创建与保存模块、过滤模块、操作请求执行模块,其中所述日志创建与保存模块用于,在内核模式下,创建与端口相对应的日志文件;根据所述读/写请求所针对的端口的端口编号,确定所述读/写请求所针对的端口,将所述过滤模块送来的读/写请求所要读/写的数据保存到与所述读/写请求所针对的端口相对应的日志文件,将所述读/写请求发送到所述操作请求执行模块;所述过滤模块用于,截获针对端口的每一操作请求,根据与所述操作请求的IRP数据结构相关联的I0_STACK_L0CATI0N数据结构,判断所述操作请求是否为读/写请求;将读/ 写请求所要读/写的数据和所述读/写请求所针对的端口的端口编号发送到所述日志创建与保存模块;将读/写请求之外的其他操作请求发送到所述操作请求执行模块;所述操作请求执行模块用于,执行所述日志创建与保存模块送来的所述读/写请求; 执行所述过滤模块送来的所述读/写请求之外的其他操作请求。
7.根据权利要求6所述的系统,其特征在于,所述过滤模块进一步用于,将所述读/写请求所要读/写的数据顺序保存到缓冲区;则所述日志创建与保存模块用于,确定所述读/写请求所要读/写的数据保存在所述缓冲区中的首地址和数据长度;根据所述读/写请求所要读/写的数据保存在所述缓冲区中的首地址和数据长度,将首地址为所述缓冲区中的首地址、长度为所述数据长度的数据从所述缓冲区中取出,保存到与所述读/写请求所针对的端口相对应的日志文件。
8.根据权利要求6或7所述的系统,其特征在于,所述日志创建与保存模块进一步用于,将根据所述读/写请求进行数据读/写的时间与所述读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件;和/或,将读/写请求标志与所述读/写请求所要读/写的数据相对应,保存到与该端口相对应的日志文件。
9.根据权利要求6或7所述的系统,其特征在于,所述端口为一个以上的端口,则所述日志创建与保存模块用于,创建与每个端口相对应的日志文件;所述过滤模块用于,截获针对每个端口的每一操作请求。
10.根据权利要求6或7所述的系统,其特征在于,所述端口为串行接口,和/或,所述端口为并行接口。
全文摘要
本发明涉及一种WinNT操作系统中截获端口数据的方法和系统。该方法包括在内核模式下,创建与端口相对应的日志文件;截获针对端口的每一操作请求,根据与所述操作请求的IRP数据结构相关联的IO_STACK_LOCATION数据结构,判断所述操作请求是否为读/写请求,如果是,则将所述读/写请求所要读/写的数据保存到与该端口相对应的日志文件,然后执行所述读/写请求;否则,执行所述操作请求。利用本发明的技术方案,能降低端口数据截获的成本。
文档编号G06F11/34GK102479147SQ201010569678
公开日2012年5月30日 申请日期2010年11月26日 优先权日2010年11月26日
发明者廖峰, 张国喜, 杨林, 程双全, 胡金辉, 赵芯, 陈懿, 陈磊, 高志刚 申请人:航天信息股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1