Индекс таблицы SNMP с использованием строки октетов

Я работаю над агентом SNMP, используя net-snmp и разрабатывая MIB для данных, хранящихся в таблицах.

Я рассматриваю возможность использования ключа таблицы на основе строки примерно из 15 десятичных цифр.

Разумно ли реализовать это как индекс OCTET STRING?

Даже если я закодирую 2 цифры на октет, это будет около 8 октетов.

С индексом OCTET STRING каждый октет будет добавлен как узел к OID.

Я знаю, что могу преобразовать это в целое число (я), но десятичные цифры могут иметь начальные нули.

Есть ли мнения или предложения по этому поводу?

Заранее спасибо.


person NetHead    schedule 15.07.2013    source источник


Ответы (1)


Вы можете поместить нули в ОКТЕТНЫЕ СТРОКИ, так что да, вы можете сделать это таким образом. СТРОКИ ОКТЕТОВ могут содержать двоичные данные и кодируются как просто числа в OID. API Net-SNMP принимает не только указатель на char *, но и длину возвращаемых данных. И это именно потому, что вполне законно иметь ОКТЕТНЫЕ СТРОКИ с нулевыми значениями, закодированными внутри них.

На стороне OID, если бы у вас была строка, состоящая из символов A, B 0, D, она обычно кодировалась бы как:

бла.бла.4.65.66.0.67

Где 4 - длина строки. Если СТРОКА ОКТЕТОВ помечена как НЕЯВНАЯ, то 4 будут опущены.

Вы кодируете десятичные цифры в строку, поэтому ваши значения будут ближе к таким вещам, как 0x15, 0x04, 0x42 и т. д. Это тоже нормально (вы строите двоичную строку).

Должны ли вы это делать или просто вставлять целые числа в строку, это предмет споров, но зависит от того, что вы делаете, а также от ограничений пропускной способности среды и т. д.

person Wes Hardaker    schedule 15.07.2013
comment
Я не уверен, что длина OCTET STRING (4 в приведенном выше примере) действительно необходима, так как даже если есть октеты с нулевым значением (0x00) или даже если количество октетов (или цифр) является переменным, OID и OCTET STRINGs имеют длину, связанную с фактическими значениями, т. е. они не совпадают со строками C, заканчивающимися нулем. Кроме того, индексные узлы находятся в конце последовательности OID, поэтому, если вы знаете, что такое основа OID (бла-бла в приведенном выше примере), вы можете знать, какие части OID составляют индекс. Я думаю, кто-то мог бы закодировать частичный индекс, но это было бы неправильно? - person NetHead; 15.07.2013
comment
Кодирование OID очень стандартизировано. Если индекс указан как просто СТРОКА ОКТЕТОВ, длина (4) ДОЛЖНА быть в OID (и такие инструменты, как snmpwalk, ожидают этого). Если индекс указан как НЕЯВНАЯ ОКТЕТНАЯ СТРОКА, то он должен быть последним индексом, а длина ДОЛЖНА быть опущена. - person Wes Hardaker; 16.07.2013
comment
Существуют ли какие-либо загружаемые агенты SNMP, использующие таблицу с индексом, представляющим собой более одного узла в OID, например СТРОКА ОКТЕТОВ? Я хотел бы протестировать получение/установку SNMP и т. д., включая добавление и удаление строк (используя столбец rowStatus). В идеале, если есть агент, я мог бы просто скачать и запустить... с минимальным количеством настроек и работать. Я не получаю никаких данных из моего логического MIB-браузера, когда отправляю запросы snmpd Net-SNMP (версия 5.7.2) на моем компьютере с Linux для любой из таблиц RFC 1213, которые имеют многоузловые индексы. Или, может быть, мне нужно что-то настроить, чтобы это работало? - person NetHead; 17.07.2013
comment
Из соображений безопасности да, вы должны настроить агент Net-SNMP, прежде чем он будет возвращать какие-либо данные. Я предполагаю, что вы используете v1 или v2c со строкой сообщества public. Запустите snmpconf -g basic_setup, и он поможет вам создать файл конфигурации. - person Wes Hardaker; 18.07.2013