專(zhuān)利名稱(chēng):一種WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)截獲領(lǐng)域,特別是涉及一種WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的方法和系統(tǒng)。
背景技術(shù):
微軟公司的WinNT操作系統(tǒng)是基于NT技術(shù)的32位操作系統(tǒng),它包括Windows 2000、Windows 2003和Windows XP系統(tǒng)。目前,WinNT操作系統(tǒng)已成為大多數(shù)日常辦公用計(jì)算機(jī)的主流操作系統(tǒng)。辦公用計(jì)算機(jī)中常常會(huì)保存一些重要數(shù)據(jù),例如財(cái)務(wù)數(shù)據(jù)、客戶(hù)名單以及各類(lèi)統(tǒng)計(jì)數(shù)據(jù)等,如果這些數(shù)據(jù)被泄露出去,會(huì)給單位帶來(lái)巨大的風(fēng)險(xiǎn)和損失,因此,需要對(duì)這些計(jì)算機(jī)輸入或輸出的數(shù)據(jù)進(jìn)行嚴(yán)格監(jiān)控,從而保證重要數(shù)據(jù)的安全。由于計(jì)算機(jī)輸入或者輸出數(shù)據(jù)都是通過(guò)端口進(jìn)行的,因此,可以采用監(jiān)控計(jì)算機(jī)端口的方式來(lái)監(jiān)控計(jì)算機(jī)輸入或輸出的數(shù)據(jù),這就不可避免地要對(duì)端口讀寫(xiě)的數(shù)據(jù)進(jìn)行截獲。圖1為現(xiàn)有的WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的系統(tǒng)結(jié)構(gòu)圖。如圖1所示,現(xiàn)有技術(shù)是將專(zhuān)門(mén)的硬件截獲設(shè)備103連接在所要監(jiān)控的端口 101與端口讀寫(xiě)設(shè)備102之間。當(dāng)端口讀寫(xiě)設(shè)備102向端口 101發(fā)出讀數(shù)據(jù)的請(qǐng)求時(shí),該讀請(qǐng)求被硬件截獲設(shè)備103截獲,該硬件截獲設(shè)備103從端口 101獲得該讀請(qǐng)求所要求的數(shù)據(jù)后,首先存儲(chǔ)到自身的存儲(chǔ)裝置中,然后再將該數(shù)據(jù)送至端口讀寫(xiě)設(shè)備102,從而實(shí)現(xiàn)對(duì)從端口 101讀取的數(shù)據(jù)的截獲。當(dāng)端口讀寫(xiě)設(shè)備102向端口 101發(fā)出寫(xiě)數(shù)據(jù)的請(qǐng)求以及所要寫(xiě)入的數(shù)據(jù)時(shí),該寫(xiě)請(qǐng)求和待寫(xiě)入的數(shù)據(jù)也也被硬件截獲設(shè)備103截獲,該硬件截獲設(shè)備103首先將待寫(xiě)入的數(shù)據(jù)保存到自身的存儲(chǔ)裝置中,然后將該寫(xiě)請(qǐng)求和待寫(xiě)入數(shù)據(jù)送至端口 101,從而實(shí)現(xiàn)對(duì)寫(xiě)入端口 101 的數(shù)據(jù)的截獲。由此可見(jiàn),現(xiàn)有技術(shù)利用硬件截獲方式,實(shí)現(xiàn)了對(duì)從端口 101讀取的數(shù)據(jù)以及寫(xiě)入端口 101的數(shù)據(jù)的截獲,有效地保證了端口 101所在的計(jì)算機(jī)的數(shù)據(jù)安全。但是,現(xiàn)有技術(shù)采用硬件截獲設(shè)備來(lái)截獲端口數(shù)據(jù),所使用的硬件截獲設(shè)備的數(shù)量不能少于要監(jiān)控的端口的數(shù)量,對(duì)每個(gè)要實(shí)現(xiàn)計(jì)算機(jī)數(shù)據(jù)監(jiān)控的單位來(lái)說(shuō),本單位內(nèi)待監(jiān)控的計(jì)算機(jī)數(shù)量通常比較多,而且有些計(jì)算機(jī)還有多個(gè)輸入輸出端口需要進(jìn)行監(jiān)控,這造成采用現(xiàn)有技術(shù)進(jìn)行計(jì)算機(jī)端口數(shù)據(jù)截獲的成本很高。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的方法和系統(tǒng),能降低端口數(shù)據(jù)截獲的成本。本發(fā)明解決上述技術(shù)問(wèn)題的技術(shù)方案如下一種WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的方法,該方法包括在內(nèi)核模式下,創(chuàng)建與端口相對(duì)應(yīng)的日志文件;截獲針對(duì)端口的每一操作請(qǐng)求,根據(jù)與所述操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的 I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu),判斷所述操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求,如果是,則將所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存到與該端口相對(duì)應(yīng)的日志文件,然后執(zhí)行所述讀/寫(xiě)請(qǐng)求;否貝U,執(zhí)行所述操作請(qǐng)求。本發(fā)明的有益效果是本發(fā)明中,由于在內(nèi)核模式下創(chuàng)建了與端口相對(duì)應(yīng)的日志文件,在截獲針對(duì)端口的每一操作請(qǐng)求之后,都根據(jù)與該操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu),判斷出該操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求,對(duì)于讀/寫(xiě)請(qǐng)求, 則將其要讀/寫(xiě)的數(shù)據(jù)保存到與該端口相對(duì)應(yīng)的日志文件,然后再執(zhí)行該讀/寫(xiě)請(qǐng)求,而對(duì)于讀/寫(xiě)請(qǐng)求之外的其他操作請(qǐng)求,則不進(jìn)行處理,直接執(zhí)行該操作請(qǐng)求即可,因此,本發(fā)明能夠?qū)崿F(xiàn)對(duì)從端口讀取的數(shù)據(jù)和寫(xiě)入端口的數(shù)據(jù)的截獲,從而有效地監(jiān)控計(jì)算機(jī)的輸入輸出數(shù)據(jù),保證數(shù)據(jù)的安全,同時(shí),本發(fā)明所采用的端口數(shù)據(jù)截獲方法完全是軟件方法,只需將該軟件加載到各待監(jiān)控計(jì)算機(jī)而無(wú)需采用任何專(zhuān)門(mén)的硬件截獲設(shè)備來(lái)實(shí)現(xiàn)數(shù)據(jù)截獲功能,因此,本發(fā)明大大降低了端口數(shù)據(jù)截獲的成本。在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)進(jìn)一步,在判斷所述操作請(qǐng)求為讀/寫(xiě)請(qǐng)求之后,該方法進(jìn)一步包括將所述讀/ 寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)順序保存到緩沖區(qū);則將所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存到與該端口相對(duì)應(yīng)的日志文件,為確定所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存在所述緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度;根據(jù)所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存在所述緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度,將首地址為所述緩沖區(qū)中的首地址、長(zhǎng)度為所述數(shù)據(jù)長(zhǎng)度的數(shù)據(jù)從所述緩沖區(qū)中取出, 保存到與該端口相對(duì)應(yīng)的日志文件。進(jìn)一步,在判斷所述操作請(qǐng)求為讀/寫(xiě)請(qǐng)求之后,該方法進(jìn)一步包括將根據(jù)所述讀/寫(xiě)請(qǐng)求進(jìn)行數(shù)據(jù)讀/寫(xiě)的時(shí)間與所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件;和/ 或,將讀/寫(xiě)請(qǐng)求標(biāo)志與所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件。進(jìn)一步,所述端口為一個(gè)以上的端口,則所述創(chuàng)建與端口相對(duì)應(yīng)的日志文件為創(chuàng)建與每個(gè)端口相對(duì)應(yīng)的日志文件;所述截獲針對(duì)端口的每一操作請(qǐng)求為截獲針對(duì)每個(gè)端口的每一操作請(qǐng)求。進(jìn)一步,所述端口為串行接口,和/或,所述端口為并行接口。另外,本發(fā)明還提供了一種WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的系統(tǒng),所述端口具有端口編號(hào),該系統(tǒng)包括日志創(chuàng)建與保存模塊、過(guò)濾模塊、操作請(qǐng)求執(zhí)行模塊,其中所述日志創(chuàng)建與保存模塊用于,在內(nèi)核模式下,創(chuàng)建與端口相對(duì)應(yīng)的日志文件;根據(jù)所述讀/寫(xiě)請(qǐng)求所針對(duì)的端口的端口編號(hào),確定所述讀/寫(xiě)請(qǐng)求所針對(duì)的端口,將所述過(guò)濾模塊送來(lái)的讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存到與所述讀/寫(xiě)請(qǐng)求所針對(duì)的端口相對(duì)應(yīng)的日志文件,將所述讀/寫(xiě)請(qǐng)求發(fā)送到所述操作請(qǐng)求執(zhí)行模塊;所述過(guò)濾模塊用于,截獲針對(duì)端口的每一操作請(qǐng)求,根據(jù)與所述操作請(qǐng)求的IRP 數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu),判斷所述操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求;將讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)和所述讀/寫(xiě)請(qǐng)求所針對(duì)的端口的端口編號(hào)發(fā)送到所述日志創(chuàng)建與保存模塊;將讀/寫(xiě)請(qǐng)求之外的其他操作請(qǐng)求發(fā)送到所述操作請(qǐng)求執(zhí)行模塊;所述操作請(qǐng)求執(zhí)行模塊用于,執(zhí)行所述日志創(chuàng)建與保存模塊送來(lái)的所述讀/寫(xiě)請(qǐng)求;執(zhí)行所述過(guò)濾模塊送來(lái)的所述讀/寫(xiě)請(qǐng)求之外的其他操作請(qǐng)求。進(jìn)一步,所述過(guò)濾模塊進(jìn)一步用于,將所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)順序保存到緩沖區(qū);則所述日志創(chuàng)建與保存模塊用于,確定所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存在所述緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度;根據(jù)所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存在所述緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度,將首地址為所述緩沖區(qū)中的首地址、長(zhǎng)度為所述數(shù)據(jù)長(zhǎng)度的數(shù)據(jù)從所述緩沖區(qū)中取出,保存到與所述讀/寫(xiě)請(qǐng)求所針對(duì)的端口相對(duì)應(yīng)的日志文件。進(jìn)一步,所述日志創(chuàng)建與保存模塊進(jìn)一步用于,將根據(jù)所述讀/寫(xiě)請(qǐng)求進(jìn)行數(shù)據(jù)讀/寫(xiě)的時(shí)間與所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件;和/或,將讀/寫(xiě)請(qǐng)求標(biāo)志與所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件。進(jìn)一步,所述端口為一個(gè)以上的端口,則所述日志創(chuàng)建與保存模塊用于,創(chuàng)建與每個(gè)端口相對(duì)應(yīng)的日志文件;所述過(guò)濾模塊用于,截獲針對(duì)每個(gè)端口的每一操作請(qǐng)求。進(jìn)一步,所述端口為串行接口,和/或,所述端口為并行接口。
圖1為現(xiàn)有的WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的系統(tǒng)結(jié)構(gòu)圖;圖2為本發(fā)明提供的WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的方法流程圖;圖3為本發(fā)明提供的WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的系統(tǒng)結(jié)構(gòu)圖。
具體實(shí)施例方式以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。圖2為本發(fā)明提供的WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的方法流程圖。如圖2所示, 該方法包括步驟201 在內(nèi)核模式下,創(chuàng)建與端口相對(duì)應(yīng)的日志文件。這里,不同于其他操作系統(tǒng),WinNT操作系統(tǒng)是采用分層設(shè)計(jì)思路而設(shè)計(jì)的,即將操作系統(tǒng)分為用戶(hù)模式和內(nèi)核模式。其中,操作系統(tǒng)的核心代碼運(yùn)行在內(nèi)核模式下,這些核心代碼能夠直接訪問(wèn)物理端口、物理內(nèi)存等,而非核心代碼運(yùn)行在用戶(hù)模式下,這些非核心代碼要訪問(wèn)物理端口,需要向核心代碼提出請(qǐng)求,然后由核心代碼來(lái)執(zhí)行訪問(wèn)物理端口的操作,執(zhí)行完畢后將執(zhí)行結(jié)果返回給非核心代碼。因此,本步驟在內(nèi)核模式下創(chuàng)建與端口相對(duì)應(yīng)的日志文件,步驟202至步驟205也在WinNT操作系統(tǒng)的內(nèi)核模式下進(jìn)行,可以方便快捷地用軟件實(shí)現(xiàn)截獲端口數(shù)據(jù)的功能。本發(fā)明中,要進(jìn)行監(jiān)控的端口的數(shù)量可以為一個(gè),也可以為多個(gè),每個(gè)端口都有自己的端口編號(hào),不同端口的端口編號(hào)不同,在各種操作請(qǐng)求對(duì)某個(gè)端口進(jìn)行訪問(wèn)時(shí),需要區(qū)分出該操作請(qǐng)求所要執(zhí)行的操作是針對(duì)哪個(gè)端口進(jìn)行的,因而該操作請(qǐng)求中可以包含端口編號(hào),用來(lái)指示自身所針對(duì)的端口。在需要進(jìn)行監(jiān)控的端口的數(shù)量為一個(gè)以上的情況下,針對(duì)每個(gè)端口,本發(fā)明都創(chuàng)建一個(gè)與該端口相對(duì)應(yīng)的日志文件,用于存儲(chǔ)從該端口讀出或?qū)懭朐摱丝诘臄?shù)據(jù),對(duì)不同端口進(jìn)行讀/寫(xiě)的數(shù)據(jù)是存儲(chǔ)到不同的日志文件中的。步驟202 截獲針對(duì)端口的每一操作請(qǐng)求。這里,對(duì)端口的操作請(qǐng)求多種多樣,每一種操作請(qǐng)求都涉及一種對(duì)端口的操作,例如,讀請(qǐng)求、寫(xiě)請(qǐng)求、打開(kāi)請(qǐng)求、關(guān)閉請(qǐng)求等,分別實(shí)現(xiàn)從端口讀出數(shù)據(jù)、向端口寫(xiě)入數(shù)據(jù)、打開(kāi)端口以及關(guān)閉端口等功能,其中,只有寫(xiě)請(qǐng)求和讀請(qǐng)求涉及輸入輸出數(shù)據(jù),因此,本發(fā)明需要將針對(duì)端口的所有操作請(qǐng)求都截獲,然后從中分辨出對(duì)端口進(jìn)行讀操作或?qū)懖僮鞯恼?qǐng)求,從而實(shí)現(xiàn)對(duì)端口讀寫(xiě)的數(shù)據(jù)的截獲。步驟203 根據(jù)與操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu),判斷該操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求,如果是,則依次執(zhí)行步驟204和205,否則,執(zhí)行步驟 205。這里,當(dāng)步驟202截獲針對(duì)端口的一項(xiàng)操作請(qǐng)求時(shí),通過(guò)本步驟可以判斷出該操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求,如果是讀請(qǐng)求或?qū)懻?qǐng)求,則依次執(zhí)行步驟204的保存數(shù)據(jù)和步驟205的執(zhí)行讀/寫(xiě)請(qǐng)求的步驟,如果是讀請(qǐng)求和寫(xiě)請(qǐng)求之外的其他操作請(qǐng)求,則直接執(zhí)行步驟205執(zhí)行該操作請(qǐng)求的步驟,這種對(duì)操作請(qǐng)求直接執(zhí)行步驟205的操作方式,稱(chēng)為 Pass-Through 方式。判斷該操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求的方法,可以是根據(jù)與該操作請(qǐng)求的IRP(IA) Request lockage,輸入輸出請(qǐng)求包)數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)來(lái)判斷該操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求。在WinNT操作系統(tǒng)中,操作請(qǐng)求是與IRP數(shù)據(jù)結(jié)構(gòu)相對(duì)應(yīng)的,并且每種IRP數(shù)據(jù)結(jié)構(gòu)都與一種I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián),即不同IRP數(shù)據(jù)結(jié)構(gòu)所關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)是不同的,這樣,不同操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)所關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)也就不同,因此,可以根據(jù)與操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)來(lái)判斷該操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求。I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)中有多個(gè)參數(shù),可以選取其中的一個(gè)特定參數(shù)作為判斷依據(jù),該特定參數(shù)具有如下特征讀請(qǐng)求和寫(xiě)請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)所關(guān)聯(lián)的I0_STACK_ LOCATION數(shù)據(jù)結(jié)構(gòu)中的該特定參數(shù),與其他操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)所關(guān)聯(lián)的I0_STACK_ LOCATION數(shù)據(jù)結(jié)構(gòu)中的該特定參數(shù)是不同的,進(jìn)一步地,讀請(qǐng)求和寫(xiě)請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)所關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)中的該特定參數(shù)也是不同的。這樣,在截取了針對(duì)端口的操作請(qǐng)求之后,利用I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)中的該特定參數(shù),即可判斷該操作請(qǐng)求是否為讀請(qǐng)求或?qū)懻?qǐng)求,進(jìn)而采取不同的處理方式。例如,該特定參數(shù)可以選取 I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)中的MajorFunction參數(shù),該參數(shù)用于指示與該I0_STACK_ LOCATION數(shù)據(jù)結(jié)構(gòu)關(guān)聯(lián)的IRP數(shù)據(jù)結(jié)構(gòu)的主功能碼,對(duì)于不同的IRP數(shù)據(jù)結(jié)構(gòu)來(lái)說(shuō),其關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)中的MajorFunction參數(shù)是不同的,因而可以用該參數(shù)來(lái)作為判斷一個(gè)操作請(qǐng)求是否為讀請(qǐng)求或?qū)懻?qǐng)求的依據(jù)。具體地,WinNT操作系統(tǒng)中的讀請(qǐng)求和寫(xiě)請(qǐng)求分別對(duì)應(yīng)著IRP_MJ_READ和IRP_MJ_ WRITE這兩個(gè)IRP數(shù)據(jù)結(jié)構(gòu),這兩個(gè)IRP數(shù)據(jù)結(jié)構(gòu)所關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)中的MajorFimction參數(shù)是不同的,因此,本步驟根據(jù)與該操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu),即可判斷出該操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求,從而決定后續(xù)的步驟。當(dāng)然,本發(fā)明還可以采用其他方式來(lái)判斷該操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求,例如,根據(jù)該操作請(qǐng)求是否包含讀/寫(xiě)數(shù)據(jù)項(xiàng)來(lái)判斷。步驟204 將讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存到與該端口相對(duì)應(yīng)的日志文件。這里,步驟203對(duì)步驟202中截獲的操作請(qǐng)求的判斷結(jié)果為是讀/寫(xiě)請(qǐng)求,故為了實(shí)現(xiàn)對(duì)端口輸入輸出數(shù)據(jù)的監(jiān)控,在本步驟中將該讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存到步驟201創(chuàng)建的與該端口相對(duì)應(yīng)的日志文件。對(duì)于要從端口讀出數(shù)據(jù)的讀請(qǐng)求,本發(fā)明按照該讀請(qǐng)求,將該讀請(qǐng)求所要求讀出的數(shù)據(jù)先送至特定的存儲(chǔ)空間,例如內(nèi)存中的緩沖區(qū),或者硬盤(pán)中的特定文件,或者其他存儲(chǔ)空間,然后從該特定的存儲(chǔ)空間將這些數(shù)據(jù)發(fā)送到與該端口相對(duì)應(yīng)的日志文件中進(jìn)行保存,這樣就實(shí)現(xiàn)了對(duì)從該端口讀出的數(shù)據(jù)的截獲。截獲完成之后,即可執(zhí)行步驟205。對(duì)于要將數(shù)據(jù)寫(xiě)入端口的寫(xiě)請(qǐng)求,本發(fā)明是先截獲該寫(xiě)請(qǐng)求以及要寫(xiě)入端口的數(shù)據(jù),在把要寫(xiě)入端口的數(shù)據(jù)保存到該端口對(duì)應(yīng)的日志文件、實(shí)現(xiàn)了對(duì)要寫(xiě)入端口的數(shù)據(jù)的截獲之后,再執(zhí)行步驟205,按照該寫(xiě)請(qǐng)求將數(shù)據(jù)寫(xiě)入端口。將數(shù)據(jù)保存到日志文件中后,在用戶(hù)模式下,利用應(yīng)用程序就可以訪問(wèn)日志文件, 從而獲知對(duì)該日志文件對(duì)應(yīng)的端口所讀/寫(xiě)過(guò)的數(shù)據(jù),進(jìn)而判斷是否泄密。當(dāng)然,也可以在應(yīng)用層創(chuàng)建專(zhuān)門(mén)的虛擬過(guò)濾設(shè)備,用于接收應(yīng)用層的應(yīng)用程序的請(qǐng)求,幫助這些應(yīng)用程序?qū)崿F(xiàn)對(duì)日志文件的訪問(wèn),同時(shí),該虛擬過(guò)濾設(shè)備作為內(nèi)核模式下本發(fā)明所述的方法在用戶(hù)模式下的虛擬對(duì)應(yīng)實(shí)體,實(shí)現(xiàn)本發(fā)明所述的步驟201至步驟205的方法。步驟205 執(zhí)行該操作請(qǐng)求。這里,本步驟為按照操作請(qǐng)求對(duì)端口執(zhí)行相應(yīng)的操作,S卩,如果是在執(zhí)行完步驟 204所述的對(duì)讀/寫(xiě)數(shù)據(jù)的截獲之后,本步驟就按照讀/寫(xiě)請(qǐng)求,完成數(shù)據(jù)的讀/寫(xiě);如果在步驟203中判斷所截獲的操作請(qǐng)求為讀/寫(xiě)請(qǐng)求之外的其他操作請(qǐng)求后,直接執(zhí)行本步驟, 則按照該操作請(qǐng)求執(zhí)行相應(yīng)的操作,例如,該操作請(qǐng)求為打開(kāi)請(qǐng)求,則本步驟就執(zhí)行打開(kāi)端口的操作。由此可見(jiàn),本發(fā)明中,由于在內(nèi)核模式下創(chuàng)建了與端口相對(duì)應(yīng)的日志文件,在截獲針對(duì)端口的每一操作請(qǐng)求之后,都根據(jù)與該操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的I0_STACK_ LOCATION數(shù)據(jù)結(jié)構(gòu),判斷該操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求,對(duì)于讀/寫(xiě)請(qǐng)求,則將其要讀/寫(xiě)的數(shù)據(jù)保存到與該端口相對(duì)應(yīng)的日志文件,然后再執(zhí)行該讀/寫(xiě)請(qǐng)求,而對(duì)于讀/寫(xiě)請(qǐng)求之外的其他操作請(qǐng)求,則不進(jìn)行處理,直接執(zhí)行該操作請(qǐng)求即可,因此,本發(fā)明能夠?qū)崿F(xiàn)對(duì)從端口讀取的數(shù)據(jù)和寫(xiě)入端口的數(shù)據(jù)的截獲,從而有效地監(jiān)控計(jì)算機(jī)的輸入輸出數(shù)據(jù),保證數(shù)據(jù)的安全,同時(shí),本發(fā)明所采用的端口數(shù)據(jù)截獲方法完全是軟件方法,只需將該軟件加載到各待監(jiān)控計(jì)算機(jī)而無(wú)需采用任何專(zhuān)門(mén)的硬件截獲設(shè)備來(lái)實(shí)現(xiàn)數(shù)據(jù)截獲功能,因此,本發(fā)明大大降低了端口數(shù)據(jù)截獲的成本。WinNT操作系統(tǒng)對(duì)Wiri^c操作系統(tǒng)做了改進(jìn),其端口無(wú)需獨(dú)占即可進(jìn)行訪問(wèn),這意味著對(duì)于應(yīng)用WinNT操作系統(tǒng)的計(jì)算機(jī)來(lái)說(shuō),設(shè)備或應(yīng)用程序在訪問(wèn)其端口時(shí),無(wú)需在訪問(wèn)前申請(qǐng)端口的使用權(quán),也不必在訪問(wèn)結(jié)束后釋放端口的使用權(quán)。
在步驟203判斷一個(gè)操作請(qǐng)求為讀/寫(xiě)請(qǐng)求之后,該方法進(jìn)一步包括將讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)順序保存到緩沖區(qū);則步驟204所述的將讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存到與該端口相對(duì)應(yīng)的日志文件,為確定讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存在緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度;根據(jù)讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存在緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度,將首地址為緩沖區(qū)中的首地址、長(zhǎng)度為數(shù)據(jù)長(zhǎng)度的數(shù)據(jù)從緩沖區(qū)中取出,保存到與該端口相對(duì)應(yīng)的日志文件。這里,由于在端口讀或?qū)憯?shù)據(jù)的速度與數(shù)據(jù)在端口以外的線路中傳輸?shù)乃俣仁遣煌?,因此,本發(fā)明將讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存到緩沖區(qū),可以使二者的速度達(dá)到匹配,同時(shí)也可以在步驟204將數(shù)據(jù)保存到日志文件中之后,無(wú)需重新從計(jì)算機(jī)取數(shù)據(jù)送出端口以實(shí)現(xiàn)對(duì)從端口讀出數(shù)據(jù)或重新取數(shù)據(jù)送至端口以實(shí)現(xiàn)向端口寫(xiě)入數(shù)據(jù),節(jié)約數(shù)據(jù)讀/寫(xiě)的時(shí)間。將要讀/寫(xiě)的數(shù)據(jù)保存到緩沖區(qū)的方式為順序保存,這樣,可以在確定該數(shù)據(jù)保存在緩沖區(qū)中的首地址以及數(shù)據(jù)長(zhǎng)度之后,方便地取出數(shù)據(jù),否則,如果數(shù)據(jù)是以非順序保存的方式保存到緩沖區(qū)的,則根據(jù)數(shù)據(jù)保存的首地址和數(shù)據(jù)長(zhǎng)度,是無(wú)法全部取出數(shù)據(jù)的, 這樣就增加了取出數(shù)據(jù)的難度,因此,本發(fā)明將數(shù)據(jù)采取順序保存的方式保存到緩沖區(qū)中, 大大方便了從緩沖區(qū)中取出數(shù)據(jù)。在步驟203判斷操作請(qǐng)求為讀/寫(xiě)請(qǐng)求之后,該方法進(jìn)一步包括將根據(jù)讀/寫(xiě)請(qǐng)求進(jìn)行數(shù)據(jù)讀/寫(xiě)的時(shí)間與讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng), 保存到與該端口相對(duì)應(yīng)的日志文件;將讀/寫(xiě)請(qǐng)求標(biāo)志與讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件。這里,讀/寫(xiě)請(qǐng)求標(biāo)志可以為讀標(biāo)志,也可以為寫(xiě)標(biāo)志,其中,讀標(biāo)志意味著與該讀標(biāo)志相對(duì)應(yīng)的數(shù)據(jù)為從端口讀出的數(shù)據(jù),寫(xiě)標(biāo)志意味著與該寫(xiě)標(biāo)志對(duì)應(yīng)的數(shù)據(jù)為向端口寫(xiě)入的數(shù)據(jù)。將根據(jù)讀/寫(xiě)請(qǐng)求進(jìn)行數(shù)據(jù)讀/寫(xiě)的時(shí)間與讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件,能進(jìn)一步確定讀/寫(xiě)這些數(shù)據(jù)的時(shí)間,從而使本發(fā)明對(duì)端口輸入輸出數(shù)據(jù)的監(jiān)控更加有效和方便。 同樣,將讀/寫(xiě)請(qǐng)求標(biāo)志與讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件,也可以進(jìn)一步確定所保存的數(shù)據(jù)是從端口讀出的數(shù)據(jù)還是向端口寫(xiě)入的數(shù)據(jù),從而使本發(fā)明對(duì)端口輸入輸出數(shù)據(jù)的監(jiān)控更加有效和方便。本發(fā)明中,端口可以為一個(gè)以上的端口,則步驟201中創(chuàng)建與端口相對(duì)應(yīng)的日志文件的方法為創(chuàng)建與每個(gè)端口相對(duì)應(yīng)的日志文件;步驟202中截獲針對(duì)端口的每一操作請(qǐng)求的方法為截獲針對(duì)每個(gè)端口的每一操作請(qǐng)求。這里,利用本發(fā)明進(jìn)行監(jiān)控的端口的數(shù)量可以為一個(gè),也可以為兩個(gè)以上。如果端口的數(shù)量為兩個(gè)以上,則本發(fā)明可以同時(shí)對(duì)這些端口進(jìn)行實(shí)時(shí)監(jiān)控,當(dāng)然,也可以不同時(shí)對(duì)這些端口進(jìn)行監(jiān)控。
針對(duì)每個(gè)端口,本發(fā)明在步驟201中創(chuàng)建與每個(gè)端口分別對(duì)應(yīng)的日志文件,步驟 202中截獲針對(duì)每個(gè)端口的每一操作請(qǐng)求,這樣,本發(fā)明就可以實(shí)現(xiàn)對(duì)一個(gè)或兩個(gè)以上的端口同時(shí)或不同時(shí)地進(jìn)行數(shù)據(jù)截獲和實(shí)時(shí)監(jiān)控。本發(fā)明中所述的端口可以為串行接口,也可以為并行接口,當(dāng)然,還可以為其他端口,例如紅外接口、藍(lán)牙接口、USB接口等。只要該端口能實(shí)現(xiàn)數(shù)據(jù)的輸入輸出,就在本發(fā)明的保護(hù)范圍之內(nèi)。上述各方法是通過(guò)軟件方式實(shí)現(xiàn)的,該軟件可利用微軟公司發(fā)行的DDK2006驅(qū)動(dòng)開(kāi)發(fā)工具和Compuware公司開(kāi)發(fā)的DriverMudio工具包開(kāi)發(fā)得到。由于端口可以為串行接口,也可以為并行接口,還可以為其他接口,這些接口的驅(qū)動(dòng)程序不同,這意味著對(duì)這些端口進(jìn)行讀/寫(xiě),其讀/寫(xiě)速度、讀/寫(xiě)請(qǐng)求格式都有所不同, 而且各種端口的數(shù)量也可以多于一個(gè),因此,在步驟201中創(chuàng)建與端口對(duì)應(yīng)的日志文件之前,可以首先記錄各端口的參數(shù),形成記錄各端口參數(shù)的配置文件,然后在步驟201中創(chuàng)建與端口相應(yīng)的日志文件時(shí),即可根據(jù)該配置文件,獲得相應(yīng)端口的參數(shù)信息,從而針對(duì)不同的端口創(chuàng)建不同的日志文件。步驟202截獲針對(duì)端口的每一操作請(qǐng)求的工作,可以由DriverMudi0封裝的 KLowerDevice類(lèi)和KFilterDevice類(lèi)來(lái)執(zhí)行,本發(fā)明利用KLowerDevice類(lèi)的構(gòu)造函數(shù)和配置文件的端口參數(shù)來(lái)指定待監(jiān)控的端口,然后利用KFilterDevice類(lèi)的構(gòu)造函數(shù)在應(yīng)用層建立虛擬過(guò)濾設(shè)備,當(dāng)虛擬過(guò)濾設(shè)備建立后,該虛擬過(guò)濾設(shè)備就可以在應(yīng)用層實(shí)現(xiàn)對(duì)每一操作請(qǐng)求的截獲。其中,KLowerDevice類(lèi)的構(gòu)造函數(shù)形式為KLowerDevice(PUNICODE_STRING name,ACCESS_MASK access);其中,name是被監(jiān)控的端口的名稱(chēng);access是訪問(wèn)端口的方式,常見(jiàn)的訪問(wèn)端口的方式包括讀端口、寫(xiě)端口、同時(shí)讀寫(xiě)端口等。KFilterDevice類(lèi)的構(gòu)造函數(shù)形式為KFilterDevice(PCffSTR NameOfDeviceToFilter,ULONG DevType,ULONG DevFlags);其中,NameOfDeviceToFilter是虛擬過(guò)濾設(shè)備的名稱(chēng);DevType為虛擬過(guò)濾設(shè)備的類(lèi)型,虛擬過(guò)濾設(shè)備的類(lèi)型包括串行接口,并行接口等;DevFlags為虛擬過(guò)濾設(shè)備的標(biāo)志,虛擬過(guò)濾設(shè)備的標(biāo)志包括獨(dú)占訪問(wèn)、通過(guò)緩沖訪問(wèn)等。當(dāng)虛擬過(guò)濾設(shè)備在應(yīng)用層建立之后,將在WinNT操作系統(tǒng)的驅(qū)動(dòng)設(shè)備管理中出現(xiàn)該虛擬過(guò)濾設(shè)備的名稱(chēng),這樣,用戶(hù)模式下,應(yīng)用層的應(yīng)用程序就可以通過(guò)直接操作該虛擬過(guò)濾設(shè)備來(lái)查看日志文件中的數(shù)據(jù)。本本發(fā)明所提供的端口數(shù)據(jù)截獲方案已在Windows 2000\2003\XP操作系統(tǒng)下得到了驗(yàn)證,從而證明了該軟件對(duì)于WinNT操作系統(tǒng)的可行性。圖3為本發(fā)明提供的WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的系統(tǒng)結(jié)構(gòu)圖。該系統(tǒng)中的端口具有端口編號(hào),如圖3所示,該系統(tǒng)包括日志創(chuàng)建與保存模塊301、過(guò)濾模塊302、操作
10請(qǐng)求執(zhí)行模塊303,其中日志創(chuàng)建與保存模塊301用于,在內(nèi)核模式下,創(chuàng)建與端口相對(duì)應(yīng)的日志文件;根據(jù)讀/寫(xiě)請(qǐng)求所針對(duì)的端口的端口編號(hào),確定讀/寫(xiě)請(qǐng)求所針對(duì)的端口,將過(guò)濾模塊302送來(lái)的讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存到與讀/寫(xiě)請(qǐng)求所針對(duì)的端口相對(duì)應(yīng)的日志文件, 將讀/寫(xiě)請(qǐng)求發(fā)送到操作請(qǐng)求執(zhí)行模塊303 ;過(guò)濾模塊302用于,截獲針對(duì)端口的每一操作請(qǐng)求,根據(jù)與該操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu),判斷操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求;將讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)和讀/寫(xiě)請(qǐng)求所針對(duì)的端口的端口編號(hào)發(fā)送到日志創(chuàng)建與保存模塊 301 ;將讀/寫(xiě)請(qǐng)求之外的其他操作請(qǐng)求發(fā)送到操作請(qǐng)求執(zhí)行模塊303 ;操作請(qǐng)求執(zhí)行模塊303用于,執(zhí)行日志創(chuàng)建與保存模塊301送來(lái)的讀/寫(xiě)請(qǐng)求;執(zhí)行過(guò)濾模塊302送來(lái)的讀/寫(xiě)請(qǐng)求之外的其他操作請(qǐng)求。這里,每個(gè)端口都具有自身的端口編號(hào),該端口編號(hào)可以用于識(shí)別該端口,從而方便日志創(chuàng)建與保存模塊301來(lái)創(chuàng)建與各端口相應(yīng)的日志文件、確定包括讀/寫(xiě)請(qǐng)求在內(nèi)的各種操作請(qǐng)求所針對(duì)的端口,以及實(shí)現(xiàn)對(duì)端口的讀寫(xiě)。該系統(tǒng)中,過(guò)濾模塊302用于,根據(jù)與操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的10_ STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu),判斷操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求。WinNT操作系統(tǒng)中,由于操作請(qǐng)求與IRP數(shù)據(jù)結(jié)構(gòu)相對(duì)應(yīng),而每種IRP數(shù)據(jù)結(jié)構(gòu)都與一種I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián),不同IRP數(shù)據(jù)結(jié)構(gòu)所關(guān)聯(lián)的I0_STACK_ LOCATION數(shù)據(jù)結(jié)構(gòu)也不同,因此,不同操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)所關(guān)聯(lián)的I0_STACK_ LOCATION數(shù)據(jù)結(jié)構(gòu)就不同,具體表現(xiàn)為I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)中的特定參數(shù),例如MajorFimction參數(shù),有所不同,如打開(kāi)請(qǐng)求、關(guān)閉請(qǐng)求、讀請(qǐng)求、寫(xiě)請(qǐng)求就分別對(duì)應(yīng)四個(gè)IRP數(shù)據(jù)結(jié)構(gòu),而每個(gè)IRP數(shù)據(jù)結(jié)構(gòu)所關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)中的 MajorFunction參數(shù)是不同的。這樣,通過(guò)讀請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)IRP_MJ_READ所關(guān)聯(lián)的 I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)中的MajorFunction參數(shù),即可判斷出該操作請(qǐng)求為讀請(qǐng)求。 同樣,通過(guò)寫(xiě)請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)IRP_MJ_WRITE所關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu)中的MajorFunction參數(shù),即可判斷出該操作請(qǐng)求為寫(xiě)請(qǐng)求。本發(fā)明需要進(jìn)行的是截獲對(duì)端口進(jìn)行讀/寫(xiě)的原始數(shù)據(jù),因而過(guò)濾模塊302只需要對(duì)讀/寫(xiě)請(qǐng)求所涉及的數(shù)據(jù)進(jìn)行截獲, 其他類(lèi)型的操作請(qǐng)求只需采用I^ss-Through方式,按照其對(duì)應(yīng)的操作請(qǐng)求直接進(jìn)行處理即可。由于計(jì)算機(jī)的端口多種多樣,可以為串行接口,也可以為并行接口,還可以為紅外接口、藍(lán)牙接口以及USB接口等,不同端口的數(shù)據(jù)讀/寫(xiě)格式、速度不同,因此,通過(guò)端口編號(hào)可以方便地針對(duì)不同種類(lèi)的端口進(jìn)行相應(yīng)的操作。例如,如果端口編號(hào)Port = 1,該端口為串行接口,則日志創(chuàng)建與保存模塊301就需要?jiǎng)?chuàng)建與該串行接口相應(yīng)的日志文件,并根據(jù)過(guò)濾模塊302發(fā)送的端口編號(hào)為1的讀請(qǐng)求,確定該讀請(qǐng)求針對(duì)的端口為該串行接口,然后將相應(yīng)的數(shù)據(jù)保存到該串行接口對(duì)應(yīng)的日志文件中,最后由操作請(qǐng)求執(zhí)行模塊303執(zhí)行該讀請(qǐng)求,將數(shù)據(jù)讀出。包括端口編號(hào)在內(nèi)的關(guān)于端口的各種參數(shù)可以記錄在預(yù)先設(shè)定的配置文件中,這樣,通過(guò)讀取該配置文件,就可以方便地了解各端口的編號(hào)以及其他各種參數(shù),從而進(jìn)行相應(yīng)的讀/寫(xiě)端口、打開(kāi)端口、關(guān)閉端口等操作。
該系統(tǒng)中,由于日志創(chuàng)建與保存模塊301在內(nèi)核模式下創(chuàng)建了與端口相對(duì)應(yīng)的日志文件,過(guò)濾模塊302在截獲針對(duì)端口的每一操作請(qǐng)求之后,可以判斷被截獲的操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求,對(duì)于讀/寫(xiě)請(qǐng)求,則由日志創(chuàng)建與保存模塊301將其要讀/寫(xiě)的數(shù)據(jù)保存到與該端口相對(duì)應(yīng)的日志文件,然后再由操作請(qǐng)求執(zhí)行模塊303執(zhí)行該讀/寫(xiě)請(qǐng)求,而對(duì)于讀/寫(xiě)請(qǐng)求之外的其他操作請(qǐng)求,則不進(jìn)行處理,直接由操作請(qǐng)求執(zhí)行模塊303執(zhí)行該操作請(qǐng)求即可,因此,本發(fā)明能夠?qū)崿F(xiàn)對(duì)從端口讀取的數(shù)據(jù)和寫(xiě)入端口的數(shù)據(jù)的截獲,從而有效地監(jiān)控計(jì)算機(jī)的輸入輸出數(shù)據(jù),保證數(shù)據(jù)的安全,同時(shí),本發(fā)明提出的端口數(shù)據(jù)截獲系統(tǒng)中的各模塊均為軟件模塊,只需將該軟件加載到各待監(jiān)控計(jì)算機(jī)而無(wú)需采用任何專(zhuān)門(mén)的硬件截獲設(shè)備來(lái)實(shí)現(xiàn)數(shù)據(jù)截獲功能,因此,本發(fā)明大大降低了端口數(shù)據(jù)截獲的成本。該系統(tǒng)中,過(guò)濾模塊302進(jìn)一步用于,將讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)順序保存到緩沖區(qū);則日志創(chuàng)建與保存模塊301用于,確定讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存在緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度;根據(jù)讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存在緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度,將首地址為緩沖區(qū)中的首地址、長(zhǎng)度為數(shù)據(jù)長(zhǎng)度的數(shù)據(jù)從緩沖區(qū)中取出,保存到與讀/寫(xiě)請(qǐng)求所針對(duì)的端口相對(duì)應(yīng)的日志文件。這里,緩沖區(qū)可以起到對(duì)端口讀/寫(xiě)速度和線路傳輸速度的匹配作用,同時(shí),也起到數(shù)據(jù)緩存作用,節(jié)約了數(shù)據(jù)讀寫(xiě)的時(shí)間,提高了計(jì)算機(jī)數(shù)據(jù)監(jiān)控的速度。緩沖區(qū)可以為內(nèi)存中的緩沖區(qū),也可以為硬盤(pán)中的某一特定存儲(chǔ)空間,無(wú)需另外添加硬件存儲(chǔ)設(shè)備,利用該計(jì)算機(jī)中的原有存儲(chǔ)設(shè)備即可。過(guò)濾模塊302將數(shù)據(jù)順序保存到緩沖區(qū),這樣,日志創(chuàng)建與保存模塊301就可以根據(jù)該數(shù)據(jù)在緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度,從緩沖區(qū)中取出該數(shù)據(jù),否則,日志創(chuàng)建與保存模塊301將無(wú)法根據(jù)數(shù)據(jù)在緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度將數(shù)據(jù)從緩沖區(qū)中讀出,必須采用其他更復(fù)雜的方法。該系統(tǒng)中,日志創(chuàng)建與保存模塊301進(jìn)一步用于,將根據(jù)讀/寫(xiě)請(qǐng)求進(jìn)行數(shù)據(jù)讀/ 寫(xiě)的時(shí)間與讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件;和/ 或,將讀/寫(xiě)請(qǐng)求標(biāo)志與讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件。這里,將數(shù)據(jù)讀/寫(xiě)的時(shí)間和讀/寫(xiě)標(biāo)志與數(shù)據(jù)相對(duì)應(yīng),保存在日志文件中,可以進(jìn)一步這些數(shù)據(jù)是被讀出端口還是寫(xiě)入端口,以及確定所讀/寫(xiě)的時(shí)間,這樣就可以使本發(fā)明對(duì)端口輸入輸出數(shù)據(jù)的監(jiān)控更加有效和方便。該系統(tǒng)中的端口可以為一個(gè)以上的端口,則日志創(chuàng)建與保存模塊301用于,創(chuàng)建與每個(gè)端口相對(duì)應(yīng)的日志文件;過(guò)濾模塊302用于,截獲針對(duì)每個(gè)端口的每一操作請(qǐng)求。另外,本發(fā)明中的端口可以為串行接口,也可以為并行接口,還可以為其他種類(lèi)的可實(shí)現(xiàn)輸入輸出功能的端口。由此可見(jiàn),本發(fā)明具有以下優(yōu)點(diǎn)(1)本發(fā)明中,由于在內(nèi)核模式下創(chuàng)建了與端口相對(duì)應(yīng)的日志文件,在截獲針對(duì)端口的每一操作請(qǐng)求之后,都根據(jù)與該操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的I0_STACK_ LOCATION數(shù)據(jù)結(jié)構(gòu),判斷該操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求,對(duì)于讀/寫(xiě)請(qǐng)求,則將其要讀/寫(xiě)的數(shù)據(jù)保存到與該端口相對(duì)應(yīng)的日志文件,然后再執(zhí)行該讀/寫(xiě)請(qǐng)求,而對(duì)于讀/寫(xiě)請(qǐng)求之外的其他操作請(qǐng)求,則不進(jìn)行處理,直接執(zhí)行該操作請(qǐng)求即可,因此,本發(fā)明能夠?qū)崿F(xiàn)對(duì)從端口讀取的數(shù)據(jù)和寫(xiě)入端口的數(shù)據(jù)的截獲,從而有效地監(jiān)控計(jì)算機(jī)的輸入輸出數(shù)據(jù),保證數(shù)據(jù)的安全,同時(shí),本發(fā)明所采用的端口數(shù)據(jù)截獲方法完全是軟件方法,只需將該軟件加載到各待監(jiān)控計(jì)算機(jī)而無(wú)需采用任何專(zhuān)門(mén)的硬件截獲設(shè)備來(lái)實(shí)現(xiàn)數(shù)據(jù)截獲功能,因此,本發(fā)明大大降低了端口數(shù)據(jù)截獲的成本。(2)本發(fā)明中,將讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)采取順序保存的方式保存到緩沖區(qū)中,大大方便了從緩沖區(qū)中取出數(shù)據(jù)。(3)本發(fā)明中,將讀/寫(xiě)數(shù)據(jù)的時(shí)間以及讀/寫(xiě)請(qǐng)求標(biāo)志與讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件,能進(jìn)一步確定讀/寫(xiě)這些數(shù)據(jù)的時(shí)間, 從而使本發(fā)明對(duì)端口輸入輸出數(shù)據(jù)的監(jiān)控更加有效和方便。(4)本發(fā)明只需要在WinNT操作系統(tǒng)下安裝相應(yīng)的監(jiān)控軟件,即可實(shí)現(xiàn)對(duì)端口數(shù)據(jù)的截獲,因此,相對(duì)于現(xiàn)有技術(shù),本發(fā)明使用簡(jiǎn)單、安全、方便。以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
1權(quán)利要求
1.一種WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的方法,其特征在于,該方法包括 在內(nèi)核模式下,創(chuàng)建與端口相對(duì)應(yīng)的日志文件;截獲針對(duì)端口的每一操作請(qǐng)求,根據(jù)與所述操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的10_ STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu),判斷所述操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求,如果是,則將所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存到與該端口相對(duì)應(yīng)的日志文件,然后執(zhí)行所述讀/寫(xiě)請(qǐng)求;否貝U,執(zhí)行所述操作請(qǐng)求。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,在判斷所述操作請(qǐng)求為讀/寫(xiě)請(qǐng)求之后, 該方法進(jìn)一步包括將所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)順序保存到緩沖區(qū);則將所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存到與該端口相對(duì)應(yīng)的日志文件,為 確定所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存在所述緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度; 根據(jù)所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存在所述緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度,將首地址為所述緩沖區(qū)中的首地址、長(zhǎng)度為所述數(shù)據(jù)長(zhǎng)度的數(shù)據(jù)從所述緩沖區(qū)中取出,保存到與該端口相對(duì)應(yīng)的日志文件。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,在判斷所述操作請(qǐng)求為讀/寫(xiě)請(qǐng)求之后,該方法進(jìn)一步包括將根據(jù)所述讀/寫(xiě)請(qǐng)求進(jìn)行數(shù)據(jù)讀/寫(xiě)的時(shí)間與所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件; 和/或,將讀/寫(xiě)請(qǐng)求標(biāo)志與所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件。
4.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述端口為一個(gè)以上的端口,則 所述創(chuàng)建與端口相對(duì)應(yīng)的日志文件為創(chuàng)建與每個(gè)端口相對(duì)應(yīng)的日志文件;所述截獲針對(duì)端口的每一操作請(qǐng)求為截獲針對(duì)每個(gè)端口的每一操作請(qǐng)求。
5.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,所述端口為串行接口,和/或,所述端口為并行接口。
6.一種WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的系統(tǒng),所述端口具有端口編號(hào),其特征在于, 該系統(tǒng)包括日志創(chuàng)建與保存模塊、過(guò)濾模塊、操作請(qǐng)求執(zhí)行模塊,其中所述日志創(chuàng)建與保存模塊用于,在內(nèi)核模式下,創(chuàng)建與端口相對(duì)應(yīng)的日志文件;根據(jù)所述讀/寫(xiě)請(qǐng)求所針對(duì)的端口的端口編號(hào),確定所述讀/寫(xiě)請(qǐng)求所針對(duì)的端口,將所述過(guò)濾模塊送來(lái)的讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存到與所述讀/寫(xiě)請(qǐng)求所針對(duì)的端口相對(duì)應(yīng)的日志文件,將所述讀/寫(xiě)請(qǐng)求發(fā)送到所述操作請(qǐng)求執(zhí)行模塊;所述過(guò)濾模塊用于,截獲針對(duì)端口的每一操作請(qǐng)求,根據(jù)與所述操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的I0_STACK_L0CATI0N數(shù)據(jù)結(jié)構(gòu),判斷所述操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求;將讀/ 寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)和所述讀/寫(xiě)請(qǐng)求所針對(duì)的端口的端口編號(hào)發(fā)送到所述日志創(chuàng)建與保存模塊;將讀/寫(xiě)請(qǐng)求之外的其他操作請(qǐng)求發(fā)送到所述操作請(qǐng)求執(zhí)行模塊;所述操作請(qǐng)求執(zhí)行模塊用于,執(zhí)行所述日志創(chuàng)建與保存模塊送來(lái)的所述讀/寫(xiě)請(qǐng)求; 執(zhí)行所述過(guò)濾模塊送來(lái)的所述讀/寫(xiě)請(qǐng)求之外的其他操作請(qǐng)求。
7.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述過(guò)濾模塊進(jìn)一步用于,將所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)順序保存到緩沖區(qū);則所述日志創(chuàng)建與保存模塊用于,確定所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存在所述緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度;根據(jù)所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存在所述緩沖區(qū)中的首地址和數(shù)據(jù)長(zhǎng)度,將首地址為所述緩沖區(qū)中的首地址、長(zhǎng)度為所述數(shù)據(jù)長(zhǎng)度的數(shù)據(jù)從所述緩沖區(qū)中取出,保存到與所述讀/寫(xiě)請(qǐng)求所針對(duì)的端口相對(duì)應(yīng)的日志文件。
8.根據(jù)權(quán)利要求6或7所述的系統(tǒng),其特征在于,所述日志創(chuàng)建與保存模塊進(jìn)一步用于,將根據(jù)所述讀/寫(xiě)請(qǐng)求進(jìn)行數(shù)據(jù)讀/寫(xiě)的時(shí)間與所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件;和/或,將讀/寫(xiě)請(qǐng)求標(biāo)志與所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)相對(duì)應(yīng),保存到與該端口相對(duì)應(yīng)的日志文件。
9.根據(jù)權(quán)利要求6或7所述的系統(tǒng),其特征在于,所述端口為一個(gè)以上的端口,則所述日志創(chuàng)建與保存模塊用于,創(chuàng)建與每個(gè)端口相對(duì)應(yīng)的日志文件;所述過(guò)濾模塊用于,截獲針對(duì)每個(gè)端口的每一操作請(qǐng)求。
10.根據(jù)權(quán)利要求6或7所述的系統(tǒng),其特征在于,所述端口為串行接口,和/或,所述端口為并行接口。
全文摘要
本發(fā)明涉及一種WinNT操作系統(tǒng)中截獲端口數(shù)據(jù)的方法和系統(tǒng)。該方法包括在內(nèi)核模式下,創(chuàng)建與端口相對(duì)應(yīng)的日志文件;截獲針對(duì)端口的每一操作請(qǐng)求,根據(jù)與所述操作請(qǐng)求的IRP數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián)的IO_STACK_LOCATION數(shù)據(jù)結(jié)構(gòu),判斷所述操作請(qǐng)求是否為讀/寫(xiě)請(qǐng)求,如果是,則將所述讀/寫(xiě)請(qǐng)求所要讀/寫(xiě)的數(shù)據(jù)保存到與該端口相對(duì)應(yīng)的日志文件,然后執(zhí)行所述讀/寫(xiě)請(qǐng)求;否則,執(zhí)行所述操作請(qǐng)求。利用本發(fā)明的技術(shù)方案,能降低端口數(shù)據(jù)截獲的成本。
文檔編號(hào)G06F11/34GK102479147SQ201010569678
公開(kāi)日2012年5月30日 申請(qǐng)日期2010年11月26日 優(yōu)先權(quán)日2010年11月26日
發(fā)明者廖峰, 張國(guó)喜, 楊林, 程雙全, 胡金輝, 趙芯, 陳懿, 陳磊, 高志剛 申請(qǐng)人:航天信息股份有限公司