摘要:為掌握局域網(wǎng)內(nèi)計(jì)算機(jī)實(shí)時(shí)活動(dòng)情況,利用網(wǎng)絡(luò)通信技術(shù)、多線程技術(shù)及面向?qū)ο蟮溶浖夹g(shù)實(shí)現(xiàn)了局域網(wǎng)內(nèi)計(jì)算機(jī)活動(dòng)的監(jiān)控管理系統(tǒng)。通過采用客戶端-服務(wù)器的結(jié)構(gòu)模式,系統(tǒng)對(duì)客戶端計(jì)算機(jī)的文件操作、進(jìn)程情況和CPU狀態(tài)等信息的實(shí)時(shí)獲取并進(jìn)行全局一體化的管理,為管理局域網(wǎng)內(nèi)的計(jì)算機(jī)提供了一種實(shí)用而有效的方式。
關(guān)鍵詞:計(jì)算機(jī)活動(dòng)監(jiān)控;多線程;Socket技術(shù)
中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)35-2088-03
Design and Implementation of Computer Activity Monitor System in LAN
HAN Hong-zhang1,2, WANG Bo1,2
(1.College of Information Engineering, Yangzhou University, Yangzhou 225009, China; 2.Department of Computer Science and Engineering, Jiangsu Teachers University of Technology, Changzhou 213001,China)
Abstract: To grasp the real-time computer activities in LAN, the monitor and management system of computer activity is realized by using network communication technology, multi-threading and object-oriented software technology.Through taking the software structure of client and server model, the system can capture and manager a variety of information of the client computer such as file operations, process situation and CPU state ,and provide a practical and effective way to manage computer activities in LAN.
Key words: computer activity monitor; multi-threading; socket technology
1 引言
信息化建設(shè)的不斷推進(jìn)已經(jīng)使得局域網(wǎng)與互聯(lián)網(wǎng)日漸普及.計(jì)算機(jī)也已被許多企業(yè),學(xué)校等應(yīng)用,為他們帶來了巨大的經(jīng)濟(jì)效益和便捷。然而,計(jì)算機(jī)操作的隱蔽性、多樣性、豐富性和趣味性導(dǎo)致員工和學(xué)生的網(wǎng)絡(luò)行為無法自律,形成了大量的不規(guī)范網(wǎng)絡(luò)行為,而企業(yè)、學(xué)校沒有良好的手段對(duì)這些網(wǎng)絡(luò)行為采取有效的、徹底的控制。局域網(wǎng)計(jì)算機(jī)活動(dòng)監(jiān)控的設(shè)計(jì)是伴隨著信息的安全防護(hù)和Internet技術(shù)的廣泛應(yīng)用而應(yīng)運(yùn)而生的。 通過對(duì)局域網(wǎng)內(nèi)計(jì)算機(jī)活動(dòng)的監(jiān)控,可以最大程度的防止工作或?qū)W習(xí)時(shí)間玩游戲、安裝非法軟件黑客程序、閑聊等行為,提高企業(yè)信息化管理的效率和企業(yè)信息的安全性。
2 局域網(wǎng)內(nèi)計(jì)算機(jī)活動(dòng)監(jiān)控系統(tǒng)總體結(jié)構(gòu)
局域網(wǎng)內(nèi)計(jì)算機(jī)監(jiān)控系統(tǒng)是為了高效地管理好局域網(wǎng)內(nèi)的所有計(jì)算機(jī)而建立的一種管理和監(jiān)控系統(tǒng)。它主要是通過掌控被控端計(jì)算機(jī)實(shí)時(shí)的運(yùn)行信息,隨時(shí)了解局域網(wǎng)內(nèi)計(jì)算機(jī)的狀況,旨在為局域網(wǎng)內(nèi)的計(jì)算機(jī)管理,提供一種可靠、實(shí)用、方便高效的管理模式。
2.1 局域網(wǎng)計(jì)算機(jī)監(jiān)控系統(tǒng)的一般原理
局域網(wǎng)內(nèi)計(jì)算機(jī)活動(dòng)監(jiān)控系統(tǒng)是一種用于局域網(wǎng)下的C/S模式的軟件管理和監(jiān)控系統(tǒng),其工作原理如圖1所示。它包括客戶端和服務(wù)端,客戶端軟件主要作用是監(jiān)測(cè)本主機(jī)的活動(dòng),并將監(jiān)測(cè)到的信息定時(shí)發(fā)送給服務(wù)器。服務(wù)器端可以將收集到的信息以曲線圖和文件列表的方式呈現(xiàn)給管理員,以便對(duì)局域網(wǎng)內(nèi)的主機(jī)進(jìn)行監(jiān)測(cè)和管理。
工作的過程中,數(shù)據(jù)是在不斷傳輸和刷新中的。客戶端包括兩個(gè)部分:數(shù)據(jù)采集模塊和客戶管理器。其中,數(shù)據(jù)采集模塊將駐留客戶機(jī)中負(fù)責(zé)監(jiān)控和采集客戶機(jī)的相關(guān)的活動(dòng)信息,客戶管理器是負(fù)責(zé)與服務(wù)器進(jìn)行通訊。在服務(wù)端,服務(wù)端UI與用戶信息交互,顯示出從客戶端傳輸過來進(jìn)行處理后的數(shù)據(jù)列表或者曲線圖,數(shù)據(jù)還將被存放入數(shù)據(jù)庫(kù)中保存。
2.2 系統(tǒng)客戶端功能分析
客戶端主要負(fù)責(zé)監(jiān)測(cè)本主機(jī)的活動(dòng),并將監(jiān)測(cè)到的信息定時(shí)發(fā)送給服務(wù)器。客戶端需要完成的主要功能有:
1) 采集功能:主要是對(duì)局域網(wǎng)內(nèi)計(jì)算機(jī)運(yùn)行過程中文件和進(jìn)程的在一個(gè)時(shí)間段內(nèi)不同時(shí)刻的狀態(tài)的采集。
2) 存儲(chǔ)功能:采集到數(shù)據(jù)后,將不同時(shí)間內(nèi)的信息進(jìn)行對(duì)比,并將采集到的數(shù)據(jù)存儲(chǔ)到空間棧中。
3) 傳輸功能:對(duì)文件,進(jìn)程的監(jiān)控?cái)?shù)據(jù)存儲(chǔ)后進(jìn)行打包,通過與服務(wù)器的通信協(xié)議,傳輸給服務(wù)器,呈現(xiàn)給用戶。
4) 駐留功能:為了有效監(jiān)控,客戶端軟件安裝在計(jì)算機(jī)上后將駐留在系統(tǒng)中,隨系統(tǒng)啟動(dòng)而自行啟動(dòng),用戶不能隨意卸載,否則將與服務(wù)器斷開而無法正常使用計(jì)算機(jī)。
客戶端為完成以上功能,在軟件實(shí)現(xiàn)時(shí)采用了基于客戶端事件的方式[1]。基于客戶端事件的方式類似于高級(jí)木馬程序,客戶端監(jiān)控軟件記錄主機(jī)的各種實(shí)時(shí)信息并發(fā)送給服務(wù)器端軟件,這些信息包括:鼠標(biāo)鍵盤事件,主機(jī)網(wǎng)絡(luò)使用情況,當(dāng)前運(yùn)行的進(jìn)程信息,主機(jī)收發(fā)郵件的信息,主機(jī)修改的文件信息,主機(jī) CPU 使用率等信息。基于事件的方案實(shí)時(shí)性比較好,監(jiān)控的信息也比較全面。
2.3 系統(tǒng)服務(wù)端功能分析
局域網(wǎng)內(nèi)計(jì)算機(jī)監(jiān)控系統(tǒng)服務(wù)端是給管理人員提供的一個(gè)管理平臺(tái)。它將收集到的信息以圖形和文件列表以及其他方式呈現(xiàn)給用戶,以便用戶對(duì)局域網(wǎng)內(nèi)的主機(jī)進(jìn)行監(jiān)測(cè)和管理。服務(wù)端需要完成的主要功能有:
1) 接收從客戶端傳輸?shù)男畔ⅲ馕鰯?shù)據(jù)包提取所需要的信息。
2) 以曲線圖或文件列表方式顯示給用戶。
3) 將數(shù)據(jù)存入數(shù)據(jù)庫(kù),以便管理。
3系統(tǒng)的軟件實(shí)現(xiàn)
3.1 系統(tǒng)客戶端的模塊設(shè)計(jì)
局域網(wǎng)計(jì)算機(jī)監(jiān)控系統(tǒng)客戶端數(shù)據(jù)采集部分共分為3個(gè)模塊,即CPU(CPU usage)模塊,文件(File modification/creation)模塊,進(jìn)程(Process execution)模塊,各個(gè)模塊都有獨(dú)立的線程完成,通過并行執(zhí)行提高系統(tǒng)的實(shí)時(shí)性[2]。其中CPU模塊主要監(jiān)控計(jì)算機(jī)CPU的利用率,通過產(chǎn)生線程對(duì)CPU不同時(shí)刻的信息采集和對(duì)比獲得使用的數(shù)據(jù)。文件模塊是對(duì)文件在某個(gè)時(shí)間內(nèi)屬性的監(jiān)控,如什么時(shí)候,創(chuàng)建了什么文件或是什么文件被刪除等等。而進(jìn)程模塊就是監(jiān)控在一個(gè)時(shí)間段里哪些進(jìn)程是新開始的,哪些是剛結(jié)束的。其功能模塊圖如圖2所示。
3.1.1 系統(tǒng)客戶端CPU模塊設(shè)計(jì)
CPU usage 模塊設(shè)計(jì)比較簡(jiǎn)單,通過線程來實(shí)現(xiàn)監(jiān)控。建立 CpuAgent類,對(duì)CPU的監(jiān)控主要也是通過類的封裝來實(shí)現(xiàn)的,該類包含:CupAgent(),StartAgent(),StopAgent(),getUsage()。這些函數(shù)的功能是分別統(tǒng)計(jì)開始時(shí)和結(jié)束時(shí)的占有CPU資源的進(jìn)程個(gè)數(shù),通過算法:(1-t1/t)/n (其中t1表示CPU空閑時(shí)間,t表示總的時(shí)間,n表示主機(jī)運(yùn)行的進(jìn)程總數(shù),并且每秒計(jì)算一次,每三秒發(fā)送一次)得出CPU的利用率,并形成一定的字符串信息,其格式如表1所示。其中time表示時(shí)間。“CPU”是傳輸協(xié)議中CPU信息的識(shí)別字符。usage表示某一個(gè)時(shí)刻CPU的使用率。
表1 CPU線程數(shù)據(jù)格式
3.1.2 系統(tǒng)客戶端文件模塊設(shè)計(jì)
與CPU模塊設(shè)計(jì)思想一樣,通過產(chǎn)生線程、創(chuàng)建類,利用Hook相應(yīng)的系統(tǒng)服務(wù)System Service:createfile 和 deletefile對(duì)線程進(jìn)行控制和實(shí)現(xiàn),再通過API函數(shù)DeviceIoControl向設(shè)備對(duì)象 Device發(fā)相應(yīng)消息采集文件在某個(gè)時(shí)間段里的動(dòng)作屬性以及路徑信息。其中文件的屬性包括:創(chuàng)建,關(guān)閉和刪除。然后將采集來的數(shù)據(jù)按照一定的格式存儲(chǔ)到l_stract中,最后,再將所有的信息加載到全局變量PtrBuffWrite中,其數(shù)據(jù)格式如表2所示。time表示時(shí)間。“FILE”是FILE傳輸協(xié)議中作為識(shí)別的字符。action表示用戶對(duì)該文件的操作,包括CREATE,MODIFY和DELETE。“path”表示該文件的路徑。
表2 FILE線程數(shù)據(jù)格式
在這個(gè)存儲(chǔ)過程中就必須對(duì)全局變量PtrBuffWrite進(jìn)行加鎖,這樣才能使得在進(jìn)程存儲(chǔ)數(shù)據(jù)的同時(shí)其他兩個(gè)線程對(duì)其存儲(chǔ)的數(shù)據(jù)不產(chǎn)生影響,實(shí)現(xiàn)線程同步。
EnterCriticalSection(gCriticalSectionForPrtBuff);//加鎖
l_stract= strTime +\" FILE \"+ l_stract +\"\\\"\"+ t_fullPath+\"\\\"\";
(PtrBuffWrite->str)+=l_stract;
(PtrBuffWrite->len)+=l_stract.size();
LeaveCriticalSection(gCriticalSectionForPrtBuff);//解鎖
3.1.3 系統(tǒng)客戶端進(jìn)程模塊設(shè)計(jì)
客戶端進(jìn)程模塊的信息獲取也是通過獨(dú)立線程完成,由Hook相應(yīng)的System Service:createProcess CreateThread 等函數(shù)進(jìn)行實(shí)現(xiàn)和控制[3]。通過對(duì)系統(tǒng)進(jìn)程的不斷監(jiān)測(cè)和比較,從而計(jì)算出在某一特定時(shí)間內(nèi)系統(tǒng)中新開始運(yùn)行和剛結(jié)束的進(jìn)程的信息。其具體的設(shè)計(jì)過程是:產(chǎn)生的線程先獲取T1時(shí)刻系統(tǒng)所有進(jìn)程的各種信息,包括進(jìn)程發(fā)生的時(shí)間,進(jìn)程ID,進(jìn)程文件名以及進(jìn)程的路徑,并將它們保存,起字符串格式如表3所示。其中,time表示時(shí)間,“PROC”是PROCESS傳輸協(xié)議中作為識(shí)別的字符,action表示用戶對(duì)該文件的操作,包括START,END兩種情況,path表示該文件的路徑。
表3 FILE線程數(shù)據(jù)格式
在既定的時(shí)間間隔之后(比如1秒中之后)的T1時(shí)刻里,線程再次獲取系統(tǒng)所有進(jìn)程的各種信息將它們保存。通過比較T1和T2時(shí)刻的所有進(jìn)程信息,就可以計(jì)算出在這段時(shí)間內(nèi)系統(tǒng)新運(yùn)行的進(jìn)程和剛結(jié)束的進(jìn)程。
void Process::Run()
{
while(1)
{
GetFirstProInfo(); //第一次獲取進(jìn)程信息
Sleep(1000);
GetSecondProInfo();//第二次獲取進(jìn)程信息
GetProStarted(); //獲取新開始的信息
GetProEnded();//獲取結(jié)束的進(jìn)程信息
…
}
}
3.2 系統(tǒng)服務(wù)端的設(shè)計(jì)
3.2.1 各線程的工作流程
在服務(wù)端,有一個(gè)偵聽主線程,負(fù)責(zé)偵聽是否有新的客戶端要求連接。當(dāng)有新的連接時(shí)就創(chuàng)建一個(gè)新的連接子進(jìn)程,負(fù)責(zé)接收從客戶端傳輸過來的信息。
1) 偵聽主線程
偵聽主線程的工作就是偵聽是否有新的客戶請(qǐng)求建立連接。如果有新的請(qǐng)求則主線程創(chuàng)建一個(gè)新的子線程,與客戶連接,對(duì)應(yīng)相應(yīng)的客戶端;如果沒有偵聽到新的客戶請(qǐng)求,則返回繼續(xù)偵聽是否有新的客戶請(qǐng)求建立。
2) 連接客戶子線程
客戶連接子線程被創(chuàng)建后,先判斷是否有數(shù)據(jù)可以接收。如果有,接收數(shù)據(jù),將每一個(gè)活動(dòng)類型的記錄分離,再分離出該活動(dòng)類型的每一個(gè)字段,并將處理好的結(jié)果存入數(shù)據(jù)庫(kù)中;如果沒有數(shù)據(jù)可以接收,就判斷是否要斷開連接,不要斷開連接就返回繼續(xù)判斷是否有數(shù)據(jù)可以接收,要斷開就中止該子線程。其工作流程如圖3所示。
3.2.2 系統(tǒng)服務(wù)端界面的實(shí)現(xiàn)
局域網(wǎng)內(nèi)計(jì)算機(jī)活動(dòng)監(jiān)控系統(tǒng)服務(wù)端的界面是系統(tǒng)和用戶交互的平臺(tái),服務(wù)端整理好的數(shù)據(jù)分別用曲線圖(History Diagram)和列表(History List)的形式展現(xiàn)出來。下面主要介紹列表方式顯示的設(shè)計(jì)流程。
1) 比較當(dāng)前活動(dòng)主機(jī)列表和數(shù)據(jù)庫(kù)中活動(dòng)主機(jī)信息,若不相同,則需要修改當(dāng)前活動(dòng)主機(jī)列表,即活動(dòng)主機(jī)列表中始終保持最新狀態(tài),它們均為當(dāng)前時(shí)間與服務(wù)器處于連接狀態(tài)的主機(jī)。
2) 設(shè)置修改標(biāo)志,查看修改標(biāo)志,若修改標(biāo)志為真,則需要刷新History List記錄。
4 總結(jié)
局域網(wǎng)計(jì)算機(jī)監(jiān)控系統(tǒng)是一個(gè)應(yīng)用Internet技術(shù),在TCP/IP協(xié)議和WWW規(guī)范的支持下,合理組織軟件結(jié)構(gòu),使用戶通過系統(tǒng)軟件了解局域網(wǎng)內(nèi)電腦運(yùn)行的情況的遠(yuǎn)程監(jiān)控系統(tǒng)[4-5]。該系統(tǒng)的客戶端主要通過多線程技術(shù)和鉤子技術(shù)在C/S模式下對(duì)計(jì)算機(jī)的CPU、文件以及進(jìn)程進(jìn)行監(jiān)控。服務(wù)端將客戶端收集到的信息實(shí)時(shí)呈現(xiàn)給管理人員,對(duì)局域網(wǎng)內(nèi)的主機(jī)進(jìn)行監(jiān)測(cè)和管理,提高了局域網(wǎng)內(nèi)計(jì)算機(jī)管理的高效性和準(zhǔn)確性。
參考文獻(xiàn):
[1] 熊世桓.用Socket編程實(shí)現(xiàn)TCP/IP網(wǎng)絡(luò)接口[J].貴州教育學(xué)院學(xué)報(bào),2003,14(4):86-90.
[2] 周翔,阮世穎.基于多線程的斷點(diǎn)續(xù)傳實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2007,4(22):1000-1002.
[3] Richter J.Windows核心編程[M].王建華,譯.北京:機(jī)械工業(yè)出版社,2000.
[4] 解天霞,李春葆.一種適合數(shù)字遠(yuǎn)程監(jiān)控系統(tǒng)的網(wǎng)絡(luò)體系設(shè)計(jì)[J].計(jì)算機(jī)工程與應(yīng)用,2003,39(23):154-156.
[5] 秦玉華.局域網(wǎng)監(jiān)控系統(tǒng)的開發(fā)[J].信息技術(shù)與信息化,2007(2):111-113.