Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
zaum-kurs-2013.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
654.85 Кб
Скачать

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 .

Клас MibScalarInstancenamesyntax )

Подання скалярних керованих екземплярів об'єкта або концептуальної таблиціелементів з name та пов'язані з ними значення, здійснюється по syntax об'єкта. Цей клас є підкласом MibScalar, але, на відміну від MibScalar, він представляє існуючий керований об'єкт, що містить значення.

name керований екземпляр об'єкта concatination з name керованого об'єкта і ідентифікатор екземпляра. Для скалярних керованих об'єктів, наприклад ідентифікатор завжди є одним нулем (0,). Для Концептуальної таблиці, ідентифікатор екземпляра елементів concatination таблиці індексів.

Параметриnamesyntax  мають той же зміст, що і в MibScalar класі.

Клас MibTableColumn ( namesyntax )

Подання концептуальної таблиці специфікацій колонок з 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 метод повертає кортеж (oidlabelsuffix) , де: 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,)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]