网络snmp C API设置值时出现问题
以下是相关代码:网络snmp C API设置值时出现问题,c,network-programming,snmp,net-snmp,C,Network Programming,Snmp,Net Snmp,以下是相关代码: 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 sn
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
snmpset-v3-u整数1
它工作正常,为什么在我的C程序中不工作?您使用的
snmp\u add\u var
错误。在某种意义上,它相当于snmpset
,因此您应该传递字符'i'
,而不是常量ASN_INTEGER
,后者是为其他目的而设计的
ASN_INTEGER
被定义为((u_char)0x02)
,因此正是对该参数的解析导致了解码困难
“其他东西”是您可能希望使用的函数,它是
snmp\u pdu\u add\u变量
:
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");
注意它是如何“类型化”的,而不是将字符串进行词汇转换