2015-01-29 2 views
1

Я использую адаптер snmpV3 и передаю ему ловушки V2, используя команды, как показано ниже. Похоже, что диапазон для типа u (т. Е. Без знака) является upto (2^31) - 1 (т. Е. 2147483647). Я ожидал, что это будет (2^32) - 1 (т. Е. 4294967295).snmptrap неподписанный тип не работает как ожидалось

snmptrap -c public -v 2c clm-pun-009642 '' 1.3.6.1.4.1.20006.1.0.5 1.3.6.1.4.1.12345.1 u 2147483647

Выше команда генерирует следующий журнал:

trace: ..\..\snmplib\snmp_api.c, 5293: dumph_recv: Value dumpx_recv: 42 04 7F FF FF FF dumpv_recv: UInteger: 2147483647 (0x7FFFFFFF)

Где, как для:

snmptrap -c public -v 2c clm-pun-009642 '' 1.3.6.1.4.1.20006.1.0.5 1.3.6.1.4.1.12345.1 u 2147483648

Над командой генерирует следующий журнал:

enter code heretrace: ..\..\snmplib\snmp_api.c, 5293: dumph_recv: Value dumpx_recv: 42 05 00 80 00 00 00 dumpv_recv: UInteger: -2147483648 (0x80000000)

См: http://www.net-snmp.org/docs/man/snmptrap.html

Я использую Net-SNMP v5.5.

Это правильное поведение или я что-то упускаю?

+0

net-snmp v5.5 довольно старый. Попробуйте последнее и посмотрите, исправлено ли это. – Jolta

ответ

0

Я обнаружил различные проблемы с net-snmp на протяжении многих лет. Это, по-видимому, еще один. Стандарты совершенно ясны. RFC 2578 определяет Unsigned32 следующим образом:

- беззнаковое 32-битное количество - неотличимо от Gauge32 Unsigned32 :: = [ПРИМЕНЕНИЕ 2] НЕЯВНОГО ЦЕЛОЕ (0..4294967295)

Как уже отмечалось, это идентично Gauge32, который идентичен Gauge в SNMPv1 (RFC 1155):

Калибровочная :: = [ПРИМЕНЕНИЕ 2] НЕЯВНЫЕ INTEGER (0..4294967295)

Кодировка верна; все целые числа в SNMP кодируются как подписанные, то есть значение выше 2^31-1 должно быть закодировано в 5 байтах. Таким образом, правильный перевод кодировки:

42    Type: Gauge32 or Unsigned32 
05    Length: 5 bytes 
00 80 00 00 00 Value: 2^31 

net-snmp неправильно декодирует значение.

Смежные вопросы