APP下载

基于Linux平台的嵌入式网管软件开发

2014-10-29姚楠康京山

电子技术与软件工程 2014年16期
关键词:网络管理

姚楠+康京山

摘 要

本文首先概要介绍了简单网络管理协议(SNMP)和NET-SNMP软件包。在此基础上介绍了如何利用NET-SNMP软件开发包在Linux系统上实现嵌入式SNMP网络管理软件的基本流程。为种类繁多的网络设备提供了一种简单、快速的嵌入式网管开发方法。

【关键词】Linux NET-SNMP SNMP 网络管理

【关键词】Linux NET-SNMP SNMP 网络管理

随着下一代网络技术的广泛应用,网络设备的可管可控性呈现出越来越重要的意义。然而,当前的电信网络和业务系统设备软硬件平台大多采用封闭私有技术,影响了电信网络的可管理性和可扩展性,同时各设备之间也不能有效的实现应用共享及协同工作,新业务开发速度慢,造成电信网络投资和运营成本较高,开发和部署速度迟缓,不能快速满足用户大量快速多变的数据业务开发需求。

针对上述问题,本文提出基于Linux平台的嵌入式网络管理软件的快速开发方案,通过SNMP协议对被管网络设备进行管控操作。具有实现简单,开发速度快等特点,很好地实现了网络管控设备的敏捷开发。

1 嵌入式网管软件简介

随着网络的规模迅速增加,节点数随之大幅增多,不同厂家,不同类型的大量网络设备加入网络后,增加了网络的复杂度。由于这些网络设备大多采用了封闭的配置管理手段,因此给传统上集中式的网络管理带来极大不便。以思科、华为、中兴等厂家的路由器为例,其配置手段虽然多种多样,但都存在操作繁琐等缺点。为此,需要培训大量的网络维护人员来维护着网络的快速开通和通畅。目前在网络控制管理方面,集中式与分布式相结合的方式已经成为必然趋势。然而单纯增加分布式网络管控设备的数量又不利于降低系统整体功耗。

为减少分布式网管设备的功耗,加快网络开通速度,在此利用嵌入式系统低功耗、高效率的特点,以及各网络设备大多支持SNMP协议的特点,把嵌入式技术与网络管理技术相结合进行研究,设计并实现嵌入式网管系统,以达到高效率、低功耗和分布式的目的。

嵌入式网管软件基于Intel i7硬件平台和RHEL 6.3 Linux操作系统,与管控设备上的其它软件模块处于同一平台。采用NET-SNMP软件包开发网络管控设备与被管设备之间的接口软件,并为管控设备的上层软件模块提供开放的API接口。上层应用软件通过调用API函数向被管设备下发管控命令,从而实现网管管理。

2 SNMP协议

简单网络管理协议(Simple Network Management Protocol, SNMP)是很著名的网络管理协议,被广泛应用于数据通讯领域以及用于监视应用。SNMP在最初设计时首要的目的是简单——即对于被管设备(硬件资源有限)而言,在其上面易于实现代理。

SNMP到目前为止有三个版本,其中SNMP vl是SNMP的经典版本,其后的版本均是在此版本之上进行的升级和改进,但在实际应用中SNMP v2c使用最多。

SNMP定义了5种报文:get-request操作:从代理进程处提取一个或多个参数值。get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值。set-request操作:设置代理进程的一个或多个参数值。get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的。它是前面3中操作的响应操作。trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。前面的3个操作是由管理进程向代理进程发出的。后面两个是代理进程发给管理进程的。

3 NET-SNMP软件包介绍

NET-SNMP是一套优秀的开源snmp工具包,使用它可以开发snmp代理程序,也可以开发snmp管理程序,目前最新的版本已经支持snmp v3。

NET-SNMP源于卡耐基梅隆大学的SNMP软件包CMU snmp 2.1.2.1,后由加州大学Davis分校(UniversityofCalifoniaatDavis)开发与维护,被命名为UCD-SNMP。2000年11月UCD-SNMP项目转到由SourceForge(www.sourceforge.net)管理,并更名为NET-SNMP。UCD-SNMP4.2是以UCD-SNMP命名的最后的一个主要版本。也就是说,以后发布的UCD-SNMP 4.2.x只是修改软件包中的Bugs;而大的修改版本以NET-SNMP命名,并发布为NET-SNMP 5.x。NET-SNMP 5.7.1是目前较新版本。

NET-SNMP的主要内容包括:

(1)完整的API用于SNMP(支持V1、V2、V3版本)应用开发(包括c、perl、Python等的API);

(2)一个可扩展的SNMP代理程序(snmpd);开发员可以扩展自己的代理程序;

(3)一套工具命令集(snmpget、snmpset、snmptrap、snmpwalk、snmp等);

(4)一个trap接收进程,用于接收和显示trap。并可以将trap记录到日志文件里;

(5) 一个图形化的MIB浏览工具(tkmib:基于Tk/Perl的)。

使用NET-SNMP软件包开发代理端软件比较常用,互联网上可以查到很多相关资料,本文不再重复。这里主要介绍应用NET-SNMP开发管理端软件的方法。

4 嵌入式网管软件的实现

嵌入式网管软件在Linux操作系统上进行应用开发,根据功能不同可分为三个软件模块:网管通信模块、控制命令处理模块及控制管理模块。如图1所示。

其中控制管理模块负责生成管控命令,并通过内部消息将之下发给控制命令处理模块,等待接收响应结果。endprint

控制命令处理模块负责管控命令的解析与网管通信命令的封装,能从控制管理模块获取的管控指令解析出具体信息,并通过调用网管通信模块的API函数实现查询和配置管理。

网管通信模块主要负责与管理站进行SNMP协议通信及与控制命令处理模块通信,能将控制命令处理模块的指令封装成SNMP协议报文转发给被管设备。

下面分别介绍嵌入式网管软件的实现方法。

4.1 安装NET-SNMP软件包

之所以要先安装一个可运行的NET-SNMP系统,是因为我们开发程序运行环境需要使用SNMP协议的配置文件;另外,还可以利用NET-SNMP提供的命令工具来测试程序。

NET-SNMP包目前可以移植的版本包括各种UNIX(基于SYSTEM V内核及基于BSD内核)、Linux、Windows版本。目前NET-SNMP包的安装主要有程序编译安装与二进制文件安装两种方式,源程序安装可以从NET-SNMP的官网下载。

Linux系统下安装net-snmp-5.7.1步骤:

(1)下载net-snmp-5.7.1.tar.gz文件

(2)使用命令tar –xvf net-snmp-5.7.1.tar.gz解压

(3)进入net-snmp-5.7.1文件夹,执行./configure --prefix=/usr/net-snmp/ --enable-embedded-perl --enable-shared --with-perl-modules

(4)执行make

(5)执行make install

4.2 配置NET-SNMP

使用NET-SNMP之前需要进行环境设置,否则无法查询到希望的结果。配置NET-SNMP重要的是配置snmpd.conf文件,其中最重要的是配置共同体(community)。因为共同体定义了认证、访问控制和代理的特性,每个共同体拥有一个唯一的名字,共同体中的管理端必须使用该共同体的community进行GET和SET操作。所以,共同体也是访问口令。还有就是trap/notification的发送地址,即trapsink或trap2sink项,trapsink对应snmp vl的trap,trap2sink对应snmp v2的notification。

配置snmpd.conf文件,可以直接手动修改/usr/net-snmp/share/snmp路径下的同名文件。将文件中rwcommunity、rocommunity所对应的读写、只读团体名修改为系统所需字段即可。其余修改内容可参考NET-SNMP相关帮助自行决定。

4.3 编写网管通信模块API函数

为了实现SNMP协议通信,网管通信模块需要利用net-snmp-5.7.1实现管理端的三个功能,get,getnext,set。

下面以set命令为例,简单说明函数的实现方式。

首先编写网管通信模块程序需包含以下三个头文件:

#include

#include

#include

实现set命令的基本步骤:

(1)调用init_snmp("set")函数初始化snmp;

(2)调用snmp_sess_init( &session )初始化结构session,然后用一些赋值语句设置session;

(3)调用snmp_open(&session),打开SNMP session;

(4)调用snmp_pdu_create(SNMP_MSG_SET)创建snmp pdu;

(5)调用snmp_parse_oid根据mib分析parse oid;

(6)调用snmp_add_var为SET request添加对象名及值;

(7)调用snmp_synch_response发送SET request报文。

函数中的session字段是名为netsnmp_session的结构,在其中定义了SNMP协议的版本、团体名及发送UDP端口号等内容,需特别注意。

5 结束语

本文首先介绍了嵌入式网管软件的意义和特点;然后给出了SNMP协议本身的管理模型和基本原理。在此基础上结合NET-SNMP软件包详细地介绍了在嵌入式网管软件在Linux平台下的开发过程。

参考文献

[1]胡方炜.基于嵌入式Linux系统的SNMP代理开发研究[D].浙江工业大学,2004.

[2]IETF.RFCll57 A Simple Network Management Protocol(SNMP).May 1990.

[3]IETF.RFCl901.Introduction to Comm-unity·based SNMPv2.January 1996.

[4]Net-Snmp官方网站:http://www.source-forge.net.

作者简介

姚楠(1979-),男,现为中国电科第五十四所通信系统与网络专业部工程师。主要研究方向为通信系统与网络。

作者单位

中国电子科技集团公司第五十四研究所 河北省石家庄市 050081

控制命令处理模块负责管控命令的解析与网管通信命令的封装,能从控制管理模块获取的管控指令解析出具体信息,并通过调用网管通信模块的API函数实现查询和配置管理。

网管通信模块主要负责与管理站进行SNMP协议通信及与控制命令处理模块通信,能将控制命令处理模块的指令封装成SNMP协议报文转发给被管设备。

下面分别介绍嵌入式网管软件的实现方法。

4.1 安装NET-SNMP软件包

之所以要先安装一个可运行的NET-SNMP系统,是因为我们开发程序运行环境需要使用SNMP协议的配置文件;另外,还可以利用NET-SNMP提供的命令工具来测试程序。

NET-SNMP包目前可以移植的版本包括各种UNIX(基于SYSTEM V内核及基于BSD内核)、Linux、Windows版本。目前NET-SNMP包的安装主要有程序编译安装与二进制文件安装两种方式,源程序安装可以从NET-SNMP的官网下载。

Linux系统下安装net-snmp-5.7.1步骤:

(1)下载net-snmp-5.7.1.tar.gz文件

(2)使用命令tar –xvf net-snmp-5.7.1.tar.gz解压

(3)进入net-snmp-5.7.1文件夹,执行./configure --prefix=/usr/net-snmp/ --enable-embedded-perl --enable-shared --with-perl-modules

(4)执行make

(5)执行make install

4.2 配置NET-SNMP

使用NET-SNMP之前需要进行环境设置,否则无法查询到希望的结果。配置NET-SNMP重要的是配置snmpd.conf文件,其中最重要的是配置共同体(community)。因为共同体定义了认证、访问控制和代理的特性,每个共同体拥有一个唯一的名字,共同体中的管理端必须使用该共同体的community进行GET和SET操作。所以,共同体也是访问口令。还有就是trap/notification的发送地址,即trapsink或trap2sink项,trapsink对应snmp vl的trap,trap2sink对应snmp v2的notification。

配置snmpd.conf文件,可以直接手动修改/usr/net-snmp/share/snmp路径下的同名文件。将文件中rwcommunity、rocommunity所对应的读写、只读团体名修改为系统所需字段即可。其余修改内容可参考NET-SNMP相关帮助自行决定。

4.3 编写网管通信模块API函数

为了实现SNMP协议通信,网管通信模块需要利用net-snmp-5.7.1实现管理端的三个功能,get,getnext,set。

下面以set命令为例,简单说明函数的实现方式。

首先编写网管通信模块程序需包含以下三个头文件:

#include

#include

#include

实现set命令的基本步骤:

(1)调用init_snmp("set")函数初始化snmp;

(2)调用snmp_sess_init( &session )初始化结构session,然后用一些赋值语句设置session;

(3)调用snmp_open(&session),打开SNMP session;

(4)调用snmp_pdu_create(SNMP_MSG_SET)创建snmp pdu;

(5)调用snmp_parse_oid根据mib分析parse oid;

(6)调用snmp_add_var为SET request添加对象名及值;

(7)调用snmp_synch_response发送SET request报文。

函数中的session字段是名为netsnmp_session的结构,在其中定义了SNMP协议的版本、团体名及发送UDP端口号等内容,需特别注意。

5 结束语

本文首先介绍了嵌入式网管软件的意义和特点;然后给出了SNMP协议本身的管理模型和基本原理。在此基础上结合NET-SNMP软件包详细地介绍了在嵌入式网管软件在Linux平台下的开发过程。

参考文献

[1]胡方炜.基于嵌入式Linux系统的SNMP代理开发研究[D].浙江工业大学,2004.

[2]IETF.RFCll57 A Simple Network Management Protocol(SNMP).May 1990.

[3]IETF.RFCl901.Introduction to Comm-unity·based SNMPv2.January 1996.

[4]Net-Snmp官方网站:http://www.source-forge.net.

作者简介

姚楠(1979-),男,现为中国电科第五十四所通信系统与网络专业部工程师。主要研究方向为通信系统与网络。

作者单位

中国电子科技集团公司第五十四研究所 河北省石家庄市 050081

控制命令处理模块负责管控命令的解析与网管通信命令的封装,能从控制管理模块获取的管控指令解析出具体信息,并通过调用网管通信模块的API函数实现查询和配置管理。

网管通信模块主要负责与管理站进行SNMP协议通信及与控制命令处理模块通信,能将控制命令处理模块的指令封装成SNMP协议报文转发给被管设备。

下面分别介绍嵌入式网管软件的实现方法。

4.1 安装NET-SNMP软件包

之所以要先安装一个可运行的NET-SNMP系统,是因为我们开发程序运行环境需要使用SNMP协议的配置文件;另外,还可以利用NET-SNMP提供的命令工具来测试程序。

NET-SNMP包目前可以移植的版本包括各种UNIX(基于SYSTEM V内核及基于BSD内核)、Linux、Windows版本。目前NET-SNMP包的安装主要有程序编译安装与二进制文件安装两种方式,源程序安装可以从NET-SNMP的官网下载。

Linux系统下安装net-snmp-5.7.1步骤:

(1)下载net-snmp-5.7.1.tar.gz文件

(2)使用命令tar –xvf net-snmp-5.7.1.tar.gz解压

(3)进入net-snmp-5.7.1文件夹,执行./configure --prefix=/usr/net-snmp/ --enable-embedded-perl --enable-shared --with-perl-modules

(4)执行make

(5)执行make install

4.2 配置NET-SNMP

使用NET-SNMP之前需要进行环境设置,否则无法查询到希望的结果。配置NET-SNMP重要的是配置snmpd.conf文件,其中最重要的是配置共同体(community)。因为共同体定义了认证、访问控制和代理的特性,每个共同体拥有一个唯一的名字,共同体中的管理端必须使用该共同体的community进行GET和SET操作。所以,共同体也是访问口令。还有就是trap/notification的发送地址,即trapsink或trap2sink项,trapsink对应snmp vl的trap,trap2sink对应snmp v2的notification。

配置snmpd.conf文件,可以直接手动修改/usr/net-snmp/share/snmp路径下的同名文件。将文件中rwcommunity、rocommunity所对应的读写、只读团体名修改为系统所需字段即可。其余修改内容可参考NET-SNMP相关帮助自行决定。

4.3 编写网管通信模块API函数

为了实现SNMP协议通信,网管通信模块需要利用net-snmp-5.7.1实现管理端的三个功能,get,getnext,set。

下面以set命令为例,简单说明函数的实现方式。

首先编写网管通信模块程序需包含以下三个头文件:

#include

#include

#include

实现set命令的基本步骤:

(1)调用init_snmp("set")函数初始化snmp;

(2)调用snmp_sess_init( &session )初始化结构session,然后用一些赋值语句设置session;

(3)调用snmp_open(&session),打开SNMP session;

(4)调用snmp_pdu_create(SNMP_MSG_SET)创建snmp pdu;

(5)调用snmp_parse_oid根据mib分析parse oid;

(6)调用snmp_add_var为SET request添加对象名及值;

(7)调用snmp_synch_response发送SET request报文。

函数中的session字段是名为netsnmp_session的结构,在其中定义了SNMP协议的版本、团体名及发送UDP端口号等内容,需特别注意。

5 结束语

本文首先介绍了嵌入式网管软件的意义和特点;然后给出了SNMP协议本身的管理模型和基本原理。在此基础上结合NET-SNMP软件包详细地介绍了在嵌入式网管软件在Linux平台下的开发过程。

参考文献

[1]胡方炜.基于嵌入式Linux系统的SNMP代理开发研究[D].浙江工业大学,2004.

[2]IETF.RFCll57 A Simple Network Management Protocol(SNMP).May 1990.

[3]IETF.RFCl901.Introduction to Comm-unity·based SNMPv2.January 1996.

[4]Net-Snmp官方网站:http://www.source-forge.net.

作者简介

姚楠(1979-),男,现为中国电科第五十四所通信系统与网络专业部工程师。主要研究方向为通信系统与网络。

作者单位

中国电子科技集团公司第五十四研究所 河北省石家庄市 050081

猜你喜欢

网络管理
电动汽车充电服务网络管理初探
基于EOC通道的SHDSL网络管理技术
校园网络管理及安全防护
卫星导航网络管理设计