国网湖北省电力公司襄阳供电公司 黄先宇
基于SNMP的网管代理模拟软件的方案设计
国网湖北省电力公司襄阳供电公司 黄先宇
简单网络管理协议(SNMP)是目前应用最广泛的网络管理协议,用以管理接入网络的设备。网络管理代理是SNMP的组成部分,它是运行在被管设备端的管理程序,具备本地设备的相关状态信息,可与网络管理系统通信。本课题源于综合网络管理系统的开发,在实际的应用场景中,在测试时期就投入非常多的资金购置设备用于组建开发环境势必造成浪费。因而采用模拟软件环境是最佳的解决方法。本课题的目的就是设计一个网络管理代理模拟软件,它可以模拟各类网络设备,接受管理中心的管理操作。
网络管理;SNMP;MIB库;网管代理
SNMP在TCP/IP协议族中是属于应用层上的通信协议,因而网管代理模拟软件的设计需要满足管理站对远程管理设备的各方面功能需求,即能够模拟实际网络设备代理与网络管理站进行信息通信。它应该具备以下几个方面的功能:
1)能够模拟多种不同方式的设备异常并以发送陷阱报文的方式向网络管理站主动上报消息通知;
2)能够接受来自网络管理站多个版本(SNMPv1、SNMPv2)的轮询请求并返回正确的应答报文,包括查询MIB对象值、修改MIB对象值、处理控制命令等;
3)具备可靠的MIB对象查询算法,可以高速、可靠地在Agent的MIB库中查询到SNMP请求报文变量列表中绑定的MIB对象,从而实现对MIB库中的信息的查询与修改操作;
4)具备较好的扩展性和执行效率。
SnmpSharpNet是一个完全免费的开源SNMP API函数库,该函数库全部使用C#编写,并且完全独立,不需要依赖其它函数库。可以完全支持SNMP v1以及SNMP v2版本,对最新的SNMP v3也提供了较为全面的支持。由于采用的是面向对象的编程开发语言,因而具备较好的安全性、易用性以及可扩展性。
SnmpSharpNet提供了对Get、Get-Next、 Get-Bulk、Set-Requests以及相关响应以及Trap操作的支持,可以很方便的构造相应的SNMP协议报文并提供发送以及报文相关参数设置操作。同时在更加高级的Manager与Agent的开发中,SnmpSharpNet也提供了低层次的SNMP报文封装,可以构造指定版本的SNMP PDU报文,同时可以自定义报文中的任意参数,从而使开发范围更加自由,应用层面更加广泛。
使用低层次SnmpSharpNet封装的编程的步骤如下:
1)生成一个指定版本的SNMP报文类的对象实例SnmpPacket;
2)设置SnmpPacket的共同体名;
3)设置SnmpPacket的操作类型;
4)设置SnmpPacket的RequestId;
5)将变量绑定到SnmpPacket的变量表中;
6)将SnmpPacket编码成字节数组准备发送;
7)创建UDP Socket实例,设置IP与端口号以及重传次数;
8)调用Socket实例的Sendto方法,将报文发送出去。
根据本模拟软件需要实现的核心功能,将其分为四个模块:系统初始化、MIB管理、命令处理和Trap处理。
在软件启动时首先需要进行初始化工作,使Agent进入就绪状态。要想实现对被管设备的模拟以及对被管对象的抽象,该软件需要维护一个MIB信息库,因而本软件需要一个MIB管理模块,该模块主要完成MIB树的构建、对象查找和消息响应数据生成等功能,由于MIB定义是遵循ASN.1语法的语句,因而还需要将MIB描述文档解析为软件可管理的MIB文件,所以MIB模块还需要具备MIB词法分析功能。由于网络管理站通过发送相关的SNMP请求报文来管理Agent,因而Agent需要具备接收和分析SNMP报文的功能。因而本软件需要一个管理命令处理模块来完成模拟软件和管理软件间的请求-响应式通信功能。Agent通过向网络管理站发送Trap报文来报告设备异常信息,因而需要Trap处理模块主要完成Trap信息的产生和发送。这四个模块分别独立开发,最终集成在网管代理模拟系统中,以此提高软件的开发效率和可维护性。
软件的初始化工作是软件开发工作的首要问题,软件的初始化包括加载MIB文件,初始化UDP端口以及配置数据三个过程。
4.1 MIB文件的加载
考虑到MIB的结构为层次化的树型结构,由于XML语言可以存储树型节点,因而本软件使用XML符号语言作为MIB库的记录语言。代理软件启动后需要首先加载MIB库文件。软件根据用户选择的XML文件地址,创建XmlDocument实例将XML文件读入内存中,准备由MIB模块调用处理。同时将加载好的MIB树显示到图形界面上的TreeView控件中,方便直接查询。
4.2 UDP接口的初始化
代理模拟软件启动后,由于来自Manager的UDP报文会发到161号端口。因而需要在本机对161号端口启动监听,等待Manager发来的管理报文。具体的操作步骤如下:
1)创建基于UDP协议的Socket对象实例,即new Socket(AddressFamily. InterNetwork, SocketType.Dgram, ProtocolType.Udp),其中AddressFamily.InterNetwork代表使用IPv4地址,SocketType.Dgram说明使用无连接的数据报模式,ProtocolType.Udp代表使用UDP传输协议;
2)调用Socket实例的Bind函数将该UDP套接字绑定到161端口;
3)调用Socket实例的ReceiveFrom方法等待来自Manager的SNMP报文。
4.3 配置信息初始化
程序启动后需要配置Manager的IP地址、SNMP协议版本、共同体名称、超时时间、重传次数等相关参数。同时这些配置都可以由用户自定义修改,从而提高了软件的灵活性。
网管代理模拟软件启动后,首先会检测161号端口是否已被占用,如果被占用,则会发出提示。若161号端口处于空闲状态,则程序会在UDP161端口启动监听,等待来自Manager的SNMP请求。
当程序收到来自Manager的SNMP请求时,会先分析该请求是否合法,对于错误的及不支持的请求,会丢弃该报文并继续监听;若是合法的SNMP请求,则对该请求进行报文解析,根据解析出的Gct或Set命令来决定Agent的响应操作。如果为Get命令,则通过MIB管理模块得到相应MIB树节点数据;若为Set命令,则根据Set命令的数据对MIB树节点中相应的参数进行修改操作,并将修改后的记录存储到MIB库中。当接收到的命令处理完成后,模拟软件会将处理的结果构造Response报文返回给Manager。
[1]王俊鹏.Internet网络管理研究与实现[N].计算机应用技术,2002.
[2]张超.网络管理――计算机网络质量体系的关键环节[J].江苏科技信息,2007.
[3]刘文辉.网络管理协议概述[J].江西化工,2003.
[4]郭瑞华.XML数据库技术[J].现代图书情报技术,2004.
黄先宇(1993—),男,湖北襄阳人,大学本科,毕业于华北电力大学,现供职于国网湖北省电力公司襄阳供电公司,研究方向:网络工程。