【问题标题】:Trouble setting value with net-snmp C API使用 net-snmp C API 设置值时出现问题
【发布时间】:2019-11-08 15:25:41
【问题描述】:

以下是相关代码:

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 程序中工作?

【问题讨论】:

    标签: c network-programming snmp net-snmp


    【解决方案1】:

    你用错了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");
    

    注意它是如何“输入”的,而不是用一个字符串进行词法转换。

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多