步园明
(江南大学 物联网工程学院,江苏 无锡 214122)
SNMP在网络管理领域有着重要地位,但传统的基于SNMP的网络管理多采用C/S结构[1]。随着网络技术的发展和网络规模的扩大,这种网络管理方式逐渐显露出其缺点,如管理平台开发费用高,用户要掌握复杂的系统安装、维护技术,不便于远程访问和分布式管理等。与现有的网络管理方法相比,基于Web的网络管理具有许多优势。采用浏览器代替传统的GUI或命令行界面,大大简化了用户界面;进行远程管理,突破地理限制,以前必须在中心的工作站上得到的信息,现在在任何地方都可以得到;大大降低了成本,浏览器可以在绝大多数平台上运行,使得以前只能在昂贵的Unix工作站上进行的工作,现在在廉价的PC上也可以完成[2]。
然而,尽管基于Web的网络管理有着诸多优点,但目前却无法取代现有的管理方式[3]。这是因为嵌入式Web服务器的能力有限,难以提供SNMP代理那样丰富的管理信息;此外,基于Web的网络管理缺乏统一的国际标准,这些因素制约了Web管理技术的发展。因此,出现了将基于Web的管理技术与SNMP管理技术相结合这一新型的管理技术。
网络管理系统的软件结构如图1所示。用户通过Web浏览器向管理工作站上的Web服务器发出HTTP格式的管理请求,Web 服务器通过 PHP (PHP,Hypertext Preprocessor)程序解释这一请求,并将其发送给网管工作站上的SNMP管理应用程序 (或者直接从数据库中提取所需数据),SNMP管理应用程序将请求封装成SNMP PDU,然后发送给嵌入在被管设备中的SNMP Agent。Agent对SNMP请求做出响应后,将响应结果返回给SNMP管理应用程序,SNMP管理应用程序将它返回给PHP程序 (或存入数据库),PHP程序返回给Web服务器,最后Web服务器送回HTML页面,将结果显示在Web浏览器中。
图1 系统软件结构Fig.1 Software structure of the system
在这一过程中,网管工作站扮演了服务器和客户端的双重角色。作为Server,它向Web客户端提供HTTP服务,同时,它又作为Client,访问被管设备上SNMP代理提供的SNMP服务。
KT505是徐州博联科技有限公司生产的一款网关,能够利用SHDSL技术经普通电话线长距离传输以太网信号,可用于同时传送数据、语音、图象和视频信息。在一对0.5 mm线径 (24 awg)的普通电话线上,当实时连续传输速率为2.304 Mbps时,传输距离可达3.5 km,大大延长了以太网电缆传输的通信距离。KT505提供4个10 M/100 M自适应以太网接口,1个console口和一个电话线接口,具有桥接/路由功能。该设备的设计和实现基于嵌入式技术,采用嵌入式Linux操作系统平台。
2.2.1 M IB设计
通常,网络资源被抽象为对象进行管理。对象的集合被组织为管理信息库(Management Information Base,MIB)。对代理端来说,MIB记录了可管理的对象的属性集合;在管理工作站方,需要轮询时,把对应的MIB转换成中间结构通过网络传递给代理端,代理端轮询资料后反馈给管理工作站。
设计网络设备MIB树的工作实际就是规划设备的私有MIB树。其过程就是将设备的控制点分门别类,再用ASN.1语法规则将其描述出来[4]。文中根据KT505的管理需要规划出了私有MIB结构,对各节点的名称、位置、类型、访问权限和简单注释等做出了定义。
KT505的MIB结构分为以下几个部分:
1)global,定义了 KT505 的系统信息
①system节点定义了系统时间;
②mode节点定义了KT505的工作模式:网桥或者路由;
③snmpConfig节点下又定义了sysSnmpCommunityConfig和snmpTrapCfgTable两个节点。这两个节点中分别定义了SNMP的读共同体、写共同体、陷阱共同体和Trap的索引号、发送至主机IP、发送Trap端口;
2)portConfig,定义了LAN口和DSL口的基本信息
① lanPort 节 点 下 定 义 了 portEnable、lanSelfAdapting、duplex、speed4个子节点,分别代表了LAN口的使能与否、是否自适应、全/半双工选择、LAN口速率等信息。
②dslPort节点下定义了stuType、standard和dataRate3个子节点。stuType节点表示选择KT505是工作于CO(中心局端,Center Office)模式,还是 RT(客户端,Remote Terminal)模式;standard表示DSL采用的标准;dataRate是DSL的传输速率。
3)advancedConfig节点定义了网桥或路由工作模式下的一些高级设置
①bridgeIPConfig,包含工作在网桥模式下的KT505的IP地址和子网掩码;
②routerConfig,其下又定义了lanRouterConfig、wanRouter Config、ripEnable、ripVersion、staticRoutingTable5 个子节点。
lanRouterConfig定义了路由模式下LAN口的IP地址和子网掩码的信息;
wanRouterConfig定义了WAN口采用的协议、WAN口的IP地址、子网掩码、远端IP、用户名和密码;
ripEnable和ripVersion分别表示RIP协议的使能和RIP协议的版本;
staticRoutingTable定义了静态路由信息表。
2.2.2 代理程序实现
LIANG Yuan-yuan, YUAN Wang, HUANG Ping, GUO Xin, XU Jia-jie, JIANG Jian
嵌入式代理的开发使用了Net-SNMP软件,通过这个软件可以实现代理的主体功能,其他扩展功能再根据需要进行二次开发。本文使用的是Net-SNMP 5.1,首先要将该软件包移植到基于嵌入式Power PC平台的目标板中,移植成功后就可以利用该软件和自己设计的MIB文件生成代理程序的框架。
生成代理程序的框架的方法如下,首先将KT505.txt拷入/home/opt/eldk/ppc_8xx/usr/local/snmp/share/snmp/mibs/目 录下,运行下面的命令加载MIB文件。
#export MIBS=all
#export MIBDIRS=/home/opt/eldk/ppc_8xx/usr/local/snmp/share/snmp/mibs
然后使用mib2c工具生成与MIB文件相对应的.c和.h文件:
#env MIBS="+KT505"mib2c kt505
生成的两个文件为kt505.c和kt505.h。由mib2c生成的文件是一个大致的代理程序框架,其中头文件是对节点进行宏定义,函数声明。C文件分为两大块:一是初始化函数,主要用来对变量注册;二是响应函数,用来响应管理端的查询命令,响应函数的返回值,就是我们要手工实现的内容[5-6]。
所要做的工作就是把数据以一种合理的方式导入到代理程序框架中,主要是在初始化函数init_kt505()中对变量进行注册和初始化;在var_kt505()函数中实现对变量的get和set操作:在这个函数中的 switch(vp->magic){}语句里,各个case的常量表达式对应了各个结点,要在每一个case分支中填充对结点变量进行get和set的具体操作代码。
之后即可进行可执行代理程序的生成。把编辑好的kt505.c和kt505.h拷贝到Net-SNMP源代码目录下的agent/mibgroup中,对Net-SNMP软件包进行重新编译,编译选项配置命令./configure 中增加--with-mib-moudles=”KT505”,使生成的可执行程序snmpd支持新扩展的MIB。此时的snmpd即是本文要实现的代理Agent,可将其拷入目标板的文件系统中,并在目标板启动时运行snmpd进程。
网络管理端通过在Windows客户机上使用Telnet远程登录Linux服务器的方式进行开发。在开发过程中使用到了两款软件,一款为在开发代理端时使用的Net-SNMP 5.1,另一款为XAMPP。XAMPP是一个易于安装的Apache发行版,并包含了MySQL和PHP等组件,本文中使用的是XAMPP 1.68 for Linux。
Web服务模块的工作流程如图2所示。用户首先在浏览器端输入管理端Web服务器的IP或域名,进行登录认证后,即可看到网络管理系统的主页面index.htm。在主页面中,用户可进行用户管理和设备管理等操作。
图2 Web服务模块工作流程Fig.2 Flow chart of Web module
当用户有与服务器端进行交互的需求时,将通过FORM表单向Web服务器发送信息,激活一个PHP程序,一般格式如下:
METHOD属性指定将数据传送到Web服务器的方法。在使用GET方法时,表单数据会附加在所指向PHP脚本的URL后一起发送给Web服务器,Web服务器将收到的表单数据赋予环境变量QUERY_STRING。而POST方法通过使用标准输入将表单数据传送给Web服务器,Web服务器启动指定的脚本,并将用户提供的数据传入该脚本。ACTION属性指定了将处理表单数据的PHP程序的URL。
Web服务器将表单数据以下列格式传递给PHP程序:
name1=value1&name2=value2&name3=value3……
name和value是表单中元素的名称和取值。
然后,PHP程序将提取交互信息。PHP程序将通过$_GET变量获取通过GET方法发送的表单数据,通过$_POST变量获取通过POST方法发送的表单数据,或者使用$_REQUEST变量,它能获取通过GET方法或POST方法发送的表单数据。
接下来,PHP程序会将提取到的交互表单数据传入协议转换模块。从协议转换模块传回的响应值通过PHP程序输出到.htm文件中,在Web浏览器上显示出来。
由系统的软件结构图如图1所示,可以看出,网管工作站实现了一种类似协议转换的功能,完成了HTTP协议和SNMP协议之间的转换。
当用户需要对设备进行配置等管理操作时,将通过SNMP管理应用程序对被管设备的Agent发送SNMP请求,来完成查询和配置操作。SNMP管理应用程序使用PHP语言编写,PHP提供了SNMP网管函数库,可以在PHP程序中调用Net-SNMP包中的接口函数。
下面以获取DSL的服务类型为例,说明PHP-SNMP函数的实现。
snmpget()函数获取PHP程序传来的参数值:设备地址$nodeIP和SNMP共同体变量$community,返回指定设备中OID为”.1.3.6.1.4.1.5651.11.2.2.1.0”的对象值,并将该对象值赋值给PHP变量$stuType。
设备操作信息传给SNMP管理应用程序后,SNMP管理应用程序与代理端的通信将通过报文交换实现。从SNMP管理应用程序这一端来看,发出的命令将启动SNMP数据报的构造过程,该操作命令类型可能是Set、Get或是Get-Next等中的任何一种。SNMP管理应用程序将创建一个 SNMP报文,并填入合适的报文首部,以便通过网络向目的代理进程传送该报文。报文中指定了团体名称Community、版本号和请求ID,还要确定PDU类型并且将变量绑定列表插入报文,然后将SNMP报文发送给UDP层进行传送。报文发出之后,网络管理应用程序一定要记住请求中的Request ID,以便于和随后接收到的响应配对。SNMP管理端采集数据的流程如图3所示。
图3 SNMP管理端采集数据流程Fig.3 Data acquisition flow of SNMP manager
基于Web的网络管理与传统的网络管理方式相比具有更高的性能价格比,使用方便灵活且便于扩展,是网络管理发展的趋势。文中采用SNMP网络管理协议,融合Web技术,设计了一个B/S模式的网络管理系统,并以徐州博联科技有限公司的KT505产品作为具体被管设备对系统进行了实现。管理者只需要Web浏览器就可以随时随地对设备进行管理,并且不受管理者所使用操作系统类型的限制,大大增加了管理的灵活性和易操作性。
[1]张邦奎.简析网络管理技术的运用和发展趋势[J].中小企业管理与科技,2009(21):277.ZHANG Bang-kui.Brief analysis on application and development tendency of the network management technology.Management&Technology of SME,2009(21):277.
[2]肖德宝,徐慧.网络管理理论与技术[M].武汉:华中科技大学出版社,2009.
[3]刘翔,沈明玉.基于SNMP与Web的服务监控系统[J].合肥工业大学学报:自然科学版,2008,31(1):44-47.LIU Xiang,SHEN Ming-yu.Design ofa server monitoring system based on the SNMP and Web[J].Journal of Hefei University of Technology:Natural Science,2008,31(1):44-47.
[4]Dubuisson O.ASN.1-Communication between heterogeneous systems[M].Morgan Kaufmann Publishers,2000.
[5]吕锋,闵迪.嵌入式Power PC Linux环境下基于Net-SNMP的代理开发[J].武汉理工大学学报:信息与管理工程版,2006,28(5):51-54.LV Feng,MIN Di.Agent development based on Net-SNMP in Linux for embedded Power PC environment[J].Journal of Wuhan University of Technology:Information&Management Engineering, 2006, 28(5):51-54.
[6]王礼德,向良军,郑林华.基于SNMP的通用网管代理软件的设计[J].科技信息,2007(29):419-420.WANG Li-de,XIANG Liang-jun,ZHENG Lin-hua.Design of generic network management agent software based on SNMP[J].Science&Technology Information,2007(29):419-420.