Сброс всего глобального внутреннего состояния библиотеки net-snmp из привязок Python - PullRequest
1 голос
/ 15 октября 2010

Я пытаюсь создать автоматизированные интеграционные тесты для этого субъекта аппаратного и программного тестирования, который запускает агент SNMP в качестве своего командного интерфейса.Наша тестовая установка выглядит следующим образом: мы используем Fitnesse в качестве тестового прогона и PyFit, чтобы иметь возможность писать тесты на Python.Затем мы используем netsnmp с привязками Python для отправки команд SNMP.Это работает довольно хорошо.

Однако, когда я пытаюсь запустить комплект, агент SNMP (объект тестирования) перезапускается (и обычно в другое время), что заставляет внутренности netsnmp получать всевозможные интересныеошибки.

Оказывается, что внутри библиотеки netsnmp хранится большое количество глобальных состояний, таких как имена сообществ и контекстов, а также проблемные EngineTime и EngineBootCnt, которые используются для предотвращения атак воспроизведения в SNMP v3.Это приводит к тому, что агент отклоняет мои команды snmp.

Моя проблема в том, как мне повторно инициализировать библиотеку netsnmp (из привязок Python) таким образом, чтобы сбросить внутреннее глобальное состояние?Объект netsnmp.Session в привязках Python принимает параметр EngineTime и EngineBoots, и установка их в 0 должна сбрасывать их, но на самом деле, похоже, этого не происходит.Я также не знаю, есть ли там другое глобальное состояние, которое необходимо сбросить.

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

1 Ответ

1 голос
/ 19 октября 2010

Значения engineTime и engineBoots, вероятно, и приводят вас в замешательство, поскольку SNMPv3 требует, чтобы они не возвращались назад.Если у вас есть агент, который перезапускается с нуля и не увеличивает его счетчик загрузок (что недопустимо, но при тестировании я мог понять, почему вы это делаете), вам нужно будет сбросить внутреннее понятие загрузки и времени.

Однако, установка их в 0 и 0 не поможет, потому что это примет их по умолчанию.Вместо этого вы должны изменить один из них на «1», что должно инициировать предложение переопределения для фактического использования значений.Установите время на 1 и попробуйте, и я думаю, что это сработает (а если это не так, установите вместо них оба 1 и попробуйте).

...