Я уже некоторое время пытаюсь разобраться с форматом пакетов SNMP, но я все еще не уверен, что у меня есть. Вот некоторые наблюдения, которые я считаю правильными, но я не уверен насчет:
- Каждый пакет - это набор вложенных примитивов данных разных типов, состоящий из типа, длины и некоторых данных.
- Первые две части OID всегда
1.3
и кодируются в один байт.
- Последующие части кодируются одним байтом, если их числовое значение меньше 128.
- Части OID, превышающие 127, кодируются в несколько байтов, значение которых определяется 7 младшими значащими битами, причем старший значащий бит установлен в 1 для всех, кроме последнего байта.
- Некоторые идентификаторы типов данных являются официальными (целочисленные, строковые и т. Д.), Но некоторые являются проприетарными и зависят от устройства.
Бит, который я действительно не понимаю, состоит в том, как кодируется длина определенного значения, если значение длиннее 255 байтов. Используя Wireshark, я обнаружил, что для длин меньше 256 поле длины составляет 1 байт, но для длин больше 256 поле разбивается на несколько байтов. Однако кодировка, используемая в больших номерах деталей OID, по-видимому, не применяется.
Я не могу найти ничего в RFC по этому поводу (их в любом случае около 30), чтобы помочь мне.
Может кто-нибудь прояснить это для меня и сказать, что сделанные мной выше наблюдения верны?