chore: fixed mtscan and Dockerfile

This commit is contained in:
elraro
2024-08-11 23:55:02 +02:00
parent 7c080302e8
commit ae1673c1c3
4 changed files with 30 additions and 67 deletions

View File

@@ -1,8 +1,8 @@
FROM alpine:3.20 as builder FROM alpine:3.20 AS builder
ARG INSTALL_DIR=/app ARG INSTALL_DIR=/app
ENV PYTHONUNBUFFERED 1 ENV PYTHONUNBUFFERED=1
# Install build dependencies # Install build dependencies
RUN apk add --no-cache bash python3 python3-dev gcc musl-dev libffi-dev openssl-dev \ RUN apk add --no-cache bash python3 python3-dev gcc musl-dev libffi-dev openssl-dev \
@@ -21,7 +21,7 @@ RUN pip install netifaces tplink-omada-client pycryptodome requests paho-mqtt sc
&& bash -c "find ${INSTALL_DIR} -type f \( -name '*.sh' -o -name '*.py' -o -name 'speedtest-cli' \) -exec chmod 750 {} \;" && bash -c "find ${INSTALL_DIR} -type f \( -name '*.sh' -o -name '*.py' -o -name 'speedtest-cli' \) -exec chmod 750 {} \;"
# second stage # second stage
FROM alpine:3.20 as runner FROM alpine:3.20 AS runner
ARG INSTALL_DIR=/app ARG INSTALL_DIR=/app

View File

@@ -1,7 +1,7 @@
FROM debian:bookworm-slim FROM debian:bookworm-slim
# default UID and GID # default UID and GID
ENV USER=pi USER_ID=1000 USER_GID=1000 PORT=20211 ENV USER=pi USER_ID=1000 USER_GID=1000 PORT=20211
#TZ=Europe/London #TZ=Europe/London
# Todo, figure out why using a workdir instead of full paths don't work # Todo, figure out why using a workdir instead of full paths don't work

View File

@@ -1,4 +1,3 @@
version: "3"
services: services:
netalertx: netalertx:
privileged: true privileged: true

View File

@@ -1,6 +1,4 @@
#!/usr/bin/env python #!/usr/bin/env python
# test script by running:
# tbc
import os import os
import pathlib import pathlib
@@ -42,41 +40,34 @@ def main():
mylog('verbose', [f'[{pluginName}] In script']) mylog('verbose', [f'[{pluginName}] In script'])
mt_host = get_setting_value('MTSCAN_MT_HOST') # init global variables
mt_port = get_setting_value('MTSCAN_MT_PORT') global MT_HOST, MT_PORT, MT_USER, MT_PASS
mt_user = get_setting_value('MTSCAN_MT_USER')
mt_password = get_setting_value('MTSCAN_MT_PASS')
#mylog('verbose', [f'[{pluginName}] Router: {mt_host}:{mt_port} user: {mt_user}, pass: {mt_password}'])
# Create a database connection
db = DB() # instance of class DB
db.open()
# Initialize the Plugin obj output file # Initialize the Plugin obj output file
plugin_objects = Plugin_Objects(RESULT_FILE) plugin_objects = Plugin_Objects(RESULT_FILE)
# Create a Device_obj instance # Mikrotik settings
device_handler = Device_obj(db) MT_HOST = get_setting_value('MTSCAN_MT_HOST')
MT_PORT = get_setting_value('MTSCAN_MT_PORT')
MT_USER = get_setting_value('MTSCAN_MT_USER')
MT_PASS = get_setting_value('MTSCAN_MT_PASS')
# Retrieve devices plugin_objects = get_entries(plugin_objects)
#unknown_devices = device_handler.getUnknown()
#mylog('verbose', [f'[{pluginName}] Unknown devices count: {len(unknown_devices)}'])
all_devices = device_handler.getAll() plugin_objects.write_result_file()
mylog('verbose', [f'[{pluginName}] all devices count: {len(all_devices)}']) mylog('verbose', [f'[{pluginName}] Scan finished, found {len(plugin_objects)} devices'])
device_map = {d['dev_MAC']:d['dev_LastIP'] for d in all_devices}
def get_entries(plugin_objects: Plugin_Objects) -> Plugin_Objects:
try: try:
# connect router # connect router
api = connect(username=mt_user, password=mt_password, host=mt_host, port=mt_port) api = connect(username=MT_USER, password=MT_PASS, host=MT_HOST, port=MT_PORT)
# get dhcp leases # get dhcp leases
leases = api('/ip/dhcp-server/lease/print') leases = api('/ip/dhcp-server/lease/print')
for lease in leases: for lease in leases:
lease_id = lease.get('.id') lease_id = lease.get('.id')
address = lease.get('address') address = lease.get('address')
@@ -86,53 +77,26 @@ def main():
last_seen = lease.get('last-seen') last_seen = lease.get('last-seen')
mylog('verbose', [f"ID: {lease_id}, Address: {address}, MAC Address: {mac_address}, Host Name: {host_name}, Comment: {comment}, Last Seen: {last_seen}"]) mylog('verbose', [f"ID: {lease_id}, Address: {address}, MAC Address: {mac_address}, Host Name: {host_name}, Comment: {comment}, Last Seen: {last_seen}"])
if mac_address in device_map.keys():
device_name = host_name
if comment != '':
device_name = comment
plugin_objects.add_object( plugin_objects.add_object(
# "Name-MAC", "LastIP", "IP", "Name","Host","LastSeen","Comment" primaryId = mac_address,
primaryId = mac_address, secondaryId = '',
secondaryId = device_map[mac_address], watched1 = address,
watched1 = address, watched2 = host_name,
watched2 = device_name, watched3 = last_seen,
watched3 = host_name, watched4 = '',
watched4 = last_seen, extra = '',
extra = '', helpVal1 = comment,
helpVal1 = comment, foreignKey = mac_address)
foreignKey = mac_address)
plugin_objects.write_result_file()
except TrapError as e: except TrapError as e:
mylog('error', [f"An error occurred: {e}"]) mylog('error', [f"An error occurred: {e}"])
except Exception as e: except Exception as e:
mylog('error', [f"Failed to connect to MikroTik API: {e}"]) mylog('error', [f"Failed to connect to MikroTik API: {e}"])
#for device in unknown_devices:
# domain_name, dns_server = execute_nslookup(device['dev_LastIP'], timeout)
# if domain_name != '':
# plugin_objects.add_object(
# # "MAC", "IP", "Server", "Name"
# primaryId = device['dev_MAC'],
# secondaryId = device['dev_LastIP'],
# watched1 = dns_server,
# watched2 = domain_name,
# watched3 = '',
# watched4 = '',
# extra = '',
# foreignKey = device['dev_MAC'])
#plugin_objects.write_result_file()
mylog('verbose', [f'[{pluginName}] Script finished']) mylog('verbose', [f'[{pluginName}] Script finished'])
return 0 return plugin_objects
#=============================================================================== #===============================================================================