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",而不是将字符串进行词法转换。
相关代码如下:
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",而不是将字符串进行词法转换。