- •Засоби аналізу та управління мережами методичні вказівки
- •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.4Стандартні snmp додатки (Асинхронні додатки)
1.4.1Асинхронний генератор команд
Асинхронний API для додатків Oneliner насправді є основою для синхронної версії, так що вони дуже схожі. Цей асинхронний API використовується для забезпечення роботи кількох, можливо різних, SNMP додатків і в той же час для обробки інших видів діяльності всередині користувальницької програми, коли SNMP додаток очікує введення/виводу.
Всі додатки команди генератора здійснюється в межах одного класу:
Клас AsynCommandGenerator ([ snmpEngine ]) створює об’єкт асинхронного генератора команд SNMP.
Методи екземплярів класу AsynCommandGenerator реалізації конкретних типів запиту аналогічні тим, які описані в розділі класу Command Generator за винятком того, що асинхронний інтерфейс використовує функцію зворотного виклику для надання відповідей.
1.4.1.1GET Command
getCmd( authData, transportTarget, varNames, (cbFun, cbCtx), lookupNames=False,lookupValues=False )
Підготовка SNMPGET запиту для відправки.
Повертає значенняsendRequestHandle.
CbFun параметр є посиланням на викликуваний об'єкт (наприклад, Pythonфункції), що мають наступний синтаксис:
cbFun ( sendRequestHandle , errorIndication , ErrorStatus , errorIndex , varBinds ,cbCtx )
Де sendRequestHandle ціле значення, яке використовується для зіставлення відповіді на запит. Його копія повертається за запитом метода getCmd.
CbCtx параметр є посиланням на cbCtx об'єкт, передається getCmd методу
ErrorIndication , ErrorStatus , errorIndex і varBinds параметри мають той же зміст, що і в getCmd метод.
authData, transportTarget, varNames, lookupNames і lookupValues параметри мають той же зміст, що і в getCmd методі за винятком того, що varNames передається у вигляді послідовності, а не як окремі екземпляри керованих об'єктів.
GetCmd метод повертає ціле значення – унікальний sendRequestHandle , яке використовується для узгодження подальших відповідей на це прохання.
Наступний код виконує кілька одночасних операцій SNMP GET для декількох екземплярів керованих об'єктів до одного агента. Перевірка справжності інформації, використовуваної в цьому прикладі є однаковими для всіх цілей.
Так GET операція:
Використовує SNMP v2c
З 'public'SNMPv2
Використовує IPv4/UDP
Прослуховування агента на 127.0.0.1
Для SNMPv2-MIB :: sysDescr.0, SNMPv2-MIB :: sysLocation.0 і SNMPv2-MIB :: sysName.0 об'єктів
from pysnmp.entity.rfc3413.oneliner import cmdgen
def cbFun(sendRequestHandle, errorIndication, errorStatus, errorIndex,
varBinds, cbCtx):
if errorIndication:
print(errorIndication)
return
if errorStatus:
print('%s at %s' % \
(errorStatus.prettyPrint(),
errorIndex and varBinds[int(errorIndex)-1] or '?')
)
return
for oid, val in varBinds:
if val is None:
print(oid.prettyPrint())
else:
print('%s = %s' % (oid.prettyPrint(), val.prettyPrint()))
cmdGen = cmdgen.AsynCommandGenerator()
for varName in ( cmdgen.MibVariable('SNMPv2-MIB', 'sysDescr', 0),
cmdgen.MibVariable('SNMPv2-MIB', 'sysLocation', 0),
cmdgen.MibVariable('SNMPv2-MIB', 'sysName', 0) ):
cmdGen.getCmd(
cmdgen.CommunityData('public'),
cmdgen.UdpTransportTarget(('127.0.0.1', 161)),
(varName,),
(cbFun, None)
)
cmdGen.snmpEngine.transportDispatcher.runDispatcher()
Всі запити і виконуються паралельно, тому тайм-аутіспроби налагодження встановлені зазамовчуванням, наведений вище код буде припинено через 6 секунд, незалежно від агентів.
setCmd ( authData , transportTarget , varBinds , ( cbFun , cbCtx ), lookupNames = False ,lookupValues = False )
Підготовка SNMPSET запиту для відправки. Повертає sendRequestHandle значення.
AuthData , transportTarget , іменізмінної , lookupNames і lookupValues параметри мають той же зміст, що і в setCmd методі.
CbFun і cbCtx параметри мають той же зміст, що і в AsynCommandGenerator.getCmd методі.
1.4.1.2GETNEXT Command
nextCmd( authData, transportTarget, varNames, (cbFun, cbCtx), lookupNames=False,lookupValues=False )
Підготовка SNMP запиту GETNEXT для відправки.
Повертає sendRequestHandle значення.
authData, transportTarget, varNames, lookupNames and lookupValues парам пара мають той же зміст, що і в nextCmd метод за винятком того, що varNames передається у вигляді послідовності, а не як окремі екземпляри керованих об'єктів імена.
CbFun і cbCtx параметри мають той же зміст, що і в AsynCommandGenerator.getCmd методі, параметр varNames має той же зміст, що і в CommandGenerator.nextCmd методі за винятком того, що тут він передається в якості кортежу.
Наступний код виконує кілька одночасних операцій SNMP GETNEXT від різних агентів, що ідентифікуються за їх адресами транспорту. Перевірка справжності інформації і Managed Objects екземпляри, що використовуються в цьому прикладі є однаковими для всіх цілей. Так GETNEXT операція:
Використовує SNMP v3
з SNMPv3 з користувачем USR-md5-де, MD5 аутентифікацію і протоколи конфіденційностіDES
IPv4/UDP
прослуховування агента на 127.0.0.1, 192.168.1.1, 10.40.1.1 (порт 161)
для SNMPv2-MIB::system subtree
from pysnmp.entity.rfc3413.oneliner import cmdgen
def cbFun(sendRequestHandle, errorIndication, \
errorStatus, errorIndex, varBindTable, cbCtx):
if errorIndication:
print(errorIndication)
return
if errorStatus:
print('%s at %s' % \
(errorStatus.prettyPrint(),
errorIndex and varBindTable[-1][int(errorIndex)-1] or '?')
)
return
for varBindRow in varBindTable:
for oid, val in varBindRow:
if val is None:
return # stop table retrieval
else:
print('%s = %s' % (oid.prettyPrint(), val.prettyPrint()))
return True # continue table retrieval
cmdGen = cmdgen.AsynCommandGenerator()
for transportTarget in ( cmdgen.UdpTransportTarget(('127.0.0.1', 161)),
cmdgen.UdpTransportTarget(('192.168.1.1', 161)),
cmdgen.UdpTransportTarget(('10.40.1.1', 161)) ):
cmdGen.nextCmd(
cmdgen.UsmUserData('usr-md5-des', 'authkey1', 'privkey1'),
transportTarget,
( cmdgen.MibVariable('SNMPv2-MIB', 'system'), ),
(cbFun, None)
)
cmdGen.snmpEngine.transportDispatcher.runDispatcher()
1.4.1.3GETBULK Command
bulkCmd( authData, transportTarget, nonRepeaters, maxRepetitions, varNames, (cbFun,cbCtx), lookupNames=False, lookupValues=False )
Підготовка SNMP запиту GetBulk для відправки. Повертає sendRequestHandle значення.
authData, transportTarget, nonRepeaters, maxRepetitions varNames,lookupNames і lookupValues параметри мають той же зміст, що і в bulkCmd методі за винятком того, що varNames передається у вигляді послідовності, а не як окремі екземпляри керованих об'єктів.
CbFun і cbCtx параметри мають той же зміст, що і в AsynCommandGenerator.nextCmd методі.
Після одного чи декількох запитів,які були викликані за одним або кількома з перерахованих вище методів, повинен бути викликаний TransportDispatcher. Це можна зробити застосувавши:
asynCommandGenerator.snmpEngine.transportDispatcher.runDispatcher()
Де asynCommandGenerator є AsynCommandGenerator екземпляр класу.
RunDispatcher() метод обривається, коли немає очікуваних запитів, які залишились для запуску додатків.
