用Python和wxPython开发主机安全监控系统_第1页
用Python和wxPython开发主机安全监控系统_第2页
用Python和wxPython开发主机安全监控系统_第3页
用Python和wxPython开发主机安全监控系统_第4页
用Python和wxPython开发主机安全监控系统_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用Python和wxPython开发主机安全监控系统用Python和wxPython开发主机安全监控系统用Python和wxPython开发主机安全监控系统王世华,沈卫超(北京应用物理与计算数学研究所, 高性能计算中心)摘要:本文简要介绍Python,wxPython语言以及Boa图形界面生成器,以及用Python + wxPython快速开发跨平台图形用户界面的方法。同时描述了主机安全监控系统的功能及结构,主要针对于安全管理员图形界面的开发,详细阐述了其中的几个关键技术。关键词:主机安全,安全审计,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引言随着来自企业或单位内部的安全风险越来越受到重视,内部资源的滥用是网络安全管理中的焦点问题。本文将要介绍的是我们利用Python和wxPython开发的一套主机安全监控系统,以达到强化主机系统安全的目的,它分为三个部分,即:监控代理程序、监控信息中心和管理员控制台。目前我们所使用的绝大多数计算服务器均基于UNIX或者Linux操作系统,但是它们在图形方面的表现能力欠佳,界面不够友好,如何开发一款具有跨平台能力且界面表现友好的应用程序给我们提出了新

5、的挑战。2开发工具简介2.1Python语言Python是一种解释型、面向对象、动态语义、语法优美的脚本型语言,也是开发具有工业强度的商业应用程序的优秀语言,尤其适合开发基于Internet和Web的、数据库密集型的、多层的客户机/服务器系统。Python是当前移植能力最强的程序语言之一,最初,它是在UNIX上实现的,但之后扩展到了其它许多平台,其中包括MS-Windows、Mac OS X、Linux、Solaris等,而且它的源程序和二进制代码都可以免费获得。2.2 wxPython和BoawxPython是Python语言的一个GUI工具集,它可以使Python程序员简单而轻松的创建一个

6、健壮的、具有高级功能的图形用户界面。它在Python中是以扩展模块的方式实现的,拥有自身的窗体/控制,还加入了许多独立于操作系统的窗体,并且封装了流行的wxWindows跨平台GUI库,并且这些库文件是用C+编写的。wxPython同样具有跨平台能力,这意味着我们编写出来的代码可以不经修改的运行在绝大多数操作系统之上,提高了代码的利用率和生产效率。它的基本结构如下图所示:操作系统Platform GUIwxWidgets 工具包wxPython 扩展模块wxPython 库代理类图1 wxPython体系结构Boa是一款wxPython 图形界面生成器,也是一个Python的集成开发环境,它建

7、立在wxPython、wxWidgets和Python之上。Boa被设计成为一个用于wxPython的简易Delphi,它不仅是Python开发的集成环境,如:wxPython可视化框架的设计、对象浏览、文档生成、调试、源码控制(CVS)等等,而且还集成了其它Python技术,如:Zope、PyChecker、Py2EXE、Distutils以及Cyclops。3 系统结构和功能3.1系统结构主机安全监控系统由三个部分组成:监控代理程序、监控信息中心和管理员控制台。 图2 主机安全监控系统结构图监控代理程序从受监控主机采集并根据安全规则分析日志数据,然后将报警信息和归档日志传送给监控信息中心;

8、监控信息中心负责从各监控主机的代理程序收集报警信息和归档日志,并将这些信息转存到后台数据库中;管理员控制台用于接收来自监控信息中心的实时报警信息,以及对归档日志的查询与统计、分析。3.2监控代理程序读模块负责从操作系统的审计日志文件中读取连续的审计日志数据,并将其转换为一个便于存取操作的通用记录格式,传送给数据分析模块。数据分析模块根据安全规则对收到的审计数据进行分析。如果安全规则给出了明确的响应动作,则向动作响应模块发出动作指令,同时向发送模块传送匹配的数据记录。发送模块负责将接收到的数据传送给监控信息中心服务器。接收模块负责接收控制中心传来的安全规则和动作指令,刷新安全规则和向动作相应模块

9、发送动作指令。动作响应模块负责切断用户与系统的连接和封锁用户系统帐号。各模块关系框图如下: 图3 监控代理程序的功能模块3.3监控信息中心 图4 监控信息中心的功能模块监控信息中心服务器的接收模块负责接收多个监控代理发送的数据,并传送给数据分析模块。数据分析模块根据安全规则对接收到的数据进行分析,通过发送模块将动作响应传送给特定的监控代理。报警信息通过管理模块传送给管理员控制台,同时归档的数据存入数据库中。管理模块为管理员控制台提供安全监控系统的各种管理、监控与数据分析服务,包括修改和部署安全规则,查询和分析数据库的审计数据,并通过发送模块向各个监控代理部署新的安全规则和发起响应动作。3.4管

10、理员控制台监控代理程序监控信息中心接收模块发送模块系统状态模块报警模块策略编辑模块统计分析模块身份认证模块用户界面模块安全管理员管理员控制台 图5 管理员控制台的功能模块管理员控制台可以集中的显示安全报警信息并拥有对归档审计数据的分析和查询功能,并且安全管理员能够对主机安全监控系统进行安全策略的集中配置和部署。主要分为7个模块:用户界面模块、身份认证模块、报警模块、统计分析模块、策略编辑模块,系统状态模块和通信模块(发送与接收)。下面就开发该界面的几个关键技术进行论述。4 关键技术分析4.1用户界面设计用户界面的设计采用前面提到的Boa,需要注意的是各窗体控件之间的包容关系,位于顶层的窗体为w

11、x.Frame、wx.Dialog、wx.MiniFrame、wx.MDIParentFrame、wx.MDIChildFrame,基本窗体为wx.Windows、wx.Panel、wx.ScrolledWindow等等,它们之间的包容关系为先顶层后基本,如果包容关系混乱,将会对以后的窗体布局控制产生影响。另外,如果在界面中使用了图形文件,那么请拷贝到你所保存源码文件的目录下,并手动更改为相对路径,否则在不同平台上运行会出现运行时错误,这是由于Boa默认的保存方式为绝对路径。管理员用户界面如图6、7所示。 图6 开始主界面 图7 显示报警信息时的界面4.2窗体布局的处理图形用户界面应该可以很好

12、的处理各窗体之间的布局问题,在wxPython中通常使用Sizers进行布局控制,它类似于Java中的LayoutManagers。在图形界面中每个窗体都拥有一个最小尺寸,基于这个尺寸,当包容窗口改变它自身大小或状态时(更改了字体或标签),窗体布局机制就会自动计算子窗体的大小及位置以进行调整,在Boa中内置了wx.BoxSizer,wx.GridSizer,wx.FlexGridSizer,wx.StaticBoxSizer以及wx.NotebookSizer供我们使用。使用Sizers时最重要的一点就是窗体之间的嵌套问题,如果不注意窗体之间的相互关系,既包容窗口和被包容窗口(子窗口)的关系,

13、Sizers可能无法满足你的要求。下面是实现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类进行多线程处理,它可以在固定的时间间隔里进行不同的事务处理,并可以根据需要随时启动或停止该线程,且程序稳定性好,所以本系统采用轮询机制进行报警信息的查询。以下是实现的关键代码: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报警信息的显示在实际的系统中,一旦产生事件,就会引发大量的报警信息,如何显示这些信息

18、,使得安全管理员能够一目了然的了解系统状况,是值得我们考虑的事情。我们利用wxPython中的wxListCtrl类进行实现。首先,我们把从数据库中查询到的信息进行分离显示,主窗口只显示最主要的信息,如果管理员对于某一条记录感兴趣的话,可以点击该条记录,详细信息会显示在下面的窗口中(参看图7),关键代码:# 加入一个列,如果要加入多列,可重复该语句。parent.InsertColumn(col=0, format=wxLIST_FORMAT_LEFT, heading='ID', width=30) # 列加入完毕后,设置数据入口点。self.Full_msg.InsertS

19、tringItem(self.counter, str(data0) # 设置列中每个数据元素的值,如有多个元素,可重复该语句或设置一个循环程序。self.Full_msg.SetStringItem(self.counter, 1, data1);其次,为了使管理员更好的了解一段时间内的系统状况,我们还加入了排序功能,它可以按照列方式进行各种关键字的排序,如按照风险级别、事件发生时间等等,使用排序功能实际上用到了wx.lib.mixins.listctrl混合类,使用时必须进行导入import wx.lib.mixins.listctrl as listmix;最后,为了增强界面的表现力,还可以在条目上加入图标,图标存储在wx.ImageList中便于以后的重复使用,但目前该功能只能应用在第

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论