NET-SNMP安装使用,安装第三方MIB文件

本文详细介绍了NET-SNMP在Linux系统上的安装过程,包括解压、配置、编译和安装步骤。还阐述了使用第三方MIB文件的方法,如查看加载路径、放入文件等。此外,对Snmptranslate、Snmpget、Snmpwalk等多个SNMP工具的使用进行了说明,包含示例、常见错误及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NET-SNMP安装:

  1. 解压

将下载的源码放在你的工作目录下,运行解压命令:

(可以使用WinSCP软件访问linux系统目录进行文件拷贝操作)

  1. Tar –xvf net-snmp-5.7.3.tar.gz
  2. cd net-snmp-5.7.3
  1. 配置
  1. cd net-snmp-5.7.3
  2. ./configure

运行之后会问你一些问题如邮箱、位置、日志等,可以直接按回车选择默认即可

  1. 编译和安装

执行make命令进行编译:

  1. make

执行make install命令进行安装:

  1. make install

安装过程无报错

可以使用下面的命令去验证你是否成功安装了Net-SNMP,如果你可以获取到正确的版本号,说明你已经成功安装了Net-SNMP

  1. 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

  1. linux下修改MIB文件后缀为.TXT类型

可以在linux下进入mib对应目录,使用命令:

rename .mib .txt *

重命名文件后缀为.mib的为.txt格式。

  1. 使用工具Win.SCP将MIB库文件放到linux文件系统中。

下载PPP-MIB文件并将其放置在我们 snmp 工具的mibs目录中。我将该文件放置在/usr/local/share/snmp/mibs中。(可将MIB文件后缀自行修改)

如何使MIB长期加载使用:

  1. 找到或创建snmp.conf文件。

该文件可以放置在系统范围的配置位置(/usr/local/share/snmp.conf)或个人文件($HOME/.snmp/snmp.conf)中。 配置文件位置取决于 Net-SNMP 在你的系统上创建的位置。 运行 net-snmp-config --snmpconfpath 显示路径列表。(MIB就是MIB的名称)

  1. 编辑配置文件。

将以下命令放在 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转换

  1. OID转对象名

snmptranslate 将数字 OID 翻译显示成对应的 MIB 名称:

     % snmptranslate .1.3.6.1.2.1.1.5.0

     SNMPv2-MIB::sysName.0

  1. 对象名转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(IPV4IPV6方式)

 % 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示例

  1. 指定父节点遍历:

该命令采用单个 OID,并将显示位于以该 OID 为根的子树中的所有结果的列表:

(可使用-r设置超时重试次数,-t设置超时时间,-CcOID不进行递增检测。)

 % 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

  1. 指定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.1ifEntry)节点下,表ifAdminStatus.7)中接口索引为537657344的接口设置接口状态为down

所有的信息可以在mib-browser中进行查看,可以在mib-browser中先get信息,在linux中进行set操作。

这里可以看到类型为integer,状态为标志1up

对表格进行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]从根节点进行遍历

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值