Skip to content

Instantly share code, notes, and snippets.

@mjuenema
Last active November 5, 2021 21:16
Show Gist options
  • Save mjuenema/13182292443be856c92bb60f6fbbd2ef to your computer and use it in GitHub Desktop.
Save mjuenema/13182292443be856c92bb60f6fbbd2ef to your computer and use it in GitHub Desktop.
Example net-snmp/snmptrapd traphandle

Example net-snmp/snmptrapd traphandle

#!/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:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment