摘要:利用計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)和數(shù)據(jù)庫(kù)技術(shù),開(kāi)發(fā)公用機(jī)房管理系統(tǒng),實(shí)現(xiàn)自動(dòng)化和規(guī)范化管理,提高機(jī)房管理的效率。重點(diǎn)分析與設(shè)計(jì)了學(xué)生端軟件,并實(shí)現(xiàn)了學(xué)生端的安全和遠(yuǎn)程控制命令的執(zhí)行。
關(guān)鍵詞:機(jī)房管理;公用機(jī)房;安全
中圖分類號(hào):TP308文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)35-10118-02
The Design and Realization of Students End of the Public Computer Lab Management System
LAI Song-zhao
(Computer Centre, Mingxi Vocational and Technical College, Longyan 364021, China)
Abstract: The use of computer technology, network technology and database technology to develop the public computer lab management system to automate and standardized management, improve management efficiency. Focus on analysis and design of the students-end software, and to achieve the students-end security and remote control command execution.
Key words: computer lab management system; public computer lab; security
公用機(jī)房的管理是一項(xiàng)繁瑣的工作。利用計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)和數(shù)據(jù)庫(kù)技術(shù),開(kāi)發(fā)公用機(jī)房管理系統(tǒng),實(shí)現(xiàn)自動(dòng)化和規(guī)范化管理。通過(guò)從管理端向?qū)W生端發(fā)送遠(yuǎn)程控制命令,自動(dòng)控制大量學(xué)生機(jī),提高機(jī)房管理的效率,是機(jī)房管理系統(tǒng)設(shè)計(jì)的關(guān)鍵。該系統(tǒng)還采用底層登錄和進(jìn)程隱藏技術(shù)保證學(xué)生端軟件的安全,提高機(jī)房管理的安全性,具有重要的現(xiàn)實(shí)意義。
1 機(jī)房管理系統(tǒng)的功能與結(jié)構(gòu)
公共機(jī)房管理系統(tǒng)要實(shí)現(xiàn)機(jī)房的安全、可靠、高效和操作簡(jiǎn)便的管理要求,基本功能包括:支持正常上課與課余開(kāi)放的管理;對(duì)用機(jī)記錄進(jìn)行登記、存儲(chǔ)和查詢;實(shí)現(xiàn)遠(yuǎn)程鎖定、解鎖、重啟、關(guān)機(jī)等學(xué)生端的控制操作。
系統(tǒng)的軟件結(jié)構(gòu)包括:中心數(shù)據(jù)庫(kù)、管理端軟件與學(xué)生端軟件。所有數(shù)據(jù)都存儲(chǔ)在服務(wù)器的中心數(shù)據(jù)庫(kù)中。為了便于對(duì)分布在多個(gè)區(qū)域的機(jī)房進(jìn)行管理,每個(gè)區(qū)域設(shè)置一臺(tái)管理機(jī),運(yùn)行管理端軟件。而學(xué)生端作為客戶機(jī)程序運(yùn)行在各機(jī)房的學(xué)生機(jī)上。
2 學(xué)生端的分析與設(shè)計(jì)
學(xué)生端運(yùn)行在機(jī)房的學(xué)生機(jī)上,通過(guò)與管理機(jī)通信實(shí)現(xiàn)登錄、修改密碼、響應(yīng)消息(執(zhí)行控制命令)等功能。
用戶通過(guò)學(xué)生端成功登錄后,方可正常使用計(jì)算機(jī)。機(jī)房管理機(jī)通過(guò)向?qū)W生端發(fā)送遠(yuǎn)程控制信息,學(xué)生端接收信息后執(zhí)行鎖定、解鎖、喚醒、關(guān)機(jī)、重啟等操作,解決目前公共機(jī)房遠(yuǎn)程控制、自動(dòng)計(jì)費(fèi)、科學(xué)管理等問(wèn)題,大大提高機(jī)房的管理效率。
為了保證學(xué)生正常登錄,要防止學(xué)生繞過(guò)登錄程序、強(qiáng)行卸載客戶端、故意殺死客戶端進(jìn)程。在分析Windows 9x和Windows 2000/xp/2003操作系統(tǒng)的啟動(dòng)機(jī)理和程序的運(yùn)行原理的基礎(chǔ)上,該系統(tǒng)采用了封死Windows桌面、禁止進(jìn)入安全模式和進(jìn)程隱藏等技術(shù),保護(hù)學(xué)生客戶端的安全。在windows 2000/xp/2003操作系統(tǒng)下,通過(guò)使用如下技術(shù)加強(qiáng)客戶端的安全:
1) 學(xué)生端登錄程序采用底層登錄的模式,以確保操作系統(tǒng)在開(kāi)始運(yùn)行時(shí)就被接管與控制,在操作系統(tǒng)啟動(dòng)完成之前運(yùn)行客戶端登錄程序,強(qiáng)制學(xué)生必須首先登錄管理系統(tǒng)后才能正常用機(jī),學(xué)生幾乎沒(méi)有繞過(guò)登錄系統(tǒng)而逃費(fèi)的可能性。
2) 學(xué)生端采用進(jìn)程隱藏和雙進(jìn)程循環(huán)監(jiān)控技術(shù),防止進(jìn)程被惡意刪除。
3) 學(xué)生端定時(shí)向管理端發(fā)送“仍在使用”消息。若能正常返回的確認(rèn)消息,則可繼續(xù)使用,否則可能已經(jīng)斷網(wǎng),經(jīng)延時(shí)后重發(fā)三次,如果仍無(wú)法得到確認(rèn)消息,則要求用戶重新登錄,可避免學(xué)生通過(guò)斷網(wǎng)方式逃費(fèi)。
3 學(xué)生端的實(shí)現(xiàn)
學(xué)生端主要包含通信模塊、登錄模塊、消息處理模塊。通信模塊實(shí)現(xiàn)與管理端之間的Socket[1]通信,通信內(nèi)容包括發(fā)送到管理端的信息,管理端處理后反饋的信息和遠(yuǎn)程控制客戶端的命令。登錄模塊實(shí)現(xiàn)用戶登錄注冊(cè)功能,將用戶輸入的賬號(hào)和密碼發(fā)送到管理端,管理端驗(yàn)證用戶信息的有效性,返回相應(yīng)的信息,學(xué)生端根據(jù)接受的信息進(jìn)行相應(yīng)的處理,如果是合法用戶,管理端還會(huì)添加用戶信息到“正用機(jī)用戶表”中。消息處理模塊處理從管理端接收到的信息。對(duì)于登錄返回的驗(yàn)證信息,如果已通過(guò)驗(yàn)證,則系統(tǒng)繼續(xù)啟動(dòng)顯示W(wǎng)indows桌面,否則要求重新登錄。對(duì)于字符消息,彈出對(duì)話框顯示消息的內(nèi)容。對(duì)于遠(yuǎn)程控制命令,分析其中包含的命令內(nèi)容,調(diào)用相應(yīng)的Windows API函數(shù)實(shí)現(xiàn)控制功能。學(xué)生客戶端的開(kāi)發(fā)使用VS C++ 6.0平臺(tái)。
3.1 學(xué)生端的安全
學(xué)生端運(yùn)行在學(xué)生機(jī)上,實(shí)現(xiàn)學(xué)生的登錄、計(jì)費(fèi)、遠(yuǎn)程控制的功能。公用機(jī)房面向所有學(xué)生開(kāi)放,遇到的安全威脅主要有:繞過(guò)登錄界面、進(jìn)入Windows安全模式強(qiáng)行卸載客戶端、使用任務(wù)管理器殺死學(xué)生端進(jìn)程。為了保護(hù)學(xué)生端的安全,該系統(tǒng)采用以下方法:
1)采用強(qiáng)制學(xué)生使用正常登錄界面登錄的辦法來(lái)解決繞過(guò)登錄界面的安全威脅。具體方法是[2]:啟動(dòng)登錄程序后學(xué)生正常登錄之前,封死Windows的桌面,學(xué)生正常登錄后再將桌面激活。這樣學(xué)生在正常登錄通過(guò)驗(yàn)證之前,無(wú)法使用計(jì)算機(jī)。封死Windows桌面的程序段如下:
HWNDhwndProgman=::FindWindow(”Progman”,NULL);//查找桌面窗口的句柄
::PostMessage(hwndProgman,WM_QUIT,0,0);//發(fā)送結(jié)束桌面運(yùn)行消息
正常登錄并得到服務(wù)器反饋的通過(guò)驗(yàn)證消息后,激活桌面,程序段如下:
SHELLEXECUTEINFO sei;//創(chuàng)建執(zhí)行信息結(jié)構(gòu)
::ZeroMemory(sei,sizeof(sei));//分配存儲(chǔ)空間
sei.cbSize=sizeof(sei);//為信息結(jié)構(gòu)賦值
sei.lpFile=”explorer.exe”;
sei.nShow=SW_SHOW;
::ShellExecuteEx(sei);//執(zhí)行信息結(jié)構(gòu),激活桌面
2)當(dāng)Windows啟動(dòng)時(shí)按F8鍵,學(xué)生可以通過(guò)選擇進(jìn)入安全模式,這樣學(xué)生就可能會(huì)將客戶端程序強(qiáng)行卸載。分析Windows 2000/XP/2003等NT系列操作系統(tǒng)的啟動(dòng)過(guò)程得知NTLDR程序根據(jù)用戶的選擇決定對(duì)后續(xù)程序的加載。NT系統(tǒng)進(jìn)入安全模式的啟動(dòng)參數(shù)是/SAFEBOOT,而正常模式啟動(dòng)參數(shù)為/FASTDETECT。為了實(shí)現(xiàn)用戶選擇安全模式的情況下仍然按正常模式啟動(dòng),可以使用編輯器(例如UL16)將C盤根目錄下隱藏的系統(tǒng)文件NTLDR打開(kāi),查找SAFEBOOT字符串并替換成FASTDETECT。這樣,當(dāng)用戶按F8鍵試圖進(jìn)入安全模式時(shí),會(huì)被強(qiáng)行改為進(jìn)入正常啟動(dòng)模式,從而無(wú)法卸載被隱藏了的客戶端程序。
3)為了防止學(xué)生使用任務(wù)管理器殺死進(jìn)程,通過(guò)調(diào)用Windows API函數(shù)隱藏進(jìn)程,使得學(xué)生無(wú)法找到客戶端進(jìn)程。具體實(shí)現(xiàn)如下:
//win98中 在任務(wù)列表中隱藏
typedef DWORD (WINAPI *TRegisterServiceProcess)(DWORD dwProcessId, DWORD dwType);
TRegisterServiceProcess pRegService;
pRegService = (TRegisterServiceProcess)GetProcAddress(GetModuleHandle(\"KERNEL32\"),
\"RegisterServiceProcess\");
if (pRegService)
pRegService(GetCurrentProcessId(),1);
char fileName[100];
::GetModuleFileName(AfxGetInstanceHandle(),fileName,100);
m_Directory=fileName;
m_Directory=m_Directory.Left(m_Directory.ReverseFind('\\\\'));
m_Directory+=\"\\\\comproom.exe\";
3.2 遠(yuǎn)程控制命令的執(zhí)行
管理人員通過(guò)發(fā)送遠(yuǎn)程控制命令來(lái)自動(dòng)控制大量學(xué)生機(jī)的鎖定/解鎖、喚醒、重啟、關(guān)機(jī)[3] ,從而實(shí)現(xiàn)高效率的管理。鎖定功能,通過(guò)發(fā)送命令使學(xué)生機(jī)再次封死桌面,彈出登錄對(duì)話框,強(qiáng)制學(xué)生登錄。解鎖功能,通過(guò)發(fā)送已通過(guò)驗(yàn)證信息給客戶端,客戶端收到該信息后,激活桌面,可使用計(jì)算機(jī)。鎖定與解鎖功能在上述函數(shù)中已有說(shuō)明,不再贅述。
對(duì)于Win9x操作系統(tǒng),根據(jù)服務(wù)器發(fā)來(lái)的遠(yuǎn)程控制命令生成參數(shù),只要簡(jiǎn)單地調(diào)用ExitWindowsEx()函數(shù)就可以實(shí)現(xiàn)關(guān)機(jī)或者重新啟動(dòng)。ExitWindowsEx()的函數(shù)原型和參數(shù)如下:
BOOL ExitWindowsEx(UINT uFlags,DWORD dwReserved);
uFlags 參數(shù)含義如下:
EWX_REBOOT-----重新引導(dǎo)系統(tǒng)實(shí)現(xiàn)重啟
EWX_POWEROFF---實(shí)現(xiàn)關(guān)機(jī)
EWX_FORCE-------強(qiáng)迫中止沒(méi)有響應(yīng)的進(jìn)程
EWX_LOGOFF---------中止進(jìn)程,然后注銷
EWX_SHUTDOWN-------關(guān)掉系統(tǒng)電源(如果可能的話,ATX電源就可以)
但是,在NT系列操作系統(tǒng)中不能簡(jiǎn)單地調(diào)用ExitWindowsEx()函數(shù)來(lái)關(guān)機(jī)或重新啟動(dòng)系統(tǒng),而必須先提升自己的程序以獲得關(guān)機(jī)的權(quán)限后,才能調(diào)用ExitWindowsEx()函數(shù)實(shí)現(xiàn)關(guān)機(jī)或重新啟動(dòng)。NT系列操作系統(tǒng)中,獲得關(guān)機(jī)權(quán)限執(zhí)行關(guān)機(jī)或重啟操作的代碼如下:
HANDLE hToken;
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, hToken))
AfxMessageBox(\"OpenProcessToken\");
TOKEN_PRIVILEGES tkp;
//獲得本地機(jī)唯一的標(biāo)識(shí)
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//為進(jìn)程獲得關(guān)機(jī)的權(quán)限
AdjustTokenPrivileges(hToken, FALSE, tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
ExitWindowsEx(EWX_SHUTDOWN|EWX_REBOOT, 0);
4 結(jié)束語(yǔ)
該文對(duì)公用機(jī)房管理系統(tǒng)進(jìn)行探討和研究,提出安全、可靠、高效和操作簡(jiǎn)便的管理要求,分析了系統(tǒng)的功能與結(jié)構(gòu)。通過(guò)從管理端向?qū)W生端發(fā)送遠(yuǎn)程控制命令,實(shí)現(xiàn)對(duì)自動(dòng)化、規(guī)范化管理,從而提高了機(jī)房管理的效率。該文重點(diǎn)分析、設(shè)計(jì)并實(shí)現(xiàn)了學(xué)生端的登錄、安全與遠(yuǎn)程控制命令的執(zhí)行。此外,如何保護(hù)數(shù)據(jù)的存儲(chǔ)及傳輸?shù)陌踩?,如何?shí)現(xiàn)非Windows學(xué)生端的管理和控制,還需要進(jìn)一步學(xué)習(xí)與研究。
參考文獻(xiàn):
[1] 羅鍵,李勁.計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)與網(wǎng)絡(luò)應(yīng)用[M].北京:科學(xué)出版社,2001:119-141.
[2] Simon R J.Windows 2000API超級(jí)寶典[M].北京:人民郵電出版社,2002.
[3] 張友生.遠(yuǎn)程控制編程技術(shù)[M].北京:電子工業(yè)出版社,2002.