Skip to content
This repository was archived by the owner on Dec 17, 2021. It is now read-only.

Commit 5d40c86

Browse files
authored
Merge pull request #71 from splunk/develop
Develop
2 parents ebd56d3 + 061fd48 commit 5d40c86

File tree

6 files changed

+39
-5
lines changed

6 files changed

+39
-5
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
mibs/.*\.py
2+
poetry.lock

.github/workflows/review-secrets.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ jobs:
99
uses: actions/checkout@v1
1010
- name: Trufflehog Actions Scan
1111
uses: edplato/[email protected]
12-
12+
with:
13+
scanArguments: "-x /github/workspace/.github/workflows/exclude-patterns.txt"

splunk_connect_for_snmp_traps/manager/hec_sender.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import logging
33
import os
44
import threading
5+
import time
56

67
import requests
78

@@ -24,6 +25,7 @@ def configure_thread_pool(self):
2425
user_suggested_working_threads = self._args.hec_threads
2526
max_workers = max_allowed_working_threads(user_suggested_working_threads)
2627
logger.debug(f"Configured a thread-pool with {max_workers} concurrent threads")
28+
logger.debug(f"Configured Splunk index for SNMP traps: {self._args.index}")
2729
return concurrent.futures.ThreadPoolExecutor(max_workers=max_workers)
2830

2931
def get_session(self):
@@ -33,9 +35,10 @@ def get_session(self):
3335

3436
def post_data_to_thread_pool(self, host, variables_binds):
3537
data = {
38+
"time": time.time(),
3639
"sourcetype": "sc4snmp:traps",
3740
"host": host,
38-
"index": self._server_config["splunk"]["index"],
41+
"index": self._args.index,
3942
"event": variables_binds,
4043
}
4144

splunk_connect_for_snmp_traps/manager/mib_server_client.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
1-
import logging
21
import json
3-
import requests
2+
import logging
43
import os
4+
5+
import requests
56
from requests.adapters import HTTPAdapter
67
from requests.packages.urllib3.util.retry import Retry
78

9+
from splunk_connect_for_snmp_traps.utilities import format_value_for_mib_server
10+
811
logger = logging.getLogger(__name__)
912

1013

@@ -22,7 +25,7 @@ def get_translation(var_binds, mib_server_url):
2225
var_bind = {
2326
"oid": str(name),
2427
"oid_type": name.__class__.__name__,
25-
"val": str(val),
28+
"val": format_value_for_mib_server(val, val.__class__.__name__),
2629
"val_type": val.__class__.__name__,
2730
}
2831
var_binds_list.append(var_bind)

splunk_connect_for_snmp_traps/snmp_trap_server.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ def main():
3232
)
3333
parser.add_argument("-c", "--config", default="config.yaml", help="Config File")
3434

35+
parser.add_argument(
36+
"-i", "--index", default="##EVENTS_INDEX##", help="Index for traps"
37+
)
38+
3539
args = parser.parse_args()
3640

3741
log_level = args.loglevel.upper()

splunk_connect_for_snmp_traps/utilities.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,24 @@ def initialize_signals_handler():
2929
)
3030
for one_signal in signals_to_catch:
3131
signal.signal(one_signal, default_signal_handler)
32+
33+
34+
# 1.3.6.1.2.1.2.2.1.4.1|Integer|16436|16436|True
35+
# 1.3.6.1.2.1.1.6.0|DisplayString|San Francisco, California, United States|San Francisco, California, United States|True
36+
# 1.3.6.1.2.1.2.2.1.6.2|OctetString|<null>ybù@|0x00127962f940|False
37+
# 1.3.6.1.2.1.1.9.1.2.7|ObjectIdentity|1.3.6.1.2.1.50|SNMPv2-SMI::mib-2.50|False
38+
# 1.3.6.1.2.1.6.13.1.4.195.218.254.105.51684.194.67.10.226.22|IpAddress|ÂCâ|194.67.10.226|False
39+
# 1.3.6.1.2.1.25.3.2.1.6.1025|Counter32|0|0|True
40+
# 1.3.6.1.2.1.31.1.1.1.15.2|Gauge32|100|100|True
41+
# 1.3.6.1.2.1.1.3.0|TimeTicks|148271768|148271768|True
42+
# 1.3.6.1.4.1.2021.10.1.6.1|Opaque|Ÿx>ë…|0x9f78043eeb851f|False
43+
# 1.3.6.1.2.1.31.1.1.1.10.1|Counter64|453477588|453477588|True
44+
#
45+
# As you can see, for most types str(value) == value.prettyPrint(), however:
46+
# - for Opaque, IpAddress, and OctetString we need to use prettyPrint(), otherwise the data is rubbish
47+
# - any other type should use str() before sending data to MIB-server
48+
def format_value_for_mib_server(value, value_type):
49+
if value_type in ("OctetString", "IpAddress", "Opaque"):
50+
return value.prettyPrint()
51+
else:
52+
return str(value)

0 commit comments

Comments
 (0)