import json import os import re import csv from datetime import datetime from netmiko import ConnectHandler from netmiko.exceptions import NetmikoTimeoutException, NetmikoAuthenticationException def get_aruba_firmware(host, username, password): """ Connects to an Aruba switch, retrieves the hostname and firmware version. Returns a dictionary with the collected data. """ device = { 'device_type': 'aruba_aoscx', 'host': host, 'username': username, 'password': password, } print(f"Csatlakozás a(z) {host} eszközhöz...") try: with ConnectHandler(**device) as net_connect: print(f"Sikeres csatlakozás a(z) {host} eszközhöz. Firmware verzió lekérdezése...") # Hostname lekérdezése a promptból prompt = net_connect.find_prompt() switch_hostname = prompt.strip('#> ') # Firmware verzió lekérdezése output = net_connect.send_command('show version') firmware_version = "N/A" # Reguláris kifejezés a firmware verzió megtalálásához match = re.search(r"Version\s+:\s+(.*)", output) if match: firmware_version = match.group(1).strip() return { 'switch_name': switch_hostname, 'ip_address': host, 'firmware_version': firmware_version } except NetmikoTimeoutException: print(f"Hiba: Időtúllépés a(z) {host} eszközhöz való csatlakozáskor.") return {'switch_name': 'N/A', 'ip_address': host, 'firmware_version': 'Timeout'} except NetmikoAuthenticationException: print(f"Hiba: Sikertelen hitelesítés a(z) {host} eszközön.") return {'switch_name': 'N/A', 'ip_address': host, 'firmware_version': 'Auth Failed'} except Exception as e: print(f"Váratlan hiba történt a(z) {host} feldolgozása közben: {e}") return {'switch_name': 'N/A', 'ip_address': host, 'firmware_version': f'Error: {e}'} 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ó.") exit() except json.JSONDecodeError: print("Hiba: A 'config.json' fájl formátuma érvénytelen.") exit() 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.") exit() # Kimeneti mappa OUTPUT_DIR = "results" os.makedirs(OUTPUT_DIR, exist_ok=True) timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") CSV_FILENAME = os.path.join(OUTPUT_DIR, f"aruba_firmware_versions_{timestamp}.csv") all_switches_firmware = [] for ip in SWITCH_IPS: print(f"\n--- Feldolgozás: {ip} ---") firmware_data = get_aruba_firmware(ip, USERNAME, PASSWORD) if firmware_data: all_switches_firmware.append(firmware_data) print(f"Sikeresen lekérdezve: {firmware_data['switch_name']} ({firmware_data['ip_address']}) - Verzió: {firmware_data['firmware_version']}") if all_switches_firmware: print(f"\nÖsszesen {len(all_switches_firmware)} switch adat gyűjtve. Mentés a(z) {CSV_FILENAME} fájlba...") fieldnames = ['switch_name', 'ip_address', 'firmware_version'] try: with open(CSV_FILENAME, 'w', newline='', encoding='utf-8') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerows(all_switches_firmware) print(f"Sikeres mentés a(z) '{CSV_FILENAME}' fájlba.") except IOError as e: print(f"Hiba történt a CSV fájl írása közben: {e}") else: print("\nEgyetlen switch-ről sem sikerült adatot gyűjteni.")