mirror of
https://github.com/jokob-sk/NetAlertX.git
synced 2025-12-07 09:36:05 -08:00
@@ -5,18 +5,18 @@ import os
|
||||
import re
|
||||
import base64
|
||||
import json
|
||||
from datetime import datetime
|
||||
|
||||
INSTALL_PATH = os.getenv('NETALERTX_APP', '/app')
|
||||
|
||||
sys.path.append(f"{INSTALL_PATH}/front/plugins")
|
||||
sys.path.append(f'{INSTALL_PATH}/server')
|
||||
sys.path.append(f'{INSTALL_PATH}/server')
|
||||
|
||||
from logger import mylog, Logger
|
||||
from utils.datetime_utils import timeNowDB
|
||||
from const import default_tz, fullConfPath
|
||||
from logger import mylog # noqa: E402 [flake8 lint suppression]
|
||||
from utils.datetime_utils import timeNowDB # noqa: E402 [flake8 lint suppression]
|
||||
from const import default_tz, fullConfPath # noqa: E402 [flake8 lint suppression]
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
# -------------------------------------------------------------------------------
|
||||
def read_config_file():
|
||||
"""
|
||||
retuns dict on the config file key:value pairs
|
||||
@@ -25,15 +25,15 @@ def read_config_file():
|
||||
|
||||
filename = fullConfPath
|
||||
|
||||
|
||||
print('[plugin_helper] reading config file')
|
||||
|
||||
# load the variables from .conf
|
||||
with open(filename, "r") as file:
|
||||
code = compile(file.read(), filename, "exec")
|
||||
|
||||
confDict = {} # config dictionary
|
||||
confDict = {} # config dictionary
|
||||
exec(code, {"__builtins__": {}}, confDict)
|
||||
return confDict
|
||||
return confDict
|
||||
|
||||
|
||||
configFile = read_config_file()
|
||||
@@ -42,6 +42,7 @@ if timeZoneSetting not in all_timezones:
|
||||
timeZoneSetting = default_tz
|
||||
timeZone = pytz.timezone(timeZoneSetting)
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Sanitizes plugin output
|
||||
def handleEmpty(input):
|
||||
@@ -54,70 +55,72 @@ def handleEmpty(input):
|
||||
input = re.sub(r'[^\x00-\x7F]+', ' ', input)
|
||||
input = input.replace('\n', '') # Removing new lines
|
||||
return input
|
||||
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Sanitizes string
|
||||
def rmBadChars(input):
|
||||
|
||||
|
||||
input = handleEmpty(input)
|
||||
input = input.replace("'", '_') # Removing ' (single quotes)
|
||||
|
||||
|
||||
return input
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# check if this is a router IP
|
||||
def is_typical_router_ip(ip_address):
|
||||
# List of common default gateway IP addresses
|
||||
common_router_ips = [
|
||||
"192.168.0.1", "192.168.1.1", "192.168.1.254", "192.168.0.254",
|
||||
"10.0.0.1", "10.1.1.1", "192.168.2.1", "192.168.10.1", "192.168.11.1",
|
||||
"192.168.100.1", "192.168.101.1", "192.168.123.254", "192.168.223.1",
|
||||
"192.168.31.1", "192.168.8.1", "192.168.254.254", "192.168.50.1",
|
||||
"192.168.3.1", "192.168.4.1", "192.168.5.1", "192.168.9.1",
|
||||
"192.168.15.1", "192.168.16.1", "192.168.20.1", "192.168.30.1",
|
||||
"192.168.42.1", "192.168.62.1", "192.168.178.1", "192.168.1.1",
|
||||
"192.168.1.254", "192.168.0.1", "192.168.0.10", "192.168.0.100",
|
||||
"192.168.0.254"
|
||||
]
|
||||
|
||||
return ip_address in common_router_ips
|
||||
# List of common default gateway IP addresses
|
||||
common_router_ips = [
|
||||
"192.168.0.1", "192.168.1.1", "192.168.1.254", "192.168.0.254",
|
||||
"10.0.0.1", "10.1.1.1", "192.168.2.1", "192.168.10.1", "192.168.11.1",
|
||||
"192.168.100.1", "192.168.101.1", "192.168.123.254", "192.168.223.1",
|
||||
"192.168.31.1", "192.168.8.1", "192.168.254.254", "192.168.50.1",
|
||||
"192.168.3.1", "192.168.4.1", "192.168.5.1", "192.168.9.1",
|
||||
"192.168.15.1", "192.168.16.1", "192.168.20.1", "192.168.30.1",
|
||||
"192.168.42.1", "192.168.62.1", "192.168.178.1", "192.168.1.1",
|
||||
"192.168.1.254", "192.168.0.1", "192.168.0.10", "192.168.0.100",
|
||||
"192.168.0.254"
|
||||
]
|
||||
|
||||
return ip_address in common_router_ips
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
# Check if a valid MAC address
|
||||
def is_mac(input):
|
||||
input_str = str(input).lower() # Convert to string and lowercase so non-string values won't raise errors
|
||||
|
||||
|
||||
isMac = bool(re.match("[0-9a-f]{2}([-:]?)[0-9a-f]{2}(\\1[0-9a-f]{2}){4}$", input_str))
|
||||
|
||||
|
||||
if not isMac: # If it's not a MAC address, log the input
|
||||
mylog('verbose', [f'[is_mac] not a MAC: {input_str}'])
|
||||
|
||||
|
||||
return isMac
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
def decodeBase64(inputParamBase64):
|
||||
|
||||
# Printing the input list to check its content.
|
||||
mylog('debug', ['[Plugins] Helper base64 input: ', input])
|
||||
print('[Plugins] Helper base64 input: ')
|
||||
print(input)
|
||||
|
||||
|
||||
# Extract the base64-encoded subnet information from the first element
|
||||
# The format of the element is assumed to be like 'param=b<base64-encoded-data>'.
|
||||
mylog('debug', ['[Plugins] Helper base64 input: ', input])
|
||||
print('[Plugins] Helper base64 input: ')
|
||||
print(input)
|
||||
|
||||
# Extract the base64-encoded subnet information from the first element
|
||||
# The format of the element is assumed to be like 'param=b<base64-encoded-data>'.
|
||||
# Printing the extracted base64-encoded information.
|
||||
mylog('debug', ['[Plugins] Helper base64 inputParamBase64: ', inputParamBase64])
|
||||
|
||||
mylog('debug', ['[Plugins] Helper base64 inputParamBase64: ', inputParamBase64])
|
||||
|
||||
# Decode the base64-encoded subnet information to get the actual subnet information in ASCII format.
|
||||
result = base64.b64decode(inputParamBase64).decode('ascii')
|
||||
|
||||
# Print the decoded subnet information.
|
||||
mylog('debug', ['[Plugins] Helper base64 result: ', result])
|
||||
mylog('debug', ['[Plugins] Helper base64 result: ', result])
|
||||
|
||||
return result
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
def decode_settings_base64(encoded_str, convert_types=True):
|
||||
"""
|
||||
@@ -167,7 +170,7 @@ def decode_settings_base64(encoded_str, convert_types=True):
|
||||
def normalize_mac(mac):
|
||||
# Split the MAC address by colon (:) or hyphen (-) and convert each part to uppercase
|
||||
parts = mac.upper().split(':')
|
||||
|
||||
|
||||
# If the MAC address is split by hyphen instead of colon
|
||||
if len(parts) == 1:
|
||||
parts = mac.upper().split('-')
|
||||
@@ -177,14 +180,15 @@ def normalize_mac(mac):
|
||||
|
||||
# Join the parts with colon (:)
|
||||
normalized_mac = ':'.join(normalized_parts)
|
||||
|
||||
|
||||
return normalized_mac
|
||||
|
||||
|
||||
# -------------------------------------------------------------------
|
||||
class Plugin_Object:
|
||||
"""
|
||||
"""
|
||||
Plugin_Object class to manage one object introduced by the plugin.
|
||||
An object typically is a device but could also be a website or something
|
||||
An object typically is a device but could also be a website or something
|
||||
else that is monitored by the plugin.
|
||||
"""
|
||||
|
||||
@@ -222,8 +226,8 @@ class Plugin_Object:
|
||||
self.helpVal4 = helpVal4 or ""
|
||||
|
||||
def write(self):
|
||||
"""
|
||||
Write the object details as a string in the
|
||||
"""
|
||||
Write the object details as a string in the
|
||||
format required to write the result file.
|
||||
"""
|
||||
line = "{}|{}|{}|{}|{}|{}|{}|{}|{}|{}|{}|{}|{}\n".format(
|
||||
@@ -243,6 +247,7 @@ class Plugin_Object:
|
||||
)
|
||||
return line
|
||||
|
||||
|
||||
class Plugin_Objects:
|
||||
"""
|
||||
Plugin_Objects is the class that manages and holds all the objects created by the plugin.
|
||||
@@ -303,7 +308,3 @@ class Plugin_Objects:
|
||||
|
||||
def __len__(self):
|
||||
return len(self.objects)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user