Files
WPanda/Dev/sw_fw_scan/get_aruba_firmware.py
2025-12-15 14:31:29 +01:00

87 lines
3.4 KiB
Python

import json
import re
import sys
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.
Progress is written to stderr.
"""
device = {
'device_type': 'aruba_aoscx',
'host': host,
'username': username,
'password': password,
}
print(f"--- Feldolgozás: {host} ---", file=sys.stderr)
print(f"Csatlakozás a(z) {host} eszközhöz...", file=sys.stderr)
try:
with ConnectHandler(**device) as net_connect:
print(f"Sikeres csatlakozás a(z) {host} eszközhöz. Firmware verzió lekérdezése...", file=sys.stderr)
prompt = net_connect.find_prompt()
switch_hostname = prompt.strip('#> ')
output = net_connect.send_command('show version')
firmware_version = "N/A"
match = re.search(r"Version\s+:\s+(.*)", output)
if match:
firmware_version = match.group(1).strip()
result = {
'switch_name': switch_hostname,
'ip_address': host,
'firmware_version': firmware_version
}
print(f"Sikeresen lekérdezve: {result['switch_name']} ({result['ip_address']}) - Verzió: {result['firmware_version']}", file=sys.stderr)
return result
except NetmikoTimeoutException:
print(f"Hiba: Időtúllépés a(z) {host} eszközhöz való csatlakozáskor.", file=sys.stderr)
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.", file=sys.stderr)
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}", file=sys.stderr)
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ó.", 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_firmware = []
for ip in SWITCH_IPS:
firmware_data = get_aruba_firmware(ip, USERNAME, PASSWORD)
if firmware_data:
all_switches_firmware.append(firmware_data)
# Ha nem sikerült adatot gyűjteni, jelezzük a stderr-en
if not all_switches_firmware:
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_firmware, indent=2))