吳威 王鳴



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