无法使用net-snmp c API设置值

时间:2016-03-29 13:47:55

标签: c snmp net-snmp

我正在尝试使用net-snmp C api为OID设置值,我正在使用的代码片段为:

char *ltmp = "description";

char *buff = malloc(sizeof(char)*50);
strcpy(buff,ltmp);

if (!snmp_parse_oid(".1.3.6.1.4.1.2162.1.2.2.1.0", anOID, &anOID_len)) {
    snmp_perror(".1.3.6.1.4.1.2162.1.2.2.1.0");
    SOCK_CLEANUP;
    exit(1);
} else if (snmp_pdu_add_variable(pdu, anOID, anOID_len,'s',buff, (int)strlen(buff))) {
    snmp_perror(".1.3.6.1.4.1.2162.1.2.2.1.0");
}  

当我运行此代码时,它会抛出以下错误

  

类型切换中的内部错误

     

数据包错误

     

原因:(badValue)给定的值具有错误的类型或长度。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

您应该使用其中一个预定义常量作为变量类型;在这种情况下,ASN_OCTET_STR代替s

来自asn1.h

#define ASN_BOOLEAN         ((u_char)0x01)
#define ASN_INTEGER         ((u_char)0x02)
#define ASN_BIT_STR         ((u_char)0x03)
#define ASN_OCTET_STR       ((u_char)0x04)
#define ASN_NULL            ((u_char)0x05)
#define ASN_OBJECT_ID       ((u_char)0x06)
#define ASN_SEQUENCE        ((u_char)0x10)
#define ASN_SET             ((u_char)0x11)