106 lines
4.1 KiB
Python
106 lines
4.1 KiB
Python
|
|
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.")
|