仝世君
(中國人民武裝警察部隊學院,廊坊 065000)
伴隨因特網技術的快速發展,構建在因特網基礎上的遠程監控技術也發展迅速。所謂的網絡遠程監控就是將本地主機通過網絡的方式,進行對遠端操作過程控制與監測。網絡監控的主要對象是網絡中異常流量。本文在當前先進的網絡遠程監控技術基礎上,建立了網絡遠程控制系統的拓撲模型。系統結構采用客戶端/服務器的設計模式,使用了數據通道與指令通道相分離的雙通道機制,同時根據模塊劃分的思想,詳細介紹了數據通道與指令通道等關鍵技術的詳細設計。
通常,網絡遠程控制系統主要由三個部分構成的,分別是:現場設備監測與控制系統,遠距離數據傳輸系統,遠程監控終端系統。該三個部分協作工作,一同完成對遠程設備的監測與控制。
為了有效地進行遠程監測網絡中的非法流量,實施遠程監控,同時不會對網絡性能帶來負擔,導致網絡性能的下降,本文通過網絡設備的流量鏡像技術,以第三方監測的方式,從而獲得網絡的數據源。該系統為一個基于數據庫技術與socket技術的遠程訪問與控制系統,socket技術主要是用來完成系統的控制功能,而數據庫技術則是完成該系統的訪問功能。而且,通過加載在系統里德木馬檢測功能等模塊,還能夠完成針對流過網絡設備的流量的動態監測功能,同時根據監測結果實施快速地查詢與操作,然后根據具體情況采取恰當的措施,控制和隔離網絡中的非法流量,以在最大程度上保護網絡安全地運行。
從該系統整體安全性方面綜合考慮,通常服務器要比客戶端的安全性要求更嚴格,因而服務器端的開發采用了Linux操作系統下的C語言編程環境,客戶端基于用戶個性化當面的考慮,以及用戶交互的方便,采用了Windows系統作為平臺,使用了C++ Builder編程語言開發環境實施系統的實現。
因為通常遠程控制系統需要處理的數據量會較大,對服務器及客戶端實施合理的功能劃分,分配合理的工作量,才可以充分地使用系統各端的硬件資源。基于該目標的考慮,本系統設計時,設計了指令通道與數據通道相分離的兩種通道模式。在這兩種模式中,數據通道實現訪問系統的功能,而指令通道實現控制系統的功能,因而就能夠較好地保持指令傳輸與數據傳輸的邏輯獨立性,讓系統結構更加清晰,提高了系統可擴展性與可維護性。
系統體系結構如圖1所示,服務器程序與客戶端程序實施數據交互的通道,是通過系統數據通道來實現的,其使用了客戶端的ADO數據操作模塊,采用了MySQL ODBC數據庫驅動程序,實現數據庫的連接,完成客戶端實對服務器端數據庫的各種數據操作,如數據的查詢,顯示,更新,導入,刪除,導出等操作。而系統的指令通道,則為服務器程序與客戶端程序進行指令交互的通道,通過流式Socket(SOCK_STREAM)編程方式來完成,客戶端把規劃好的指令實施封裝加密后,寫到Socket里去,通過服務器的連續對Socket監聽,完成指令信息的讀取,然后進行信息的解封解密等操作。

圖1 系統體系結構圖
系統指令通道設計與實現,是通過面向連接的TCP服務應用的流式Socket編程實現的。通過流式Socket編程完成的應用系統,其通信流程是這樣的:首先,通過socket()函數的使用,在服務器端構建一個通信端點,然后通過bind()函數綁定端口及地址至該通信端點上面;其次,通過listen()函數,進行遠程連接請求的監聽。如果遠程客戶端在進行與服務器監聽端口連接時,該請求首先提交至等待隊列里去,通過服務器調用accept()函數進行處理。在服務器調用accept()函數處理該連接請求以后,系統產生一個單獨的Socket描述符來進行該連接的標識,這樣,就能夠通過該描述符實施數據的接收與發送了。假如服務器沒能夠監聽到連接請求,服務器程序則會阻塞在accept()處,直至連接請求的到來。
參照流式Socket應用系統的通信流程,本文進行了本系統的指令通道流程的設計,服務器與客戶端之間的指令交互過程是:運行系統服務器程序,使服務器程序處于阻塞監聽狀態;然后,運行系統客戶端程序,通過客戶端程序,實施對用戶身份是否合法驗證,當驗證通過了以后,才開始對服務器提交連接請求。服務器把從客戶端提交的連接請求接收下來,首先進行用戶身份合法性的驗證,該驗證與客戶端的驗證有所不同:如果驗證被通過,那么雙方建立起連接,進行正常的同學;如果驗證沒有通過,那么就斷開連接。只有當服務器與客戶端間的連接建立起來后,客戶端才能夠向服務器進行控制指令的發送。
當客戶端開始發送控制指令之前,需要明確所有指令的格式與含義,接著通過加密模塊的調用,進行對指令加密,只有當加密成功后,調用發送函數,把指令提交給服務器實施處理。當服務器接收了客戶端提交的指令后,首先進行解密指令的操作,解密后實施解析指令操作,接著,依據指令解析的結果,調用相應的命令,執行相應的功能。功能在執行完之后,服務器程序把執行的結果實施再次的加密,然后向客戶端發送。當客戶端接收到服務器返回的結果后,也要進行解密,將結果進行顯示,等待深層次地處理。
系統的數據通道,為服務器程序與客戶端程序之間的傳輸數據的通道。服務器端的功能模塊把程序運行的結果儲存至MySQL數據庫關系表中,客戶端通過ADO數據庫訪問技術,調用數據存取模塊,然后調研MySQL ODBC驅動,實施對數據庫中數據的訪問。
ODBC定義了對全部數據庫統一訪問的一種方法,而且用戶應用程序能夠使用ODBC技術實現超越平臺的數據檢索功能。然而,如果直接調用ODBC API來進行應用程序的編寫,則實現起來比較復雜。ADO技術恰好可以克服這種復雜性。所以,將ADO技術與ODBC進行結合,進行數據庫的訪問,則是一個比較理想的辦法。本系統實現數據通道的思想恰是基于此:使用ADO技術進行客戶端程序的開發,客戶端程序使用MySQL ODBC建立與MySQL數據庫服務器的連接,實現數據訪問與操作功能。而服務器端的全部功能模塊,則是直接對MySQL數據庫實施讀寫。系統的數據通道模型如圖2所示。

圖2 系統的數據通道模型圖
獲取了MySQL數據源以后,客戶端程序通過ADO數據存取模塊,對MySQL數據源實施訪問。系統在使用ADO實施設計客戶端程序時,主要是通過C++Builder開發環境的ADO等組件完成的。該組件構成的主要部分有:TADODataset,TADOConnection,TDataSource,TADOQuery,TDBGrid。
服務器程序里與數據通道有關的功能模塊,基本上都是服務器功能模塊。該服務器功能模塊通過Linux操作系統下的C語言開發平臺研制而來,能夠在Linux Shell程序中直接運行。在程序中,若需對MySQL數據庫實施交互,則一定要與它首先建立起連接。通過C語言連接MySQL數據庫,只要是由兩個步驟來完成的,分別是:初始化連接句柄結構,實現函數是mysql init();實際創建連接,實現函數是mysqlreal_connect()。
初始化連接句柄使用mysql init()函數來進行:
MYSQL*mysql_init(MYSQL*);
通常傳遞NULL給例程,它會返回一個指向新分配的連接句柄結構的指針。假如傳遞的是一個現成的結構,那么它就會被重新初始化。假如初始化發生錯誤,則程序返回空指針。
在分配及初始化結構完成后,通過mysqlreal_connect()函數提供參數給鏈接:
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);
網絡遠程控制系統是一個基于數據庫技術和socket技術的系統,能夠對工作在網絡中的網絡設備實施有效地遠程監測與控制。通過該系統的使用,能夠及時隔離控制網絡中異常的數據流量,實時地查詢與操作,進一步地實施保護措施,確保網絡的安全。
[1] 李笠.高速網絡實時信息流監控系統[D].昆明理工大學,2007:56-58.
[2] 蔡偉祥等.流量采集在網絡性能監測與分析系統中的改進和實現[J].計算機工程,2003.29(15):58-59.
[3] 王建新,楊世鳳等.遠程監控技術的發展現狀和趨勢[J].國外電子測量技術,2008(4).9:23-25.
[4] 鄭小寧.基于因特網的遠程控制技術研究[D].西北工業大學,2008(8):54-57.
[5] 于海晨,仲崇權.基于Internet控制系統遠程監控方案及實例[J].計算機測量與控制,2007(5):14-16.