NET-SNMP基本命令
當環境設置好後,運行snmpd,即snmp代理進程,就可使用管理工具查詢其中的信息了。Net- snmp提供的查詢工具備不少,這裏只介紹經常使用的幾個,並且大部分查詢命令的格式都大同小異。這裏以.iso.org.dod.internet.mgmt.mib-2.system爲例,其Oid爲:.1.3.6.1.2.1.1。結構以下:
………system .1.3.6.1.2.1.1
|——sysDescr .1.3.6.1.2.1.1.1
|——sysObjectID .1.3.6.1.2.1.1.2
|——sysUpTimeInstance .1.3.6.1.2.1.1.3
|——sysContact.0 .1.3.6.1.2.1.1.4
|——sysName.0 .1.3.6.1.2.1.1.5
|——sysLocation.0 .1.3.6.1.2.1.1.6
1) snmpwalk [APPLICATION OPTIONS] [COMMON OPTIONS] [OID] ...用來取得全部類識別代碼 (OID, Object Identifier),取得類爲從根類 (root) 開始的所有 MIB 類。
實例:
snmpwalk -v2c -c public localhost .1.3.6.1.2.1.1
-v2c: 使用的是2c的snmp版本,可選1|2c|3
-c public:community 名爲public
localhost: 代理的地址,這裏由於代理運行在本機上,因此可用localhost
.1.3.6.1.2.1.1:這裏查詢的是.iso.org.dod.internet.mgmt.mib-2.system,其Oid爲.1.3.6.1.2.1.1,
其Oid也可以使用名稱具體操做以下:
snmpwalk -v2c -c public localhost system
或:
snmpwalk -v2c -c public localhost .1.3.6.1.2.1.1
SNMPv2-MIB::sysDescr.0 = STRING: Linux ubuntu 2.6.27-7-generic #1 SMP Fri Oct 24 06:42:44 UTC 2008 i686
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (8137) 0:01:21.37
SNMPv2-MIB::sysContact.0 = STRING: Me <me@somewhere.org>
SNMPv2-MIB::sysName.0 = STRING: ubuntu
SNMPv2-MIB::sysLocation.0 = STRING: Right here, right now.
SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORID.1 = OID: SNMP-FRAMEWORK-MIB::snmpFrameworkMIBCompliance
SNMPv2-MIB::sysORID.2 = OID: SNMP-MPD-MIB::snmpMPDCompliance
SNMPv2-MIB::sysORID.3 = OID: SNMP-USER-BASED-SM-MIB::usmMIBCompliance
SNMPv2-MIB::sysORID.4 = OID: SNMPv2-MIB::snmpMIB
SNMPv2-MIB::sysORID.5 = OID: TCP-MIB::tcpMIB
SNMPv2-MIB::sysORID.6 = OID: IP-MIB::ip
SNMPv2-MIB::sysORID.7 = OID: UDP-MIB::udpMIB
SNMPv2-MIB::sysORID.8 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup
SNMPv2-MIB::sysORDescr.1 = STRING: The SNMP Management Architecture MIB.
SNMPv2-MIB::sysORDescr.2 = STRING: The MIB for Message Processing and Dispatching.
SNMPv2-MIB::sysORDescr.3 = STRING: The management information definitions for the SNMP User-based Security Model.
SNMPv2-MIB::sysORDescr.4 = STRING: The MIB module for SNMPv2 entities
SNMPv2-MIB::sysORDescr.5 = STRING: The MIB module for managing TCP implementations
SNMPv2-MIB::sysORDescr.6 = STRING: The MIB module for managing IP and ICMP implementations
SNMPv2-MIB::sysORDescr.7 = STRING: The MIB module for managing UDP implementations
SNMPv2-MIB::sysORDescr.8 = STRING: View-based Access Control Model for SNMP.
SNMPv2-MIB::sysORUpTime.1 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.2 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.3 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.4 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.5 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.6 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.7 = Timeticks: (0) 0:00:00.00
SNMPv2-MIB::sysORUpTime.8 = Timeticks: (0) 0:00:00.00
2)snmpget——snmpget [OPTIONS] AGENT OID [OID]...用來查詢葉子節點
實例:snmpget -v2c -c public localhost .1.3.6.1.2.1.1.5.0
-v2c: 使用的是2c的snmp版本,可選1|2c|3
-c public:community 名爲public
localhost: 代理的地址,這裏由於代理運行在本機上,因此可用localhost
.1.3…….0:這裏查詢的是.iso.org.dod.internet.mgmt.mib-2.system.sysName,其Oid爲.1.3.6.1.2.1.1.5,使用這個命令使葉子節點要在後面加.0。可後面查詢多個OID期間用空格分開
其Oid也可以使用名稱具體操做以下:
snmpget -v2c -c public localhost .1.3.6.1.2.1.1.5.0
返回信息以下:
SNMPv2-MIB::sysName.0 = STRING: ubuntu
snmpget -v2c -c public localhost sysName
SNMPv2-MIB::sysName.0 = STRING: ubuntu
如下爲一些具體使用實例:
使用snmpwalk來獲取sysDescr信息(Oid使用名稱)
snmpwalk -v2c -c public localhost sysDescr
SNMPv2-MIB::sysDescr.0 = STRING: Linux ubuntu 2.6.27-7-generic #1 SMP Fri Oct 24 06:42:44 UTC 2008 i686
(Oid使用編號)
snmpwalk -v2c -c public localhost .1.3.6.1.2.1.1.1
SNMPv2-MIB::sysDescr.0 = STRING: Linux ubuntu 2.6.27-7-generic #1 SMP Fri Oct 24 06:42:44 UTC 2008 i686
使用snmpget來獲取sysDescr信息時要在Oid後加上.0
snmpget -v2c -c public localhost .1.3.6.1.2.1.1.1.0
SNMPv2-MIB::sysDescr.0 = STRING: Linux ubuntu 2.6.27-7-generic #1 SMP Fri Oct 24 06:42:44 UTC 2008 i686
使用snmpwalk來獲取sysObjectID信息
snmpwalk -v2c -c public localhost .1.3.6.1.2.1.1.2
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
使用snmpget來獲取sysObjectID信息
snmpget -v2c -c public localhost .1.3.6.1.2.1.1.2.0
SNMPv2-MIB::sysObjectID.0 = OID: NET-SNMP-MIB::netSnmpAgentOIDs.10
snmpwalk -v2c -c public localhost sysContact
SNMPv2-MIB::sysContact.0 = STRING: Me <me@somewhere.org>
3) snmpgetnext.exe——snmpgetnext [OPTIONS] AGENT OID [OID]...經過父節點查詢葉子節點
實例:snmpgetnext -v2c -c public localhost .1.3.6.1.2.1.1
SNMPv2-MIB::sysDescr.0 = STRING: Linux ubuntu 2.6.27-7-generic #1 SMP Fri Oct 24 06:42:44 UTC 2008 i686
這個命令假設不知道葉子節點,但知道父節點,則可遍歷到第一個葉子節點。此例結果等同於
snmpget -v2c -c public localhost .1.3.6.1.2.1.1.1.0
Oid也可輸入.1.3.6.1.2,由於它是按字典順序遍歷的。
4) snmptable——snmptable [OPTIONS] AGENT TABLE-OID 用來查詢表對象
實例:
snmptable -v2c -c public localhost .1.3.6.1.2.1.4.20
這個命令查詢表對象,本例中查詢的是.iso.org.dod.internet.mgmt.mib-2.ip.ipAddrTable
顯示以下:
SNMP table: IP-MIB::ipAddrTable
ipAdEntAddr ipAdEntIfIndex ipAdEntNetMask ipAdEntBcastAddr ipAdEntReasmMaxSize
127.0.0.1 1 255.0.0.0 0 ?
192.168.1.249 2 255.255.255.0 1
使用snmpwalk再來查詢一下
snmpwalk -v2c -c public localhost .1.3.6.1.2.1.4.20
IP-MIB::ipAdEntAddr.127.0.0.1 = IpAddress: 127.0.0.1
IP-MIB::ipAdEntAddr.192.168.1.249 = IpAddress: 192.168.1.249
IP-MIB::ipAdEntIfIndex.127.0.0.1 = INTEGER: 1
IP-MIB::ipAdEntIfIndex.192.168.1.249 = INTEGER: 2
IP-MIB::ipAdEntNetMask.127.0.0.1 = IpAddress: 255.0.0.0
IP-MIB::ipAdEntNetMask.192.168.1.249 = IpAddress: 255.255.255.0
IP-MIB::ipAdEntBcastAddr.127.0.0.1 = INTEGER: 0
IP-MIB::ipAdEntBcastAddr.192.168.1.249 = INTEGER: 1
5)snmpset——snmpset [OPTIONS] AGENT OID TYPE VALUE [OID TYPE VALUE]...修改數據
實例:snmpset -v2c -c public localhost .1.3.6.1.2.1.4.21.1.3.x i 99
x:在這裏是索引值,表示表項中某一列的第幾個數據,根據要求設定
i: 這裏是列數據類型,包括i: INTEGER, u: unsigned INTEGER, t: TIMETICKS,a: IPADDRESS o: OBJID, s: STRING, x: HEX STRING,d: DECIMAL STRING, b: BITS U: unsigned int64,I: signed int64, F: float, D: double
如修改聯繫(sysContact)的地址
snmpset -v2c -c public localhost .1.3.6.1.2.1.1.4 s mute@hotmail.com
6)snmpdelta 一直監視SNMP變量中的變化 (未驗證)
linux:~ # snmpdelta -c public -v 1 -Cs -CT localhost IF-MIB:ifInUcastPkts.3 IF-MIB:ifOutcastPkts.3
localhost ifInUcastPkts.3 ifOutUcastPkts.3
[20:15:59 6/14] 184.00 184.00
[20:16:00 6/14] 158.00 158.00
[20:16:01 6/14] 184.00 184.00
[20:16:02 6/14] 184.00 184.00
[20:16:03 6/14] 158.00 158.00
[20:16:04 6/14] 184.00 184.00
[20:16:05 6/14] 184.00 184.00
[20:16:06 6/14] 158.00 158.00
7)snmpdf 經過SNMP監視遠程主機的磁盤空間
snmpdf -v 1 -c public localhost
Description size (kB) Used Available Used%
Physical memory 504412 498912 5500 98%
Virtual memory 1480964 591896 889068 39%
Memory buffers 504412 5064 499348 1%
Cached memory 80296 80296 0 100%
Swap space 976552 92984 883568 9%
/ 6728592 3985712 2742880 59%
/sys/fs/fuse/connections 0 0 0 0%
/host 20482840 8607920 11874920 42%
/boot 20482840 8607920 11874920 42%
/work 20763980 9236608 11527372 44%
/home/mutes/.gvfs 0 0 0 0%
7)snmptrap 生成一次trap告警
linux:~ # snmptrap -v 1 -c public manager enterprises.spider test-hub 3 0 '' interfaces.iftable.ifentry.ifindex.1 i 1
8)snmptranslate
snmptranslate 命令能夠在 MIB OID 在數字和文字名稱之間進行轉換
snmptranslate 命令的格式是 :
snmptranslate [options] OID [oid]
從上面的格式能夠看出,snmptranslate 一次能夠轉換多個 OID,snmptranslate 是一個將一個或者多個 SNMP OID 從文字名稱格式轉換爲數字格式的程序
[oid] 能夠是數字格式或者文字格式。
注意:snmptranslate 能夠直接將數字格式的 oid 轉換爲名稱格式, 但要把名稱格式的 oid 轉換爲數字格式的 oid ,須要 -I 選項的配合。(參考 snmpcmd 和最後部分的例子)
OPTIONS
-D TOKEN[,...]
Turn on debugging output for the given TOKEN(s). Try ALL for extremely verbose output.
-h
Display a brief usage message and then exit.
-m MIBLIST
指定一個MIB庫文件
Specifies a colon separated list of MIB modules to load for this application. This overrides the environment variable MIBS.
The special keyword ALL is used to specify all modules in all directories when searching for MIB files. Every file whose name does not begin with "." will be parsed as if it were a MIB file.
-M DIRLIST
指定一個MIB庫文件路徑
Specifies a colon separated list of directories to search for MIBs. This overrides the environment variable MIBDIRS.
-T TRANSOPTS
用於控制轉換的輸出
Provides control over the translation of the OID values. The following TRANSOPTS are available:
-Td
Print full details of the specified OID.
-Td 表示輸出該對象的詳細定義,也就是在 MIB 中的定義,包括文字名稱、所屬 MIB、類型、狀態、讀寫權限、描述信息,數字格式的 OID
snmptranslate -Td -IR bvcom
BVCOM-SYSTEMUPTIME-MIB::bvcom
bvcom OBJECT-TYPE
-- FROM
BVCOM-SYSTEMUPTIME-MIB
::= { iso(1) org(3) dod(6) internet(1) private(4) enterprises(1) 26814 }
-Tp
Print a graphical tree, rooted at the specified OID.
-Tp 用於打印從指定 OID 開始一直到該 OID 所屬的 MIB 子樹末端的樹型結構信息,該選項頗有用,若是要知道某個 MIB 或者某個表有什麼內容,能夠該選項
snmptranslate -Tp -IR system
+--system(1)
|
+-- -R-- String sysDescr(1)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- ObjID sysObjectID(2)
+-- -R-- TimeTicks sysUpTime(3)
| |
| +--sysUpTimeInstance(0)
|
+-- -RW- String sysContact(4)
| Textual Convention: DisplayString
| Size: 0..255
+-- -RW- String sysName(5)
| Textual Convention: DisplayString
| Size: 0..255
+-- -RW- String sysLocation(6)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- INTEGER sysServices(7)
| Range: 0..127
+-- -R-- TimeTicks sysORLastChange(8)
| Textual Convention: TimeStamp
|
+--sysORTable(9)
|
+--sysOREntry(1)
| Index: sysORIndex
|
+-- ---- INTEGER sysORIndex(1)
| Range: 1..2147483647
+-- -R-- ObjID sysORID(2)
+-- -R-- String sysORDescr(3)
| Textual Convention: DisplayString
| Size: 0..255
+-- -R-- TimeTicks sysORUpTime(4)
Textual Convention: TimeStamp
snmptranslate -Tp -IR sysDescr
+-- -R-- String sysDescr(1)
Textual Convention: DisplayString
Size: 0..255
-Ta
Dump the loaded MIB in a trivial form.
-Ta 表示導出全部已經加載的 MIB 的數據,每一個對象一行,默認狀況下是導出全部已經加載的對象。若是隻想導出某個 MIB ,可使用如 snmptranslate -Ta -M MTA-MIB 這樣就只導出 MTA-MIB 下的信息,該選項其實和 -Tp 很像,只不過 -Tp 是樹型結構的形式,而 -Ta 是一行一行的格式。並且 -Tp 後面能夠加 -m 或者某個 oid ,但 -Ta 後面加 <oid> 沒有用
例:
snmptranslate -Ta | head
dump DEFINITIONS ::= BEGIN
org OBJECT IDENTIFIER ::= { iso 3 }
dod OBJECT IDENTIFIER ::= { org 6 }
internet OBJECT IDENTIFIER ::= { dod 1 }
snmpV2 OBJECT IDENTIFIER ::= { internet 6 }
security OBJECT IDENTIFIER ::= { internet 5 }
private OBJECT IDENTIFIER ::= { internet 4 }
experimental OBJECT IDENTIFIER ::= { internet 3 }
mgmt OBJECT IDENTIFIER ::= { internet 2 }
directory OBJECT IDENTIFIER ::= { internet 1 }
-Tl
Dump a labeled form of all objects.
-Tl 導出全部已經加載的 MIB 的對象,而且輸出完整的 oid 路徑,也是頗有用的一個選項。和 -Ta 相比,-Ta 只輸出對象名,類型,值,而沒有 OID 。而 -Tl 則除了這些外,還輸出了完整的文字格式 OID 和 數字格式的 oid
snmptranslate -Tl -m BVCOM-SYSTEMUPTIME-MIB
.iso(1).org(3)
.iso(1).org(3).dod(6)
.iso(1).org(3).dod(6).internet(1)
.iso(1).org(3).dod(6).internet(1).directory(1)
.iso(1).org(3).dod(6).internet(1).mgmt(2)
.iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1)
.iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).transmission(10)
.iso(1).org(3).dod(6).internet(1).experimental(3)
.iso(1).org(3).dod(6).internet(1).private(4)
.iso(1).org(3).dod(6).internet(1).private(4).enterprises(1)
.iso(1).org(3).dod(6).internet(1).private(4).enterprises(1).bvcom(26814)
.iso(1).org(3).dod(6).internet(1).private(4).enterprises(1).bvcom(26814).ipq6800(6800)
.iso(1).org(3).dod(6).internet(1).private(4).enterprises(1).bvcom(26814).ipq6800(6800).bvcomAgentModules(1)
.iso(1).org(3).dod(6).internet(1).private(4).enterprises(1).bvcom(26814).ipq6800(6800).bvcomAgentModules(1).bvcomAgentModuleObject(1)
.iso(1).org(3).dod(6).internet(1).private(4).enterprises(1).bvcom(26814).ipq6800(6800).bvcomAgentModules(1).bvcomAgentSubagentObject(2)
.iso(1).org(3).dod(6).internet(1).private(4).enterprises(1).bvcom(26814).ipq6800(6800).bvcomAgentModules(1).bvcomAgentPluginObject(3)
.iso(1).org(3).dod(6).internet(1).security(5)
.iso(1).org(3).dod(6).internet(1).snmpV2(6)
.iso(1).org(3).dod(6).internet(1).snmpV2(6).snmpDomains(1)
.iso(1).org(3).dod(6).internet(1).snmpV2(6).snmpProxys(2)
.iso(1).org(3).dod(6).internet(1).snmpV2(6).snmpModules(3)
.ccitt(0).zeroDotZero(0)
-To
Dump a numeric form of all objects.
-To 則是導出已經加載的全部 MIB 的數字格式的 oid ,不含值和類型,僅僅有 oid 而已
例:
snmptranslate -To | head
.1.3
.1.3.6
.1.3.6.1
.1.3.6.1.1
.1.3.6.1.2
.1.3.6.1.2.1
.1.3.6.1.2.1.1
.1.3.6.1.2.1.1.1
.1.3.6.1.2.1.1.2
.1.3.6.1.2.1.1.3
snmptranslate -To -m BVCOM-SYSTEMUPTIME-MIB
.1.3
.1.3.6
.1.3.6.1
.1.3.6.1.1
.1.3.6.1.2
.1.3.6.1.2.1
.1.3.6.1.2.1.10
.1.3.6.1.3
.1.3.6.1.4
.1.3.6.1.4.1
.1.3.6.1.4.1.26814
.1.3.6.1.4.1.26814.6800
.1.3.6.1.4.1.26814.6800.1
.1.3.6.1.4.1.26814.6800.1.1
.1.3.6.1.4.1.26814.6800.1.2
.1.3.6.1.4.1.26814.6800.1.3
.1.3.6.1.5
.1.3.6.1.6
.1.3.6.1.6.1
.1.3.6.1.6.2
.1.3.6.1.6.3
.0.0
-Ts
Dump a symbolic form of all objects.
-Ts 和 -To 相反,只輸出文字格式的 OID 名稱而已,以上兩個選項,若是在只想知道某個 MIB 下有什麼內容,而不關心具體的值時比較有用
snmptranslate -Ts | head
.iso.org
.iso.org.dod
.iso.org.dod.internet
.iso.org.dod.internet.directory
.iso.org.dod.internet.mgmt
.iso.org.dod.internet.mgmt.mib-2
.iso.org.dod.internet.mgmt.mib-2.system
.iso.org.dod.internet.mgmt.mib-2.system.sysDescr
.iso.org.dod.internet.mgmt.mib-2.system.sysObjectID
.iso.org.dod.internet.mgmt.mib-2.system.sysUpTime
-Tt
Dump a tree form of the loaded MIBs (mostly useful for debugging).
-Tt 和 -Tp 比較像,但相比 -Tp 來講不夠清楚
snmptranslate -Tt | head
org(3) type=0
dod(6) type=0
internet(1) type=0
directory(1) type=0
mgmt(2) type=0
mib-2(1) type=0
system(1) type=0
sysDescr(1) type=2 tc=4 hint=255a
sysObjectID(2) type=1
sysUpTime(3) type=8
-Tz
Dump a numeric and labeled form of all objects (compatible with MIB2SCHEMA format).
-Tz 同時導出已經加載的 MIB 的全部對象的文字格式和數字格式的 OID,這也是一個比較有用的選項。
snmptranslate -Tz
...........
"snmpCommunityMIBConformance"
"1.3.6.1.6.3.18.2"
"snmpCommunityMIBCompliances"
"1.3.6.1.6.3.18.2.1"
"snmpCommunityMIBCompliance"
"1.3.6.1.6.3.18.2.1.1"
"snmpProxyTrapForwardCompliance"
"1.3.6.1.6.3.18.2.1.2"
"snmpCommunityMIBGroups"
"1.3.6.1.6.3.18.2.2"
"snmpCommunityGroup"
"1.3.6.1.6.3.18.2.2.1"
"snmpProxyTrapForwardGroup"
"1.3.6.1.6.3.18.2.2.3"
"snmpv2tm"
"1.3.6.1.6.3.19"
snmptranslate -Tz -m BVCOM-SYSTEMUPTIME-MIB
"org"
"1.3"
"dod"
"1.3.6"
"internet"
"1.3.6.1"
"directory"
"1.3.6.1.1"
"mgmt"
"1.3.6.1.2"
"mib-2"
"1.3.6.1.2.1"
"transmission"
"1.3.6.1.2.1.10"
"experimental"
"1.3.6.1.3"
"private"
"1.3.6.1.4"
"enterprises"
"1.3.6.1.4.1"
"bvcom"
"1.3.6.1.4.1.26814"
"ipq6800"
"1.3.6.1.4.1.26814.6800"
"bvcomAgentModules"
"1.3.6.1.4.1.26814.6800.1"
"bvcomAgentModuleObject"
"1.3.6.1.4.1.26814.6800.1.1"
"bvcomAgentSubagentObject"
"1.3.6.1.4.1.26814.6800.1.2"
"bvcomAgentPluginObject"
"1.3.6.1.4.1.26814.6800.1.3"
"ExampleTable"
"1.3.6.1.4.1.26814.6800.1.4"
"ExampleEntry"
"1.3.6.1.4.1.26814.6800.1.4.1"
"UserIndex"
"1.3.6.1.4.1.26814.6800.1.4.1.1"
"UserStatus"
"1.3.6.1.4.1.26814.6800.1.4.1.2"
"CheckTime"
"1.3.6.1.4.1.26814.6800.1.4.1.3"
"MonSet"
"1.3.6.1.4.1.26814.6800.1.4.1.4"
"security"
"1.3.6.1.5"
"snmpV2"
"1.3.6.1.6"
"snmpDomains"
"1.3.6.1.6.1"
"snmpProxys"
"1.3.6.1.6.2"
"snmpModules"
"1.3.6.1.6.3"
"zeroDotZero"
"0.0"
-V
Display version information for the application and then exit.
-V 選項顯示版本信息並退出
-w WIDTH
Specifies the width of -Tp and -Td output. The default is very large.
-w 限制 -Tp 和 -Td 輸出的最大寬度
--------------------------------------------------------------------------------
In addition to the above options, snmptranslate takes the OID input (-I), MIB parsing (-M) and OID output (-O) options described in the INPUT OPTIONS, MIB PARSING OPTIONS and OUTPUT OPTIONS sections of the snmpcmd(1) manual page.
--------------------------------------------------------------------------------
EXAMPLES
snmptranslate -On -IR system
.1.3.6.1.2.1.1
snmptranslate -Onf -IR system
.iso.org.dod.internet.mgmt.mib-2.system
若是要使 snmptranslate 把 symbol 格式的oid 轉換爲 numberic 格式的 oid ,須要使用 -IR 和 -On
-IR 容許「隨機」訪問 MIB ,由 snmp 從 mib 庫中查找和所給出的對象名匹配的 oid ,因此上面的例子能夠直接寫 system ,而不用寫全路徑
-On 是輸出數字格式的 oid ,這樣就實現了把 symbol 格式的 oid 轉換爲 numberic 格式的 oid
若是隻是想找出 system 的 symbol 格式的 oid ,用 -Of
SnmpTrap工具的用法
SNMPTRAP
名稱
snmptrap, snmpinform - 向網管發送一個SNMP trap
大綱
snmptrap -v 1 [-Ci] [common arguments] enterprise-oid agent generic-trap specific-trap uptime [objectID type value]...
例子:
T1LossOfSignal
snmptrap -v 1/ @這說明是初版, -v 後面的參數是版本號
-d / @這說明是否轉存輸入/輸出包
-p 163 / @-p後面的參數是端口號, 默認端口號是162
10.1.0.9 / @這是Server的Hostname
1.3.6.1.4.1.9.9.44.3 / @這是Enterprise-OID
10.1.0.8 / @這是Agent的Hostname
6 / @這是Generic-Trap, 普通類型的Trap
1 / @指定類型的Trap
100/ @Uptime, 彷佛沒什麼大用
1.3.6.1.9.9.44.1.2.2.1 / @這是Variable Name OID, 參數的OID
i 1 / @i 1 none; i 2 log; i 3 snmptrap; i 4 logsnmptrap
snmptrap -v [2c|3] [-Ci] [common arguments] uptime trap-oid [objectID type value]...
snmpinform -v [2c|3] [common arguments] uptime trap-oid [objectID type value]...
描述
Snmptrap是個SNMP應用程序, 借用TRAP請求給網管發送信息. 能夠有一個或多個正常的對象ID來做爲其命令行的參數. 每一個對象ID後面都必須跟有類型和值. 每一個變量名亦必須按照指定格式來寫.
當被做爲snmpinform激起, 或命令行中添加了 -Ci 項, 它會發送一個 INFORM-PDU, 並期待Trap Receiver給予一個響應, 若是有須要的話還能夠轉播. 不然它發送 TRAP-PDU 或是 TRAP2-PDU.
若是須要一些參數置空, 那麼默認參數將分別會是 1.3.6.1.4.1.3.1.1 (enterprises.cmu.1.1), hostname, 和host-uptime .
類型是個單字符, 是下列之一:
i 整形 u 無符號型 c COUNTER32 s 字符串
x 16進制字符串 d 10進制字符串 n 空對象 o 對象ID
t 計時器 a IP地址 b 比特
再例:
snmptrap -v 1 manager public enterprises.spider test-hub 3 0 '' interfaces.iftable.ifentry.ifindex.1 i 1
其會向網管發送一個link-up trap to manager, 端口號1.
Generic Type包括7種, 分別是:
0 coldStart 1 warmStart 2 linkDown 3 linkUp
4 authenticationFailure 5 egpNeighborLoss 6 enterpriseSpecific
case '=':
case 'i':
case 'u':
case 't':
case 'a':
case 'o':
case 's':
case 'x':
case 'd':
case 'b':
#ifdef NETSNMP_WITH_OPAQUE_SPECIAL_TYPES
case 'I':
case 'U':
case 'F':
case 'D':
snmptrap -v 1 [-Ci] [common arguments] enterprise-oid agent generic-trap specific-trap uptime [objectID type value]...
snmptrap -v 1 -c public 127.0.0.1:162 TRAP-TEST-MIB::demotraps 127.0.0.1 2 0 "" IF-MIB::ifIndex i 1
snmptrap -v [2c|3] [-Ci] [common arguments] uptime trap-oid [objectID type value]...
snmptrap -v 2c -c public 127.0.0.1:162 "" NOTIFICATION-TEST-MIB::demo-notif SNMPv2-MIB::sysLocation.0 s "just here"
關於ucd-snmp軟件包
ucd-snmp介紹
ucd-snmp源自於卡耐基.梅隆大學的SNMP軟件包 CMU snmp 2.1.2.1, 由加州大學Davis分校(University of Califonia at Davis)開發與維護, 因此命名爲ucd-snmp. 2000年11月ucd-snmp項目轉到由SourceForge(www.sourceforge.net)管理, 並改名爲net-snmp. ucd-snmp 4.2 是以ucd-snmp命名的最後的一個主要版本. 也就是說, 之後發佈的 ucd-snmp 4.2.x僅僅修改軟件包中的Bugs; 而大的修改版本將以net-snmp命名, 併發布爲5.x. ucd-snmp 4.2.1是最新的發佈版本, 於2001年4月4日發佈.
ucd-snmp 4.2.1軟件包由以下內容組成:
¨ 一個可擴展的SNMP代理程序(snmpd);
¨ 一個SNMP代理和管理程序開發庫;
¨ 幾個用於請求或設置SNMP代理變量的工具程序(snmpget, snmpset, snmptable, snmpwalk等);
¨ 幾個用於生成或處理SNMP陷阱(trap)的工具程序(snmptrapd和snmptrap);
¨ 一個標準Unix命令netstat的SNMP版本(snmpnetstat);
¨ 一個基於Tk/perl的MIB瀏覽器(tkmib)
ucd-snmp 4.2.1的文檔:
¨ REAME系列
¨ FAQ
¨ INSTALL
¨ PORTING
¨ 關於工具程序, 配置文件, 和API的man手冊
¨ 一份關於如何擴展代理程序的指南(AGENT.txt)
¨ 位於 http://net-snmp.sourceforge.net/tutorial 的一份入門手冊
注意: 建議的閱讀順序, REAME----->;INSTALL------>;Tutorial. 在嘗試Tutorial中的例程時, 遇到問題, 參見FAQ; 再根據FAQ指引, 參見相應的文檔. (這是我熟悉這個軟件包的過程. :-) ) 另外, 在軟件包中有一個工具程序, FAQ2HTML, 能夠將FAQ轉換成HTML格式,便於瀏覽或查找.
ucd-snmp的維護網址: http://net-snmp.sourceforge.net. 在此網站上能夠下載各個版本和各類形式的ucd-snmp軟件包, 還有關於如何使用, 如何擴展開發等的相關文檔. 如何訂閱相關的郵件列表, 能夠參見FAQ中的相關內容.
ucd-snmp 4.2.1支持的操做系統(包括應用程序和代理程序, 至少部分支持):
¨ HP-UX (10.20 to 9.01)
¨ Ultrix (4.5 to 4.2)
¨ Solaris (2.8 to 2.3) and SunOS (4.1.4 to 4.1.2)
¨ OSF (4.0, 3.2)
¨ NetBSD (1.5alpha to 1.0)
¨ FreeBSD (4.1 to 2.2)
¨ BSDi (4.0.1 to 2.1)
¨ Linux (kernels 2.2 to 1.3)
¨ AIX (4.1.5, 3.2.5)
¨ OpenBSD (2.8, 2.6)
¨ Irix (6.5 to 5.1)
注意: 某些系統不支持某些功能模塊,具體狀況及處理方法,參見FAQ文檔.
ucd-snmp 4.2.1也能夠運行於win32平臺, 具體狀況參見README.win32文檔.
ucd-snmp 4.2.1 支持以下SNMP協議版本:
¨ SNMPv1 (RFCs 1155-1157)
¨ SNMPv2c (RFCs 1901-1908)
¨ SNMPv3 (RFCs 2271-2275)
瞭解SNMP協議以及不一樣版本之間的區別, 能夠閱讀這些RFC文檔和FAQ. RFC文檔能夠從以下網頁檢索並下載, http://www.nexor.com/index-rfc.htm
關於ucd-snmp 4.2.1的安裝, 主要參見INSTALL文檔. 須要注意的是, 必須還安裝SNMP perl擴展模塊. 由於有些工具程序是perl腳本文件, 須要這個擴展模塊的支持, 如mib2c, snmpconf, FAQ2HTML等. 而tkmib工具須要Tk.pm 模塊支持. 在軟件包中自帶 SNMP perl模塊, 而沒有Tk.pm. 能夠到以下網站下載, www.cpan.org (關於這個網站的說明是, 幾乎涵蓋了全部的 perl 模塊).
咱們定義的MIB模塊是如此的簡單,咱們只須要在mib2c生成的代碼上做黑體標識的修改便可. 下面就三種擴展snmpd的方法展開討論.
snmpd擴展方法一: 靜態連接形式
先將生成的兩個文件, ustScalarSet.h和ustScalarSet.c, 拷貝到下載的ucd-snmp源代碼目錄下agent/mibgroup子目錄中. 例如在個人機器上, ucd-snmp 4.2.1的源代碼在/usr/local/src/ucd-snmp-4.2.1中, 相應的拷貝的目標目錄爲, /usr/local/src/ucd-snmp-4.2.1/agent/mibgroup.
在ucd-snmp 4.2.1的主目錄中(個人機器爲/usr/local/src/ucd-snmp-4.2.1), 按以下序列執行命令
# ./configure -with-mib-modules="ustScalarSet"
# make
# make install
這樣, 新的代理程序生成並安裝. 運行SNMP代理程序
# /usr/local/sbin/snmpd
在用相應的工具程序檢索新加入的MIB變量. 能夠用以下任何命令:
% /usr/local/bin/snmpget localhost public UCD-SNMP-TUTORIAL-MIB::ustSSSimpleString.0
% /usr/local/bin/snmpwalk localhost public UCD-SNMP-TUTORIAL-MIB::ustScalarSet
snmpd擴展方法二: 共享連接庫形式
首先, 在任一目錄下編譯生成共享連接庫. 假定目錄爲/usr/local/temp. 將兩個源文件, ustScalarSet.h和ustScalarSet.c拷貝到此目錄下. 按以下命令序列生成共享連接庫:
gcc -g -I/usr/local/include -c -o ustScalarSet.o ustScalarSet.c
gcc -g -fPIC -shared -o ustScalarSet.so ustScalarSet.o
有兩種方法在代理程序中動態加載共享連接庫. 第一種適合於代理程序已運行的狀況, 按以下命令序列執行:
# snmpset localhost hyj UCD-DLMOD-MIB::dlmodStatus.1 i create
# snmpset localhost hyj UCD-DLMOD-MIB::dlmodName.1 s "ustScalarSet"
# snmpset localhost hyj UCD-DLMOD-MIB::dlmodPath.1 s "/usr/local/temp/ustScalarSet.so"
# snmpset localhost hyj UCD-DLMOD-MIB::dlmodStatus.1 i load
便可裝載.這時能夠用工具程序檢索或設置相應的變量. 這裏須要注意的是工具snmpset的用法. 代理snmpd的確省配置, 不支持任何用戶設置變量. 咱們能夠經過配置文件snmpd.conf中的訪問控制部分進行配置. 我在個人snmpd.conf文件中加入了以下兩行:
rwcommunity hyj
rocommunity public
設置了一個讀寫community, hyj和一個只讀community, public. 配置文件確省位於/usr/local/share/snmp目錄下.
第二種, 直接在snmpd.conf中加入一行:
dlmod ustScalarSet /usr/local/temp/ustScalarSet.so
從新啓動snmpd代理, 代理自動裝載共享庫.
關於代理程序以及工具程序相應的配置狀況, 參見snmp.conf, snmpd.conf, 和snmpconf的man手冊.
snmpd擴展方法三: AgentX子代理協議
首先, 編寫一個子代理主函數文件, ustMain.c. 以下:
1) #include <ucd-snmp/ucd-snmp-config.h>;
2) #include <ucd-snmp/ucd-snmp-includes.h>;
3) #include <ucd-snmp/ucd-snmp-agent-includes.h>;
4) int main () {
5) int agentx_subagent=1;
6) snmp_enable_stderrlog();
7) if (agentx_subagent) {
8) ds_set_boolean(DS_APPLICATION_ID, DS_AGENT_ROLE, 1);
9) }
10) init_agent("ustMain");
11) init_ustScalarSet();
12) init_snmp("ustMain");
13) if (!agentx_subagent)
14) init_master_agent(161, NULL, NULL);
15) while(1) {
16) agent_check_and_process(1);
17) }
18) snmp_shutdown("ustMain");
19) }
第1-3行, 必須包含的頭文件.
第5行, 定義一個變量, 表示該代理是主代理或子代理. 經過ucd-snmp開發包編寫的代理程序, 既能夠做爲AgentX主代理, 也能夠做爲AgentX子代理. 下面部分, 咱們將嘗試寫一個主代理程序, 如snmpd同樣.
第7-9行, 子代理須要初始化的內容.
第10行, 初始化代理.
第11行, 初始化支持的MIB. 文件ustScalarSet.c中的函數.
第12行, 初始化SNMP.
第13-14行, 主代理須要初始化的內容.
第15-17行, SNMP協議PDU處理主循環.
第18行, 關閉SNMP, 作一些釋放資源的工做.
按以下命令進行編譯:
gcc -g -I/usr/local/include -o ustMain ustMain.c ustScalarSet.c -lucdagent -lucdmibs -lsnmp
生成子代理程序, ustMain.
在snmpd.config配置文件中加入一行:
master agentx
以支持AgentX子代理. 並從新啓動snmpd.
而後啓動 ustMain.
運行相應的工具程序, 測試是否能夠訪問新加入的MIB信息.
一個簡單的SNMP代理程序
實際上, 咱們能夠利用ucd-snmp編寫本身的SNMP代理程序. 以下文件, hsnmpd.c, 所示. 其實, 這個文件與上一個子代理程序徹底相同. 我僅僅是將變量agentx_subagent賦成0.
代碼以下.
hsnmpd.c :
1) #include <ucd-snmp/ucd-snmp-config.h>;
2) #include <ucd-snmp/ucd-snmp-includes.h>;
3) #include <ucd-snmp/ucd-snmp-agent-includes.h>;
4) int main () {
5) int agentx_subagent=0;
6) if (agentx_subagent) {
7) ds_set_boolean(DS_APPLICATION_ID, DS_AGENT_ROLE, 1);
8) }
9) init_agent("snmpd");
10) init_ustScalarSet();
11) init_snmp("snmpd");
12) if (!agentx_subagent)
13) init_master_agent(161, NULL, NULL);
14) while(1) {
15) agent_check_and_process(1);
16) }
17) snmp_shutdown("snmpd");
18) }
以下編譯:
gcc -g -I/usr/local/include -o hsnmpd hsnmpd.c ustScalarSet.c /usr/local/lib/libucdagent.a /usr/local/lib/libucdmibs.a /usr/local/lib/libsnmp.a
運行該程序, hsnmpd. 除了一些關於沒法解釋配置文件的相關內容的報警外, 程序運行正常. 而且, 能夠用工具程序, 如snmpget, snmpwalk等訪問其中的MIB信息. 固然, 僅僅只有UCD-SNMP-TUTORIAL-MIB中所描述的信息, 而其餘的沒有實現的MIB信息沒法得到.
歡迎關注本站公眾號,獲取更多信息