当前位置: 代码迷 >> 综合 >> 用snmp4j开发网管应用(一) - SNMP
  详细解决方案

用snmp4j开发网管应用(一) - SNMP

热度:63   发布时间:2023-09-12 17:51:43.0

用snmp4j开发网管应用(一) - SNMP

要开发网管应用,SNMP是必学的协议,这里首先对SNMP进行一下简单的介绍和想要开发SNMP协议的内容所需要用到的工具。

 

SNMP

SNMP 协议分为了多个版本,V1太简单,V2加入了一些验证,V3最严谨,下面都是以V2进行说明

概念:

ASN.1 高级数据描述语言,用于定义数据类型,语法规则等。

BER ASN.1的基本编码规则,发送消息之前经过其编码,接收后先解码

SMI 管理信息结构,ASN.1的子集加上一部分宏等内容。SNMP用它来描述MIB和PDU

MIB 管理信息库,一般是一个树形结构,使用SMI描述,用来定义一个或者多个网元

OID 网络节点的唯一ID,用在MIB中,是一个国际机构统一分配的,比如1.3.6.1.4.1代表enterprises企业网

PDU SNMP协议数据单元,是一个数据包的格式。每一种SNMP方法对应一种PDU,使用SMI描述,BER编码,传输层(UDP)协议进行传输

 

SNMP跟网管有关的开发可能会涉及如下的内容:

1. 获取网元信息

  •     网元已经存在,其提供MIB文件,其中定义了该网元节点的结构以及想获取该结构内容所需要用到的OID
  •     使用代码或者其他的方式构建PDU,比如用snmp4j构建一个get请求类型的PDU(这个PDU是SMI描述的,BER编码的,包含了要操作的OID)到网元,得到返回结果。
  •     根据返回结果进行操作(可以通过getNext达到遍历的效果),或者是把单纯的数据信息持久化起来用于观察。

2. 设置网元参数

  •     发送set请求的PDU到网元达到设置网元某个参数的作用

3. 开发trap服务器接收trap消息

  •     开发trap接收服务端,并在在网元端配置服务器端地址,网元因为某个时间出发一个trap发送到该服务端。
  •    服务端记录该trap消息,用于数据分析

4. 开发一个网元模拟器

  •     开发一个模拟器,自己作为网元被人管理,通常用于测试。因为网管系统对应的真是网元都是昂贵的硬件,不容易找到合适的测试环境。

 

为了进行网元开发,首先我们需要准备一下所用到的工具

MIB Browser

下载地址:http://ireasoning.com/download.shtml

可以下载

  iReasoning MIB Browser Free Personal Edition         

这个版本是个人版,没有时间限制,但是有导入的mib文件数量的限制,不过很适合开发使用。

 

我自己写了一个文件上传到附件中,这里对这个文件进行简单的说明。

文件主要内容:

    

CMS-MIB DEFINITIONS ::= BEGIN 

 // 文件描述开始

 

  

IMPORTS                                                      MODULE-IDENTITY, OBJECT-TYPE, Counter32, Gauge32, Integer32, enterprises,

  // 导入基本的库,特别注意enterprises.他的oid是1.3.6.1.4.1

 

convediaCorp   OBJECT IDENTIFIER ::= { enterprises 7569 } 

    // 定义了一个节点,表示他是enterprises+ 7569,所以他的Oid是1.3.6.1.4.1.7569

    

nodeInfo             OBJECT IDENTIFIER ::= { msMIBObjects 1 }

    // 按照上面的类推,这个节点的Oid为.1.3.6.1.4.1.7569.1.2.1.1

 

  

nodeLicensedPorts OBJECT-TYPE   SYNTAX      Integer32 (0.. 65535)MAX-ACCESS  read-onlySTATUS      currentDESCRIPTION"Future: The maximum number of ports licensed for this MS."DEFVAL { 18000   }::= { nodeInfo 1 } 

 // 表示从属于nodeInfo的一个节点。其Oid为.1.3.6.1.4.1.7569.1.2.1.1.1.0可以通过get OID这样的结构得到这个属性的值,后续会说具体的方式。

    这里说一下SMI定义一个OBJECT-TYPE的结构。

  • SYNTAX表示值的类型为Integer32,SMI本身定义了很少的基本类型和一个复合类型Sequences.
  • MAX-ACCESS 访问权限,这个在MibBrowers中read-only表示为一个叶子,write表示为一个笔尖
alarmTable  OBJECT IDENTIFIER ::= { msMIBObjects 23 }
alarmEventTable OBJECT-TYPESYNTAX      SEQUENCE OF AlarmEventEntryMAX-ACCESS  not-accessibleSTATUS      currentDESCRIPTION"A list of alarm status history entries."::= { alarmTable 3 }