
- •Засоби аналізу та управління мережами методичні вказівки
- •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.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 метод повертає кортеж з errorIndication, ErrorStatus, errorIndex, varBinds.
Непустий 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 метод повертає кортеж з errorIndication, ErrorStatus, errorIndex, varBinds.
Наступний код виконує операцію 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 тип запиту випливає, посилаючись на керовані об'єкти.
AuthData, transportTarget, lookupNames і lookupValues параметри мають ту ж семантику, як і в getCmd методі.
*varNames параметр являє собою послідовність імен Managed Objects для запиту агента.
NextCmd метод повертає кортеж errorIndication, ErrorStatus, errorIndex,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 за винятком можливості повідомити декілька керованих об'єктів на кожну керовану назву об'єкта, переданого в запиті.
AuthData, transportTarget, *varNames, lookupNames, lookupValues ,lexicographicMode і MAXROWS вхідних параметрів для bulkCmd методу такі ж, яку nextCmd методі.
NonRepeaters параметр вказує, скільки *varNames переданих в запиті повинні бути запитані для одного примірника в запиті.
MaxRepetitions параметр вказує, скільки примірників керованих об'єктівв *varNames, повинні бути запитані в рамках одного запиту.
BulkCmd метод повертає кортеж з errorIndication, ErrorStatus, errorIndex, 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()))