#!/usr/bin/python3
"""Example net-snmp/snmptrapd traphandle.
snmptrapd -a -c snmptrapd.conf -Obs -t -X
# snmptrapd.conf
doNotLogTraps yes
doNotFork yes
disableAuthorization yes
traphandle default /path/to/traphandle.py
"""
# HOSTNAME localhost
# TRANSPORT UDP: [127.0.0.1]:48122->[127.0.0.1]:162
# UPTIME DISMAN-EVENT-MIB::sysUpTimeInstance 17:3:21:52.13
# TRAPOID SNMPv2-MIB::snmpTrapOID.0 NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatNotification
# VARBINDx NET-SNMP-EXAMPLES-MIB::netSnmpExampleHeartbeatRate 123456
# ... ...
import sys
import os
data = {}
data['hostname'] = sys.stdin.readline().strip()
data['transport'] = sys.stdin.readline().strip()
data['uptime'] = sys.stdin.readline().strip().split()[-1]
data['trapoid'] = sys.stdin.readline().strip().split()[-1]
while True:
varbind = sys.stdin.readline().strip()
if not varbind:
break
k,v = varbind.split()
data[k] = v
# Fork as snmptrapd blocks while running traphandle.
if not os.fork():
# Do something with data
# {
# 'hostname': 'localhost',
# 'varbind1': 'value',
# 'varbind2': 'value',
# ...
# 'transport': 'UDP: [127.0.0.1]:35033->[127.0.0.1]:162',
# 'trapoid': 'netSnmpExampleHeartbeatNotification',
# 'uptime': '17:3:51:27.36'
# }
pass
References: