陳賢敏 (浙江工貿職業技術學院信息傳媒學院,浙江溫州325003)
通用串行總線接口 (Universal Serial BUS,USB)是一個外部總線標準,用于規范電腦與外部設備的連接和通訊。USB接口支持設備的即插即用及熱插拔功能,特別在PC個人機上的廣泛使用,給用戶帶來方便的同時,也帶來諸多的不安全因素。對于學校機房來說,學生U盤的使用是計算機病毒傳播的主要原因,特別是網絡病毒會導致整個機房都卡死[1-4]。因此關于USB的端口的使用,成為管理員的首要解決的問題。但解決起來總不是特別順手,總有些問題存在。目前,人們解決USB端口問題的常用方法主要有以下幾種:①在BIOS設置中禁用USB端口[5-6],現在主機可以分別禁止前端口和后端口,但是現在很多品牌機為了省料,只提供USB端口,有的連鍵盤和鼠標都不能用了。②使用注冊表設置隱藏盤[7],但這種方法只對最一般的學生有用。③用USB驅動程序進行限制[8]。
為此,筆者綜合各種用戶的需求,開發設計了一套USB接口監控基于C(客戶端)/S(服務端)模式系統。
圖1給出了學校一般機房典型局域網框架。
1)學生組端 即局域網中的計算機,也就是被監控端。駐留后臺監控程序檢測到USB端口變化時,會做出判斷是不是存儲類設備,若是,立即發送消息給服務端,請求做出處理。被監控端除了發送消息外,還要接教師端的指令,以滿足實時環境要求。
2)教師端 也稱監控端,他除了接收被監控端的消息外,還可以向被監控端發送命令,如使被監控端允許使用USB端口等。

圖1 系統局域網拓撲圖
3)服務器 (服務監控端) 主要作用是存儲數據和轉發數據。當學生機處于開機狀態時,被監控端將學生當前的信息傳送給服務端,服務端又把信息傳給教師端的監控平臺上。當學生組端向教師端發出命令請求,也同時給服務監控端發送。教師端做出響應,把指令發送給學生組端,同時也給服務監控端發送數據。服務端還要向系統管理員提供某機房學生端的狀況,以及學生端跟教室端互相交流的數據流命令。因此,在系統管理員和服務監控端采用B(瀏覽器)/S(服務器)架構,方便系統管理員在整個局域網中隨時查看狀態信息,了解實時情況。
1)學生組端USB監控端模塊 學生組端USB監控模塊結構從2方面來設計:①隱藏駐留程序。②接收模塊和發送模塊。接收教師端指令,發送本機的機房號、IP地址和USB使用狀況給教師端和服務監控端。
2)教師端監控程序模塊 教師端監控程序模塊結構從以下2個方面設計:①主界面設計。從界面上直觀顯示每個學生組端USB狀況,主要按鈕命令明顯。當學生組端向教師端請求時,應該有明顯的提示方式 (包括聲音)。②接收模塊和發送模塊。接收學生組端請求指令,向學生組端發送指令并向服務監控端更新數據。
3)USB服務監控端模塊結構 服務監控端既要存儲數據,又要提供WEB服務,供系統管理員查詢。因此服務監控端要從3個方面設計程序:①數據庫的設計。數據庫設計,一是要考慮日志功能,主要記錄學生組端和教師組端的通信指令及狀態;二是要記錄每個機房每個上課時間段的當前使用狀況。②網站的編程。③服務端接收模塊和發送模塊的編程,接收學生組端和教師端的數據更新。
1)學生組端的程序設計的關鍵代碼——捕獲USB設備 學生組端的USB監控程序對USB端口事件的捕獲主是通過WM_DEVICECHANGE消息得到的,當設備被插入WINDOWS會向每個窗體發送WM_DEVICECHANGE消息,當消息的wParam值等于DBT_DEVICEARRIVAL時,表示Media設備被插入并且已經可用。以下是重寫函數的框架:

這個結構體僅僅是一個 “頭”(HDR),其后還有附加數據,dbch_size表示結構體實例的字節數,當其中的dbch_devicetype字段值等于DBT_DEVTYP_VOLUME時,表示當前設備是邏輯驅動器,且lParam實際上指向的應該是DEV_BROADCAST_VOLUME結構體實例,DEV_BROADCAST_VOLUME結構體原形如下:

所以,只需要在程序中捕捉WM_DEVICECHANGE消息,然后根據具體情況去處理即可。
2)Windows Sockets網絡代碼 對于使用windows Sockets來說,System.net以及System.net.sockets是2個重要的命名空間。通常引用system.net空間命名 (編程偏向于高程,例如上載或下載)以及http和其他協議進行Web的請示。System.net.sockets空間命名主要包含的類通常與較低程的通信操作有關,特別適用于Sockets和TCP/IP之類的協議。
在.net框架中,System.net.sockets空間命名為實現需要開發控制網絡訪問的編程人員提供了windows Sockets接口的托管,如TCP和UDP的編程連接。而networkstream類則提供了用于網絡訪問基礎數據流,如常見的Telnet、Email、Http等,雖然其通訊協議定義不同,但最基本的通信方式都采用Socket方式。
在建立服務器和客服務機之前,通常先要創建Scoket對象實例,這樣就可以使用Socket類的構造方法來實現的Scoket的編程:

在上述構造類函數中,addressFamily參數指定了Socket所使用的尋址方式,socketType參數指定Socket所使用的類型,protocolType參數指定Socket所使用的哪種協議。使用該構造函數為開發人員提供便利的接口。下面給出該程序的主要代碼:

3)使用UDP消息傳遞機制 為了提高網絡通信效率,程序系統內部之間的通信采用UPD消息傳遞機制。內部消息傳遞過程流程如圖2所示。當用戶插入USB設備時,學生組端的監控程序馬上指向判斷允許位標志,如不允許,立即向教師端請求,并向服務監控端更新數據。教師端接收到請求,會做出判斷,是和否,并同時向服務端更新數據。當學生組端收到教師端發送的指令,進行判別,如允許就啟用,反之屏蔽USB端口,同時向服務監控端發送當前狀態,更新數據。

圖2 系統內部UDP傳信息傳遞流程圖
分析了實際工作中所遇到的問題,并提出了以C/S模式設計 USB接口監控系統的方案。目前,USB接口監控系統已試用于學校機房局域網內,效果良好。
[1]李欣,侯松霞.內網安全防御系統的研究 [J].計算機應用,2007,27:245-249.
[2]羅硯希,高艷軍,張權.內部網絡移動存儲介質安全管理系統設計 [J].凱里學院學報,2007,25(6):61-63.
[4]何黎明,方風波.企業內網安全系統的構建 [J].長江大學學報 (自然科學版),2008,5(3):N213-214.
[5]胡紅云,胡靜,黃晨,等.內網信息監控系統的設計與實現[J].計算機工程與應用,2006,34(1):147-149.
[6]胡甜,楊莎.局域網環境下USB接口監控系統的設計與實現[J].軟件導刊,2009,8(4):126-127.
[7]邱啟榮,陳羽中,郭文忠,等.基于USB安全鎖的內網安全監控系統設計 [J].福州大學學報 (自然科學版),2010,38(3):383-386.
[8]羅韜.USB存儲設備訪問控制的設計與實現 [J].信息化研究,2009,35(5):23-25.