zestroly 2010-12-17
一般我们下载回来的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的时候注意大小写不要写错。