这里是相关代码:
pdu = snmp_pdu_create(SNMP_MSG_SET);
if (snmp_add_var(pdu, oid, oid_len, ASN_INTEGER, "1" ) != 0 )
snmp_perror("failed");
我收到错误“错误值类型:奇怪的Unicode字符”
当我在终端中运行此snmpset命令时:
snmpset -v 3 -u <user> <ip> <oid> integer 1
它工作正常,为什么它不能在我的C程序中工作?
您使用的是snmp_add_var
错误。从某种意义上讲,它等效于snmpset
,因此您应该传递字符'i'
而不是为其他内容设计的常量ASN_INTEGER
。
[ASN_INTEGER
被定义为((u_char)0x02)
,因此解析that参数会导致解码困难。
“其他”是您可能想要使用的功能,它是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");
请注意如何“键入”,而不是使用字符串进行词法转换。