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

1.3Стандартні snmp додатки (Синхронні додатки)

Є кілька основних SNMP додатків, які визначаються згідно RFC3413.Реалізації зі сторони менеджера є система команд Generator (GET, SET, GETNEXT, GetBulk операцій) і повідомлення одержувача (обробка прибуття повідомлення). Настороні агента є команди відповідача (обробка GET, SET, GETNEXT, GetBulk операцій) і повідомлення ініціатора (видача TRAP і INFORM повідомлення). У PySNMP стандартні додатки реалізовані на верхньомурівні SNMPv3.

Там уже два види високорівневих інтерфейсів програмування стандартних додатків SNMP: синхронний і асинхронний. Вони схожі в плані виклику сигнатур, але відрізняються в поведінці. Синхронні виклики блокують всі заявки до закінчення операції. Асинхронний інтерфейс діє навпаки - спочатку необхідні дані готуються і ставляться на вихідні черги. 

Асинхронна версія найкраще підходить для масиву паралельних SNMP повідомлень або можливо для обробки інших видів I/O діяльності в той же час. Синхронну версію рекомендується використовувати для сингулярних і блокувальних операцій, а також для швидкого прототипування.

1.3.1Генератор синхронних команд

Всі додатки синхронного генератора команд здійснюється одним класом:

Клас CommandGenerator ([ snmpEngine ])

Створює SNMP об'єкт генератор команд.

Методи CommandGenerator екземплярів класу реалізації конкретних типів запиту.

getCmd ( authData , transportTarget , * varNames , lookupNames = False , lookupValues ​​= False )

Виконує SNMP GET запит і повертає відповідь або повідомлення про помилку.

AuthData є параметром безпеки SNMP об'єкта, 

transportTarget є об'єктом конфігурації SNMP транспортування

* varNames являє собою послідовність імен ManagedObjects.

1.3.1.1GET Command

GetCmd метод повертає кортеж з errorIndicationErrorStatuserrorIndexvarBinds.

Непустий errorIndication рядок вказує рівень SNMP-помилки.

Пара змінних ErrorStatus і errorIndex визначає SNMP PDU рівень помилок.

VarBinds являє собою послідовність керованих об'єктів. Якщо lookupNames параметр має значення True, PySNMP буде намагатися зібрати більше інформації про ManagedObjects і повернути їх в varBinds шляхом пошуку відповідного модуля MIB. Примірник MibVariable класу будуть повернуті у вигляді керованих імен об'єктів.

Якщо параметр lookupValues ​​маєз начення True, керованими об'єктами екземпляри значення, що повертаються в varBinds можуть бути перетворені в більш точний тип, якщо PySNMP має відповідні MIB завантаження. В іншому випадку відповіддю будуть значення, які належатьрівні протоколу керованих об'єктів типу примірника значення.

Наступний код виконує SNMP GET операцію:

  • Використання SNMP v2c

  • з 'public' значенням

  • IPv4/UDP

  • проти агента прослуховування на локальний (UDP порт 161)

from pysnmp.entity.rfc3413.oneliner import cmdgen

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(

cmdgen.CommunityData('public'),

cmdgen.UdpTransportTarget(('localhost', 161)),

'1.3.6.1.2.1.1.1.0',

'1.3.6.1.2.1.1.6.0'

)

# Check for errors and print out results

if errorIndication:

print(errorIndication)

else:

if errorStatus:

print('%s at %s' % (

errorStatus.prettyPrint(),

errorIndex and varBinds[int(errorIndex)-1] or '?'

)

)

else:

for name, val in varBinds:

print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))

1.3.1.2SET Command

setCmd ( authData , transportTarget , * varBinds , lookupNames = False , lookupValues ​​= False )

Виконує SNMP SET запит і повертає відповідь або повідомлення про помилку.

AuthData , transportTarget , lookupNames і lookupValues ​​параметри мають ту ж семантику, як і в getCmd метод.

* VarBinds вхідний параметр являє собою послідовність керованих об'єктів, які повинні бути змінені на агента.

SetCmd метод повертає кортеж з errorIndicationErrorStatuserrorIndexvarBinds

Наступний код виконує операцію SNMP SET:

  • Використання SNMP v3

  • з ім'ям користувача 'usr-md5-des', аутентифікація MD5 і конфіденційність протоколів DES

  • IPv4/UDP

  • проти агента прослуховування на локальній машині (UDP порт 161)

  • установка SNMPv2-MIB :: sysName.0 об'єкта на нове значення

MibVariable об'єкт використовується на вході. Відповідь має бути повернена також у вигляді MibVariable об'єкта.

frompysnmp.entity.rfc3413.onelinerimportcmdgen

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBinds = cmdGen.setCmd(

cmdgen.UsmUserData('usr-md5-des', 'authkey1', 'privkey1'),

cmdgen.UdpTransportTarget(('localhost', 161)),

(cmdgen.MibVariable('SNMPv2-MIB', 'sysName', 0), 'my new value'),

lookupNames=True, lookupValues=True

)

# Check for errors and print out results

if errorIndication:

print(errorIndication)

else:

if errorStatus:

print('%s at %s' % (

errorStatus.prettyPrint(),

errorIndex and varBinds[int(errorIndex)-1] or '?'

)

)

else:

for name, val in varBinds:

print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))val.prettyPrint()))

1.3.1.3GETNEXT Command

nextCmd( authData, transportTarget, *varNames, lookupNames=False, lookupValues=False,lexicographicMode=False, ignoreNonIncreasingOid=False, maxRows=0 )

Виконати SNMP запит GETNEXT і повернути відповідь або повідомлення про помилку.GETNEXT тип запиту випливає, посилаючись на керовані об'єкти.

AuthDatatransportTargetlookupNames і lookupValues ​​параметри мають ту ж семантику, як і в getCmd методі.

*varNames параметр являє собою послідовність імен Managed Objects для запиту агента.

NextCmd метод повертає кортеж errorIndicationErrorStatuserrorIndex,varBindTable .

ErrorIndication , ErrorStatus і errorIndex параметри мають той же зміст, що і в getCmd метод.

VarBindTable параметр являє собою послідовність varBinds. Кожен VarBind з пари varBinds в varBindTable являють собою набір керованих об'єктів чиї імена об'єктів знаходяться всередині OID суб-дерева керованого ім'ям об'єкта, переданого в запиті. Іншими словами, з цієї OnelinerAPI, виклик nextCmd метода для одного керованого об'єкта може повернути послідовность керованих об'єктів, так що ім'я об'єкта передане в запиті буде префіксом для назв об'єктів, які повертаються у відповідь.

Попередню ситуацію можна змінити таким чином, щоб varBindTable повернувшись, будуть містити * всі * керовані об'єкти від пройшовшого в запиті до всіх доступних керованих об'єктів агента. Ця опція включена після передачі lexicographicMode = True параметру в метод nextCmd .

Параметр MAXROWS = NNN зупиняє генератор команд необхідну кількість разів (NNN).

Властивості varBinds параметрів така ж, як у getCmd методі.

Наступний код виконує операцію SNMP GETNEXT проти піддерева MIB:

  • Використання SNMP v1

  • з 'public' значенням

  • IPv4/UDP

  • проти агента прослуховування на локальній машині (UDP порт 161)

  • для деяких стовпців IF-MIB :: ifEntry

MibVariable об'єкт використовується на вході. Відповідь значення має бути перетворена в MIB-тип.

frompysnmp.entity.rfc3413.onelinerimportcmdgen

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.nextCmd(

cmdgen.CommunityData('public', mpModel=0),

cmdgen.UdpTransportTarget(('localhost', 161)),

cmdgen.MibVariable('IF-MIB', 'ifDescr'),

cmdgen.MibVariable('IF-MIB', 'ifType'),

cmdgen.MibVariable('IF-MIB', 'ifMtu'),

cmdgen.MibVariable('IF-MIB', 'ifSpeed'),

cmdgen.MibVariable('IF-MIB', 'ifPhysAddress'),

lookupValues=True

)

if errorIndication:

print(errorIndication)

else:

if errorStatus:

print('%s at %s' % (

errorStatus.prettyPrint(),

errorIndex and varBindTable[-1][int(errorIndex)-1] or '?'

)

)

else:

for varBindTableRow in varBindTable:

for name, val in varBindTableRow:

print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))

1.3.1.4GETBULK Command

bulkCmd( authData, transportTarget, nonRepeaters, maxRepetitions, *varNames,lookupNames=False, lookupValues=False, lexicographicMode=False,ignoreNonIncreasingOid=False, maxRows=0 )

Виконати SNMP запит GetBulk і повернути відповідь або повідомлення про помилку. Тип GetBulk запиту має ту ж семантику як GETNEXT за винятком можливості повідомити декілька керованих об'єктів на кожну керовану назву об'єкта, переданого в запиті.

AuthDatatransportTarget*varNameslookupNameslookupValues ​​,lexicographicMode і MAXROWS вхідних параметрів для bulkCmd методу такі ж, яку nextCmd методі.

NonRepeaters параметр вказує, скільки *varNames переданих в запиті повинні бути запитані для одного примірника в запиті.

MaxRepetitions параметр вказує, скільки примірників керованих об'єктівв *varNames, повинні бути запитані в рамках одного запиту.

BulkCmd метод повертає кортеж з errorIndicationErrorStatuserrorIndex, varBindTable мають той же зміст, що і в nextCmd методі.

Наступний код виконує операцію SNMPGetBulk для піддерева MIB:

  • Використання SNMP v3

  • з SNMPv3, користувач 'usr-sha-aes128', SHA протокол аутентифікація, протокол конфіденційності AES128

  • IPv6/UDP

  • проти агента прослуховування на :: 1 (UDP порт 161)

  • зі значеннями non-repeaters = 0, max-repetitions = 20

  • для SNMPv2-MIB :: system subtree

MibVariable об'єкт використовується на вході.

from pysnmp.entity.rfc3413.oneliner import cmdgen

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBindTable = cmdGen.bulkCmd(

cmdgen.UsmUserData('usr-sha-aes128', 'authkey1', 'privkey1',

authProtocol=cmdgen.usmHMACSHAAuthProtocol,

privProtocol=cmdgen.usmAesCfb128Protocol),

cmdgen.Udp6TransportTarget(('::1', 161)),

0, 20,

cmdgen.MibVariable('SNMPv2-MIB', 'system')

)

if errorIndication:

print(errorIndication)

else:

if errorStatus:

print('%s at %s' % (

errorStatus.prettyPrint(),

errorIndex and varBindTable[-1][int(errorIndex)-1] or '?'

)

)

else:

for varBindTableRow in varBindTable:

for name, val in varBindTableRow:

print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))

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