SNMP之MIB文件编写方法

MIB文件是什么呢?MIB是管理信息的集合,也是被管理对象的集合,是MIB开发人员根据业务的需求或者网络管理标准的要求,按照约定的组织规则,定义语法编写的文本文件。Agent与NMS通过SNMP协议进行信息互换,而MIB文件则是Agent与NMS进行沟通的桥梁,可以使网管软件与被管理设备进行标准对接,每个Agent都维护一个MIB库,NMS通过SNMP可以读取并设置MIB库中的对象。

每个MIB中的管理对象都应该清晰地描述该对象的属性,包括名字、描述、数据类型等内容。这些属性的内容能够通过对象的唯一标识OID,被通信双方识别。这也就应征了MIB是NMS与Agent相互沟通的桥梁,只有Agent实现了MIB,NMS认识该MIB,两者才能正确配合实现相应管理功能。

MIB文件常见宏定义描述:

实例:

IPC-SNMP-MIB    DEFINITIONS ::= BEGIN

    IMPORTS

        TEXTUAL-CONVENTION, DisplayString, TruthValue, RowStatus

            FROM SNMPv2-TC

        OBJECT-TYPE, NOTIFICATION-TYPE, MODULE-IDENTITY, Integer32, Opaque, enterprises, TimeTicks, IpAddress

            FROM SNMPv2-SMI;

IPC-SNMP-MIB代表定义了一个名为IPC-SNMP-MIB的MIB。

DEFINITIONS ::= BEGIN à 指明了MIB文件的开始,它标志着从此处开始定义MIB的各种对象、数据类型和通知等信息。MIB文件中的每个MIB都必须以这个标记开始,它告诉MIB解析器在此处开始对MIB的内容进行解析和处理。通过定义的各种对象和数据类型,MIB文件可以提供对特定设备或系统的管理信息进行获取、监控和控制的功能。

IMPORTS关键字:在MIB文件中引入其他MIB模块中定义的对象、数据类型和通知等信息。通过使用IMPORTS关键字,可以将其他MIB模块中定义的对象和数据类型引入到当前MIB中,使得当前MIB可以使用这些引入的定义来描述和定义自己的管理信息。使用IMPORTS关键字时,需要指定被引入的MIB模块名和所引入的符号名称,从而在当前MIB中可以使用这些引入的符号。通过IMPORTS关键字,可以实现MIB模块之间的模块复用和信息共享。

TEXTUAL-CONVENTION用于定义自定义的数据类型。它的作用是为常见的数据类型提供更具可读性和可理解性的标记,从而使管理信息更易于阅读和解释。通过定义TEXTUAL-CONVENTION,可以创建新的数据类型,并在MIB文件中引用和使用这些自定义类型。也可引用已经定义的其他数据类型,以便在新的数据类型中重用现有的定义。这种引用关系允许在新数据类型中包含其他数据类型的限制和语义,从而更灵活地定义新的数据类型。

FROM关键字:用于在MIB文件中指定引用的MIB模块。它确定了所引用的标识符(对象标识符、数据类型、通知等)所在的MIB模块,从而在当前MIB中可以使用该引用。通过使用FROM关键字,MIB文件可以在当前MIB之外使用已定义的标识符。

OBJECT-TYPE用于描述和定义管理信息对象的关键字。通过定义对象的标识符、数据类型、访问权限等属性,来描述管理信息对象的各个方面。OBJECT-TYPE用于指定对象的属性和行为,使管理系统可以对这些对象进行有效的管理和操作。

MODULE-IDENTITY(模块标识符) à 该定义添加了一个公共的标示段来对整个信息描述块进行顶层的文字描述,声明MIB模块的一些基本信息,包括模块的名称、版本、描述、作者、联系方式等。这有助于用户和开发人员了解和理解该MIB模块的目的、功能和相关信息,以加强对管理MIB描述块的文档管理和控制,每个MIB定义中都会有该定义。

示例:

device  MODULE-IDENTITY

                   LAST-UPDATED        "201405101112Z"

                   ORGANIZATION       "Organization"

                   CONTACT-INFO        "

                            Author       :  NetWork Team

                            Phone        : 

                            Email        : 

                            Address      : 

                            Postalcode   :  "

                   DESCRIPTION           "add OID: capabilityInfo, encodeCapability, location, deviceUpTime , systemStatus , systemTime, mainStreamCapabilityInfo, extraStreamCapabilityInfo"

                   REVISION                  "201501191112Z"

                  

                   DESCRIPTION           "add OID: evsEvent , netMonitorAbortEvent , volumeGroupFaultEvent, nasServerStatusEvent, serverName"

                   REVISION                  "201412041112Z"

                  

                   DESCRIPTION           "add OID: recordConfig , recordPlanInfo , recordMainStreamInfoTable, recordExtraStreamInfoTable, physicalVolumeTotal, physicalVolumeFree,

                                                                 recordEvent, recordMainStreamEvent, recordExtraStreamEvent, snmpStatusEvent, snmpStatus, physicalVolumeThreshold"

                   REVISION                  "201404281112Z"

                   DESCRIPTION           "add OID: cpuUsage, lastestEvent, storageInfo, physicalVolume, raidVolume, storageFailureEvent,

                                                                 storageFailureEvent, storageLowSpaceEvent, storageInOutEvent, storageSMARTAbnormityEvent"

                  

                   REVISION                  "201402141112Z"

                   DESCRIPTION          " add OID : generalSnmpTrap, videoMotionEvent, videoBlindEvent, videoLossEvent, localAlarmEvent, action, currentTime"      

                  

                   REVISION                  "201401071427Z"

                   DESCRIPTION           "This file defines the private IPC SNMP MIB extensions for all the device."

                  

                            ::=  {  common 2 }

OBJECT-IDENTIFIFIER(对象标识符) à 通过OBJECT-IDENTIFIER,可以为每个MIB对象分配一个唯一的标识符(OID),用于区分不同的MIB对象。这样,在管理系统中就能够准确识别和引用指定的MIB对象。

定义格式:objectname   OBJECT IDENTIFIER ::= { parent   number }

关键字

含义

备注

objectname

被管理对象的名字

必须以小写字母开头

OBJECT IDENTIFIER

每一个叶子对象所必须的关键字

固定格式

parent

父节点

该节点的父节点

number

数组OID

该节点对应数字

示例:

common                                                                     OBJECT IDENTIFIER ::=  {  1 3 6 1 4 1 1004849}

    systemInfo                                 OBJECT IDENTIFIER ::=  {  device  1  }

                   versionInfo                           OBJECT IDENTIFIER ::=  {  systemInfo  1  }

                   productInfo                                                        OBJECT IDENTIFIER ::=  {  systemInfo  2  }

                  

         networkInfo                                                             OBJECT IDENTIFIER ::=  {  device  2  }

                   networkPort                                                       OBJECT IDENTIFIER ::=  {  networkInfo  1  }

                   tcpIpInfo                                                   OBJECT IDENTIFIER ::=  {  networkInfo  2  }

                  

OBJECT-TYPE(对象类型) à 定义了对象的数据类型、访问权限、语义描述和引用关系,支持对象的状态和附加信息等。这些信息有助于管理系统正确处理和使用MIB数据,并构建和维护MIB模块的层次结构和关系。指定MIB对象的数据类型,可以是整数、字符串、布尔值等等。这有助于管理系统正确解释和处理MIB对象的值。指定MIB对象的访问权限,如只读、读写、创建、删除等。这限制了对MIB对象的访问方式,保护了MIB数据的完整性和安全性。提供关于MIB对象的语义描述,包括对象的含义、用途、取值范围等。这有助于用户和开发人员更好地理解和使用MIB数据。可以包含一些额外的信息,如对象的状态、最后修改时间、作者等。这有助于管理系统更好地跟踪和管理MIB对象的状态和变更历史。描述对象之间的关联和引用关系,即一个MIB对象可以引用或依赖其他的MIB对象。这有助于构建MIB模块的层次结构和关系。

定义的句法如下:

定义格式:

objectname OBJECT-TYPE

     SYNTAX (syntax)

     MAX-ACCESS (access)

     STATUS (status)

     DESCRIPTION (description)

     ::= { ( parent ) ( number )}

                                                                    

关键字

含义

备注

objectname

被管理对象的名字

必须以小写字母开头

OBJECT-TYPE

每一个叶子对象所必须的关键字

固定格式

SYNTAX

被管理对象类型的关键字

Counter(计数)

Gauge(标准)

DisplayString(显示字符串)

Interger(整数)

TimeTicks(时间戳)

NetworkAddress(网络地址)

IpAddress(Ipv4地址)

MAX-ACCESS

该节点支持的访问方式

read-only(只读)

read-write(读写)

read-create(读和创建)

no-accessible(不可访问)

STATUS

该节点的状态

current (当前的)

deprecated (反对的)

obsolete(废弃的)

DESCRIPTION

对被管理对象的功能、特征等进行描述的关键字

一些关于节点的描述信息

示例:

softwareRevision             OBJECT-TYPE

        SYNTAX              DisplayString

        MAX-ACCESS          read-only

        STATUS              current

        DESCRIPTION         "The software version"

        ::=  {  versionInfo  1  }

       

    hardwareRevision             OBJECT-TYPE

        SYNTAX              DisplayString

        MAX-ACCESS          read-only

        STATUS              current

        DESCRIPTION         "The hardware version"

        ::=  {  versionInfo  2  }

表类型:是一个特殊类型的声明,表内声明的对象称为列对象,表对象可以看作是一些标量对象的集合。利用SEQUENCESEQUENCE OF定义表格和表格中的行, 通常来说,表格对象的名字后面加有后缀Table,行对象的名字后面加有后缀Entry

定义格式:

tablename OBJECT-TYPE

SYNTAX  SEQUENCE OF Entrytype           

MAX-ACCESS  not-accessible

STATUS  current

DESCRIPTION (description)

:: ={ (parent) (number)}

entryname OBJECT-TYPE

SYNTAX  Entrytype

MAX-ACCESS not-accessible           

STATUS  current

DESCRIPTION  description

    INDEX { index list }

                   :: ={ (tablename) 1}

(Entrytype)  :: = SEQUENCE {

      (column1)   (column1type),

      (column2)   (column1type),

      ( columnN)    (columnNtype) }

关键字

含义

备注

tablename

表格名 

xxxxTable首字母小写

OBJECT-TYPE

每一个叶子对象所必须的关键字

固定格式

SYNTAX

被管理对象类型的关键字

Counter(计数)

Gauge(标准)

DisplayString(显示字符串)

Interger(整数)

TimeTicks(时间戳)

NetworkAddress(网络地址)

IpAddress(Ipv4地址)

Entrytype

表对象名

XxxxEntry首字母大写

MAX-ACCESS

该节点支持的访问方式

read-only(只读)

read-write(读写)

read-create(读和创建)

no-accessible(不可访问)

not-accessible

访问方式

此处必须是not-accessible

STATUS

该节点的状态

current (当前的)

deprecated (反对的)

obsolete(废弃的)

entryname

行名

和XxxxEntry名相同,首字母小写xxxxEntry

description

描述信息

示例:

mdStreamInfoTable      OBJECT-TYPE

                   SYNTAX           SEQUENCE OF MdStreamInfoEntry

                   ACCESS           not-accessible

                   STATUS           current

                   DESCRIPTION      "infomation of the main stream channel"

                   ::=  {  mainStreamInfo  2  } 

            

    mdStreamInfoEntry   OBJECT-TYPE

           SYNTAX           MdStreamInfoEntry

           ACCESS           not-accessible

           STATUS           current

           DESCRIPTION      "infomation of the main stream channel list"

           INDEX            {  mdChannelNo  }

           ::=  {  mdStreamInfoTable  1  }

        

         MdStreamInfoEntry ::= SEQUENCE {

                    mdChannelNo                                   INTEGER,

                            mdCompression                              DisplayString,

                            mdFPS                                                     INTEGER,

                            mdResolution                                  DisplayString,

                            mdBitRate                                       INTEGER

           }                

        

         mdChannelNo             OBJECT-TYPE

        SYNTAX              INTEGER

        MAX-ACCESS          read-only

        STATUS              current

        DESCRIPTION         "The number of main channel."

        ::=  {  mdStreamInfoEntry  1  }

                  

                                              

         mdCompression      OBJECT-TYPE

        SYNTAX              DisplayString

        MAX-ACCESS          read-write

        STATUS              current

        DESCRIPTION         "The compression mode of the main channel which stream-type is the move-detection(e. g.

                   MPEG4 MPEG2 MPEG1 MJPG H.263 H.264 H.265)."

        ::=  {  mdStreamInfoEntry  2  }

                  

         mdFPS                  OBJECT-TYPE

        SYNTAX              INTEGER

        MAX-ACCESS          read-write

        STATUS              current

        DESCRIPTION         "FPS of the main channel which stream-type is the move-detection."

        ::=  {  mdStreamInfoEntry  3  }

mdResolution                     OBJECT-TYPE

        SYNTAX              DisplayString

        MAX-ACCESS          read-write

        STATUS              current

        DESCRIPTION         "resolution of the main channel which stream-type is the move-detection.

                            Resolution Name | Size in PAL       |  Size in NTSC

                            D1                                704 x 576            704 x 480

                            HD1                             352 x 576            352 x 480

                            BCIF                   704 x 288            704 x 240

                            CIF                               352 x 288            352 x 240

                            QCIF                   176 x 144            176 x 120

                            NHD                            640 x 360

                            VGA                            640 x 480

                            QVGA                         320 x 240

                            SVCD                          480 x 480

                            QQVGA                      160 x 128

                            SVGA                          800 x 592

                            SVGA1                        800 x 600

                            WVGA                         800 x 480

                            FWVGA                      854 x 480

                            DVGA                         960 x 640

                            XVGA                         1024 x 768

                            WXGA                         1280 x 800

                            WXGA2                       1280 x 768

                            WXGA3                       1280 x 854

                            WXGA4                       1366 x 768

                            SXGA                          1280 x 1024

                            SXGA+                        1400 x 1050

                            WSXGA                      1600 x 1024

                            UXGA                         1600 x 1200

                            WUXGA                      1920 x 1200

                            ND1                             240 x 192

                            720P                    1280 x 720

                            1080P                           1920 x 1080

                            QFHD                          3840 x 2160

                            1280x960            1280 x 960(1.3 Mega Pixels)

                            1872x1408          1872 x 1408(2.5 Mega Pixels)

                            3744x1408          3744 x 1408(5 Mega Pixels)

                            2048x1536          2048 x 1536(3 Mega Pixels)

                            2432x2048          2432 x 2048(5 Mega Pixels)

                            1216x1024          1216 x 1024(1.2 Mega Pixels)

                            1408x1024          1408 x 1024(1.5 Mega Pixels)

                            3296x2472          3296 x 2472(8 Mega Pixels)

                            2560x1920          2560 x 1920(5 Mega Pixels)

                            960H                   960 x 576                               960 x 480

                            DV720P                       960 x 720

                            2560x1600          2560 x 1600(4 Mega Pixels)

                            2336x1752          2336 x 1752(4 Mega Pixels)

                            2592x2048          2592 x 2048

                            2448x2048          2448 x 2048

                            1920x1440          1920 x 1440

                            2752x2208          2752 x 2208

                            3840x2160          3840 x 2160

                            4096x2160          4096 x 2160

                            3072x2048          3072 x 2048                     "

        ::=  {  mdStreamInfoEntry  4  }

         mdBitRate                     OBJECT-TYPE

        SYNTAX              INTEGER

        MAX-ACCESS          read-write

        STATUS              current

        DESCRIPTION         "bit rate of the main channel which stream-type is the move-detection."

        ::=  {  mdStreamInfoEntry  5  }

事件类型:MIB文件不直接包含事件类型,而是主要用于描述和定义管理信息库(MIB)中的对象和属性。在某些应用程序和系统中,可能会创建自定义的事件类型,以便跟踪和处理特定的事件。这些事件类型可以根据具体需求进行定义,并与MIB文件中的对象和属性进行关联。

定义格式:

eventname NOTIFICATION-TYPE

              OBJECTS { snmpStatus }

     STATUS (status)

     DESCRIPTION (description)

     ::= { ( parent ) ( number )}

关键字

含义

备注

eventname

事件名字

必须以小写字母开头

NOTIFICATION-TYPE

事件对象所必须的关键字

固定格式

OBJECTS

指定该通知所引用的对象

表示当snmpStatus对象发生变化时,将触发该通知。

STATUS

该节点的状态

current (当前的)

deprecated (反对的)

obsolete(废弃的)

DESCRIPTION

事件的描述信息

用于描述该通知的含义和作用,即它是关于SNMP工作状态的事件。

示例:

       snmpStatusEvent NOTIFICATION-TYPE

              OBJECTS { snmpStatus }

              STATUS  current

              DESCRIPTION

                     "A snmp work status Event."

              ::= { notification 2 }

      

Trap类型:Trap类型定义了SNMP陷阱(Trap)或通知(Notification)。陷阱是一种事件通知机制,当网络设备或应用程序发生特定事件时,会向管理系统发送一个陷阱通知。MIB文件中的Trap类型用于定义这些陷阱通知的结构和属性。

示例:

         generalSnmpTrap                   OBJECT IDENTIFIER ::=  {  device  12  }

         action                                               OBJECT-TYPE

        SYNTAX              DisplayString

        MAX-ACCESS          accessible-for-notify

        STATUS              current

        DESCRIPTION         "trap info "

        ::=  {  generalSnmpTrap  1  }

补充说明:

  1. MIB文件的注释用(两个“-”
  2. IMPORTS,从别的MIB中导入其他类型。
  3. table的定义,一个table定义包括table节点,Entry节点以及其他的列表节点。
  4. 各个参数的顺序要严格按照上面列举的顺序,防止出错。
  5. MIB文件并非要包括所有的宏,基本的要有MODULE-IDENTITYOBJECT-IDENTITYOBJECT-TYPE
  6. 所有的MIB file的都以DEFINITIONS ::= BEGIN关键字开始,以END结束。我们所有添加的节点均应在此之间。

XXX-TEST-MIB DEFINITIONS ::= BEGIN

……

……

END

Uni-app 是一款跨平台的开发框架,它支持多种前端框架,并且可以在多个平台上运行,包括微信小程序、H5、iOS、Android 等。在使用 Uni-app 进行开发时,我们可以封装接口来简化代码和提高开发效率。 下面是 Uni-app 接口封装的步骤: 1. 定义接口函数:定义一个函数用来发送请求并返回数据。 2. 定义参数格式:定义请求参数的格式和数据类型。 3. 定义返回值格式:定义接口返回数据的格式和数据类型。 4. 发送请求:在接口函数中使用 uni.request 函数发送请求。 5. 处理返回值:在接口函数中处理请求返回的数据,并按照事先定义的格式进行返回。 6. 调用接口:在需要使用接口的地方调用接口函数即可。 举个例子,假设我们要封装一个获取用户信息的接口: ``` function getUserInfo(userId) { const apiUrl = 'https://api.example.com/getUserInfo'; const data = { userId: userId }; const header = { 'Content-Type': 'application/json' }; return uni.request({ url: apiUrl, method: 'POST', data: data, header: header }).then(res => { const {data} = res; if (data && data.code === 0) { return data.data; } else { return null; } }).catch(() => { return null; }); } ``` 在这个例子中,我们定义了一个函数 getUserInfo,它接受一个 userId 参数,并返回一个 Promise。在函数中,我们使用 uni.request 函数发送请求,并在 then 函数中处理返回的数据。如果返回的数据符合我们的格式要求,则返回数据,否则返回 null。最后,我们将这个函数导出,供其他地方使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值