You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.5 KiB
75 lines
2.5 KiB
### SCRIPT NAME: snmp.py
|
|
### AUTHOR: Michael Camp Bentley aka JKat54 (JKat54 at datashepherds.com)
|
|
### Copyright 2016 Michael Camp Bentley
|
|
###
|
|
### Licensed under the Apache License, Version 2.0 (the "License");
|
|
### you may not use this file except in compliance with the License.
|
|
### You may obtain a copy of the License at
|
|
###
|
|
### http://www.apache.org/licenses/LICENSE-2.0
|
|
###
|
|
### Unless required by applicable law or agreed to in writing, software
|
|
### distributed under the License is distributed on an "AS IS" BASIS,
|
|
### WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
### See the License for the specific language governing permissions and
|
|
### limitations under the License.
|
|
###
|
|
### Description: A Splunk Modular Alert Add-on which allows you to send SNMP TRAPs directly from Splunk.
|
|
|
|
import sys
|
|
import json
|
|
from pysnmp.hlapi import *
|
|
import splunk.Intersplunk
|
|
import splunk.mining.dcutils as dcu
|
|
|
|
|
|
logger = dcu.getLogger()
|
|
|
|
def execute():
|
|
try:
|
|
# get the arguments suplied
|
|
payload = json.loads(sys.stdin.read())
|
|
config = payload.get('configuration', dict())
|
|
splunkapp = payload.get('app')
|
|
splunksearch = payload.get('search_name')
|
|
serverip = config.get('serverip')
|
|
port = str(config.get('port'))
|
|
community = config.get('community')
|
|
mibname = config.get('mibname')
|
|
mibobject = config.get('mibobject')
|
|
|
|
# log the objects supplied
|
|
logger.info(
|
|
"splunkapp: " + str(splunkapp)
|
|
+ ", splunksearch: " + str(splunksearch)
|
|
+ ", snmp_server: " + str(serverip)
|
|
+ ", snmp_port: " + str(port)
|
|
+ ", snmp_community: " + str(community)
|
|
+ ", snmp_mibname: " + str(mibname)
|
|
+ ", snmp_mibobject: " + str(mibobject)
|
|
)
|
|
|
|
errorIndication, errorStatus, errorIndex, varBinds = next(
|
|
sendNotification(
|
|
SnmpEngine(),
|
|
CommunityData(community),
|
|
UdpTransportTarget((serverip, port)),
|
|
ContextData(),
|
|
'trap',
|
|
NotificationType(ObjectIdentity(mibname, mibobject))
|
|
)
|
|
)
|
|
|
|
except Exception, e:
|
|
import traceback
|
|
stack = traceback.format_exc()
|
|
splunk.Intersplunk.generateErrorResults(str(e))
|
|
logger.error(str(e) + ". Traceback: " + str(stack))
|
|
|
|
if __name__ == '__main__':
|
|
if len(sys.argv) < 2 or sys.argv[1] != "--execute":
|
|
print >> sys.stderr, "FATAL Unsupported execution mode (expected --execute flag)"
|
|
sys.exit(1)
|
|
execute()
|
|
|