2012-05-25 3 views
5

Я пишу агент SNMP, а определение MIB включает OID типа Unsigned32.Какая правильная кодировка для типа SNMP Unsigned32?

Реализация Unix агента использует Net-SNMP и устанавливает OID как тип ASN_UNSIGNED, так как он не имеет ASN_UNSIGNED32. Когда я смотрю на ответ GET с Wireshark, он декодирует его как значение «Gauge32». Это имеет смысл с первого взгляда, потому что согласно RFC 1902 Unsigned32 и Gauge32 совпадают.

Реализация Windows основана на Windows SnmpAPI.lib и устанавливает OID как ASN_UNSIGNED32, и когда я смотрю на ответ GET с Wireshark, он декодирует его как «Unsigned32». Это выглядит еще лучше для меня.

Каким образом 2 варианта реализации производят разные результаты на проводе?

Какая правильная версия и как я могу получить то же самое от обеих реализаций?

ответ

5

Оказывается, Net-SNMP использует текущую кодировку RFC 1902, где Unsigned32 и Gauge32 идентичны, в то время как Windows использует устаревшую кодировку RFC 1442, где Unsigned32 и Gauge32 имеют разные кодировки.

+1

Хороший улов. Звучит как ошибка Windows. –

+0

С точки зрения этого, Microsoft не обновляла службу SNMP с 1996 года, когда вышел RFC 1902. Поэтому они просто придерживаются старой версии, и большинство инструментов SNMOP по-прежнему совместимы с RFC 1442. –

1

Если вы сохраняете захват Wireshark на Windows и затем открываете его в Wireshark на Unix. Затем вы можете увидеть, что это тип, который он показывает. Unsigned32 и Gauge32 взаимозаменяемы, определенные стандартом, поэтому во всей реализации SNMP не должно быть различий. На проводе он должен передавать те же байты.

+0

Это то, что я думал, но оба пути Wireshark были сделаны в Linux, а OID от агента Linux отображаются как Gauge32, а те, что из агента Windows, отображаются как Unsigned32. Тот же Wireshark, исполняемый на той же машине. –

+0

Не успел погрузиться в парсер Wireshark. Но, как я уже сказал, вы должны прочитать необработанные байты. Вы это сделали? –

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