首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c++中使用snmpwalk

如何在c++中使用snmpwalk
EN

Stack Overflow用户
提问于 2012-07-17 09:29:36
回答 1查看 2.9K关注 0票数 2

我在代码中使用了。对于snmpget,我使用这段代码,它是100 %正确的。

代码语言:javascript
复制
 string oiids =  ".1.3.6.1.4.1.30429.1.3.2.1.0" ;  
 struct snmp_session session , *ss ;
 struct snmp_pdu *pdu;
 struct snmp_pdu *response;
 oid anOID[MAX_OID_LEN];
 size_t anOID_len = MAX_OID_LEN;
 int status;
 init_snmp("APC Check");
 snmp_sess_init( &session );
 ss = snmp_open(&session);
 session.peername = "192.168.17.74";
 session.community = (u_char *) "public";
 session.community_len = strlen("public");
 session.version = SNMP_VERSION_2c;
 ss = snmp_open(&session);
 pdu = snmp_pdu_create(SNMP_MSG_GET);
 read_objid(oiids.c_str(), anOID, &anOID_len);
 snmp_add_null_var(pdu, anOID, anOID_len);
 status = snmp_synch_response(ss, pdu, &response);
 for(variable_list * vars = response->variables; vars; vars = vars->next_variable)
         print_variable(vars->name, vars->name_length, vars);

但是,这段代码不适用于具有多行答案的OID。通过将此行pdu = snmp_pdu_create(SNMP_MSG_GET)改为pdu = snmp_pdu_create(SNMP_MSG_GETNEXT);此代码只返回第一行。

这就是问题所在,我怎么能得到所有的行,而不仅仅是第一行?

EN

回答 1

Stack Overflow用户

发布于 2012-07-17 09:35:13

GETNEXT将在您指定的oid之后返回一个值。因此,您需要使用重复的GETNEXT调用遍历数据集。

GETBULK也许是你想要的。这将为您执行迭代,并尽可能多地返回。你还得自己去收集完整的数据。

SNMPv2定义了get-bulk操作,该操作允许管理应用程序同时检索表的一个大部分。标准的get操作可以尝试一次检索多个MIB对象,但是消息大小受到代理功能的限制。如果代理无法返回所有请求的响应,则返回没有数据的错误消息。另一方面,get-bulk操作告诉代理尽可能多地发送响应。这意味着不完整的答复是可能的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11519676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档