用Python和wxPython開發(fā)主機安全監(jiān)控系統(tǒng)_第1頁
用Python和wxPython開發(fā)主機安全監(jiān)控系統(tǒng)_第2頁
用Python和wxPython開發(fā)主機安全監(jiān)控系統(tǒng)_第3頁
用Python和wxPython開發(fā)主機安全監(jiān)控系統(tǒng)_第4頁
用Python和wxPython開發(fā)主機安全監(jiān)控系統(tǒng)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、用Python和wxPython開發(fā)主機安全監(jiān)控系統(tǒng)用Python和wxPython開發(fā)主機安全監(jiān)控系統(tǒng)用Python和wxPython開發(fā)主機安全監(jiān)控系統(tǒng)王世華,沈衛(wèi)超(北京應用物理與計算數(shù)學研究所, 高性能計算中心)摘要:本文簡要介紹Python,wxPython語言以及Boa圖形界面生成器,以及用Python + wxPython快速開發(fā)跨平臺圖形用戶界面的方法。同時描述了主機安全監(jiān)控系統(tǒng)的功能及結構,主要針對于安全管理員圖形界面的開發(fā),詳細闡述了其中的幾個關鍵技術。關鍵詞:主機安全,安全審計,Python, wxPython, 圖形用戶界面Developing Monitoring S

2、ystem of Host-Security with Python and wxPythonWang Shihua, Shen Weichao(High Performance Computing Center, Institute of Applied Physics and Computational Mathematics, Beijing, 100088)Abstract: This paper introduces the Python, wxPython language, and the Boa constructor shortly, then explains some b

3、asic methods of these tools for rapidly developing cross-platform GUI application. We describe structure and functions of host-security monitoring system at the same time, focus on GUI development of the security administrator, and some critical technologies are presented in details.Keywords: host-s

4、ecurity, security-audit, Python, wxPython, GUI (Graphical User Interface)1引言隨著來自企業(yè)或單位內(nèi)部的安全風險越來越受到重視,內(nèi)部資源的濫用是網(wǎng)絡安全管理中的焦點問題。本文將要介紹的是我們利用Python和wxPython開發(fā)的一套主機安全監(jiān)控系統(tǒng),以達到強化主機系統(tǒng)安全的目的,它分為三個部分,即:監(jiān)控代理程序、監(jiān)控信息中心和管理員控制臺。目前我們所使用的絕大多數(shù)計算服務器均基于UNIX或者Linux操作系統(tǒng),但是它們在圖形方面的表現(xiàn)能力欠佳,界面不夠友好,如何開發(fā)一款具有跨平臺能力且界面表現(xiàn)友好的應用程序給我們提出了新

5、的挑戰(zhàn)。2開發(fā)工具簡介2.1Python語言Python是一種解釋型、面向對象、動態(tài)語義、語法優(yōu)美的腳本型語言,也是開發(fā)具有工業(yè)強度的商業(yè)應用程序的優(yōu)秀語言,尤其適合開發(fā)基于Internet和Web的、數(shù)據(jù)庫密集型的、多層的客戶機/服務器系統(tǒng)。Python是當前移植能力最強的程序語言之一,最初,它是在UNIX上實現(xiàn)的,但之后擴展到了其它許多平臺,其中包括MS-Windows、Mac OS X、Linux、Solaris等,而且它的源程序和二進制代碼都可以免費獲得。2.2 wxPython和BoawxPython是Python語言的一個GUI工具集,它可以使Python程序員簡單而輕松的創(chuàng)建一個

6、健壯的、具有高級功能的圖形用戶界面。它在Python中是以擴展模塊的方式實現(xiàn)的,擁有自身的窗體/控制,還加入了許多獨立于操作系統(tǒng)的窗體,并且封裝了流行的wxWindows跨平臺GUI庫,并且這些庫文件是用C+編寫的。wxPython同樣具有跨平臺能力,這意味著我們編寫出來的代碼可以不經(jīng)修改的運行在絕大多數(shù)操作系統(tǒng)之上,提高了代碼的利用率和生產(chǎn)效率。它的基本結構如下圖所示:操作系統(tǒng)Platform GUIwxWidgets 工具包wxPython 擴展模塊wxPython 庫代理類圖1 wxPython體系結構Boa是一款wxPython 圖形界面生成器,也是一個Python的集成開發(fā)環(huán)境,它建

7、立在wxPython、wxWidgets和Python之上。Boa被設計成為一個用于wxPython的簡易Delphi,它不僅是Python開發(fā)的集成環(huán)境,如:wxPython可視化框架的設計、對象瀏覽、文檔生成、調(diào)試、源碼控制(CVS)等等,而且還集成了其它Python技術,如:Zope、PyChecker、Py2EXE、Distutils以及Cyclops。3 系統(tǒng)結構和功能3.1系統(tǒng)結構主機安全監(jiān)控系統(tǒng)由三個部分組成:監(jiān)控代理程序、監(jiān)控信息中心和管理員控制臺。 圖2 主機安全監(jiān)控系統(tǒng)結構圖監(jiān)控代理程序從受監(jiān)控主機采集并根據(jù)安全規(guī)則分析日志數(shù)據(jù),然后將報警信息和歸檔日志傳送給監(jiān)控信息中心;

8、監(jiān)控信息中心負責從各監(jiān)控主機的代理程序收集報警信息和歸檔日志,并將這些信息轉存到后臺數(shù)據(jù)庫中;管理員控制臺用于接收來自監(jiān)控信息中心的實時報警信息,以及對歸檔日志的查詢與統(tǒng)計、分析。3.2監(jiān)控代理程序讀模塊負責從操作系統(tǒng)的審計日志文件中讀取連續(xù)的審計日志數(shù)據(jù),并將其轉換為一個便于存取操作的通用記錄格式,傳送給數(shù)據(jù)分析模塊。數(shù)據(jù)分析模塊根據(jù)安全規(guī)則對收到的審計數(shù)據(jù)進行分析。如果安全規(guī)則給出了明確的響應動作,則向動作響應模塊發(fā)出動作指令,同時向發(fā)送模塊傳送匹配的數(shù)據(jù)記錄。發(fā)送模塊負責將接收到的數(shù)據(jù)傳送給監(jiān)控信息中心服務器。接收模塊負責接收控制中心傳來的安全規(guī)則和動作指令,刷新安全規(guī)則和向動作相應模塊

9、發(fā)送動作指令。動作響應模塊負責切斷用戶與系統(tǒng)的連接和封鎖用戶系統(tǒng)帳號。各模塊關系框圖如下: 圖3 監(jiān)控代理程序的功能模塊3.3監(jiān)控信息中心 圖4 監(jiān)控信息中心的功能模塊監(jiān)控信息中心服務器的接收模塊負責接收多個監(jiān)控代理發(fā)送的數(shù)據(jù),并傳送給數(shù)據(jù)分析模塊。數(shù)據(jù)分析模塊根據(jù)安全規(guī)則對接收到的數(shù)據(jù)進行分析,通過發(fā)送模塊將動作響應傳送給特定的監(jiān)控代理。報警信息通過管理模塊傳送給管理員控制臺,同時歸檔的數(shù)據(jù)存入數(shù)據(jù)庫中。管理模塊為管理員控制臺提供安全監(jiān)控系統(tǒng)的各種管理、監(jiān)控與數(shù)據(jù)分析服務,包括修改和部署安全規(guī)則,查詢和分析數(shù)據(jù)庫的審計數(shù)據(jù),并通過發(fā)送模塊向各個監(jiān)控代理部署新的安全規(guī)則和發(fā)起響應動作。3.4管

10、理員控制臺監(jiān)控代理程序監(jiān)控信息中心接收模塊發(fā)送模塊系統(tǒng)狀態(tài)模塊報警模塊策略編輯模塊統(tǒng)計分析模塊身份認證模塊用戶界面模塊安全管理員管理員控制臺 圖5 管理員控制臺的功能模塊管理員控制臺可以集中的顯示安全報警信息并擁有對歸檔審計數(shù)據(jù)的分析和查詢功能,并且安全管理員能夠對主機安全監(jiān)控系統(tǒng)進行安全策略的集中配置和部署。主要分為7個模塊:用戶界面模塊、身份認證模塊、報警模塊、統(tǒng)計分析模塊、策略編輯模塊,系統(tǒng)狀態(tài)模塊和通信模塊(發(fā)送與接收)。下面就開發(fā)該界面的幾個關鍵技術進行論述。4 關鍵技術分析4.1用戶界面設計用戶界面的設計采用前面提到的Boa,需要注意的是各窗體控件之間的包容關系,位于頂層的窗體為w

11、x.Frame、wx.Dialog、wx.MiniFrame、wx.MDIParentFrame、wx.MDIChildFrame,基本窗體為wx.Windows、wx.Panel、wx.ScrolledWindow等等,它們之間的包容關系為先頂層后基本,如果包容關系混亂,將會對以后的窗體布局控制產(chǎn)生影響。另外,如果在界面中使用了圖形文件,那么請拷貝到你所保存源碼文件的目錄下,并手動更改為相對路徑,否則在不同平臺上運行會出現(xiàn)運行時錯誤,這是由于Boa默認的保存方式為絕對路徑。管理員用戶界面如圖6、7所示。 圖6 開始主界面 圖7 顯示報警信息時的界面4.2窗體布局的處理圖形用戶界面應該可以很好

12、的處理各窗體之間的布局問題,在wxPython中通常使用Sizers進行布局控制,它類似于Java中的LayoutManagers。在圖形界面中每個窗體都擁有一個最小尺寸,基于這個尺寸,當包容窗口改變它自身大小或狀態(tài)時(更改了字體或標簽),窗體布局機制就會自動計算子窗體的大小及位置以進行調(diào)整,在Boa中內(nèi)置了wx.BoxSizer,wx.GridSizer,wx.FlexGridSizer,wx.StaticBoxSizer以及wx.NotebookSizer供我們使用。使用Sizers時最重要的一點就是窗體之間的嵌套問題,如果不注意窗體之間的相互關系,既包容窗口和被包容窗口(子窗口)的關系,

13、Sizers可能無法滿足你的要求。下面是實現(xiàn)Sizers的一些關鍵代碼,這里還包含了嵌套的Sizers:# 處于最上層的主Sizers,可管理附著于上面的子Sizers。mainSizer = wx.BoxSizer(wx.VERTICAL) # 依次添加位于最上層窗體的各控件mainSizer.Add(topLbl, 0, wx.ALL, 5)mainSizer.Add(wx.StaticLine(panel), 0, wx.EXPAND|wx.TOP|wx.BOTTOM, 5)# notesSizer是一個Grid控件,它包含了所有用戶輸入的信息notesSizer = wx.FlexGr

14、idSizer(cols=2, hgap=5, vgap=5)# 依次添加位于該層面上的各控件notesSizer.AddGrowableCol(1)notesSizer.Add(usernameLbl, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)notesSizer.Add(username, 0, wx.EXPAND)notesSizer.Add(passLbl, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL)notesSizer.Add(pass, 0, wx.EXPAND)# 把notesSizer加入

15、到主Sizers當中去mainSizer.Add(notesSizer, 0, wx.EXPAND|wx.ALL, 10)# 這里并排放置了兩個按鈕,并且按鈕的間隔可以隨著主窗體大小的改變而變化。buttonSizer = wx.BoxSizer(wx.HORIZONTAL)buttonSizer.Add(20,20), 1)buttonSizer.Add(OKBtn)buttonSizer.Add(20,20), 1)buttonSizer.Add(quitBtn)buttonSizer.Add(20,20), 1)mainSizer.Add(buttonSizer, 0, wx.EXPAN

16、D|wx.BOTTOM, 10) #加入到主Sizers中# 最后,通知wx.Panel,讓Sizers進行布局處理panel.SetSizer(mainSizer)# 將Frame放在所需要的Sizer當中,并防止它小于默認尺寸mainSizer.Fit(self)self.SetSizeHints(*self.GetSize()4.3多線程處理wxPython提供一個wxTimer類進行多線程處理,它可以在固定的時間間隔里進行不同的事務處理,并可以根據(jù)需要隨時啟動或停止該線程,且程序穩(wěn)定性好,所以本系統(tǒng)采用輪詢機制進行報警信息的查詢。以下是實現(xiàn)的關鍵代碼:self.timer1 = wxT

17、imer(evtHandler=self, id=wxID_AIC_GUITIMER1) # 初始化一個wxTimerEVT_TIMER(self, wxID_AIC_GUITIMER1, self.OnTimer1Timer) # 建立事件處理句柄self.timer1.Start( 1000 ) # 啟動wxTimer,括號中為時間,單位毫秒。self.timer1.Stop() # 停止wxTimerdef OnTimer1Timer(self, event): # 編寫你需要處理事務的代碼,從略。4.4報警信息的顯示在實際的系統(tǒng)中,一旦產(chǎn)生事件,就會引發(fā)大量的報警信息,如何顯示這些信息

18、,使得安全管理員能夠一目了然的了解系統(tǒng)狀況,是值得我們考慮的事情。我們利用wxPython中的wxListCtrl類進行實現(xiàn)。首先,我們把從數(shù)據(jù)庫中查詢到的信息進行分離顯示,主窗口只顯示最主要的信息,如果管理員對于某一條記錄感興趣的話,可以點擊該條記錄,詳細信息會顯示在下面的窗口中(參看圖7),關鍵代碼:# 加入一個列,如果要加入多列,可重復該語句。parent.InsertColumn(col=0, format=wxLIST_FORMAT_LEFT, heading='ID', width=30) # 列加入完畢后,設置數(shù)據(jù)入口點。self.Full_msg.InsertS

19、tringItem(self.counter, str(data0) # 設置列中每個數(shù)據(jù)元素的值,如有多個元素,可重復該語句或設置一個循環(huán)程序。self.Full_msg.SetStringItem(self.counter, 1, data1);其次,為了使管理員更好的了解一段時間內(nèi)的系統(tǒng)狀況,我們還加入了排序功能,它可以按照列方式進行各種關鍵字的排序,如按照風險級別、事件發(fā)生時間等等,使用排序功能實際上用到了wx.lib.mixins.listctrl混合類,使用時必須進行導入import wx.lib.mixins.listctrl as listmix;最后,為了增強界面的表現(xiàn)力,還可以在條目上加入圖標,圖標存儲在wx.ImageList中便于以后的重復使用,但目前該功能只能應用在第

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論