吳威 王鳴
摘 要:Avocent公司開發(fā)了DSView3 IT基礎(chǔ)設(shè)施統(tǒng)一管理平臺(tái)。它的數(shù)據(jù)中心遠(yuǎn)程集中控制解決方案允許多名操作人員同時(shí)對(duì)數(shù)據(jù)中心內(nèi)的服務(wù)器、小型機(jī)、刀片式服務(wù)器、虛擬主機(jī)和網(wǎng)絡(luò)設(shè)備等進(jìn)行遠(yuǎn)程集中統(tǒng)一操作控制,但操作人員遠(yuǎn)端對(duì)機(jī)房?jī)?nèi)目標(biāo)設(shè)備具體的操作事項(xiàng)和操作內(nèi)容卻無法進(jìn)行實(shí)時(shí)跟蹤記錄、監(jiān)控和審計(jì),這樣對(duì)于一些安全性級(jí)別要求極高的信息中心、數(shù)據(jù)中心來說,集中控管系統(tǒng)就存在安全缺憾。而國內(nèi)外市場(chǎng)上的相關(guān)軟件還存在著各種突出問題,無法滿足客戶的需要。針對(duì)這種現(xiàn)狀,文章從視頻監(jiān)控系統(tǒng)所涉及的SNMP接收解析、內(nèi)存圖象抓取、視頻編碼壓縮存儲(chǔ)、產(chǎn)品注冊(cè)驗(yàn)證、多線程同步、進(jìn)程消息通信等技術(shù)點(diǎn)入手,結(jié)合調(diào)查分析和實(shí)際實(shí)驗(yàn),實(shí)現(xiàn)視頻監(jiān)控系統(tǒng)。
關(guān)鍵詞:SNMP;視頻監(jiān)控;遠(yuǎn)程控制
1 前沿
通過DSView軟件遠(yuǎn)程登錄的用戶將被實(shí)行監(jiān)控,記錄用戶會(huì)話的開始結(jié)束時(shí)間,訪問設(shè)備的名稱,并可根據(jù)管理員的預(yù)先配置,對(duì)指定用戶或用戶在指定設(shè)備上的操作進(jìn)行7×24小時(shí)視頻錄制。全程記錄操作人員對(duì)目標(biāo)設(shè)備的操作畫面內(nèi)容可以用來跟蹤并規(guī)范操作人員的操作行為。不但可以及時(shí)發(fā)現(xiàn)操作人員常見的、無意的誤操作,進(jìn)行事后分析與糾正;更可以對(duì)操作人員的惡意操作行為進(jìn)行追溯,提供惡意操作的第一手證據(jù)[1]。
2 SNMP的監(jiān)控系統(tǒng)關(guān)鍵技術(shù)研究與開發(fā)
該軟件的用戶日常通過DSView3平臺(tái)訪問平臺(tái)管控下的遠(yuǎn)程電腦,但是管理者反映DSView3平臺(tái)缺少對(duì)用戶訪問操作的監(jiān)控,即無法記錄用戶的訪問時(shí)間與操作內(nèi)容,因此在大型企業(yè)特別是金融行業(yè)的數(shù)據(jù)安全保障中存在隱患。通信、銀行、紙幣印刷、金融機(jī)構(gòu)等需要保存10年甚至更長時(shí)間的用戶使用記錄和視頻文件作為今后追溯的依據(jù),同時(shí)要求能夠以網(wǎng)站形式提供快捷的用戶訪問歷史、視頻記錄、操作日志等的檢索和視頻記錄的在線播放功能。
根據(jù)這種現(xiàn)狀,決定研究并通過技術(shù)手段解決這些問題。所設(shè)計(jì)的視頻監(jiān)控系統(tǒng)構(gòu)架如圖1所示。
系統(tǒng)將通過以下幾個(gè)步驟來實(shí)現(xiàn)對(duì)用戶的監(jiān)控:
(1)遠(yuǎn)程用戶通過Web頁面遠(yuǎn)程訪問網(wǎng)絡(luò)服務(wù)器。
(2)遠(yuǎn)程用戶在網(wǎng)頁中輸入用戶名稱與訪問密碼。
(3)認(rèn)汪服務(wù)器驗(yàn)證遠(yuǎn)程用戶是否合法。
(4)網(wǎng)頁顯示開啟服務(wù)器的列表。
(5)遠(yuǎn)程用戶選擇操控的HOST。
(6)在遠(yuǎn)程用戶開啟會(huì)話的同時(shí),監(jiān)控服務(wù)器的監(jiān)控程序接收到從DSV3服務(wù)器發(fā)來的SNMP Trap開始信號(hào),通過API調(diào)用AvctVideoViewer.exe來顯示窗口,監(jiān)控服務(wù)器的監(jiān)控程序?qū)υ摯翱谶M(jìn)行錄制。在多臺(tái)目標(biāo)設(shè)備的會(huì)話被打開的情況下,監(jiān)控服務(wù)器的監(jiān)控程序通過對(duì)AvctVideoViewer.exe窗口最小化方式,實(shí)現(xiàn)后臺(tái)分別錄制。程序?qū)⑼ㄟ^訪問DSVIEW的API來在監(jiān)控服務(wù)器上打開圖像顯示窗口,直接讀取內(nèi)存圖像并存入自定義的緩沖區(qū)等待下一步處理[2]。
(1)遠(yuǎn)程用戶端顯示HOST的界面。
(2)遠(yuǎn)程用戶端操作HOST的界面。
(3)遠(yuǎn)程用戶結(jié)束對(duì)HOST的操作,結(jié)束回話。
(4)監(jiān)控程序接受到DSV3服務(wù)器發(fā)來的遠(yuǎn)程用戶結(jié)束SNMP Trap時(shí),結(jié)束對(duì)該HOST的錄制。
簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議( Simple Network ManagementProtocol,SNMP)首先是由Internet工程任務(wù)組織(InternetEngineering Task Force,IETF)的研究小組為了解決Internet上的路由器管理問題而提出的。SNMP的基本功能包括監(jiān)視網(wǎng)絡(luò)性能、檢測(cè)分析網(wǎng)絡(luò)差錯(cuò)和配置網(wǎng)絡(luò)設(shè)備等。在網(wǎng)絡(luò)正常工作時(shí),SNMP可實(shí)現(xiàn)統(tǒng)計(jì)、配置和測(cè)試等功能。當(dāng)網(wǎng)絡(luò)出故障時(shí),可實(shí)現(xiàn)各種差錯(cuò)檢測(cè)和恢復(fù)功能。SNMP也為設(shè)備向網(wǎng)絡(luò)管理工作站報(bào)告問題和錯(cuò)誤提供了一種方法。
在SNMP的典型配置中,整個(gè)系統(tǒng)必須有一個(gè)管理站(Management Station),它實(shí)際上是網(wǎng)控中心。在管理站內(nèi)運(yùn)行管理進(jìn)程。在每個(gè)被管對(duì)象中一定要有代理進(jìn)程。管理進(jìn)程和代理繼承利用SNMP報(bào)文進(jìn)行通信,而SNMP報(bào)文又使用用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol,UDP)來傳送。圖中有兩個(gè)主機(jī)和一個(gè)路由器。這些協(xié)議棧中帶有陰影的部分是原來這些主機(jī)和路由器所具有的,而沒有陰影的部分是為實(shí)現(xiàn)網(wǎng)絡(luò)管理而增加的。其中在代理進(jìn)程端是用熟知端口161倆接收get或set報(bào)文,而在管理進(jìn)程端是用熟知端口162來接收trap報(bào)文。這就要求我們實(shí)際使用SNMP協(xié)議進(jìn)行通信時(shí)設(shè)置防火墻開放計(jì)算機(jī)的161,162端口[3]。
接下來我們了解一下SNMP的報(bào)文格式。封裝成UDP數(shù)據(jù)報(bào)操作的SNMP報(bào)文格式如圖2所示??梢娨粋€(gè)SNMP報(bào)文共由3個(gè)部分組成,即公共SNMP首部、get/set首部trap首部、變量綁定。以下簡(jiǎn)述各個(gè)部分的組成和不同類型代碼所代表的含義。
(1)公共SNMP首部。共3個(gè)字段:①版本。寫入版本字段的是版本號(hào)減l,對(duì)于SNMP(即SNMPVl)則應(yīng)寫入0。②共同體(community)。共同體就是一個(gè)字符串,作為管理進(jìn)程和代理進(jìn)程之間的明文口令,常用的是6個(gè)字符“public”。③PDU類型。根據(jù)PDU的類型,填入0~4中的一個(gè)數(shù)字,其中0代表get-request,1代表get-next-request,2代表get-response,3代表set-request,4代表trap。
(2) get/set首部。①請(qǐng)求標(biāo)識(shí)符(request ID)。這是由管理進(jìn)程設(shè)置的一個(gè)整數(shù)值。代理進(jìn)程在發(fā)送get-response報(bào)文時(shí)也要返回此請(qǐng)求標(biāo)識(shí)符。管理進(jìn)程可同時(shí)向許多代理發(fā)出get報(bào)文,這些報(bào)文都使用UDP傳送,先發(fā)送的有可能后到達(dá)。設(shè)置了請(qǐng)求標(biāo)識(shí)符可使管理進(jìn)程能夠識(shí)別返回的響應(yīng)報(bào)文對(duì)于哪一個(gè)請(qǐng)求報(bào)文。②差錯(cuò)狀態(tài)(error status)。由代理進(jìn)程回答時(shí)填入0~5中的一個(gè)數(shù)字,其中0代表“一切正常”,1代表“代理無法將回答裝入到一個(gè)SNMP報(bào)文之中”,2代表“操作指明了一個(gè)不存在的變量”,3代表“一個(gè)set操作指明了一個(gè)無效值或無效語法”,4代表“管理進(jìn)程試圖修改一個(gè)只讀變量”,5代表“某些其他的差錯(cuò)”。③差錯(cuò)索引(error index)。當(dāng)出現(xiàn)no SuchName、badValue或readOnly的差錯(cuò)時(shí),由代理進(jìn)程在回答時(shí)設(shè)置的一個(gè)整數(shù),它指明有差錯(cuò)的變量在變量列表中的偏移。
(3) trap首部。①企業(yè)(enterprise)。填入trap報(bào)文的網(wǎng)絡(luò)設(shè)備的對(duì)象標(biāo)識(shí)符。此對(duì)象標(biāo)識(shí)符肯定是在圖3的對(duì)象命名樹上的enterprise結(jié)點(diǎn){l-3.6.1.4.1}下面的一棵子樹上。②trap類型。此字段正式的名稱是generic-trap,其中trap類型0代表coldStart代理進(jìn)行了初始化,1代表warmStart代理進(jìn)行了重新初始化,2代表linkDown-個(gè)接口從工作狀態(tài)變?yōu)楣收蠣顟B(tài),3代表linkup-個(gè)接口從故障狀態(tài)變?yōu)楣ぷ鳡顟B(tài),4代表authenticationFailure從SNMP管理進(jìn)程接收到具有一個(gè)無效共同體的報(bào)文,5代表egpNeighborLoss-個(gè)EGP相鄰路由器變?yōu)楣收蠣顟B(tài),6代表enterpriseSpecific代理自定義的事件,需要用后面的“特定代碼”來指明。
當(dāng)使用上述類型2,3,5時(shí),在報(bào)文后面變量部分的第一個(gè)變量應(yīng)標(biāo)識(shí)響應(yīng)的接口。①特定代碼(specific-code)。指明代理自定義的時(shí)間(若trap類型為6),否則為0。②時(shí)間戳(timestamp)。指明自代理進(jìn)程初始化到trap報(bào)告的事件發(fā)生所經(jīng)歷的時(shí)間,單位為10 ms。例如時(shí)間戳為1908表明在代理初始化后l 908 ms發(fā)生了該時(shí)間。
(4)變量綁定(variable-bindings)。指明一個(gè)或多個(gè)變量的名和對(duì)應(yīng)的值。在get或get-next報(bào)文中,變量的值應(yīng)忽略。
通過對(duì)SNMP協(xié)議的理解,我們已經(jīng)可以通過程序代碼來構(gòu)造SNMP的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)對(duì)消息的存儲(chǔ)接收,可直接調(diào)用Windows的api來實(shí)現(xiàn)這個(gè)功能。其中snmpapi.dll是微軟Microsoft簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)相關(guān)模塊,用于監(jiān)視你的LAN局域網(wǎng)網(wǎng)絡(luò)狀態(tài),而mgmtapi.dll是微軟Microsoft簡(jiǎn)單網(wǎng)絡(luò)管理應(yīng)用程序接口API模塊,inetmibl.dll是WindowsNT的簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議SNMP相關(guān)模塊。
有了上述api接口之后,我們?cè)谝粋€(gè)永不停止的線程中利用如下代碼即可實(shí)現(xiàn)SNMP消息的持續(xù)接收:
while (SnmpMgrGetTrap(@enterprise, @IPAddress.@genericTrap, @specificTrap, @timeStamp, @VarBindList》do Begin接收后的處理操作End
在我們的系統(tǒng)中,SNMP消息是由交換設(shè)備硬件自動(dòng)發(fā)出的,在配置好目標(biāo)地址和發(fā)送時(shí)機(jī)后,交換設(shè)備(下文中簡(jiǎn)稱KVM)在新的會(huì)話開啟,會(huì)話結(jié)束和設(shè)備出現(xiàn)掉電情況時(shí)會(huì)發(fā)送不同的消息。
我們利用網(wǎng)絡(luò)監(jiān)測(cè)軟件wireshark抓取了多個(gè)消息并發(fā)現(xiàn)消息格式如下:
會(huì)話開始(SNMP Trap來源:KVM設(shè)備)
KVM掉電(SNMP Trap來源:DSView3服務(wù)器設(shè)備)
多次嘗試后發(fā)現(xiàn)結(jié)果一致,得到結(jié)論:對(duì)SNMP Trap頭信息進(jìn)行判斷。
①Specific Trap=2為開始會(huì)話
②Specific Trap=3為結(jié)束會(huì)話
③Specific Trap=3為結(jié)束會(huì)話
為了方便起見我們將這3個(gè)類型定義為枚舉的常量:
TSNMPCindType= (sctKVMStop=1,//1為掉電的標(biāo)志
sctConnectStart=2,//2為用戶連接的標(biāo)志
sctConnectClose=3,//3為用戶斷開的標(biāo)志
并對(duì)每條消息做相應(yīng)的轉(zhuǎn)化
connection.CMDType
:=TSNMPCmdType(SpecificTrap);
然后我們就可以通過對(duì)消息中信息的SpecificTrap類型進(jìn)行判斷得出消息的含義:
//用戶關(guān)閉連接
if (AConnectInfo.CMDType= sctConnectClose) then
begin
輸出日志顯示已經(jīng)進(jìn)入用戶關(guān)閉邏輯分支……
輸出日志顯示已經(jīng)進(jìn)入用戶打開邏輯分支……
End
∥KVM掉電處理
if (AConnectInfo.CMDType= sctKVMStop) then
begin
輸出日志顯示已經(jīng)進(jìn)入掉電處理邏輯分支……
end;
之后通過嘗試發(fā)現(xiàn)SNMP消息中oid以10418.7.2.6.1結(jié)尾的數(shù)據(jù)包含了信息來源的用戶名稱,oid以10418.7.2.6.?結(jié)尾的數(shù)據(jù)包含了信息來源的設(shè)備名稱,并且?位不同代表了不同的設(shè)備,于是我們得到了消息來源的全部信息,同樣我們將其輸出到日志當(dāng)中。
其中采取程序運(yùn)行一段時(shí)間后寫出的日志信息如下:
[3/24-15:06:19]user:testl set: pc-adconnec t
[3/24-15:06:55]user:testl set: pc-addisconnect
[3/24-15:07:35] user:set: dsr8035 disconnect
[3/24-15:10:07]user:testl set: pc-adconnect
[3/24-15:10:15] user:testl set: pc-ad disconnect
[3/24-15:10:54] user: set: dsr8035 disconnect
分析上面的實(shí)際程序運(yùn)行結(jié)果,我們可以看到日志中正確顯示了主動(dòng)連接設(shè)備進(jìn)行會(huì)話開始和會(huì)話結(jié)束以及KVM掉電的日志信息,并且列出了開始結(jié)束會(huì)話的用戶名以及發(fā)送信息的源設(shè)備名稱,這就給我們統(tǒng)一管理消息帶來了可能,也為今后還原計(jì)算機(jī)事故現(xiàn)場(chǎng)提供了第一手的依據(jù)。
3結(jié)語
結(jié)合上文中提出的問題,解決方案和實(shí)驗(yàn)結(jié)果分析,我們已經(jīng)解決了視頻監(jiān)控系統(tǒng)中的關(guān)鍵問題并給出了代碼實(shí)現(xiàn)。接下來就可以按照既定計(jì)劃,一步一步實(shí)現(xiàn)各個(gè)模塊,然后整合實(shí)現(xiàn)整個(gè)系統(tǒng)。在系統(tǒng)理論基礎(chǔ)問題的前提下進(jìn)行開發(fā)避免了重復(fù)的調(diào)查和研究,減少了代碼開發(fā)的周期并且降低了研發(fā)的風(fēng)險(xiǎn)系數(shù),為系統(tǒng)能夠按時(shí)交付上線,產(chǎn)品能夠順利投向市場(chǎng)提供了有力支持。
[參考文獻(xiàn)]
[1]石志強(qiáng).大規(guī)模可運(yùn)營視頻監(jiān)控網(wǎng)絡(luò)系統(tǒng)的安全機(jī)制[J]北京郵電大學(xué)學(xué)報(bào),2009( sl):66-72
[2]苗立剛.視頻監(jiān)控中的圖像拼接與合成算法研究[J].儀器儀表報(bào),2009 (4):857-861
[3]岑峰,戚飛虎,陳茂林.長期視頻監(jiān)控系統(tǒng)的多分布模型背景差方法[J]紅外與毫米波學(xué)報(bào),2002 (1):59-63