net-snmp中载入第三方mib库

一般我们下载回来的mib文件可能后缀名为.mib,为了清晰起见,可能需要改名。一般改成 MIB_NAME.txt 这样的形式。

例如/usr/share/snmp/mibs/IP-MIB.txt 中包含如下一行

IP-MIB DEFINITIONS ::= BEGIN

这个MIB_NAME具体的定义是在mib文件中第一个包含 DEFINITIONS 的行,在DEFINITIONS之前的那个词就是MIB_NAME。

不过这个mib文件的名字是什么其实不重要,重要的是包含DEFINITIONS 的行中所定义的"Module"名字。

网上有一些文档说增加一个新的mib文件就是把mib文件复制到'/usr/share/snmp/mibs/'中就可以了,其实这是不对的!

首先,我们要将mib文件复制到'/usr/share/snmp/mibs/'中

但是光复制过去还不能生效,'snmpget'是不会自动加载所有在/usr/share/snmp/mibs/目录中的mib文件的!

如果不能正确加载mib文件的话,就会出现 "Unknown Object Identifier" 这样的错误。

因此在复制了mib文件到'/usr/share/snmp/mibs/'中以后,需要修改/usr/share/snmp/snmp.conf,加入下边一行:

mibfile /usr/share/snmp/mibs/DS11INTEG-MIB.txt

或者

mibs +DS11INTEG-MIB

或者也可以在提示符下输入

# export MIBS=ALL

这样就可以引用我们新加入的mib文件了。例如:

# snmpget -v1 -c public 192.168.49.253 BREEZECOM-DOT11EXT-MIB::roamQuality.1  BREEZECOM-DOT11EXT-MIB::roamQuality.1 = INTEGER: 3

或者这样也可以

# snmpget -v1 -c public 192.168.49.253 roamQuality.1  BREEZECOM-DOT11EXT-MIB::roamQuality.1 = INTEGER: 3

使用'snmptranslate' 命令可以获得一个文本项对应的OID值

# snmptranslate -On BREEZECOM-DOT11EXT-MIB::roamQuality   .1.3.6.1.4.1.710.7.1.5.1.23.1.7

也可以使用'snmptranslate' 命令查询一个指定的对象

# snmptranslate -IR roamQuality   BREEZECOM-DOT11EXT-MIB::roamQuality

还可以用snmptranslate命令把OID转化成文字描述

# snmptranslate .1.2.840.10036.2.2.1.12   IEEE802dot11-MIB::dot11FCSErrorCount

# snmptranslate -Of .1.2.840.10036.2.2.1.12.iso.member-body.us.ieee802dot11.dot11mac.dot11CountersTable.dot11CountersEntry.dot11FCSErrorCount

也可用snmptranslate命令从mib文件获得某个对象的全部细节

# snmptranslate -Td BREEZECOM-DOT11EXT-MIB:roamQuality

BREEZECOM-DOT11EXT-MIB::roamQuality

roamQualityOBJECT-TYPE

--FROMBREEZECOM-DOT11EXT-MIB

SYNTAXInteger32

MAX-ACCESSread-only

STATUScurrent

DESCRIPTION"AnindicatorforthequalityoftheBSS.Thequalityis

calculatedoverthereceivedBeaconsoftheBSSanddepends

ontheselectedqualityindicator.Thesemanticsofthe

indicatoris'lowisgoodquality'and'highisbadquality'."

   ::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) breezeCOM(710) ds11Products(7)    dot11ExtMIB(1) dot11ExtWBUObjs(5) roam(1) roamTable

(23) roamEntry(1) 7 }

另一个有用的命令是snmpwalk

  # snmpwalk -v1 -c public 192.168.49.253 dot11CountersTable

IEEE802dot11-MIB::dot11TransmittedFragmentCount.1=INTEGER:122172497

IEEE802dot11-MIB::dot11MulticastTransmittedFrameCount.1=INTEGER:45242

IEEE802dot11-MIB::dot11FailedCount.1=INTEGER:4009

IEEE802dot11-MIB::dot11RetryCount.1=INTEGER:1601483

IEEE802dot11-MIB::dot11MultipleRetryCount.1=INTEGER:885859

IEEE802dot11-MIB::dot11FrameDuplicateCount.1=INTEGER:543281

IEEE802dot11-MIB::dot11RTSSuccessCount.1=INTEGER:0

IEEE802dot11-MIB::dot11RTSFailureCount.1=INTEGER:0

IEEE802dot11-MIB::dot11ACKFailureCount.1=INTEGER:3971754

IEEE802dot11-MIB::dot11ReceivedFragmentCount.1=INTEGER:108826417

IEEE802dot11-MIB::dot11MulticastReceivedFrameCount.1=INTEGER:31359

IEEE802dot11-MIB::dot11FCSErrorCount.1=INTEGER:831325

IEEE802dot11-MIB::dot11TransmittedFrameCount.1=INTEGER:122156588

  IEEE802dot11-MIB::dot11WEPUndecryptableCount.1 = INTEGER: 0

需要注意的是,在使用snmpget命令的时候,需要在查询的OID尾部增加.0 或者 .1,不然会报错。

   # snmpget -v1 -c public 192.168.49.253 dot11ACKfailureCount

Errorinpacket

Reason:(noSuchName)ThereisnosuchvariablenameinthisMIB.

   Failed object: IEEE802dot11-MIB::dot11ACKFailureCount

   # snmpget -v1 -c public 192.168.49.253 dot11ACKFailureCount.1   IEEE802dot11-MIB::dot11ACKFailureCount.1 = INTEGER: 3971912

还有在unix系统中,系统是大小写敏感的,因此写OID的时候注意大小写不要写错。

相关推荐