
- •Засоби аналізу та управління мережами методичні вказівки
- •1.1Основи роботи з PySnmp
- •1.2Керування архітектурою snmp
- •1.2.1PySnmp архітектура
- •1.3Стандартні snmp додатки (Синхронні додатки)
- •1.3.1Генератор синхронних команд
- •1.3.2Синхронний оригінатор повідомлень
- •1.4Стандартні snmp додатки (Асинхронні додатки)
- •1.4.1Асинхронний генератор команд
- •1.4.2Асинхронний оригінатор повідомлення
- •1.4.3Конфігурація безпеки
- •1.4.4Конфігурація транспортування
- •1.5.1Managed Objects імена і значення
- •1.5.2Managed Objects значення
- •1.6.1Модель даних для керованих об'єктів
- •1.7Приклад PySnmp скриптів
- •1.8NativeApi для стандартних додатків snmPv3
- •1.9Низький рівень api для операцій протоколу snmPv1/v2c
- •1.10Подальший розвиток
- •2.1Встановлення
- •2.2Використання
- •2.3Структура
- •3.1Основні особливості модуля:
- •3.2Елементи модуля
- •3.3Переваги і недоліки
- •4.1Особливості
- •4.2Опис “NetSnmp” модуля
- •4.3Використання Net-snmp і iPython
- •4.3.1Встановлення та налаштування Net-snmp
- •4.3.2Написання коду
- •4.4Переваги і недоліки
- •Засоби аналізу та управління мережами методичні вказівки
4.3.2Написання коду
Припустимо, що у нас вже є прив'язки Python, і в даний момент IPython у нас працює. Іншими словами, ми готові почати роботу з IPython. У деяких випадках нам все-таки доведеться звернутися до документації IPython.
Давайте створимо простий запит з метою ідентифікації комп'ютера за значенням його ідентифікатора об'єкта (object identifier, OID) sysDescr. Запустимо IPython, ввівши команду ipython, після чого в інтерактивному режимі, виконаємо наступну послідовність команд:
Приклад коду на IPython
In [1]: import netsnmp
In [2]: oid = netsnmp.Varbind ('sysDescr')
In [3]: result = netsnmp.snmpwalk (oid,
...: Version = 2,
...: DestHost = "localhost",
...: Community = "public")
In [4]: result = netsnmp.snmpwalk (oid,
Version = 2,
DestHost = "localhost",
Community = "public")
In [16]: result
Out [16]: ('Linux localhost 2.6.18-8.1.14.el5 # 1 SMP Thu Sep 27
18:58:54 EDT 2007 i686 ',)
Зверніть увагу на те, що отримані вами значення будуть відрізнятися від тих, що показані в цьому прикладі.
Однією з чудових особливостей використання IPython при тестуванні фрагментів SNMP-коду є те, що IPython працює як звичайний командний процесор, і при цьому більшість основних інтерактивних можливостей командного процесора в ньому дійсно працюють, але особливим чином. Написання коду для роботи з SNMP може бути вельми нудним заняттям, але використання бібліотеки Net-SNMP з IPython перетворює цей процес на розвагу.
Як ви могли помітити, отримати результуючі дані у форматі Python досить просто. Ось чому IPython і Net-SNMP так добре використовувати разом. Для отримання необхідної інформації тепер залишилося тільки інтерактивно підставляти необхідні комбінації OID у цей користувальницький сценарій. В ідеальному світі, необхідний досить громіздкий сценарій, призначений для простої настройки NMS, за допомогою якого новий комп'ютер автоматично б додавався в мережу.
Припустимо ситуацію, при якій ви щойно перетворили високошвидкісне пристрій DDR в 2 ТБ RAID 0 на сервері, що працює під ОС Ubuntu Linux, оскільки це єдине, що ви змогли зробити за той час, який вам дали для вирішення виниклої проблеми.
При цьому у вас є всього кілька хвилин, щоб розібратися в ситуації, що склалася. Давайте скористаємося функцією редагування в IPython для написання файлу сценарію, після чого запустимо його в цій же сесії, не виходячи з IPython: ed snmpinput.py
Створення модуля IPython
import netsnmp
class snmpSessionBaseClass (object):
"" "A Base Class For a SNMP Session" ""
def __ init__ (self,
oid = "sysDescr",
Version = 2,
DestHost = "localhost",
Community = "public"):
self.oid = oid
self.Version = Version
self.DestHost = DestHost
self.Community = Community
def query (self):
"" "Creates SNMP query session" ""
try:
result = netsnmp.snmpwalk (self.oid,
Version = self.Version,
DestHost = self.DestHost,
Community = self.Community)
except:
import sys
print sys.exc_info ()
result = None
return result
Ітеративне кодування в IPython
In [1]: run snmpinput
In [2]: who
netsnmp snmpSessionBaseClass
In [3]: s = snmpSessionBaseClass ()
In [4]: s.query ()
Out [4]: ('Linux localhost 2.6.18-8.1.14.el5 # 1 SMP Thu Sep 27 18:58:54 EDT 2007 i686',)
In [5]: result = s.query ()
In [6]: len (result)
Out [6]: 1
За допомогою даного модуля дуже легко отримати результати, але оскільки ви тільки що виконали жорстко закодований сценарій, змініть значення OID об'єкта, щоб перейти до піддерева системи:
Зміна значення OID об'єкта
In [7]: s.oid
Out [7]: 'sysDescr'
In [8]: s.oid = ".1.3.6.1.2.1.1"
In [9]: result = s.query ()
In [10]: print result
('Linux localhost 2.6.18-8.1.14.el5 # 1 SMP Thu Sep 27 18:58:54 EDT 2007 i686',
'.1.3.6.1.4.1.8072.3.2.10', '121219 ',' Me@localhost.com ',
'Localhost', '"My Local
Machine "', '0', '.1.3.6.1.6.3.10.3.1.1', '.1.3.6.1.6.3.11.3.1.1',
'.1.3.6.1.6.3.15.2.1.1',
'.1.3.6.1.6.3.1', '.1.3.6.1.2.1.49', '.1.3.6.1.2.1.4', '.1.3.6.1.2.1.50',
'.1.3.6.1.6.3.16.2.2.1',
'The SNMP Management Architecture MIB.', 'The MIB for Message Processing and
Dispatching. ',' The management information definitions for the SNMP
User-based Security Model. ',' The MIB module for SNMPv2 entities ',' The
MIB module for managing TCP implementations ',' The MIB module for
managing IP and ICMP implementations ',' The MIB module for managing
UDP implementations ',' View-based Access
Control Model for SNMP. ', '0', '0 ', '0', '0 ', '0', '0 ', '0', '0 ')
Як бачите, досить просто взяти цей модуль і почати досліджувати всю мережу, один комп'ютер за раз. Заслуговує на увагу також інша цікава можливість IPython. IPython дозволяє вам запускати фрагменти Python-коду у фоновому режимі.
Приклад виконання фрагмента ітеративного коду у фоновому режимі
In [11]: bg s.query ()
Starting job # 0 in a separate thread.
In [12]: jobs [0]. Status
Out [12]: 'Completed'
In [16]: jobs [0]. Result
Out [16]:
('Linux localhost 2.6.18-8.1.14.el5 # 1 SMP Thu Sep 27 18:58:54 EDT 2007 i686',
'.1.3.6.1.4.1.8072.3.2.10', '121219 ',' Me@localhost.com ',' localhost ',' "My Local
Machine "', '0', '.1.3.6.1.6.3.10.3.1.1', '.1.3.6.1.6.3.11.3.1.1',
'.1.3.6.1.6.3.15.2.1.1', '.1.3.6.1.6.3.1', '.1.3.6.1.2.1.49',
'.1.3.6.1.2.1.4', '.1.3.6.1.2.1.50', '.1.3.6.1.6.3.16.2.2.1',
'The SNMP Management Architecture MIB.', 'The MIB for Message Processing and
Dispatching. ',' The management information definitions for the SNMP User-based
Security Model. ',' The MIB module for SNMPv2 entities ',' The MIB module for
managing TCP implementations ',' The MIB module for managing IP and ICMP
implementations ',' The MIB module for managing UDP implementations ',
'View-based Access Control Model for SNMP.', '0 ', '0', '0 ', '0', '0 ', '0', '0 ', '0')
Хотілося б відзначити, що потокова обробка у фоновому режимі працює в IPython відмінно, але тільки з тими бібліотеками, які підтримують асинхронну обробку. На жаль, Net-SNMP є синхронний.
Звичайно, є й інше рішення. Ви можете скористатися однією з численних бібліотек обробки, доступних в Python, щоб відгалузилося цей блокується процес. Кілька бібліотек сторонніх розробників ви можете знайти в репозитарії Python (Python cheese shop). Якщо ви використовуєте просту установку easy_install, то установка пакета, такого як Parallel Python, і випробування вроботі цієї бібліотеки разом з Net-SNMP стане для вас простим завданням.