`
wangzijian777
  • 浏览: 18843 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

用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-only
   STATUS      current
   DESCRIPTION
      "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-TYPE
   SYNTAX      SEQUENCE OF AlarmEventEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "A list of alarm status history entries."
   ::= { alarmTable 3 }

alarmEventEntry OBJECT-TYPE
   SYNTAX      AlarmEventEntry
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "An entry in the Alarm Event Table."
   INDEX   { aleEventIndex }
   ::= { alarmEventTable 1 }

AlarmEventEntry ::=
   SEQUENCE {
      aleEventIndex        Unsigned32,
      aleSequenceID        Unsigned32,
      aleEventTime         DateAndTime,
      aleEventType         EventType,
      aleAlarmID           Unsigned32,
      aleAlarmText         DisplayString,
      aleAlarmSeverity     AlarmSeverity,
      aleInstanceID        Unsigned32,
      aleSlotNumber        Unsigned32
   }

aleEventIndex OBJECT-TYPE
   SYNTAX      Unsigned32 (1.. 2000 )
   MAX-ACCESS  not-accessible
   STATUS      current
   DESCRIPTION
      "This object is used as a key attribute to
      specify the row entry in this table."
   ::= { alarmEventEntry 1 }

aleSequenceID OBJECT-TYPE
   SYNTAX      Unsigned32
   MAX-ACCESS  read-only
   STATUS      current
   DESCRIPTION
      "Unique sequential event identification number."
   ::= { alarmEventEntry 2 }

     // 关键来了,这里定义了一个Table,SMI中使用SEQUENCE 来定义复杂的结构,该结构可以看做是一个表,然后可以通过get,getNext来遍历这张表中的内容。

 

 

alarm001 NOTIFICATION-TYPE
   OBJECTS { aleSequenceID, aleEventType, aleAlarmID, aleInstanceID,
             aleAlarmText, aleAlarmSeverity, aleEventTime, aleSlotNumber }
   STATUS  current
   DESCRIPTION
      "External alarm 1 has been triggered. Text and severity
      of this alarm are user-configurable. This alarm is
      deactivated when the external contact is cleared."
        --#SUMMARY "Alarm #001: %s.  Slot: %d  Event type: %d  Severity: %d  Instance: %d  Sequence: #%d"
        --#ARGUMENTS {4,7,1,5,3,0}
        --#SEVERITY MAJOR
        --#TIMEINDEX 10
        --#STATE OPERATIONAL
   ::= { msTraps 11 }
// 这个主意NOTIFICATION-TYPE,其定义了一个Trap消息,还定义了该trap消息中的内容是使用了AlarmTable中的内容。

 好了基本上一个网元在设计的时候都是先去申请OID节点,然后设计这个MIB文件座位开发的标准。

然后我们使用MibBrowser导入它。

下载安装MibBrowser打开它。



 

点击File->Load MIBS,选择一个mib文件打开就会得到上面的样子了。

我们再来看看其他功能。

1. get


  • 在左树中选择要操作的节点,
  • 最上面Address中输入网元地址,这里是笔者自己写的一个模拟器,后面会把模拟器的代码奉上。
  • Advanced可以设置SNMP的版本,一个用来身份验证的Community和端口
  • Operations选择为Get,此外还能选择为Getnext walk等。 点击Go.截图没截到
  • 这样就完成了一个请求操作,在后下的列表中会返回结果

2. getNext

    与1相同,只是Operations设置为GetNext

3. walk

    与1相同,Operations设置为walk,这个的返回结果会是一个列表。会默认轮询调用getNext获取整个Mib结构的所有值。

   

 

4, trapReceiver

打开TrapReceiver. Tool->Trap Receiver.

 按照5中的方式发送Trap

然后看到结果:



 

5. trapSender

发送TrapSender

右击一个NOTIFICATION-TYPE的对象选择Send Trap.



 输入一些信息,点击SendTrap,在4中看结果

 

好了基本就这么多的功能了,因为SNMP本身就是很简单的协议。这些功能也是我们之后在开发中要用代码实现的。

 

Linux SNMP服务

这个有可能需要安装,也是比较好用的。主要的命令格式是:

snmpget -v2c -c CONV 10.85.134.194 .1.3.6.1.2.1.1.1.0

snmpwalk -v2c -c CONV 10.32.147.19:10161 1.3.6.1.4.1.7569.1.2.1.28.1

这个一看明了了吧, -v2c是版本, -c是Community, 然后是ip:port oid.

Linux上开发必备

 

SNMP4J

 这个是下一篇要说的内容,是基于Java的开源的开发SNMP的包。下一篇具体说。

 

 

  • mib.zip (2.7 KB)
  • 下载次数: 42
  • 大小: 55.3 KB
  • 大小: 93 KB
  • 大小: 43.3 KB
  • 大小: 64.7 KB
  • 大小: 25.4 KB
1
0
分享到:
评论
1 楼 597272095 2014-06-05  
SNMP 如何判断 路由器 防火墙 交换机

相关推荐

    snmp4j AGENT 开发必备

    进行snmp4J网管开发的基础东东 agent代理端例子: Java代码 import java.util.*; import org.snmp4j.*; import org.snmp4j.smi.*; //agent代理端例子: public class Test2 { public static class Handler...

    snmp4j-2.5.6_SNMP4J.jar_

    snmp4j可采集网络设备资源信息,为网管系统必备工具,包含源码

    SNMP网管系统开发

    SNMP网管系统开发、snmp协议介绍、开发流程等

    snmp4j-2.1.0.jar

    版本为2.1.0,java利用snmp4j包来读取snmp协议数据,目前华为中兴部分设备的告警或资源数据均是使用snmp接口,如华为IMS,华为M2000,华为NGN,中兴IMS网管的Trap数据。 数据接入代码实现:...

    snmp4j源码

    snmp4j源码,这个不用多说了吧。简单网管协议

    windows snmp 网管软件开发库

    一套vc开发库,可以用来开发snmp的网管系统,使开发人员提高效率,把更过精力用于系统逻辑方面,而不用关心snmp报文的发送和接收。

    net-snmp_开发

    net-snmp 的基本开发流程。 包括开发环境,开发方法等。 供 SNMP 网管开发参考。

    net-snmp,snmpwalk(windows最新版本)

    该工具是运行于windows平台的exe可执行文件,跟linux平台的snmpwalk...通过snmpwalk也可以查看支持SNMP协议(可网管)的设备的一些其他信息,比如cisco交换机或路由器IP地址、内存使用率等,也可用来协助开发SNMP功能。

    SNMP Agent快速开发

    snmp 代理端开发 snmp-agent开发指南

    SNMP协议和应用大集成

    NetSnmp初步 snmp+ mrtg可以很好的实现对局域网内服务器状态的监控.docx snmp协议总结 Linux下安装与配置snmp服务.pdf ...NET-SNMP开发简述.doc net-snmp软件包的应用.doc Net-SNMP介绍.pptx Ubuntu安装net-snmp .docx

    snmp4j-1.11.2.jar

    网管软件的java开发包(大于20字,大于20字,大于20字大于20字大于20字)

    net-snmp-5.4.2.1-1.win32

    NET-SNMP是最出名的SNMP网管系统的开发包,提供了几乎所有SNMP网管开发所需要的资源 1 SNMP API。封装SNMP协议和网络接口细节。提供了方便调用的SNMP操作接口 2 MIB管理。提供了所有的典型MIB库。并可以将MIB库映射...

    net-snmp-5.4.1.zip_ net-snmp-5.4.1_net snmp 5.4.1_net-snmp .tar.

    snmp协议栈开发包,可用作第三方网管开发,有基本的Mib get set walk balk getnext Mib文件解析功能

    SNMPc7-CN+eval(内网管理工具)

    SNMPc7-CN+eval(内网管理工具) SNMPc7-CN+eval(内网管理工具)

    基于SNMP_AGENT_的网管系统开发

    基于SNMP_AGENT_的网管系统开发

    SNMP网管系统中MIB编译的实现与应用-文档

    法标记和协议数据单元,在此基础上提出了基于MIB编译的SNMP网管系统开发模式 ;研究了JavaCC语法分析生成器,对基于JavaCC的MIB编译器的词法分析、 语法分析、语义分析、语法树生成、MIB树生成和Java目标代码生成...

    基于SNMP网络管理系统的设计与实现

    然后设计并实现了一个网络管理系统基于SNMP用VC++和SNMP++ API。该系统由设备性能管理模块,网络故障管理模块,和网络拓扑检测模块。它直观地显示网络设备的运行状态,并通知网络管理系统管理员的故障,使网络管理员...

    net.rar_Csharp SNMP_C#snmp_SNMP_snmp c#_网管

    C# snmp编程开发的网管软件部分功能。

    SNMP免费网管系统-SugarNMSTool

    SugarNMSTool是“北京智和信通技术有限公司”开发的图形化SNMP工具,可以免费使用。工具只有3M大小左右,便于携带,免安装,无数据库,可在Windows、Linux、Unix系统上快速运行。 工具由大型SugarNMS智和网管平台的...

    java网管技术snmp协议技术

    3)SNMP协议:规定NMS和Agent之间是如何交换管理信息的应用层协议,以GET、SET方式替代了复杂的命令集; 4)MIB:管理信息库,每个Agent都有自己的MIB库。MIB是一种对象数据库,由设备所维护的被管理对象组成。 SNMP ...

Global site tag (gtag.js) - Google Analytics