孙萌 刘雪飞
摘要:为提高网络管理效率,实现网管数据的远程传输,设计并实现了基于Web的MIB浏览器。通过研究XML语言与ASN.1的转换来实现用XML描述MIB文档,并利用JQuery技术将其转换为MIB树状菜单呈现于浏览器页面,以便于网管人员获取MIB节点结构及其属性信息。基于SNMP4J对MIB对象实例值进行采集和配置,并通过DOM技术将采集到的数据解析转换为XML文件以用于Web前后端数据的传输。利用html和CSS等web技术进行了MIB浏览器前端页面的设计,并结合ajax、jsp等技术,实现了MIB数据在前后端交互以及动态地获取和呈现,带来了高效便捷的网络管理。
关键词:MIB可视化;WBM;网络管理;SNMP
中图分类号: TP302 文献标识码:A
文章编号:1009-3044(2020)34-0238-04
随着全球经济和网络信息技术的飞速发展,尤其近几年随着大数据时代的到来, 信息化在不断提高,网络技术也得到了进一步的推广及运用,网络系统呈现出复杂性的发展变化[1],因此需要对传统的网络管理技术进行改革和优化,以便提升管理质量,保障信息传递安全稳定[2]。同时,如何对网管数据进行可视化[3],使网管人员能够更直观便捷地发现数据背后的信息是当前网络管理中急需解决的问题。随着网络管理技术的蓬勃发展,网络管理出现了新的方式,B/S结构由于自身优势逐渐取代C/S结构,基于Web的网络管理成了网络管理技术发展的趋势。
在网络管理中,管理信息库(MIB)定义了受管网络设备必须保存的数据项、允许对每个数据项进行的操作及其含义,它是被管理网络设备中所有数据对象的集合[4]。网管的操作主要是对MIB节点对象的操作,对象之间的关系是网络管理信息模型中的重要组成部分并体现于MIB节点的属性值中[5],实现MIB结构及信息的可视化有助于提高网络管理的效率。MIB浏览器为用户管理MIB对象提供了图形化界面,是对被管理设备中SNMP变量进行管理的图形化网络管理工具[6]。目前比较著名的MIB浏览器有NuDesign、Mg-soft、iReasoning等的MIB浏览器,但这些浏览器均基于C/S结构,无法实现跨系统、跨平台使用,且灵活性差,在升级、维护、跨平台使用等方面均存在不足,使其不再符合现代网络管理技术的发展趋势。
因此本文设计并实现了采用B/S结构的MIB浏览器,可以将Web技术有效地运用于网络管理当中,并结合SNMP4J进行MIB数据的采集和配置,能更好地适用于管理当代结构更加复杂的网络,使网管人员能够快速地进行MIB数据的存取以及对网管数据的进一步分析,实现了网管数据的跨平台分享和高效便捷的网络管理。
1 MIB浏览器总体设计
MIB浏览器是一种有效的网络管理工具,并且按照SNMP协议中规定的操作来操控被管理网络设备的MIB的值[7],能够使网管人员方便地进行网络设备的管理。基于Web的MIB浏览器,采用了B/S架构,运用Web技术和SNMP4J框架实现了可跨平台访问的MIB浏览器,总体设计如图1所示。
2 浏览器端模块的设计与实现
2.1设计并实现用xml描述MIB文档
RFC1213即MIB-II文档是用于定义和描述MIB对象的文档,文档采用ASN.1语言进行描述,管理信息的管理树型结构中的SNMP管理对象节点在其中被分为了6个对象组。以节点对象实例表示方法来看,可以把节点分为标量对象和表对象,其中表对象是由行对象和列对象组成[8]。在文档中MIB对象的描述采用了宏定义OBJECT-TYPE作为对象类型的描述模板,该类型模板规定,对象类型由6部分组成:对象类型的名称、语法、访问权限、狀态、描述信息以及对象标识符OID。
与ASN.1相比,XML 能够更加清晰地表示MIB文件中被管理对象的树状层次结构,因此使用 XML 对网络管理数据进行建模更加合理[9]。作者采取了XMLSchema映射方法,设计将管理对象转换为XMLSchema中描述的复杂类型元素,而对象中必须定义的6种信息作为XML元素的属性进行转换,根据由MIB对象映射后的XMLSchema,将MIB文档中管理对象的信息编写为xml文档,如图2所示(以system对象组为例)。
2.2 MIB树状菜单的设计和实现
MIB浏览器需要呈现所有的MIB节点,因MIB节点以树状结构组织,因此可以设计为树状菜单呈现到Web页面上,而且MIB节点对象的相关信息也需要获取并呈现。在HTML页面引入JS文件以生成菜单,JS文件采取了JQuery框架,利用ajax进行2.1章节xml文档的载入,并且通过Jquery遍历操作实现对载入各元素的操纵。利用Jquery中的attr方法对元素中的属性进行操作,通过解析xml文档中的id属性实现树形结构的层次布局。利用Jquery的each()、attr()、click()等方法实现对节点的操控及属性信息自动获取。对MIB树状菜单操控主要是:利用 “class$=”属性通配符,获取所有class值以“-plus”“-minus”结尾的节点,对其进行展开和收起;通过find()、each()和prop()进行全选和取消全选。
2.3被管设备IP地址设置模块
通过SNMP访问被管网络设备,需要根据符合规范的设备IP地址来设置目标主机,否则会影响设备的连接及MIB对象值的获取。IP地址的正则表达式如下:
((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))。通过JavaScript中的正则表达式的test()方法进行校验。
2.4 SNMP共同体名设置模块
SNMP提供了基于共同体的安全机制用于保证网络管理信息的安全,共同体名设计为必填项,对应的正则表达式“$| ”,通过test()方法校验。
2.5网管操作类型设置模块
本文根据网管常见操作设计了四种操作类型:
Get:获取叶子节点即标量对象的信息;
Walk:获取表对象的信息;
GetList:获取多个标量对象的信息;
Set:对MIB节点进行设置。
通过html的select控件来实现,onchange事件调用用户改变输入域的内容时执行的函数,函数中通过判断select中option的value值来进行相应的操作。
2.6 MIB对象值显示模块
MIB对象实例值在前台以表格形式呈现,通过按钮触发Getmib函数获取后台采集到的mib数据并且以表格形式呈现,编写cleartable函数用于清空表格数据,清除除表头外的其他行。
3服务端模块的设计与实现
3.1 利用SNMP4J实现MIB信息的访问
3.1.1 标量对象信息的获取
对于每个标量对象类型都只有唯一一个对象实例,对象类型及其对象实例之间不存在模糊性[10],按规定每个标量对象的对象标识之后加上“.0”组成它的对象实例标识,因此需默认在自动获取的对象标识符之后增加“.0”再进行添加VariableBinding。
创建SNMP、PDU对象,并且调用add方法添加变量绑定,调用setType()方法来确定该pdu的操作類型为GET,send()方法发送pdu,并且返回一个ResponseEvent对象,然后通过getResponse()方法来获得SNMP请求的应答pdu。response不为空时,利用response的get(int index)方法返回VaribleBinding类型的对象vb,然后通过VaribleBinding的getOid和getVariable()获取变量绑定的对象实例标识符和对象值。
3.1.2多条标量对象信息的获取
在浏览器端同时通过MIB树状菜单自动获取多条对象标识符,多条对象标识符数据将封装为一个list集合传给后台SNMP4J代码。通过for-each遍历list集合中的OID并将其依次添加变量绑定,最后利用for循环通过应答pdu获取多条变量绑定的对象实例标识符和变量绑定的对象值。
3.1.3表对象信息的获取
表对象中具有多个列向量实例,需通过遍历的方式来获取。具体代码实现过程如图3所示。
其中根据调用checkWalkFinished方法返回finished值来判断是否结束遍历。方法中通过调用getErrorStatus()方法判断pdu的error状态是否正常;利用vb.getOid()判断vb中OID是否为空;通过OID类的size()方法,比对vb中子标识符数与targetoid中子标识符数;利用leftMostCompare()方法逐一对比vb中OID与targetoid的子标识符是否一致;利用isExceptionSyntax()方法进行syntax属性判断;利用compareTo方法进行vb中OID与targetOID的对比。
3.1.4设置MIB对象实例值
网管人员常常需要通过修改MIB对象值达到管理网络设备的目的,SNMP4J中的PDU的settype提供了set操作类型。设置MIB对象需要注意的是:该团体名有写的权限,同时该MIB对象是可写的,并且写的值与MIB对象类型中所声明的值的类型一致。
3.2 利用DOM解析转换MIB数据为xml文件
本文通过创建document对象和节点对象,并且根据采集到的MIB数据结构,来构建MIB数据的xml文档,将采集到的MIB数据转换为XML格式用于前后端之间的传输。
首先将采集的MIB对象数据存入List集合,以用于将数据值作为文本节点对象添加到document中。创建 DOM 解析器工厂、解析器对象,然后创建document对象并利用createElement方法创建根节点rootnode。利用appendChild方法在根节点下创建equipment子节点,作为OID和value的节点集合,长度与Oidarlist的长度保持一致。根据标签名equipment获取由该元素包含的所有子元素组成的nodeList,进行子元素添加。然后根据标签名OID和Value分别获取元素包含的所有子元素组成的nodeList,通过遍历获取集合(数组)的元素值并将其通过createTextNode方法作为文本节点对象添加到document中。最后,利用TransformerFactory创建转换工厂对象和文件转换对象,并且利用domSource把要转换的document对象封装到DOMSource类中。新建xml文件并创建文件输出流,把转换得到的xml文件保存到StreamResult,利用transform(domSource,xmlResult)方法把节点树转换为XML文件。
3.3 MIB数据在前后端的交互
3.3.1利用JSP获取前端输入数据
用request.getParameter()方法获取前端页面的表单输入,并将其作为字符串类型的参数传入相应的方法中。并利用switch语句进行前端传入的操作类型的判定:
case “Get”时,根据对象标识符加上".0"创建对象实例标识符,调用GetsingleOID方法;
case “Walk”时,调用GetMIBData中的Walk方法;
case “GetList”时,通过split方法将前端传来的多个OID字符串以逗号分割,并将其存放入名为oidlist的数组,调用GetList方法;
case “GetList”时,需判断前端传入的节点access属性是否为可写"read-write",若可以调用setMIB方法,否则弹框提示“该节点不允许此操作”。
3.3.2用ajax呈现采集到的xml格式的mib数据
设计利用ajax中XMLhttpRequest请求3.2章节中生成的XML文件,并从XML文件中提取节点信息以表格形式呈现到前端页面。
创建XMLHttpRequest对象,使用XMLHttpRequest对象的open()和send()方法进行请求的发送,选用 XMLHttpRequest 对象的responseXML属性获得来自服务器的响应,具体实现代码流程如图3所示。
4結束语
本文从基于Web的观点出发,立足于研究Web、SNMP相关技术和方法,为解决传统C/S架构MIB浏览器的不足设计并实现了B/S架构的MIB浏览器。运用Web技术实现MIB数据的可视化并进行网络管理,便于网管人员能够快速地进行MIB数据的存取以及对网管数据的进一步分析,实现了网管数据的远程
传输和高效便捷的网络管理。因为时间有限,本文未将MIB浏览器集成到网络管理系统,后续会进一步研究实现对网络数据的关联分析和图形展示。总体来说,基于 Web 的MIB浏览器符合未来网络管理发展趋势,能更好地适用于管理当代结构更加复杂的网络,有利于对信息爆炸的大数据时代带来的海量网络数据的处理。
参考文献:
[1] 滕云于勃.基于Web管理技术的安全网络管理系统[J].电子技术与软件工程,2019(17):205-206.
[2] 赵子玉.计算机网络管理系统应用的现状与发展[J].中国管理信息化,2018,21(5):187-189.
[3] 陶诗羽.基于Web的网络设备配置管理系统的设计与实现[D].北京邮电大学,2018.
[4] 贾宇琪.基于MIB动态解析技术的集群网络管理系统的设计与实现[D].北京:北京邮电大学,2019.
[5] 李鹏飞. 基于XML的管理信息实例树可视化呈现和编辑方法[D].北京邮电大学,2018.
[6] 刘雪飞.基于SNMP++的MIB浏览器研究[J].计算机工程与应用,2009,45(3):91-93.
[7] 王勇.计算机网络管理教程[M].北京:清华大学出版社,2010.
[8] 刘雪飞,王申强,吴伯桥.一种MIB-Ⅱ转换为XML文档格式的DTD映射方法[C].//中国计算机用户协会.中国计算机用户协会网络应用分会2011年第十五届网络新技术与应用年会论文集.2011:104-106,128.
[9] 吴黎兵,付帆,何炎祥,等.基于XML网络管理的MIB转换方法研究[J].武汉理工大学学报(信息与管理工程版),2011,33(6):851-854,863.
[10] 沈亚琦.基于SNMP的网络计费管理系统的设计与实现[D].武汉:华中师范大学,2006.
【通联编辑:唐一东】