Start Neue Main

This commit is contained in:
2025-12-15 09:59:42 +01:00
parent 09ef5ef951
commit c06d51509d
121 changed files with 9026 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
{
"switch_ips": [
"10.220.1.84",
"10.220.1.85",
"10.220.1.86",
"10.220.1.87",
"10.220.1.88",
"10.220.1.89",
"10.220.1.90",
"10.220.1.91",
"10.220.1.92",
"10.220.1.93",
"10.220.1.94",
"10.220.1.96",
"10.220.1.98",
"10.220.1.99"
],
"username": "svc.operator",
"password": "NuAaGTNPQWyeneQLI5qr"
}

View File

@@ -0,0 +1 @@
docker run -d --name sw_fm_scan_csv -v /mnt/c/Tools/Docker/sw_fw_scan/config.json:/app/config.json -v /mnt/c/Tools/Docker/sq_fw_scan/results:/app/results sw-fw-scan-csv

View File

@@ -0,0 +1,105 @@
import json
import os
import re
import csv
import sys
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.
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)
# --- Opcionális: CSV mentés ---
if all_switches_firmware:
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")
print(f"\nÖsszesen {len(all_switches_firmware)} switch adat gyűjtve. Mentés a(z) {CSV_FILENAME} fájlba...", file=sys.stderr)
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.", file=sys.stderr)
except IOError as e:
print(f"Hiba történt a CSV fájl írása közben: {e}", file=sys.stderr)
else:
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))

20
Dev/sw_fw_scan/howto.md Normal file
View File

@@ -0,0 +1,20 @@
## Konfiguráció (config.json)
A szkript a `config.json` fájlból olvassa be a konfigurációs adatokat. Ennek a fájlnak a konténer `WORKDIR` gyökerében (`/app/config.json`) kell elhelyezkednie, és a következő kulcsokat kell tartalmaznia:
- `switch_ips`: Egy lista a switch-ek IP címeiből.
- `username`: A switch-ekhez való csatlakozáshoz használt felhasználónév.
- `password`: A switch-ekhez való csatlakozáshoz használt jelszó.
Példa `config.json`:
```json
{
"switch_ips": [
"10.220.1.84",
"10.220.1.85"
],
"username": "az_on_felhasznaloneve",
"password": "az_on_jelszava"
}
```

View File

@@ -0,0 +1 @@
netmiko

View File

@@ -0,0 +1,15 @@
switch_name,ip_address,firmware_version
NET-SW01,10.220.1.84,PL.10.16.1006
NET-SW02,10.220.1.85,PL.10.16.1006
NET-SW04,10.220.1.86,PL.10.16.1006
NET-SW05,10.220.1.87,PL.10.16.1006
NET-SW06,10.220.1.88,PL.10.16.1006
NET-SW01-CORE,10.220.1.89,LL.10.16.1006
NET-SW07,10.220.1.90,PL.10.16.1006
NET-SW08,10.220.1.91,PL.10.16.1006
NET-SW09,10.220.1.92,PL.10.16.1006
NET-SW10,10.220.1.93,PL.10.16.1006
NET-SW11,10.220.1.94,PL.10.16.1006
NET-SW13,10.220.1.96,PL.10.16.1006
NET-SW16,10.220.1.98,PL.10.16.1006
NET-SW17,10.220.1.99,PL.10.16.1006
1 switch_name ip_address firmware_version
2 NET-SW01 10.220.1.84 PL.10.16.1006
3 NET-SW02 10.220.1.85 PL.10.16.1006
4 NET-SW04 10.220.1.86 PL.10.16.1006
5 NET-SW05 10.220.1.87 PL.10.16.1006
6 NET-SW06 10.220.1.88 PL.10.16.1006
7 NET-SW01-CORE 10.220.1.89 LL.10.16.1006
8 NET-SW07 10.220.1.90 PL.10.16.1006
9 NET-SW08 10.220.1.91 PL.10.16.1006
10 NET-SW09 10.220.1.92 PL.10.16.1006
11 NET-SW10 10.220.1.93 PL.10.16.1006
12 NET-SW11 10.220.1.94 PL.10.16.1006
13 NET-SW13 10.220.1.96 PL.10.16.1006
14 NET-SW16 10.220.1.98 PL.10.16.1006
15 NET-SW17 10.220.1.99 PL.10.16.1006