NET-SNMP安装:
- 解压
将下载的源码放在你的工作目录下,运行解压命令:
(可以使用WinSCP软件访问linux系统目录进行文件拷贝操作)
- Tar –xvf net-snmp-5.7.3.tar.gz
- cd net-snmp-5.7.3
- 配置
- cd net-snmp-5.7.3
- ./configure
运行之后会问你一些问题如邮箱、位置、日志等,可以直接按回车选择默认即可
- 编译和安装
执行make命令进行编译:
- make
执行make install命令进行安装:
- make install
安装过程无报错
可以使用下面的命令去验证你是否成功安装了Net-SNMP,如果你可以获取到正确的版本号,说明你已经成功安装了Net-SNMP
- snmpget –version
NET-SNMP version:5.7.3
至此就安装完成了。
使用第三方MIB文件
net-snmp 工具可以使用 MIB 描述文件将数字对象标识 (OID) 转换为文本对象标识符。 net-snmp 工具包提供了一些标准 MIB,但肯定不包含第三方厂商MIB。
查看MIB加载路径:
首先,应该了解工具加载 MIB 的路径。 默认情况下,它从以下目录列表中加载内容:
$HOME/.snmp/mibs
/usr/local/share/snmp/mibs
请注意,许多版本会更改默认路径。 要找出自己系统上使用了哪些目录,以下命令查看:(如果不起作用,是因为你的net-snmp版本没有打包 net-snmp-config)
net-snmp-config --default-mibdirs
放入MIB库文件:
假如你有一个名为 PPP-MIB的 MIB,您想对其进行解析。现在,选择一个你要翻译但当前不能翻译的节点。 从PPP-MIB中,我会选择节点pppPc举例。
首先,证实一下 snmptranslate 命令还不能翻译这个节点:
snmptranslate -IR -On pppPc
Unknown object identifier: pppPc
- linux下修改MIB文件后缀为.TXT类型
可以在linux下进入mib对应目录,使用命令:
rename .mib .txt *
重命名文件后缀为.mib的为.txt格式。
- 使用工具Win.SCP将MIB库文件放到linux文件系统中。
下载PPP-MIB文件并将其放置在我们 snmp 工具的mibs目录中。我将该文件放置在/usr/local/share/snmp/mibs中。(可将MIB文件后缀自行修改)
如何使MIB长期加载使用:
- 找到或创建snmp.conf文件。
该文件可以放置在系统范围的配置位置(/usr/local/share/snmp.conf)或个人文件($HOME/.snmp/snmp.conf)中。 配置文件位置取决于 Net-SNMP 在你的系统上创建的位置。 运行 net-snmp-config --snmpconfpath 显示路径列表。(MIB就是MIB的名称)
- 编辑配置文件。
将以下命令放在 snmp.conf 文件中,格式为mibs +MIB名称。(MIB名称在MIB文件中已经定义好了,见如何查看MIB模块名。)
如果没有此文件,创建一个并进行编辑 vi /usr/local/share/snmp/snmp.conf
mibdirs /usr/share/snmp/mibs:/usr/local/share/snmp/mibs
(这里是放mib文件的路径,冒号隔开可以添加多个路径)
然后在设备上执行以下命令来指定加载snmp.conf中添加的MIB就行了
echo "mibs +ALL" >> /usr/local/share/snmp/snmp.conf
在使用相关功能时,会出现一些非功能性错误信息,可以使用日志重定向。
%alias snmptranslate=’snmptranslate –Lf /tmp/tran’
%alias snmpget=’snmpget –Lf /tmp/tran’
%alias snmpset=’snmpset –Lf /tmp/tran’
不一一列举
如何查看MIB模块名称:
以下是MIB文件中部分信息。蓝色字段即为MIB名称,很明显的标志是,后面带有::=BEGIN字段
UCD-TRAP-TEST-MIB DEFINITIONS ::= BEGIN
IMPORTS ucdExperimental FROM UCD-SNMP-MIB;
Snmptranslate使用
SNMP 协议倾向于使用数字 OID 和原始值。 MIB 文件的主要作用之一是将它们转换为更有意义的文本名称和合理格式化的值。
虽然大多数 Net-SNMP 命令行应用程序可以控制 SNMP 查询结果的显示方式,但有一种工具 (snmptranslate) 可以独立使用,仅显示从 MIB 文件本身提取的信息。
OID转换
- OID转对象名
snmptranslate 将数字 OID 翻译显示成对应的 MIB 名称:
% snmptranslate .1.3.6.1.2.1.1.5.0
SNMPv2-MIB::sysName.0
- 对象名转OID
它还可以执行反向翻译,获取文本 MIB 名称并显示数字 OID。 使用 -On 标志:
% snmptranslate -On SNMPv2-MIB::sysName.0
.1.3.6.1.2.1.1.5.0
使用 -Of 标志显示 MIB 子标识符名称的完整列表:
% snmptranslate -Of SNMPv2-MIB::sysName.0
.iso.org.dod.internet.mgmt.mib-2.system.sysName.0
注意,这些标志决定了 OID 应该如何显示,而不管它最初是如何指定的,我们可以结合OID和节点对象将其转换
% snmptranslate .iso.3.6.1.private.enterprises.2021.2.1.prNames.0
NET-SNMP-MIB::prNames.0
% snmptranslate -On .iso.3.6.1.private.enterprises.2021.2.1.prNames.0
.1.3.6.1.4.1.2021.2.1.2.0
% snmptranslate -Of .iso.3.6.1.private.enterprises.2021.2.1.prNames.0
.iso.org.dod.internet.private.enterprises.ucdavis.procTable.prEntry.prNames.0
指定MIB对象转换
上面的示例通过提供 MIB 子标识符(数字、文本或混合)的完整列表,或通过指定包含所需 MIB 对象的相关 MIB 模块来标识特定对象。 然而,MIB 对象在 IETF 标准 MIB 中保证是唯一的(并且很少在供应商提供的 MIB 中重复)。 因此,通常只需给出裸 MIB 对象名称即可,无需进一步限定。 Snmptranslate 使用 -IR 标志来执行此“随机访问”查找:
% snmptranslate sysName
sysName: Unknown Object Identifier (Sub-id not found: (top) -> sysName)
% snmptranslate -IR sysName
SNMPv2-MIB::sysName
(其他命令默认执行此操作 - 只有 snmptranslate 需要显式打开它)。
甚至可以提供正则表达式模式,并让 snmptranslate(或其他命令行工具)进行“最佳匹配”搜索以找到合适的 MIB 对象。 使用 -Ib 标志:
% snmptranslate -Ib 'sysU.*ime'
SNMPv2-MIB::sysUpTime
% snmptranslate -Ib 'sys.*ime'
SNMPv2-MIB::sysORUpTime
这些方法存在选择错误 MIB 对象的风险。 使用最开始的方式是最好的。
要获取与给定模式匹配的所有节点的列表,使用 -TB 标志:
% snmptranslate -TB 'sys.*ime'
SNMPv2-MIB::sysORUpTime
SNMPv2-MIB::sysUpTime
HOST-RESOURCES-MIB::hrSystemUptime
查看树信息
要获取有关特定 MIB 节点的扩展信息,请使用 -Td 标志显示 MIB 文件中的完整描述:
% snmptranslate -On -Td SNMPv2-MIB::sysUpTime
.1.3.6.1.2.1.1.3
sysUpTime OBJECT-TYPE
-- FROM SNMPv2-MIB, RFC1213-MIB
SYNTAX TimeTicks
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The time (in hundredths of a second) since the
network management portion of the system was last
re-initialized."
::= { iso(1) org(3) dod(6) internet(1) mgmt(2) mib-2(1) system(1) 3 }
这可以与前面描述的其他标志结合使用:
% snmptranslate -On -Td -IR sysUpTime
% snmptranslate -On -Td -Ib 'sys.*ime'
给出相同的结果。
最后,可以使用 -Tp 标志显示 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
这显示了指定子树中每个 MIB 对象的可访问性(只读或读写)、语法、名称和子标识符,以及这些 MIB 对象的内部结构。
运行不带 OID 参数的 snmptranslate -Tp 将完整显示已知 MIB 树的信息。 (谨慎使用)
Snmpget使用
SNMP-GET概要
此类请求包含三个主要元素 - 从何处检索此信息、与请求关联的管理信息以及实际需要哪些信息:
% snmpget -v 2c -c test 130.255.112.180 SNMPv2-MIB::sysName.0
SNMPv2-MIB::sysName.0 = STRING: IP017_NSS6600_8180_VST
在此示例中,130.255.112.180是要查询的代理的主机名,使用 SNMP 协议的第 2 版(-v2c)和社区字符串“test”(即community)。请求的 OID 是来自 MIB 模块SNMPv2-MIB 的sysName.0
相同的基本命令也可用于从表中检索单个元素:
% snmpget -v 2c -c test 130.255.112.180 IF-MIB::ifIndex.183
IF-MIB::ifIndex.183 = INTEGER: 183
该snmptranslate教程中介绍的几个方法来指定OID,和大多数讨论也适用于此(以及大多数其他的Net-SNMP命令行工具)。一个显著的区别是snmpget (和大多数其他工具)默认会应用“随机查找”,因此没有必要指定 MIB 的名称。上面的两个命令同样可以表示为:
% snmpget -v 2c -c test 130.255.112.180 ifIndex.183
IF-MIB::ifIndex.183 = INTEGER: 183
SNMP -GET各版本示例
最初的 SNMPv1 和后来的 SNMPv2c 都使用明文“社区字符串”作为事实上的密码,以指示是否应授权特定请求。示例的 SNMPv1 与V2几乎相同:
% snmpget -v 1 -c test 130.255.112.180 sysName.0
SNMPv2-MIB::sysName.0 = STRING: IP017_NSS6600_8180_VST
% snmpget -v 2c -c test 130.255.112.180 sysName.0
SNMPv2-MIB::sysName.0 = STRING: IP017_NSS6600_8180_VST
SNMPv3 使用明显不同的身份验证机制,通常基于用户名和密码,并允许正确验证 SNMP 请求,甚至加密管理客户端和 SNMP 代理之间的流量。
下面使用snmpV3通过OID获取设备sysName.0(IPV4和IPV6方式)
% snmpget -v3 -l authPriv -u test -a MD5 -A test1234 -x DES -X test1234 130.255.112.180 1.3.6.1.2.1.1.5.0
SNMPv2-MIB::sysName.0 = STRING: IP017_NSS6600_8180_VST
snmpget -v3 -l authPriv -u test -a MD5 -A test1234 -x DES -X test1234 [2001::130:255:112:180] 1.3.6.1.2.1.1.5.0
常见错误
上面的例子显示了从目标系统成功检索信息。但是不成功的请求呢?SNMP 如何处理失败的请求?
使用snmpget命令时的一个常见错误是忘记所请求数据的索引(或“实例子标识符”)。从表中检索值时,这种情况不太可能发生,因为在表中很自然地将索引作为 OID 的一部分包含在内。但是对于标量对象,只有一个值,因此似乎没有必要指定索引 - 当然仅 MIB 对象名称就足够了。
然而,SNMP 在要求所有MIB 对象(甚至是标量对象)的实例方面是一致的。在这种情况下,实例子标识符始终是一个简单的.0(零),如上面的第一个示例所示。
省略这会导致错误:
% snmpget -v 1 -c test 130.255.112.180 sysName
Error in packet
Reason: (noSuchName) There is no such variable name in this MIB.
Failed object: SNMPv2-MIB::sysName
请注意,SNMPv2c 提供了一条信息量稍大的消息:
% snmpget -v 2c -c test 130.255.112.180 sysName
SNMPv2-MIB::sysName = No Such Instance currently exists at this OID
另一个可能的失败原因是代理根本不支持请求的 MIB 对象。对于 SNMPv1,(“ noSuchName ”)这个错误。SNMPv2c 对这种情况使用了稍微不同的指示:
% snmpget -v 2c -c test 130.255.112.180 .1.3.6.1.2.1.1.99.0
SNMPv2-MIB::system.99.0 = No Such Object available on this agent at this OID
指定获取多个节点信息
到目前为止,所有示例都使用单个值。但是snmpget也可以在单个请求中检索多个 MIB 值:
% snmpget -v 2c -c test 130.255.112.180 sysContact.0 sysName.0
SNMPv2-MIB::sysContact.0 = STRING: Maipu Communication Technology Co.,Ltd.
SNMPv2-MIB::sysName.0 = STRING: IP017_NSS6600_8180_VST
Snmpwalk使用
SNMP-WALK示例
- 指定父节点遍历:
该命令采用单个 OID,并将显示位于以该 OID 为根的子树中的所有结果的列表:
(可使用-r设置超时重试次数,-t设置超时时间,-Cc对OID不进行递增检测。)
% snmpwalk -v 2c -c test –Cc 130.255.112.180 system
SNMPv2-MIB::sysDescr.0 = STRING: MyPower (R) Operating System Software, NSS6600 version 9.8.0(140)(integrity), compiled on Dec 31 2021, 04:51:30 Copyright (C) 2021 Maipu Communication Technology Co.,Ltd.All Rights Reserved.
SNMPv2-MIB::sysObjectID.0 = OID: SMI::mpSwitch.406
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2880438104) 333 days, 9:13:01.04
SNMPv2-MIB::sysContact.0 = STRING: Maipu Communication Technology Co.,Ltd
SNMPv2-MIB::sysName.0 = STRING: IP017_NSS6600_8180_VST
SNMPv2-MIB::sysLocation.0 = STRING: ChengDu.MaiPu
SNMPv2-MIB::sysServices.0 = INTEGER: 4
- 指定OID遍历:
% snmpwalk -v 2c -c test –Cc 130.255.112.180 1.3.6.1.2.1.1[M1]
SNMPv2-MIB::sysDescr.0 = STRING: MyPower (R) Operating System Software, NSS6600 version 9.8.0(140)(integrity), compiled on Dec 31 2021, 04:51:30 Copyright (C) 2021 Maipu Communication Technology Co.,Ltd.All Rights Reserved.
SNMPv2-MIB::sysObjectID.0 = OID: SMI::mpSwitch.406
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2880438104) 333 days, 9:13:01.04
SNMPv2-MIB::sysContact.0 = STRING: Maipu Communication Technology Co.,Ltd
SNMPv2-MIB::sysName.0 = STRING: IP017_NSS6600_8180_VST
SNMPv2-MIB::sysLocation.0 = STRING: ChengDu.MaiPu
SNMPv2-MIB::sysServices.0 = INTEGER: 4
它也可以与单个 MIB(标量)对象一起使用,甚至是一个精确的实例 OID - 返回相应的值:
% snmpwalk -v 2c -c test 130.255.112.180 sysLocation
SNMPv2-MIB::sysLocation.0 = STRING: ChengDu.MaiPu
% snmpwalk -v 2c -c test 130.255.112.180 sysLocation.0
SNMPv2-MIB::sysLocation.0 = STRING: ChengDu.MaiPu
相反,也可以在更高级别开始步行,检索多于一组的信息。
% snmpwalk -v 2c -c test 130.255.112.180 .iso
通常会检索代理已知的所有信息。(这里省略了输出!)
Walk遍历表节点
上面的第一个示例同时包含标量和表实例。 通过将列对象指定为起点,Snmpwalk还可用于检索表的单个列。
% snmpwalk -v 2c -c test 130.255.112.180 mpSysMpuindex
SYS-MIB::mpSysMpuIndex.33 = INTEGER: 33
SYS-MIB::mpSysMpuIndex.34 = INTEGER: 34
SYS-MIB::mpSysMpuIndex.65569 = INTEGER: 65569
请注意,在检索完整表时(单独或作为更广泛遍历的一部分),将显示一列的所有值,然后再移至下一列。这可以在上面走系统组的输出中看到。
Walk遍历一颗空树
如果代理在指定的 OID 下没有任何 MIB 对象,则snmpwalk命令会返回相关报错。
% snmpwalk -v 1 -c test 130.255.112.180 ifXTables
ifXTables: Unknown Object Identifier (Sub-id not found: (top) -> ifXTables)
% snmpwalk -v 2c -c test 130.255.112.180 ifXTables
ifXTables: Unknown Object Identifier (Sub-id not found: (top) -> ifXTables)
snmpwalk -v3 -l authPriv -u test -a MD5 -A test1234 -x DES -X test1234 130.255.23.200 ifXTables
ifXTables: Unknown Object Identifier (Sub-id not found: (top) -> ifXTables)
或者,如果请求的树晚于代理实现的最后一个 MIB 实例,则会显示略有不同的消息:
% snmpwalk -v 1 -c test 130.255.112.180 .2.0
End of MIB
% snmpwalk -v 2c -c test 130.255.112.180 .2.0
joint-iso-ccitt.0 = No more variables left in this MIB View (It is past the end of the MIB tree)
Snmpset使用
SNMP-SET各版本示例
该snmpset命令的语法类似于该命令的语法snmpget ,主要区别在于指定要使用的信息。该snmpset命令需要更新的 OID、此对象的数据类型以及要应用的新值,而不是单个OID :
(字段后的s表示输入的类型,各种类型参见)
snmpset -v 1 -c test 130.255.23.200 sysName.0 s MP7300X
这个命令的效果通常可以通过在 SET 请求之前和之后检索对象的值来看到:
$ snmpget -v 1 -c test sysName.0
SNMPv2-MIB::sysName.0 = STRING: MP7300XFNS
$ snmpset -v 1 -c test sysName.0 s MP7300X
SNMPv2-MIB::sysName.0 = STRING: MP7300X
$ snmpget -v 1 -c test sysName.0
SNMPv2-MIB::sysName.0 = STRING: MP7300X
请注意,在 SET 请求之后返回的值将始终与提供的值相同。这通常与后续 GET 请求返回的相同(如上所示),但不完全一定。
V2版本进行set操作:
snmpset -v 2c -c test sysName.0 s MP7300X
V3版本进行set操作:
snmpset -v3 -l authPriv -u test -a MD5 -A test1234 -x DES -X test1234 sysName.0 s MP7300X
对表节点进行设置
snmpset -c test -v2c 130.255.112.175 1.3.6.1.2.1.2.2.1.7.537657344 i 2
IF-MIB::ifAdminStatus.537657344 = INTEGER: down(2)
上面示例为对1.3.6.1.2.1.2.2.1(ifEntry)节点下,表ifAdminStatus(.7)中接口索引为537657344的接口设置接口状态为down
所有的信息可以在mib-browser中进行查看,可以在mib-browser中先get信息,在linux中进行set操作。
这里可以看到类型为integer,状态为标志1(up)
对表格进行set
多个参数
与snmpget命令一样,也可以在一个请求中设置多个新值。只需在命令行上指定 (OID,type,value) 三元组的列表:
$ snmpset -c test -v2c 130.255.23.200 sysContact.0 s Maipu sysLocation.0 s Chengdu.Maipu
SNMPv2-MIB::sysContact.0 = STRING: Maipu
SNMPv2-MIB::sysLocation.0 = STRING: Chengdu.Maipu
如果这些分配中的一个无效,那么请求将被拒绝而不应用任何新值 。
请求失败情况
如果 MIB 文件不可用,或者值与 MIB 定义中的语法匹配,则请求将发送到目标代理,然后目标代理可能会拒绝请求:
$ snmpset -c test -v2c 130.255.23.200 sysContact.0 i Maipu
sysContact.0: Bad variable type (Type of attribute is OCTET STRING, not INTEGER)
如果您没有写入对象的权限,根据所使用的 SNMP 版本,报告的错误会有所不同:
$ snmpset -v 1 -c test sysContact.0 s Maipu
Error in packet.
Reason: (noSuchName) There is no such variable name in this MIB.
Failed object: SNMPv2-MIB::snmpSetSerialNo.0
$ snmpset -v 2c -c rocommunity snmpSetSerialNo.0 i 123457
Error in packet.
Reason: noAccess
Failed object: SNMPv2-MIB::snmpSetSerialNo.0
Timeout: No Response from 130.255.23.200
i--Integer
u--Unsigned
s--String
x--Hex string
d--Decimal string
n--Nullobj
o--Objid
t--Timeticks
a--ipaddress
b--bits
Snmptrap使用
TRAP分为Linux下接收和发送。
接收设备trap信息
Linux下snmptrapd的配置文件是/etc/snmp/snmptrapd.conf,配置文件修改如下:
[root@linux~]#vi /etc/snmp/snmptrapd.conf
format1 “%v from%b\n”
format2 “%v from%b\n”
authCommunity log,execute,net public
authUser log,execute,net re-user
createUser re-user MD5 admin123 DES admin123
蓝色标记为snmpV1、V2的community相关配置,应该与设备上相同,否则无法解析trap报文。
紫色标记为V3相关配置,用户信息和加密方式,同样需要与设备配置相同。
Snmptrapd –Dusm –Lo 使用此命令查看配置文件的用户名密码是否正确,如果没有error或者no such user 表示设置正确。
使用snmptrapd –df –Lo 命令在前台接收trap消息。(需要关闭防火墙 systemctl stop firewall.service)
Snmptrapd –df –Lo会一直卡在前台执行,可以使用文件重定向扔到后台执行,保证当前shell可以继续操作,比如:snmptrapd –df –Lo>/tmp/snmptest &
Snmptrap使用第三方MIB构包发送
Snmptrap使用举例:
snmptrap -v2c -c test 130.255.24.100:162 "" 1.3.6.1.6.3.1.1.5 1.3.6.1.6.3.1.1.5.3 i 123
%snmptrap –v2c –c test 130.255.24.100:162 ""SW-LLDP-MIB::mpLldpNeighborDelete lldpLocPortNum i 333
对snmpTraps这个节点下linkdown事件发送一条trap消息到130.255.24.100主机,i为数据类型1为值.
参数 | 含义 |
-v2c | Snmp协议版本 |
-c test | Community名 |
130.255.24.100:162 | Ip和端口.默认162可以不指定 |
0 | Uptime字段,可以为0 |
1.3.6.1.6.3.1.1.5 | Trap OID(节点snmptraps) |
1.3.6.1.6.3.1.1.5.3 | 数据OID |
i | 数据类型 |
1 | 数据值 |
Snmpgetnext使用
点对象Getnext
使用snmpget命令,代理返回与原始请求中指定的 OID(或多个 OID)关联的值。snmpgetnext命令与其类似,但代理返回值是与该OID相关联的下一个(有效)OID值:(也就是我们指定这个节点的下一个有效节点)
% snmpgetnext -v 2c -c test 130.255.112.180 SNMPv2-MIB::sysName.0
SNMPv2-MIB::sysLocation.0 = STRING: ChengDu.MaiPu
% snmptranslate -On SNMPv2-MIB::sysName.0 SNMPv2-MIB::sysLocation.0
.1.3.6.1.2.1.1.5.0
.1.3.6.1.2.1.1.6.0
表对象Getnext
使用此请求的一种方法是提供不完整的 OID - 可能省略实例的子标识符,或提供“内部”MIB 对象。代理将确定下一个完整的实例,并返回该 OID 和相应的值:
% snmpgetnext -v 2c -c test 130.255.112.180 system
SNMPv2-MIB::sysDescr.0 = STRING: MyPower (R) Operating System Software, NSS6600 version 9.8.0(133)(integrity), compiled on Dec 27 2021, 04:44:49 Copyright (C) 2021 Maipu Communication Technology Co.,Ltd.All Rights Reserved.
% snmpgetnext -v 2c -c test 130.255.112.180 .1.3.6
SNMPv2-MIB::sysDescr.0 = STRING: MyPower (R) Operating System Software, NSS6600 version 9.8.0(133)(integrity), compiled on Dec 27 2021, 04:44:49 Copyright (C) 2021 Maipu Communication Technology Co.,Ltd.All Rights Reserved.
这对于 MIB 表特别有用,在这种情况下,哪些索引值有效可能并不明显。通过使用其中一个列的裸 MIB 名称发出 GETNEXT 请求,代理会将表中第一行返回该条目:
% snmpgetnext -v 2c -c test 130.255.112.180 tcpConnState
TCP-MIB::tcpConnState.0.0.0.0.25.0.0.0.0.0 = INTEGER: 2
也可以提供部分索引,并让代理补全它:(未实验成功)
% snmpgetnext -v 2c -c test 130.255.112.180 tcpConnState.127.0.0.1
TCP-MIB::tcpConnState.127.0.0.1.631.0.0.0.0.0 = INTEGER: 2
遍历一个 MIB
使用 GETNEXT 操作的另一种方法是发出一系列这样的请求,每个请求都使用来自前一个结果的 OID。这具有“遍历”MIB 的效果:
% snmpgetnext -v 2c -c test 130.255.112.180 sysUpTime.0
SNMPv2-MIB::sysContact.0 = STRING: Maipu Communication Technology Co.,Ltd.
% snmpgetnext -v 2c -c test 130.255.112.180 sysContact.0
SNMPv2-MIB::sysName.0 = STRING: IP017_NSS6600_8180_VST
% snmpgetnext -v 2c -c test 130.255.112.180 sysName.0
SNMPv2-MIB::sysLocation.0 = STRING: ChengDu.MaiPu
同样,此技术对 MIB 表特别有用,它将遍历表的连续行:
% snmpgetnext -v 2c -c test 130.255.112.180 ifIndex
IF-MIB::ifIndex.183 = INTEGER: 183
% snmpgetnext -v 2c -c test 130.255.112.180 ifIndex.183
IF-MIB::ifIndex.184 = INTEGER: 184
% snmpgetnext -v 2c -c test 130.255.112.180 ifIndex.184
IF-MIB::ifIndex.185 = INTEGER: 185
Snmpgetbulk使用
概要
snmpbulkget [应用程序选项] [通用选项] [OID]
SNMP-GETBULK示例
命令:
snmpbulkget -v2c -c test 130.255.112.180 system
(结果省略)
snmpbulkget -v2c -c test –C r3 130.255.112.180 system
-C r3可限制get三个节点。
与snmpwalk相比
相同点:
都是对一个子树值的遍历,用法基本相同
不同点:
snmpwalk用的是SNMP GETNEXT请求,查询到的值是一个一个返回给agent;
snmpbulkwalk用的是SNMP GETBULK请求,查询的结果会一次性返回给agent,这在查询的结果很多时效率会比snmpwalk高
通用选项
-Cn<NUM>
在 GETBULK PDU 中设置 non-repeaters 字段。
指定提供变量的数量。 默认值为 0。
-Cr<NUM>
在 GETBULK PDU 中设置 max-repetitions 字段。
这指定了重复变量的最大迭代次数。
[M1]从根节点进行遍历