Выбрать главу

Все реализации версии 1 должны быть способны обрабатывать сообщения длиной, по крайней мере, в 484 октета.

20.9 Форматы сообщений SNMP

Сообщение SNMP версии 1 состоит из некоторого вводного материала — "обертки",— сопровождаемого сообщением Protocol Data Unit одного из пяти типов: get-request, get-next-request, get-response, set-request или trap. Вводный материал содержит:

Версию протокола 0 для SNMP версии 1 и 1 для версии 2 Имя сообщества используется как пароль

Агент конфигурируется на ограничение (по имени сообщества) доступа к информации по чтению или записи. Кроме того, можно указать IP-адрес станции управления, которой разрешен доступ по чтению или записи информации MIB.

К сожалению, имя сообщества в сообщении можно легко подглядеть с помощью любого сетевого анализатора, а IP-адрес иногда можно сфальсифицировать. Одним из решений является доступ к важным устройствам (например, маршрутизаторам) через отдельную, безопасную линию связи, особенно при изменении конфигурации или статуса системы.

20.9.1 Формат сообщений gets, sets и responses в версии 1

Главное информационное содержимое во всех этих сообщениях одинаково. Оно состоит из списка (пары этого списка обычно называют "связыванием переменной"):

Имя переменной Значение Имя переменной Значение … …

Идентификатор объекта используются как имя переменной. В сообщениях get и get-next поля значений пустые. В них агент разместит необходимые значения.

Элемент данных протокола (Protocol Data Unit) для сообщений get-request, get-next-request, set-request или response включает:

Идентификатор запроса Служит для согласования запроса и ответа на него. Поле статуса ошибки 0 в запросах. Ненулевые значения в ответах означают различные ошибки. Поле индекса ошибки 0 в запросах. В ответах указывает переменную, создавшую ошибку. Список идентификаторов объектов и значений В get или get-next — пустые, но заполнены в set или response.

20.9.2 Запрос get и ответ на него

На рис. 20.10 показаны запрос get-request и ответ на него (response), полученные в анализаторе Sniffer компании Network General. Запрос содержит список из пяти переменных, значения которых нужно получить. После каждого идентификатора переменной стоит заполнитель NULL. Чтобы создать ответ, агент должен только заполнять пробелы и заменять пустые поля фактическими значениями.

SNMP: Version = 0

SNMP: Community = public

SNMP: Command = Get request

SNMP: Request ID = 112

SNMP: Error status = 0 (No error)

SNMP: Error index = 0

SNMP:

SNMP: Object = {1.3.6.1.2.1.1.3.0} (sysUpTime.0)

SNMP: Value = NULL

SNMP:

SNMP: Object = {1.3.6.1.2.1.5.1.0} (icmpInMsgs.0)

SNMP: Value = NULL

SNMP:

SNMP: Object = {1.3.6.1.2.1.5.2.0} (icmpInErrors.0)

SNMP: Value = NULL

SNMP:

SNMP: Object = {1.3.6.1.2.1.5.3.0} (icmpInDestUnreachs.0)

SMMP: Value = NULL

SNMP:

SNMP: Object = {1.3.6.1.2.1.5.4.0} (icmpInTimeExcds.0)

SNMP: Value = NULL

SNMP: Version = 0

SNMP: Community = public

SNMP: Command = Get response

SNMP: Request ID = 112

SNMP: Error status = 0 (No error)

SNMP: Error index = 0

SNMP:

SNMP: Object = {1.3.6.1.2.1.1.3.0} (sysUpTime.0)

SNMP: Value = 1037388 hundredths of a second SNMP:

SNMP: Object = {1.3.6.1.2.1.5.1.0} (icmpInMsgs.0)

SNMP: Value = 1 messages

SNMP:

SNMP: Object = {1.3.6.1.2.1.5.2.0} (icmpInErrors.0)

SNMP: Value = 0 messages

SNMP:

SNMP: Object = {1.3.6.1.2.1.5.3.0} (icmpInDestUnreachs.0)

SNMP: Value = 0 messages

SNMP:

SNMP: Object = {1.3.6.1.2.1.5.4.0} (icmpInTimeExcds.0)

SNMP: Value = 0 message

Рис. 20. 1. Пример get-request и response

20.9.3 Запрос get-next и ответ на него

Сообщение get-next работает по-другому. Когда отсылается идентификатор объекта, возвращается значение следующего объекта. Например, если послать запрос:

SNMP: Object = {1.3.6.1.2.1.5.1.0} (icmpInMsgs.0)

SNMP: Value = NULL

ответ будет содержать имя и значение для следующей переменной:

SNMP: Object = {1.3.6.1.2.1.5.2.0} (icmpInErrors.0)

SNMP: Value = 0 messages

Такой запрос позволяет просматривать значения MIB или перемещаться на следующую строку таблицы.

20.9.4 Запрос set

Запрос set позволяет записывать информацию в базу данных агента. Формат сообщения очень прост, он выглядит как get-request, но приводит к изменению указанных в запросе переменных. На рис. 20.11 показано отслеживание запроса set.

SNMP: Version = 0

SNMP: Community = xyz

SNMP: Command = Set request

SNMP: Request ID = 0

SNMP: Error status = 0 (No error)

SNMP: Error index = 0

SNMP:

SNMP: Object = {1.3.6.1.2.1.4.1.0} {ipForwarding.0}

SNMP: Value = 2

SNMP: Object = {1.3.6.1.2.1.4.2.0} (ipDefaultTTL.0)

SNMP: Value = 70