确保SNMP查询返回的数据正确性的最佳方法是什么?

时间:2013-12-18 21:49:42

标签: perl snmp

我正在研究使用snmp->get_bulk_request()方法进行SNMP查询以从网络设备获取接口表详细信息的代码。

我面临的问题是有时,我从查询中收到的数据缺少一些细节。这是一个短暂的问题。

我相信放置一定数量的重试会降低出错的可能性。但是,当我浏览snmp->get_bulk_request()的文档时,我找到了一个名为的参数 maxrepetitions。我从文档中不清楚这个参数是做什么的。

我试图弄清maxrepetitions参数与get_bulk_request调用方法一起使用时的效果。我查看了“get_bulk_request() - send a SNMP get-bulk-request to the remote agent”中的文档,发现了这个:

$result = $session->get_bulk_request(
                          [-callback        => sub {},]     # non-blocking
                          [-delay           => $seconds,]   # non-blocking 
                          [-contextengineid => $engine_id,] # v3 
                          [-contextname     => $name,]      # v3
                          [-nonrepeaters    => $non_reps,]
                          [-maxrepetitions  => $max_reps,]
                          -varbindlist      => \@oids,
                       );

get-bulk-request -maxrepetitions的默认值为0. maxrepetitions值指定要为变量绑定列表中的其余变量返回的后继数。

具体来说,我的问题是:

  1. 添加maxrepetitions是否等同于为查询添加重试次数?。
  2. 正在重试正确的方法以确保数据最可能正确吗?
  3. 如果没有,确保SNMP查询返回的数据的概率误差很小的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

从手册页:      在GETBULK PDU中设置max-repetitions字段。这指定了重复的最大迭代次数                变量。 实施例

   snmpbulkget -v2c -Cn1 -Cr5 -Os -c public zeus system ifTable

   will retrieve the variable system.sysDescr.0 (which is the lexicographically next object to system) and the first 5 objects in
   the ifTable:

   sysDescr.0 = STRING: "SunOS zeus.net.cmu.edu 4.1.3_U1 1 sun4m"
   ifIndex.1 = INTEGER: 1
   ifIndex.2 = INTEGER: 2
   ifDescr.1 = STRING: "lo0"
   et cetera.

答案 1 :(得分:1)

理解SNMP中字段的正确方法是直接转到RFC文档:

http://tools.ietf.org/search/rfc3416#page-14

在RFC 3416中详细解答了max-repetitions的含义,因此您应该先阅读它。

(对于想要在我使用链接时对此答案进行投票的人)仅从该文档中提取max-repetitions的解释相当困难,为了解释它你还需要知道什么是non-repeaters