
- •Засоби аналізу та управління мережами методичні вказівки
- •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Переваги і недоліки
- •Засоби аналізу та управління мережами методичні вказівки
1.6.1Модель даних для керованих об'єктів
PySNMP підтримує як менеджера так і агента на стороні операційз керованими об'єктами , в тому числі MIB пошук і реалізаціяя користувальницьких керованих об'єктів.
Managed Objects, реалізується в коді Python ,який є основою для PySNMP MIB послуг. Керовані об'єкти збираються в пулі, а потім управляються у MIBbuilder . Обидва, менеджер та агент додатки мають справу з їх Managed Objects через MIBview і MIB instrumentation . Той же набір керованих об'єктів може служити як менеджер і агент в рамках однієї SNMP особи.
У PySNMP, керовані об'єкти, зазначені в MIBs приймають форму Python об'єктів, які реалізують різні види SMIv2 визначень. Керовані об'єкти, зазначені в MIB файлі переводяться в один-до-одного в Python модулі.
Автоматизоване перетворення MIB текстових файлів в Python модулів може бути зроблено за допомогою smidump інструменту libsmi пакет і " build-pysnmp-mib "сценарій, який поставляється з PySNMP.
Pysnmp.smi.mibs.SNMPv2-SMI модуль реалізує наступні класи:
Клас MibScalar( name, syntax )
Подання скалярних керованих об'єктів специфікації, визначені name-пов'язаних з значенням типу syntax . Об'єкти такого роду ніколи не тримають фактичні значення, а вони служать для наступних цілей:
Логічно пов'язати ім'я керованого об'єкта зі значенням
Вказують тип значення (включаючи текстові конвенцією, на основі обмежень)
Забезпечити зрозумілі людині назви керованих об'єктів і значення подання
name параметр являє собою ідентифікатор об'єкта , який може бути виражений або як набір цілих чисел або кортеж типу Object Identifier екземпляра класу.
syntax параметр представляє керований об'єкт екземпляра типу значення.
MibScalar клас реалізує наступні методи:
getName()
Повернути ім'я ініціалізатор OctetIdentifier об'єкта.
getSyntax ()
Повернутися синтаксис ініціалізації, яка є мpyasn1 об'єктом. Синтаксис об'єкта не несе ніякої цінності, це означає прийнятний специфікатор типу і може бути використаний для клонування об'єктів, сумісний для створення SNMP повідомлень.
getUnits ()
Повертає значення одиниці у вигляді рядка Python. Це в основному використовується для друку такого, як "10 секунд", а не просто "10".
GetDescription ()
Повертає текст людського сприйняття опису семантики керованих об'єктів, тобто, використання та обмеження. Оскільки ці описи можуть бути досить великими, вони не завантажуються в пам'ять за замовчуванням. Ця установка може бути змінена через властивість MibBuilder .
Клас MibScalarInstance( name, syntax )
Подання скалярних керованих екземплярів об'єкта або концептуальної таблиціелементів з name та пов'язані з ними значення, здійснюється по syntax об'єкта. Цей клас є підкласом MibScalar, але, на відміну від MibScalar, він представляє існуючий керований об'єкт, що містить значення.
name керований екземпляр об'єкта concatination з name керованого об'єкта і ідентифікатор екземпляра. Для скалярних керованих об'єктів, наприклад ідентифікатор завжди є одним нулем (0,). Для Концептуальної таблиці, ідентифікатор екземпляра елементів concatination таблиці індексів.
Параметриname, syntax мають той же зміст, що і в MibScalar класі.
Клас MibTableColumn ( name, syntax )
Подання концептуальної таблиці специфікацій колонок з name та пов'язані з ними значення типу syntax . Цей клас є підкласом MibScalar .
name параметр має той же зміст, що і в MibScalar класу.
syntax параметр представляє тип значення, пов'язані з об'єктами у стовпчику.
MibTableColumn клас реалізує наступні методи:
setProtoInstance ( instanceClass )
Налаштування MibTableColumn екземпляру instanceClass при створенні Columnar об'єктів. За замовчуванням, MibScalarInstance примірника.
Клас MibTableRow ( name)
Подання концептуальної таблиці специфікацій рядків з name. Цей клас є підкласом MibScalar хоч він не може мати будь-які пов'язані з ними значення.
name параметр має той же зміст, що і в MibScalar класу.
MibTableRow клас реалізує наступні методи:
getInstIdFromIndices( *indices )
Обчислити і повернути колонку концептуальної таблиці ідентифікатор екземпляра від * indices використання MIB таблиці індексу.
Види * indices повинні відповідати в таблиці синтаксису Index.
getIndicesFromInstId (InstanceId )
Обчислити і повернути кортеж концептуальна таблиця значень індексу з колонки ідентифікатор екземпляра InstanceId з використанням MIB таблиці індексу.
Число типів значень, що повертаються індексом залежить від визначення MIB таблиці.
Клас MibTable (name)
Представляє концептуальну таблицю специфікації з name. Цей клас є підкласом MibScalar хоча вона не може мати будь-які пов'язані з ними значення.
name параметр має той же зміст, що і в MibScalar класі.
У наступних прикладах пояснюється, як MIB текст може бути виражений в термінах PySNMP SMI моделі даних. Перший приклад:
myManagedObject = MibScalar((1, 3, 6, 1, 4, 1, 20408, 2, 1), OctetString()).setMaxAccess("readonly")
Керований примірник об'єкта можна помістити в окремий модуль PySNMP SMI або реалізувати всередині агента додатка. Керований примірник об'єкта буде пов'язаний з його батьком керованих об'єктів, по частині MIB building PySNMP , на основі їх імен і відносин.
myManagedObjectInstance = MibScalarInstance(myManagedObject.getName() + (0,),
myManagedObject.getSyntax().clone('my string'))
Розглянемо SNMP концептуальні таблиці, створеної в "MY-MIB.py" файлі:
myTable = MibTable((1, 3, 6, 1, 4, 1, 20408, 2, 1))
myTableEntry = MibTableRow(myTable.getName() + (1,)).setIndexNames(
(0, "MY-MIB", "myTableIndex")
)
myTableIndex = MibTableColumn(myTableEntry.getName() + (1,), Integer())
myTableValue = MibTableColumn(myTableEntry.getName() + (2,), OctetString())
Заповнює таблицю керованих об'єктів з керованими об'єктами, наприклад, в першому стовпці.
myTableValueInstance = MibScalarInstance(myTableValue.getName() + (1,),
myTableValue.getSyntax().clone('my value'))
1.6.2MIB builder
Python модулями MIB потім можна управляти за допомогою MibBuilder класу від pysnmp.smi.builder модуля.
Клас MibBuilder ()
Створення MIB модуля навантажувач/оцінювач/індексатор.
loadModules ( * modNames )
Знаходить в шляху пошуку і оцінки кожного з * modNames через Python execfile () з передачею посилання на MibBuilder екземпляр класу глобального масштабу модуля.Оцінені модулі можуть зареєструвати свої об'єкти на MibBuilder через викликуexportSymbols ().
MIBBuilder створює в пам'яті індекс зареєстрованих об'єктів MIB по імені MIB.
Пошук шляху управляється методами getMibPath () і setMibPath () .
LoadModules метод може в подальшому викликатися рекурсивно на залежні імпорт MIB модулі.
unloadModules ( * modNames )
Відкидує всі посилання на Python об'єкти, раніше створені за допомогою викликуметоду loadModules() проти (тут опціонально) * modNames . Цей метод буде викликати unexportSymbols () проти символів MIB раніше зареєстрованих по кожному з *modNames .
Відсутній *modNames включає всі завантажені модулі.
importSymbols ( ModName , * symNames )
Повернути кортеж Managed Objects за своїми іменами MIB * symNames.ManagedObjects повертає в кортежі позиції прив'язані до * symNamesпараметрів.
Якщо MIB модуль ModName ще не завантажений, importSymbols () метод буде викликатися неявно.
exportSymbols ( ModName , anonymousSyms * , ** namedSyms )
Реєстрація Managed Objects *anonymousSyms і/або ** namedSyms на MibBuilder в MIB модуля ModName області.
Керовані об'єкти завжди визначені в MIB. Вони експортуються за допомогою ** namedSyms параметрів. Managed Objects екземпляри не повинні мати MIB імена, якщо додаток хоче отримати доступ до керованих об'єктів екземплярівпо імені MIB, тому вони можуть бути експортовані через * anonymousSyms.
unexportSymbols ( ModName , * symNames )
Відкидає всі посилання на Python об'єкти, раніше зареєстрованих відповідно * symNames в ModName через exportSymbols () виклику.
У наступному прикладі буде створений MIB Builder, MIB модулі завантажуються і керовані об'єкти визначаються на символічні назви:
>>>from pysnmp.smi import builder
>>>
>>> # create MIB builder
... mibBuilder = builder.MibBuilder().loadModules('SNMPv2-MIB', 'IF-MIB')
>>>
>>> # get Managed Object definition by symbol name
... mibNode, = mibBuilder.importSymbols('SNMPv2-MIB', 'sysDescr')
>>>print(mibNode.getName())
(1, 3, 6, 1, 2, 1, 1, 1)
>>>print(repr(mibNode.getSyntax()))
DisplayString('')
>>>
1.6.3MIB view controller
Наступні об'єкти, призначені для менеджера на стороні доступу до MIB визначень.Pysnmp.smi.view модуль містить наступні пункти:
Клас MibViewController ( mibBuilder )
MibViewController екземпляр класу керованих об'єктів , побудованих в MibBuilder, їх властивості і забезпечують ефективнй упорядкований доступ до керованих об'єктів. Найбільш важливими з нихє OID імена та ярлики.
MibBuilder аргумент є екземпляром MibBuilder класу.
MibViewController клас реалізує наступні методи:
getNodeName(name)
name параметр керованого об'єкта . Це може бути або кортеж, який представляє суб-OID або ідентифікатор об'єкта екземпляра класу. Sub-ідентифікатори можуть бути поєднанням чисел і рядків етикетки. Наприклад, припустимі наступні значення name:
(1, 3, 6, 1)
('ISO', 2, 'МО', 1)
pysnmp.proto.rfc1902.ObjectIdentifier ("1.3.6.1")
GetNodeName метод повертає кортеж (oid, label, suffix) , де: OID і label є кортежі суб-ідентифікаторів
Якщо керований об'єкт підняв з getNodeName метод і стався точний збіг,suffix буде порожній кортеж.
Якщо suffix не порожнє, воно вказує на індекс частини концептуальної таблиці і ім'я екземпляра (який може бути проаналізований в подальшому в значеннях індексу по методам MibTableRow класу) або частково керованого ім'я об'єкта.
Якщо хоча б частковий збіг не відбувся, виникає SmiError виняток.
>>>from pysnmp.smi import builder, view
>>>
>>>mibBuilder = builder.MibBuilder().loadModules('SNMPv2-MIB')
>>>mibViewController = view.MibViewController(mibBuilder)
>>>
>>>oid, label, suffix = mibViewController.getNodeName(
(1,3,6,1,2,'mib-2',1,'sysDescr')
)
>>>print(oid)
(1, 3, 6, 1, 2, 1, 1, 1)
>>>print(label)
('iso', 'org', 'dod', 'internet', 'mgmt', 'mib-2', 'system', 'sysDescr')
>>>print(suffix)
()
getNextNodeName( name, modName='' )
GetNextNodeName метод працює так само, як getNodeName , але він має справу з керованим об'єктом, ім'я якого, як видається, поряд з name заданим на вході.
ModName параметр MIB ім'я модуля, як показано на MibBuilder. Використовуйте цей параметр, щоб обмежити відбір по-name в MIB модулі.
getFirstNodeName ( ModName ='')
GetFirstNodeName метод працює так само, як getNodeName але він повертає керовані об'єкти, чиє ім'я буде першим серед інших в модулі MIB ModName .
getNodeLocation (name)
GetNodeLocation метод повертає MIB розташування керованих об'єктів по OID name, як кортеж ( ModName , mibName , suffix).
ModName і mibName параметри, використовувані в MibBuilder інтерфейсі.
Параметр Suffix, описаний в методі getNodeName().
>>>from pysnmp.smi import builder, view
>>>
>>>mibBuilder = builder.MibBuilder().loadModules('SNMPv2-MIB')
>>>mibViewController = view.MibViewController(mibBuilder)
>>>
>>>modName, symName, suffix = mibViewController.getNodeLocation(
(1,3,6,1,2,1,1,1,123)
)
>>>print(modName)
SNMPv2-MIB
>>>print(symName)
sysDescr
>>>print(suffix)
(123,)