From 3a939bd601a0caef9458da0bbde630753d356595 Mon Sep 17 00:00:00 2001 From: wpanda Date: Wed, 24 Dec 2025 11:40:18 +0100 Subject: [PATCH] . --- .gitignore | 2 + Dev/n8n/panda_n8n/docker-compose.yml | 1 + .../panda_n8n/n8n-data/database.sqlite-shm | Bin 32768 -> 3 bytes Dev/n8n/panda_n8n/n8n-data/n8nEventLog-1.log | 2 - Dev/n8n/panda_n8n/n8n-data/n8nEventLog.log | 2 - Dev/n8n/panda_n8n/n8n-scripts/get_sw_fw.py | 97 ++++++++++++++++++ 6 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 Dev/n8n/panda_n8n/n8n-scripts/get_sw_fw.py diff --git a/.gitignore b/.gitignore index faccf71..dbc5031 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /Dev/mysql_n8n_db/data /Dev/mysql_n8n_db/mysql-data Backup/Sophos/APS_HH.scx +*.log +*.log diff --git a/Dev/n8n/panda_n8n/docker-compose.yml b/Dev/n8n/panda_n8n/docker-compose.yml index 5734071..e8da674 100644 --- a/Dev/n8n/panda_n8n/docker-compose.yml +++ b/Dev/n8n/panda_n8n/docker-compose.yml @@ -6,6 +6,7 @@ services: - "5678:5678" volumes: - ./n8n-data:/home/node/.n8n + - ./n8n-scripts:/home/node/scripts environment: - N8N_HOST=${N8N_HOST:-localhost} - N8N_PORT=5678 diff --git a/Dev/n8n/panda_n8n/n8n-data/database.sqlite-shm b/Dev/n8n/panda_n8n/n8n-data/database.sqlite-shm index e18541b58ee9a466499ef7d5c0a94ce5ff91be42..7f6843617b6503137c5bb12890850791d66b4bb8 100644 GIT binary patch literal 3 Kcmb1mqzeE7JOL;G literal 32768 zcmeI5S#uRt6onTF5SfD_US<$50^$G!RAvMPM3m8q*?=;GQ-BN*W&x)#1R-J)h7e{& zPr}1k?sL{Td!H}KWA={yI~X=Hsb)a- zbv|pT8#!l+Gh#JZlzA`j=IwuO-OYb^|3U0dNi0b}kMf3{`(I$xPUFwo7smE-$l|jz zHI5oj&87;eU6k+f=T~!X4Yigkpo%E-*F! zE9J-apMDJU8w=Z0Ol_ttmhC%6na@05P%9|^&c4@}{XqRl*}mVXV2rN(?nc@9zR%8# zQJ+%tsQJ`a)Yp{xDyT}TiaJi6piWY!sK@Q~_r?3Gx#u)xzrPkU7{|P}7Mu_I`*ZCD zD*m~EbBiha8QYqDo3beT%gLq2QR6B9_py-gzQ@+=+h6Cah6sp&2#A0Ph=2%)fCz|y z2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0Ph=2%)fCz|y2#A0P zh=2%)fCz|y2#A0Ph=2%)fCz|y2s9Z2xftDK?waVL&GBxc=>&7#@O*;V#+z!1w)h>_ z8ZTg6q-JQ%iVD5>pZ~Amb&SOne1s)fk9_Qmb4KTLOmtFpoN0ITb(}#|!nemCunI1& z#)Z&hD$=XoF684!x1XYC3PQipy-wWep#z6jXO~z~#CV zDf?yBdt8noE`uv}5(K7(_GY6?Xs=u2J8r`}kN&0e43vO70+Zc^_9Ab@Zl@VowYO-D z>G%YnMI+V7WH}RyoaVX--#Lx{s#o`5?qX pw7~!X diff --git a/Dev/n8n/panda_n8n/n8n-data/n8nEventLog-1.log b/Dev/n8n/panda_n8n/n8n-data/n8nEventLog-1.log index b5e8066..e69de29 100644 --- a/Dev/n8n/panda_n8n/n8n-data/n8nEventLog-1.log +++ b/Dev/n8n/panda_n8n/n8n-data/n8nEventLog-1.log @@ -1,2 +0,0 @@ -{"__type":"$$EventMessageAudit","id":"10636aec-f055-4a49-8093-4f7f253589e7","ts":"2025-12-24T10:28:22.058+00:00","eventName":"n8n.audit.workflow.created","message":"n8n.audit.workflow.created","payload":{"userId":"83518984-8079-471d-bb46-b38676ef4115","_email":"i.meszely@aps-hh.de","_firstName":"Istvan","_lastName":"Meszely","globalRole":"global:owner","workflowId":"BXlx8AYRPLgg2wuh","workflowName":"My workflow"}} -{"__type":"$$EventMessageConfirm","confirm":"10636aec-f055-4a49-8093-4f7f253589e7","ts":"2025-12-24T10:28:22.058+00:00","source":{"id":"0","name":"eventBus"}} diff --git a/Dev/n8n/panda_n8n/n8n-data/n8nEventLog.log b/Dev/n8n/panda_n8n/n8n-data/n8nEventLog.log index 9c764cb..e69de29 100644 --- a/Dev/n8n/panda_n8n/n8n-data/n8nEventLog.log +++ b/Dev/n8n/panda_n8n/n8n-data/n8nEventLog.log @@ -1,2 +0,0 @@ -{"__type":"$$EventMessageAudit","id":"fe8b31f4-b3b1-4435-af25-9aaff5b202b1","ts":"2025-12-24T10:31:02.003+00:00","eventName":"n8n.audit.workflow.updated","message":"n8n.audit.workflow.updated","payload":{"userId":"83518984-8079-471d-bb46-b38676ef4115","_email":"i.meszely@aps-hh.de","_firstName":"Istvan","_lastName":"Meszely","globalRole":"global:owner","workflowId":"BXlx8AYRPLgg2wuh","workflowName":"My workflow"}} -{"__type":"$$EventMessageConfirm","confirm":"fe8b31f4-b3b1-4435-af25-9aaff5b202b1","ts":"2025-12-24T10:31:02.004+00:00","source":{"id":"0","name":"eventBus"}} diff --git a/Dev/n8n/panda_n8n/n8n-scripts/get_sw_fw.py b/Dev/n8n/panda_n8n/n8n-scripts/get_sw_fw.py new file mode 100644 index 0000000..a7dc211 --- /dev/null +++ b/Dev/n8n/panda_n8n/n8n-scripts/get_sw_fw.py @@ -0,0 +1,97 @@ +import re +import json +import sys +from netmiko import ConnectHandler +from netmiko.exceptions import NetmikoTimeoutException, NetmikoAuthenticationException + +def get_aruba_clients(host, username, password): + """ + Connects to an Aruba switch via SSH, gets hostname and client info, + and returns a list of dictionaries, each representing a client. + """ + device = { + 'device_type': 'aruba_aoscx', + 'host': host, + 'username': username, + 'password': password, + } + + all_clients_data = [] + print(f"Csatlakozás a(z) {host} eszközhöz...", file=sys.stderr) + try: + with ConnectHandler(**device) as net_connect: + print("Sikeres csatlakozás. Adatok lekérdezése...", file=sys.stderr) + + prompt = net_connect.find_prompt() + switch_hostname = prompt.strip('#> ') + + output = net_connect.send_command('show client ip') + ip_pattern = re.compile(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$') + + if isinstance(output, str): + lines = output.splitlines() + for line in lines[2:]: + columns = line.split() + if len(columns) >= 4: + potential_ip = columns[-1] + if ip_pattern.match(potential_ip): + client_data = { + 'switch_name': switch_hostname, + 'mac_address': columns[0], + 'interface': columns[1], + 'vlan': columns[2], + 'ip_address': potential_ip, + } + all_clients_data.append(client_data) + return all_clients_data + + print("Hiba: A parancs kimenete nem volt a várt formátumban.", file=sys.stderr) + return None + + except NetmikoTimeoutException: + print(f"Hiba: Időtúllépés a(z) {host} eszközhöz való csatlakozáskor.", file=sys.stderr) + return None + except NetmikoAuthenticationException: + print(f"Hiba: Sikertelen hitelesítés a(z) {host} eszközön. Ellenőrizd a jelszót.", file=sys.stderr) + return None + except Exception as e: + print(f"Váratlan hiba történt: {e}", file=sys.stderr) + return None + +if __name__ == "__main__": + # Konfigurációs fájl beolvasása + try: + with open('config.json', 'r') as f: + config = json.load(f) + except FileNotFoundError: + print("Hiba: A 'config.json' fájl nem található.", file=sys.stderr) + exit(1) + except json.JSONDecodeError: + print("Hiba: A 'config.json' fájl formátuma érvénytelen.", file=sys.stderr) + exit(1) + + SWITCH_IPS = config.get("switch_ips", []) + USERNAME = config.get("username") + PASSWORD = config.get("password") + + if not all([SWITCH_IPS, USERNAME, PASSWORD]): + print("Hiba: A 'config.json' fájl hiányos. Tartalmaznia kell 'switch_ips', 'username', és 'password' kulcsokat.", file=sys.stderr) + exit(1) + + all_switches_clients = [] + for ip in SWITCH_IPS: + print(f"\n--- Feldolgozás: {ip} ---", file=sys.stderr) + clients_from_one_switch = get_aruba_clients(ip, USERNAME, PASSWORD) + if clients_from_one_switch: + all_switches_clients.extend(clients_from_one_switch) + print(f"Sikeresen lekérdezve {len(clients_from_one_switch)} kliens a(z) {ip} switch-ről.", file=sys.stderr) + else: + print(f"Nem sikerült adatot lekérdezni a(z) {ip} switch-ről.", file=sys.stderr) + + # Ha nem sikerült adatot gyűjteni, jelezzük a stderr-en + if not all_switches_clients: + print("\nEgyetlen switch-ről sem sikerült adatot gyűjteni.", file=sys.stderr) + + # --- Fő kimenet: JSON a stdout-ra --- + print(json.dumps(all_switches_clients, indent=2)) +