仝世君
(中國人民武裝警察部隊學(xué)院,廊坊 065000)
伴隨因特網(wǎng)技術(shù)的快速發(fā)展,構(gòu)建在因特網(wǎng)基礎(chǔ)上的遠(yuǎn)程監(jiān)控技術(shù)也發(fā)展迅速。所謂的網(wǎng)絡(luò)遠(yuǎn)程監(jiān)控就是將本地主機通過網(wǎng)絡(luò)的方式,進(jìn)行對遠(yuǎn)端操作過程控制與監(jiān)測。網(wǎng)絡(luò)監(jiān)控的主要對象是網(wǎng)絡(luò)中異常流量。本文在當(dāng)前先進(jìn)的網(wǎng)絡(luò)遠(yuǎn)程監(jiān)控技術(shù)基礎(chǔ)上,建立了網(wǎng)絡(luò)遠(yuǎn)程控制系統(tǒng)的拓?fù)淠P?。系統(tǒng)結(jié)構(gòu)采用客戶端/服務(wù)器的設(shè)計模式,使用了數(shù)據(jù)通道與指令通道相分離的雙通道機制,同時根據(jù)模塊劃分的思想,詳細(xì)介紹了數(shù)據(jù)通道與指令通道等關(guān)鍵技術(shù)的詳細(xì)設(shè)計。
通常,網(wǎng)絡(luò)遠(yuǎn)程控制系統(tǒng)主要由三個部分構(gòu)成的,分別是:現(xiàn)場設(shè)備監(jiān)測與控制系統(tǒng),遠(yuǎn)距離數(shù)據(jù)傳輸系統(tǒng),遠(yuǎn)程監(jiān)控終端系統(tǒng)。該三個部分協(xié)作工作,一同完成對遠(yuǎn)程設(shè)備的監(jiān)測與控制。
為了有效地進(jìn)行遠(yuǎn)程監(jiān)測網(wǎng)絡(luò)中的非法流量,實施遠(yuǎn)程監(jiān)控,同時不會對網(wǎng)絡(luò)性能帶來負(fù)擔(dān),導(dǎo)致網(wǎng)絡(luò)性能的下降,本文通過網(wǎng)絡(luò)設(shè)備的流量鏡像技術(shù),以第三方監(jiān)測的方式,從而獲得網(wǎng)絡(luò)的數(shù)據(jù)源。該系統(tǒng)為一個基于數(shù)據(jù)庫技術(shù)與socket技術(shù)的遠(yuǎn)程訪問與控制系統(tǒng),socket技術(shù)主要是用來完成系統(tǒng)的控制功能,而數(shù)據(jù)庫技術(shù)則是完成該系統(tǒng)的訪問功能。而且,通過加載在系統(tǒng)里德木馬檢測功能等模塊,還能夠完成針對流過網(wǎng)絡(luò)設(shè)備的流量的動態(tài)監(jiān)測功能,同時根據(jù)監(jiān)測結(jié)果實施快速地查詢與操作,然后根據(jù)具體情況采取恰當(dāng)?shù)拇胧?,控制和隔離網(wǎng)絡(luò)中的非法流量,以在最大程度上保護(hù)網(wǎng)絡(luò)安全地運行。
從該系統(tǒng)整體安全性方面綜合考慮,通常服務(wù)器要比客戶端的安全性要求更嚴(yán)格,因而服務(wù)器端的開發(fā)采用了Linux操作系統(tǒng)下的C語言編程環(huán)境,客戶端基于用戶個性化當(dāng)面的考慮,以及用戶交互的方便,采用了Windows系統(tǒng)作為平臺,使用了C++ Builder編程語言開發(fā)環(huán)境實施系統(tǒng)的實現(xiàn)。
因為通常遠(yuǎn)程控制系統(tǒng)需要處理的數(shù)據(jù)量會較大,對服務(wù)器及客戶端實施合理的功能劃分,分配合理的工作量,才可以充分地使用系統(tǒng)各端的硬件資源?;谠撃繕?biāo)的考慮,本系統(tǒng)設(shè)計時,設(shè)計了指令通道與數(shù)據(jù)通道相分離的兩種通道模式。在這兩種模式中,數(shù)據(jù)通道實現(xiàn)訪問系統(tǒng)的功能,而指令通道實現(xiàn)控制系統(tǒng)的功能,因而就能夠較好地保持指令傳輸與數(shù)據(jù)傳輸?shù)倪壿嫪毩⑿?,讓系統(tǒng)結(jié)構(gòu)更加清晰,提高了系統(tǒng)可擴展性與可維護(hù)性。
系統(tǒng)體系結(jié)構(gòu)如圖1所示,服務(wù)器程序與客戶端程序?qū)嵤?shù)據(jù)交互的通道,是通過系統(tǒng)數(shù)據(jù)通道來實現(xiàn)的,其使用了客戶端的ADO數(shù)據(jù)操作模塊,采用了MySQL ODBC數(shù)據(jù)庫驅(qū)動程序,實現(xiàn)數(shù)據(jù)庫的連接,完成客戶端實對服務(wù)器端數(shù)據(jù)庫的各種數(shù)據(jù)操作,如數(shù)據(jù)的查詢,顯示,更新,導(dǎo)入,刪除,導(dǎo)出等操作。而系統(tǒng)的指令通道,則為服務(wù)器程序與客戶端程序進(jìn)行指令交互的通道,通過流式Socket(SOCK_STREAM)編程方式來完成,客戶端把規(guī)劃好的指令實施封裝加密后,寫到Socket里去,通過服務(wù)器的連續(xù)對Socket監(jiān)聽,完成指令信息的讀取,然后進(jìn)行信息的解封解密等操作。
圖1 系統(tǒng)體系結(jié)構(gòu)圖
系統(tǒng)指令通道設(shè)計與實現(xiàn),是通過面向連接的TCP服務(wù)應(yīng)用的流式Socket編程實現(xiàn)的。通過流式Socket編程完成的應(yīng)用系統(tǒng),其通信流程是這樣的:首先,通過socket()函數(shù)的使用,在服務(wù)器端構(gòu)建一個通信端點,然后通過bind()函數(shù)綁定端口及地址至該通信端點上面;其次,通過listen()函數(shù),進(jìn)行遠(yuǎn)程連接請求的監(jiān)聽。如果遠(yuǎn)程客戶端在進(jìn)行與服務(wù)器監(jiān)聽端口連接時,該請求首先提交至等待隊列里去,通過服務(wù)器調(diào)用accept()函數(shù)進(jìn)行處理。在服務(wù)器調(diào)用accept()函數(shù)處理該連接請求以后,系統(tǒng)產(chǎn)生一個單獨的Socket描述符來進(jìn)行該連接的標(biāo)識,這樣,就能夠通過該描述符實施數(shù)據(jù)的接收與發(fā)送了。假如服務(wù)器沒能夠監(jiān)聽到連接請求,服務(wù)器程序則會阻塞在accept()處,直至連接請求的到來。
參照流式Socket應(yīng)用系統(tǒng)的通信流程,本文進(jìn)行了本系統(tǒng)的指令通道流程的設(shè)計,服務(wù)器與客戶端之間的指令交互過程是:運行系統(tǒng)服務(wù)器程序,使服務(wù)器程序處于阻塞監(jiān)聽狀態(tài);然后,運行系統(tǒng)客戶端程序,通過客戶端程序,實施對用戶身份是否合法驗證,當(dāng)驗證通過了以后,才開始對服務(wù)器提交連接請求。服務(wù)器把從客戶端提交的連接請求接收下來,首先進(jìn)行用戶身份合法性的驗證,該驗證與客戶端的驗證有所不同:如果驗證被通過,那么雙方建立起連接,進(jìn)行正常的同學(xué);如果驗證沒有通過,那么就斷開連接。只有當(dāng)服務(wù)器與客戶端間的連接建立起來后,客戶端才能夠向服務(wù)器進(jìn)行控制指令的發(fā)送。
當(dāng)客戶端開始發(fā)送控制指令之前,需要明確所有指令的格式與含義,接著通過加密模塊的調(diào)用,進(jìn)行對指令加密,只有當(dāng)加密成功后,調(diào)用發(fā)送函數(shù),把指令提交給服務(wù)器實施處理。當(dāng)服務(wù)器接收了客戶端提交的指令后,首先進(jìn)行解密指令的操作,解密后實施解析指令操作,接著,依據(jù)指令解析的結(jié)果,調(diào)用相應(yīng)的命令,執(zhí)行相應(yīng)的功能。功能在執(zhí)行完之后,服務(wù)器程序把執(zhí)行的結(jié)果實施再次的加密,然后向客戶端發(fā)送。當(dāng)客戶端接收到服務(wù)器返回的結(jié)果后,也要進(jìn)行解密,將結(jié)果進(jìn)行顯示,等待深層次地處理。
系統(tǒng)的數(shù)據(jù)通道,為服務(wù)器程序與客戶端程序之間的傳輸數(shù)據(jù)的通道。服務(wù)器端的功能模塊把程序運行的結(jié)果儲存至MySQL數(shù)據(jù)庫關(guān)系表中,客戶端通過ADO數(shù)據(jù)庫訪問技術(shù),調(diào)用數(shù)據(jù)存取模塊,然后調(diào)研MySQL ODBC驅(qū)動,實施對數(shù)據(jù)庫中數(shù)據(jù)的訪問。
ODBC定義了對全部數(shù)據(jù)庫統(tǒng)一訪問的一種方法,而且用戶應(yīng)用程序能夠使用ODBC技術(shù)實現(xiàn)超越平臺的數(shù)據(jù)檢索功能。然而,如果直接調(diào)用ODBC API來進(jìn)行應(yīng)用程序的編寫,則實現(xiàn)起來比較復(fù)雜。ADO技術(shù)恰好可以克服這種復(fù)雜性。所以,將ADO技術(shù)與ODBC進(jìn)行結(jié)合,進(jìn)行數(shù)據(jù)庫的訪問,則是一個比較理想的辦法。本系統(tǒng)實現(xiàn)數(shù)據(jù)通道的思想恰是基于此:使用ADO技術(shù)進(jìn)行客戶端程序的開發(fā),客戶端程序使用MySQL ODBC建立與MySQL數(shù)據(jù)庫服務(wù)器的連接,實現(xiàn)數(shù)據(jù)訪問與操作功能。而服務(wù)器端的全部功能模塊,則是直接對MySQL數(shù)據(jù)庫實施讀寫。系統(tǒng)的數(shù)據(jù)通道模型如圖2所示。
圖2 系統(tǒng)的數(shù)據(jù)通道模型圖
獲取了MySQL數(shù)據(jù)源以后,客戶端程序通過ADO數(shù)據(jù)存取模塊,對MySQL數(shù)據(jù)源實施訪問。系統(tǒng)在使用ADO實施設(shè)計客戶端程序時,主要是通過C++Builder開發(fā)環(huán)境的ADO等組件完成的。該組件構(gòu)成的主要部分有:TADODataset,TADOConnection,TDataSource,TADOQuery,TDBGrid。
服務(wù)器程序里與數(shù)據(jù)通道有關(guān)的功能模塊,基本上都是服務(wù)器功能模塊。該服務(wù)器功能模塊通過Linux操作系統(tǒng)下的C語言開發(fā)平臺研制而來,能夠在Linux Shell程序中直接運行。在程序中,若需對MySQL數(shù)據(jù)庫實施交互,則一定要與它首先建立起連接。通過C語言連接MySQL數(shù)據(jù)庫,只要是由兩個步驟來完成的,分別是:初始化連接句柄結(jié)構(gòu),實現(xiàn)函數(shù)是mysql init();實際創(chuàng)建連接,實現(xiàn)函數(shù)是mysqlreal_connect()。
初始化連接句柄使用mysql init()函數(shù)來進(jìn)行:
MYSQL*mysql_init(MYSQL*);
通常傳遞NULL給例程,它會返回一個指向新分配的連接句柄結(jié)構(gòu)的指針。假如傳遞的是一個現(xiàn)成的結(jié)構(gòu),那么它就會被重新初始化。假如初始化發(fā)生錯誤,則程序返回空指針。
在分配及初始化結(jié)構(gòu)完成后,通過mysqlreal_connect()函數(shù)提供參數(shù)給鏈接:
MYSQL*mysqlreal_connect(MYSQL*connection,
const char*sql_user_name,
const char*server_host,
const char*dbname,
const char*sql__password,
const char*unix_socket_name,
unsigned int port_number,
unsigned int flags);
網(wǎng)絡(luò)遠(yuǎn)程控制系統(tǒng)是一個基于數(shù)據(jù)庫技術(shù)和socket技術(shù)的系統(tǒng),能夠?qū)ぷ髟诰W(wǎng)絡(luò)中的網(wǎng)絡(luò)設(shè)備實施有效地遠(yuǎn)程監(jiān)測與控制。通過該系統(tǒng)的使用,能夠及時隔離控制網(wǎng)絡(luò)中異常的數(shù)據(jù)流量,實時地查詢與操作,進(jìn)一步地實施保護(hù)措施,確保網(wǎng)絡(luò)的安全。
[1] 李笠.高速網(wǎng)絡(luò)實時信息流監(jiān)控系統(tǒng)[D].昆明理工大學(xué),2007:56-58.
[2] 蔡偉祥等.流量采集在網(wǎng)絡(luò)性能監(jiān)測與分析系統(tǒng)中的改進(jìn)和實現(xiàn)[J].計算機工程,2003.29(15):58-59.
[3] 王建新,楊世鳳等.遠(yuǎn)程監(jiān)控技術(shù)的發(fā)展現(xiàn)狀和趨勢[J].國外電子測量技術(shù),2008(4).9:23-25.
[4] 鄭小寧.基于因特網(wǎng)的遠(yuǎn)程控制技術(shù)研究[D].西北工業(yè)大學(xué),2008(8):54-57.
[5] 于海晨,仲崇權(quán).基于Internet控制系統(tǒng)遠(yuǎn)程監(jiān)控方案及實例[J].計算機測量與控制,2007(5):14-16.