net-snmp中載入第三方mib庫
阿新 • • 發佈:2019-01-05
Management Information Base(管理資訊庫,MIB)是一組物件,定義可對某個裝置提出的查詢。
我們所 用的snmp監控主機如果要輪詢一個支援snmp的裝置的某項資料,它必須發出被查詢裝置所能理解的查詢命令,這個就需要監控主機載入被查詢裝置對應的 MIB,這個MIB將通知snmp監控主機有關由 MIB 模組化的資料的佈局和組成。
Linux 中所使用的net-snmp自帶了一些標準的MIB,但是世界上支援snmp的裝置有無數種,各廠家都有自己的定義,這些定義不可能都包含在net- snmp自帶的MIB中,因此,想要正確輪詢一個這樣的裝置,必須載入廠家自己的MIB檔案。
一般 我們下載回來的MIB檔案可能字尾名為.mib,為了清晰起見,一般改成 MIB_NAME.txt 這樣的形式,當然不改也可以,這個MIB檔案叫什麼名字無關緊要。
系統要載入一個MIB文 件,net-snmp必須知道從哪裡載入。預設情況下是下邊兩個目錄:
1. $HOME/.snmp/mibs
2. /usr/local/share/snmp/mibs
不過也有些發行版會改變這個預設路徑,那麼可以用下邊兩種方法之一獲取它 所使用的路徑。
1.如果系統安裝了net-snmp-config: net-snmp-config --default-mibdirs
2.如果未安裝net-snmp-config: snmptranslate -Dinit_mib .1.3 2>&1 |grep MIBDIR
一般來說MIB檔案是一個純文字檔案,我們開啟這個 檔案檢視,找到第一個包含 DEFINITIONS 的行
例如/usr/share /snmp/mibs/IP-MIB.txt 中包含如下一行
IP-MIB DEFINITIONS ::= BEGIN
這個DEFINITIONS關鍵字前邊的 "IP-MIB" 就是系統在呼叫這個MIB檔案時所使用的Module名稱,這個很重要。
網上有一些文件說增加一個 新的mib檔案就是把mib檔案複製到'/usr/share/snmp/mibs/'中就可以了,其實這是不對的!
首先,我們要將下載到的MIB檔案複製到前邊所說的兩個預設路徑中的一個裡
但是光復制過去還不能生效,net-snmp是不會自動載入所有在/usr/share/snmp/mibs/目錄中的mib檔案 的!
如果不能正確載入mib檔案的話,就會出現 "Unknown Object Identifier" 這樣的錯誤。
如果要net-snmp自動載入我們下載的 新MIB檔案,有兩種方法:
方法一: 放到snmp.conf中。
用 net-snmp-config --snmpconfpath可以確定snmp.conf檔案的位置
[[email protected] ~]# net-snmp-config --snmpconfpath
/etc/snmp:/usr/share/snmp:/usr/lib/snmp:/root/.snmp:/var/net-snmp
將 所要載入的MIB的Module名稱加到snmp.conf中,如下例:
mibs +CISCO-RHINO-MIB
mibs +SOME-OTHER-SPIFFY-MIB
如果圖省事也可以這樣,當然我們不建議這樣。
mibs +ALL
因為這樣有可能會提示如下錯誤
% snmpwalk -v2c public 192.168.1.100
Warning: Module MAU-MIB was in /usr/share/snmp/mibs//DOT3-MAU-MIB.txt now is /usr/share/snmp/mibs//RFC2668-MIB.txt
Warning: Module DISMAN-EVENT-MIB was in /usr/share/snmp/mibs//EVENT-MIB.txt now is /usr/share/snmp/mibs//DISMAN-EVENT-MIB.txt
Warning: Module P-BRIDGE-MIB was in /usr/share/snmp/mibs//P-BRIDGE-MIB.txt now is /usr/share/snmp/mibs//P-BRIDGE.txt
可以將標準錯誤檔案轉向來遮蔽這些警告資訊
% snmpwalk -v2c public 192.168.1.100 2>/dev/null
SNMPv2-MIB::sysDescr.0 = STRING: Linux server1 2.4.34-pre2 #170 Fri Sep 15 20:10:21 CEST 2006 mips
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-TC::linux
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (706980) 1:57:49.80
方法二: 使用系統變數
MIBS=+CISCO-RHINO-MIB:SOME-OTHER-SPIFFY-MIB
export MIBS
通過上述兩種方法之一,net-snmp就可以正確載入我們的新MIB檔案,使用snmpget也就可以輪詢到新MIB檔案中所定義 的OID了。
# 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,使用'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
roamQuality OBJECT-TYPE
-- FROM BREEZECOM-DOT11EXT-MIB
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "An indicator for the quality of the BSS. The quality is
calculated over the received Beacons of the BSS and depends
on the selected quality indicator. The semantics of the
indicator is 'low is good quality' and 'high is bad quality'."
::= { 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
Error in packet
Reason: (noSuchName) There is no such variable name in this MIB.
Failed object: IEEE802dot11-MIB::dot11ACKFailureCount
# snmpget -v1 -c public 192.168.49.253 dot11ACKFailureCount.1
IEEE802dot11-MIB::dot11ACKFailureCount.1 = INTEGER: 3971912
還有在unix系統中,系統是大小寫敏感的,因此寫OID的時候注意大小寫不要寫錯。
我們所 用的snmp監控主機如果要輪詢一個支援snmp的裝置的某項資料,它必須發出被查詢裝置所能理解的查詢命令,這個就需要監控主機載入被查詢裝置對應的 MIB,這個MIB將通知snmp監控主機有關由 MIB 模組化的資料的佈局和組成。
Linux 中所使用的net-snmp自帶了一些標準的MIB,但是世界上支援snmp的裝置有無數種,各廠家都有自己的定義,這些定義不可能都包含在net- snmp自帶的MIB中,因此,想要正確輪詢一個這樣的裝置,必須載入廠家自己的MIB檔案。
一般 我們下載回來的MIB檔案可能字尾名為.mib,為了清晰起見,一般改成 MIB_NAME.txt 這樣的形式,當然不改也可以,這個MIB檔案叫什麼名字無關緊要。
系統要載入一個MIB文 件,net-snmp必須知道從哪裡載入。預設情況下是下邊兩個目錄:
1. $HOME/.snmp/mibs
2. /usr/local/share/snmp/mibs
不過也有些發行版會改變這個預設路徑,那麼可以用下邊兩種方法之一獲取它 所使用的路徑。
1.如果系統安裝了net-snmp-config: net-snmp-config --default-mibdirs
2.如果未安裝net-snmp-config: snmptranslate -Dinit_mib .1.3 2>&1 |grep MIBDIR
一般來說MIB檔案是一個純文字檔案,我們開啟這個 檔案檢視,找到第一個包含 DEFINITIONS 的行
例如/usr/share /snmp/mibs/IP-MIB.txt 中包含如下一行
IP-MIB DEFINITIONS ::= BEGIN
這個DEFINITIONS關鍵字前邊的 "IP-MIB" 就是系統在呼叫這個MIB檔案時所使用的Module名稱,這個很重要。
網上有一些文件說增加一個 新的mib檔案就是把mib檔案複製到'/usr/share/snmp/mibs/'中就可以了,其實這是不對的!
首先,我們要將下載到的MIB檔案複製到前邊所說的兩個預設路徑中的一個裡
但是光復制過去還不能生效,net-snmp是不會自動載入所有在/usr/share/snmp/mibs/目錄中的mib檔案 的!
如果不能正確載入mib檔案的話,就會出現 "Unknown Object Identifier" 這樣的錯誤。
如果要net-snmp自動載入我們下載的 新MIB檔案,有兩種方法:
方法一: 放到snmp.conf中。
用 net-snmp-config --snmpconfpath可以確定snmp.conf檔案的位置
[[email protected] ~]# net-snmp-config --snmpconfpath
/etc/snmp:/usr/share/snmp:/usr/lib/snmp:/root/.snmp:/var/net-snmp
將 所要載入的MIB的Module名稱加到snmp.conf中,如下例:
mibs +CISCO-RHINO-MIB
mibs +SOME-OTHER-SPIFFY-MIB
如果圖省事也可以這樣,當然我們不建議這樣。
mibs +ALL
因為這樣有可能會提示如下錯誤
% snmpwalk -v2c public 192.168.1.100
Warning: Module MAU-MIB was in /usr/share/snmp/mibs//DOT3-MAU-MIB.txt now is /usr/share/snmp/mibs//RFC2668-MIB.txt
Warning: Module DISMAN-EVENT-MIB was in /usr/share/snmp/mibs//EVENT-MIB.txt now is /usr/share/snmp/mibs//DISMAN-EVENT-MIB.txt
Warning: Module P-BRIDGE-MIB was in /usr/share/snmp/mibs//P-BRIDGE-MIB.txt now is /usr/share/snmp/mibs//P-BRIDGE.txt
可以將標準錯誤檔案轉向來遮蔽這些警告資訊
% snmpwalk -v2c public 192.168.1.100 2>/dev/null
SNMPv2-MIB::sysDescr.0 = STRING: Linux server1 2.4.34-pre2 #170 Fri Sep 15 20:10:21 CEST 2006 mips
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-TC::linux
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (706980) 1:57:49.80
方法二: 使用系統變數
MIBS=+CISCO-RHINO-MIB:SOME-OTHER-SPIFFY-MIB
export MIBS
通過上述兩種方法之一,net-snmp就可以正確載入我們的新MIB檔案,使用snmpget也就可以輪詢到新MIB檔案中所定義 的OID了。
# 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,使用'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
roamQuality OBJECT-TYPE
-- FROM BREEZECOM-DOT11EXT-MIB
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION "An indicator for the quality of the BSS. The quality is
calculated over the received Beacons of the BSS and depends
on the selected quality indicator. The semantics of the
indicator is 'low is good quality' and 'high is bad quality'."
::= { 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
Error in packet
Reason: (noSuchName) There is no such variable name in this MIB.
Failed object: IEEE802dot11-MIB::dot11ACKFailureCount
# snmpget -v1 -c public 192.168.49.253 dot11ACKFailureCount.1
IEEE802dot11-MIB::dot11ACKFailureCount.1 = INTEGER: 3971912
還有在unix系統中,系統是大小寫敏感的,因此寫OID的時候注意大小寫不要寫錯。