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

1.4.2Асинхронний оригінатор повідомлення

Додаток оригінатор повідомлень реалізується в рамках одного класу:

Клас AsynNotificationOriginator ([ snmpContext ])

Створює асинхронний SNMP об'єкт оригінатора повідомлень.

Єдиний метод класу AsynNotificationOriginator, аналогічний описаному в NotificationOriginator  класу за винятком того, що асинхронний інтерфейс використовує функцію зворотного виклику для підтвердження доставки після підтвердження повідомлення.

sendNotification ( authData , transportTarget , NotifyType , NotificationType , varBinds , (cbFun , cbCtx ))

Підготовка SNMP TRAP або INFORM повідомлення.

Повертає sendRequestHandle значення.

CbFun параметр є посиланням на викликуваний об'єкт (наприклад, функції Python), який приймає наступні параметри:

cbFun ( sendRequestHandle , errorIndication , cbCtx )

Де sendRequestHandle , errorIndication і cbCtx параметри мають той же зміст, що й у функції зворотного виклику в AsynCommandGenerator.getCmd методі.

CbCtx параметр має той же зміст, що і в AsynCommandGenerator.getCmd методі.

NotifyType , NotificationType і varBinds параметри мають той же зміст, що і вNotificationOriginator.sendNotification методі за винятком того, що тут він передається в якості кортежу.

SendNotification метод повертає унікальний sendRequestHandle - ціле значення, яке використовується для узгодження подальших відповідей підтвердження доставки в довільних повідомленнях.

Після одного чи декількох запитів,які були виклакані за одним або кількома з перерахованих вище методів, повинен бути викликаний TransportDispatcher. Це можна зробити застосувавши:

asynNotificationOriginator.snmpEngine.transportDispatcher.runDispatcher ()

Де asynNotificationOriginator є AsynNotificationOriginator екземпляром класу.

RunDispatcher () метод обривається, коли немає очікуваних запитів, які залишились для запуску додатків.

Наступний код відправляє кілька одночасних SNMP INFORM повідомлень декільком менеджерам. Перевірка справжності інформації, використовуваної в цьому прикладі є однаковим для всіх цілей.

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

  • public SNMPv2

  • IPv4/UDP

  • прослуховування менеджерів на 127.0.0.1, 127.0.0.2, 127.0.0.3 (порт 162)

from pysnmp.entity.rfc3413.oneliner import ntforg

from pysnmp.proto import rfc1902

def cbFun(sendRequestHandle, errorIndication, cbCtx):

if errorIndication:

print(errorIndication)

else:

print('INFORM %s delivered' % sendRequestHandle)

ntfOrg = ntforg.AsynNotificationOriginator()

for target in ( ntforg.UdpTransportTarget(('127.0.0.1', 162)),

ntforg.UdpTransportTarget(('127.0.0.2', 162)),

ntforg.UdpTransportTarget(('127.0.0.3', 162)) ):

ntfOrg.sendNotification(

ntforg.CommunityData('public'),

target,

'inform',

ntforg.MibVariable('SNMPv2-MIB', 'coldStart'),

( ('1.3.6.1.2.1.1.5.0', rfc1902.OctetString('system name')), ),

(cbFun, None)

)

ntfOrg.snmpEngine.transportDispatcher.runDispatcher()

Наведений вище сценарій завершується, як і всі запити, або виконуються або завершуться по тайм-ауту. 

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