net-snmp C API 的故障设置值

Trouble setting value with net-snmp C API

相关代码如下:

pdu = snmp_pdu_create(SNMP_MSG_SET);

if (snmp_add_var(pdu, oid, oid_len, ASN_INTEGER, "1" ) != 0 )
    snmp_perror("failed");

我收到一个错误 "Bad value type: weird Unicode character "

当我在终端中运行这个snmpset命令时:

snmpset -v 3 -u <user> <ip> <oid> integer 1

它工作正常,那么为什么它不能在我的 C 程序中工作?

您使用的 snmp_add_var 有误。它在某种意义上等同于 snmpset,因此您应该传递字符 'i' 而不是常量 ASN_INTEGER,这是为其他东西设计的。

ASN_INTEGER 被定义为 ((u_char)0x02),因此 参数的解析导致解码困难。


"something else" 是您可能 想要使用的函数,即 snmp_pdu_add_variable:

pdu = snmp_pdu_create(SNMP_MSG_SET);

uint32_t val = 1;
if (snmp_pdu_add_variable(pdu, oid, oid_len, ASN_INTEGER, &val, sizeof(val)) == nullptr)
    snmp_perror("failed");

请注意它是如何 "typed",而不是将字符串进行词法转换。