1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
"""
Send crafted TRAP PDU
+++++++++++++++++++++
Initialize TRAP PDU and pass it over to unified SNMPv3 message processing
framework for further treatment.
* SNMPv2c
* with community name 'public'
* over IPv4/UDP
* send TRAP notification
* initialize TRAP PDU with the following var-binds:
1.3.6.1.2.1.1.3.0 = 123
1.3.6.1.6.3.1.1.4.1.0 = 1.3.6.1.6.3.1.1.5.1
Functionally similar to:
| $ snmptrap -v2c -c public demo.pysnmp.com 0 1.3.6.1.6.3.1.1.5.1
"""#
from pysnmp.entity import engine, config
from pysnmp.carrier.asyncore.dgram import udp
from pysnmp.entity.rfc3413 import ntforg
from pysnmp.proto.api import v2c
# Create SNMP engine instance
snmpEngine = engine.SnmpEngine()
# SecurityName <-> CommunityName mapping
config.addV1System(snmpEngine, "my-area", "public")
# Specify security settings per SecurityName (SNMPv2c -> 1)
config.addTargetParams(snmpEngine, "my-creds", "my-area", "noAuthNoPriv", 1)
# Setup transport endpoint and bind it with security settings yielding
# a target name
config.addTransport(
snmpEngine, udp.domainName, udp.UdpSocketTransport().openClientMode()
)
# Create named target
config.addTargetAddr(
snmpEngine, "my-nms", udp.domainName, ("127.0.0.1", 162), "my-creds"
)
# *** SNMP engine configuration is complete by this line ***
# Create SNMP v2c TRAP PDU with defaults
trapPDU = v2c.TrapPDU()
v2c.apiTrapPDU.setDefaults(trapPDU)
# Set custom var-binds to TRAP PDU
v2c.apiTrapPDU.setVarBinds(
trapPDU,
[
# sysUpTime
(v2c.ObjectIdentifier("1.3.6.1.2.1.1.3.0"), v2c.TimeTicks(123)),
# snmpTrapPDU
(
(1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0),
v2c.ObjectIdentifier((1, 3, 6, 1, 6, 3, 1, 1, 5, 1)),
),
],
)
# Create Notification Originator App instance.
ntfOrg = ntforg.NotificationOriginator()
# Error/confirmation receiver
# noinspection PyUnusedLocal,PyUnusedLocal,PyUnusedLocal,PyUnusedLocal,PyUnusedLocal
def cbFun(
snmpEngine,
sendRequestHandle,
errorIndication,
errorStatus,
errorIndex,
varBinds,
cbCtx,
):
print(
"Notification {}, status - {}".format(
sendRequestHandle, errorIndication and errorIndication or "delivered"
)
)
# Build and submit notification message to dispatcher
ntfOrg.sendPdu(
snmpEngine,
# Notification targets
"my-nms", # target address
None,
"", # contextEngineId, contextName
trapPDU,
cbFun,
)
print("Notification is scheduled to be sent")
# Run I/O dispatcher which would send pending message and process response
snmpEngine.transportDispatcher.runDispatcher()
|