gpt4 book ai didi

c++ - 如何在 C++ 中使用 snmpwalk

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:31:27 25 4
gpt4 key购买 nike

我在我的代码中使用 net-snmp。对于 snmpget,我使用此代码,它是 100% 正确的。

 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);此代码仅返回第一行。

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

最佳答案

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

GETBULK也许是你想要的。这将为您执行迭代并尽可能多地返回。您仍然需要自己收集全套数据。

SNMPv2 defines the get-bulk operation, which allows a management application to retrieve a large section of a table at once. The standard get operation can attempt to retrieve more than one MIB object at once, but message sizes are limited by the agent's capabilities. If the agent can't return all the requested responses, it returns an error message with no data. The get-bulk operation, on the other hand, tells the agent to send as much of the response back as it can. This means that incomplete responses are possible.

关于c++ - 如何在 C++ 中使用 snmpwalk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11519676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com