当环境设置好后,运行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
-- FROMBVCOM-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信息无法获得.