【问题标题】:How to use variable list in Net-SNMP library如何在 Net-SNMP 库中使用变量列表
【发布时间】:2014-08-27 20:12:59
【问题描述】:

我正在使用 Net-SNMP 库做一些事情。基本上我所做的是基于示例应用程序Simple_Application。我不清楚的是那部分代码:

for (vars = response->variables; vars; vars = vars->next_variable) {
   // process variable
}

我做了很多测试,也阅读了this post,在我看来,您主要通过 SNMP 请求获得标量值。所以问题是:当您得到多个变量作为响应时?

【问题讨论】:

    标签: snmp net-snmp


    【解决方案1】:

    每个请求可能包含多个(标量)变量名称,响应消息将为每个请求的变量具有相应的变量绑定。因此,在该用例中循环遍历它们确实有意义。

    SNMP 还允许“get-next”请求,它具有类似的语义, 甚至可能返回大量变量的“get-bulk”请求。

    您可以在RFC 1905 中找到每种请求类型的示例(具体参见第 4.2.1 和 4.2.2 节)。

    【讨论】:

    • 感谢您的解释。所以基本上,如果我请求一个变量,我应该只期望一个变量作为响应。我只是想弄清楚如果我有一个要请求的变量列表更好/更有效:要么用 GETNEXT 遍历所有变量(这就是我目前正在做的),要么将所有变量设置在一个请求。
    • 小心这里的术语——不要在这种情况下混淆“get”和“set”。 ;) 我假设你只得到变量。如果它是一组固定的变量,则对所有变量使用一个请求会更有效。对于 n 个变量,它可以为您节省 (往返时间 * n) 个时间单位。如果变量太多以至于数据包大小可能超过网络的 MTU,您可能会遇到碎片,这不一定是问题,但某些 SNMP 代理可能会在如此大的请求上阻塞,并返回错误代码“tooBig”在这种情况下。 Get-next 或 get-bulk 也是不错的选择。
    • 谢谢,到目前为止我很感兴趣 :) 。我的困惑是因为我想遍历一个表,而 GETNEXT 似乎是这里唯一合理的选择。
    • 是的,在这种情况下混淆 get 和 set 似乎很危险 :)
    • 是的,如果您想从表中获取多行,那么 get-next 是正确的选择,除非您能够使用 get-bulk。批量获取效率更高,以更少的事务完成相同的工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多