2

在一个简单的 SNMP 表(如mib-2.interfaces.ifTable)中,ifIndex是表的索引,因此您读取ifIndex.1(即从 的直接子节点读取值ifIndex)以获取表第一行的索引。很简单。

但它并不像mib-2.ip.ipRouteTable. 在这种情况下ipRouteIfIndex是索引列。就像以前一样,它被定义为 INTEGER ifIndex。但是,您不能读取直接子节点(即ifIndex.0 是直接子节点),而是需要读取ifIndex.0.0.0.0以获取值。那么,当它不是索引列的直接子级时,如何知道如何找到该值呢?

有一些我不理解的概念。(可能与 SNMP 对象由 . 分隔的事实有关,但 IP 地址也是如此,我不知道如何识别差异)。

4

1 回答 1

3

请注意,在这种特殊情况下,您有一个包含多个索引的表。

事实是,您不能使用snmp-getservice 直接读取表条目,因为索引是动态的(并且因此是 OID 地址)。但是您可以通过snmp-get-next(v1) 和snmp-get-bulk(v2) 服务发现这些价值。

例如,您可以读取索引(并存储它们以供以后查询表项)或直接读取表的项:

  • 你要求 snmp-get-nextIP -MIB::ipAdEntNetMask
  • 回复将是IP-MIB::ipAdEntNetMask.172.16.38.42 IPV4 255.255.0.0
  • (所以:在这种情况下,第一个索引是 172.16.38.42!)
  • 您在IP-MIB::ipAdEntNetMask.172.16.38.42之后迭代并询问下一个值
  • 回复将是IP-MIB::ipAdEntNetMask.172.16.11.43 IPV4 255.255.0.0
  • 等..直到没有其他值,或者该值不在同一棵树上

该服务snmp-get-bulk将使您能够以这种方式直接查询 N 个值。

看看Net-Snmp 的 snmptable表格做得很好:http: //net-snmp.sourceforge.net/wiki/index.php/TUT :snmptable

于 2012-09-18T16:17:29.513 回答