Значение проблемы при использовании net-snmp C API - PullRequest
0 голосов
/ 08 ноября 2019

Вот соответствующий код:

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?

1 Ответ

0 голосов
/ 09 ноября 2019

Вы используете snmp_add_var неправильно. В некотором смысле это эквивалент snmpset, поэтому вы должны передавать символ 'i' вместо константы ASN_INTEGER, которая предназначена для чего-то другого.

ASN_INTEGER определено как ((u_char)0x02), так что синтаксический анализ аргумента вызывает трудности с декодированием.


«Что-то еще» - это функция, которую вы вероятно хотите использоватьвместо этого 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");

Обратите внимание на то, как оно «напечатано», вместо того, чтобы брать строку для лексического преобразования.

...