import os import re from datetime import datetime import json import requests 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...") try: with ConnectHandler(**device) as net_connect: print("Sikeres csatlakozás. Adatok lekérdezése...") 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.") return None except NetmikoTimeoutException: print(f"Hiba: Időtúllépés a(z) {host} eszközhöz való csatlakozáskor.") return None except NetmikoAuthenticationException: print(f"Hiba: Sikertelen hitelesítés a(z) {host} eszközön. Ellenőrizd a jelszót.") return None except Exception as e: print(f"Váratlan hiba történt: {e}") return None if __name__ == "__main__": # --- IDE DEFINIÁLD A SWITCH-EK IP CÍMEIT --- SWITCH_IPS = [ "10.220.1.84", # NET-SW01 "10.220.1.85", # NET-SW02 "10.220.1.86", # NET-SW04 "10.220.1.87", # NET-SW05 "10.220.1.88", # NET-SW06 "10.220.1.90", # NET-SW07 "10.220.1.91", # NET-SW08 "10.220.1.92", # NET-SW09 "10.220.1.93", # NET-SW10 "10.220.1.94", # NET-SW11 "10.220.1.96", # NET-SW13 # "10.220.1.96", # NET-SW14 "10.220.1.99", # NET-SW17 ] USERNAME = os.getenv('ARUBA_USER', 'svc.operator') # Felhasználónév környezeti változóból, alapértelmezett értékkel if not USERNAME: print("Hiba: Az ARUBA_USER környezeti változó nincs beállítva.") exit() PASSWORD = os.getenv('ARUBA_PASSWORD') if not PASSWORD: print("Hiba: Az ARUBA_PASSWORD környezeti változó nincs beállítva.") exit() N8N_WEBHOOK_URL = os.getenv('N8N_WEBHOOK_URL') if not N8N_WEBHOOK_URL: print("Hiba: Az N8N_WEBHOOK_URL környezeti változó nincs beállítva.") exit() all_switches_clients = [] for ip in SWITCH_IPS: print(f"\n--- Feldolgozás: {ip} ---") 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.") else: print(f"Nem sikerült adatot lekérdezni a(z) {ip} switch-ről.") if all_switches_clients: print(f"\nÖsszesen {len(all_switches_clients)} kliens adat gyűjtve. Küldés az n8n webhookra...") try: proxies = { 'http': None, 'https': None } response = requests.post(N8N_WEBHOOK_URL, json=all_switches_clients, proxies=proxies) response.raise_for_status() # Hibát dob, ha a státuszkód 4xx vagy 5xx print(f"Sikeresen elküldve {len(all_switches_clients)} kliens adat az n8n webhookra. Státusz: {response.status_code}") except requests.exceptions.RequestException as e: print(f"Hiba történt az adatok n8n webhookra küldése közben: {e}") else: print("\nEgyetlen switch-ről sem sikerült adatot gyűjteni.")