Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: fixed mtscan and Dockerfile #759

Merged
merged 3 commits into from
Sep 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
FROM alpine:3.20 as builder
FROM alpine:3.20 AS builder

ARG INSTALL_DIR=/app

ENV PYTHONUNBUFFERED 1
ENV PYTHONUNBUFFERED=1

# Install build dependencies
RUN apk add --no-cache bash python3 python3-dev gcc musl-dev libffi-dev openssl-dev \
Expand All @@ -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 {} \;"

# second stage
FROM alpine:3.20 as runner
FROM alpine:3.20 AS runner

ARG INSTALL_DIR=/app

Expand Down
2 changes: 1 addition & 1 deletion Dockerfile.debian
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
FROM debian:bookworm-slim

# 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

# Todo, figure out why using a workdir instead of full paths don't work
Expand Down
1 change: 0 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
version: "3"
services:
netalertx:
privileged: true
Expand Down
2 changes: 1 addition & 1 deletion front/plugins/mikrotik_scan/config.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"code_name": "mikrotik_scan",
"unique_prefix": "MTSCAN",
"plugin_type": "other",
"plugin_type": "device_scanner",
"execution_order" : "Layer_4",
"enabled": true,
"data_source": "script",
Expand Down
82 changes: 24 additions & 58 deletions front/plugins/mikrotik_scan/mikrotik.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
#!/usr/bin/env python
# test script by running:
# tbc

import os
import pathlib
Expand Down Expand Up @@ -40,42 +38,35 @@

def main():

mylog('verbose', [f'[{pluginName}] In script'])
mylog('verbose', [f'[{pluginName}] In script'])

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_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()
# init global variables
global MT_HOST, MT_PORT, MT_USER, MT_PASS

# Initialize the Plugin obj output file
plugin_objects = Plugin_Objects(RESULT_FILE)

# Create a Device_obj instance
device_handler = Device_obj(db)
# Mikrotik settings
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
#unknown_devices = device_handler.getUnknown()
#mylog('verbose', [f'[{pluginName}] Unknown devices count: {len(unknown_devices)}'])
plugin_objects = get_entries(plugin_objects)

all_devices = device_handler.getAll()
plugin_objects.write_result_file()

mylog('verbose', [f'[{pluginName}] Scan finished, found {len(plugin_objects)} devices'])

mylog('verbose', [f'[{pluginName}] all devices count: {len(all_devices)}'])

device_map = {d['dev_MAC']:d['dev_LastIP'] for d in all_devices}
def get_entries(plugin_objects: Plugin_Objects) -> Plugin_Objects:

try:
# 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
leases = api('/ip/dhcp-server/lease/print')



for lease in leases:
lease_id = lease.get('.id')
Expand All @@ -84,56 +75,31 @@ def main():
host_name = lease.get('host-name')
comment = lease.get('comment')
last_seen = lease.get('last-seen')
status = lease.get('status')

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

mylog('verbose', [f"ID: {lease_id}, Address: {address}, MAC Address: {mac_address}, Host Name: {host_name}, Comment: {comment}, Last Seen: {last_seen}, Status: {status}"])

if (status == "bound"):
plugin_objects.add_object(
# "Name-MAC", "LastIP", "IP", "Name","Host","LastSeen","Comment"
primaryId = mac_address,
secondaryId = device_map[mac_address],
secondaryId = '',
watched1 = address,
watched2 = device_name,
watched3 = host_name,
watched4 = last_seen,
watched2 = host_name,
watched3 = last_seen,
watched4 = '',
extra = '',
helpVal1 = comment,
foreignKey = mac_address)

plugin_objects.write_result_file()

except TrapError as e:
mylog('error', [f"An error occurred: {e}"])
except Exception as 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'])

return 0
return plugin_objects




#===============================================================================
# BEGIN
Expand Down