Start Neue Main
This commit is contained in:
20
Dev/sw_fw_scan_CSV/Dockerfile
Normal file
20
Dev/sw_fw_scan_CSV/Dockerfile
Normal file
@@ -0,0 +1,20 @@
|
||||
# Hivatalos Python futtatókörnyezet használata alapként
|
||||
FROM python:3.11-slim
|
||||
|
||||
# Munkakönyvtár beállítása a konténerben
|
||||
WORKDIR /app
|
||||
|
||||
# A requirements.txt fájl másolása a konténerbe
|
||||
COPY requirements.txt .
|
||||
|
||||
# A requirements.txt-ben meghatározott csomagok telepítése
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
# A Python script másolása a konténerbe
|
||||
COPY get_aruba_firmware.py .
|
||||
|
||||
# A config.json másolása a konténerbe
|
||||
COPY config.json .
|
||||
|
||||
# A script futtatása a konténer indításakor
|
||||
CMD ["python3", "get_aruba_firmware.py"]
|
||||
22
Dev/sw_fw_scan_CSV/config.json
Normal file
22
Dev/sw_fw_scan_CSV/config.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"switch_ips": [
|
||||
"10.220.1.84",
|
||||
"10.220.1.85",
|
||||
"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"
|
||||
}
|
||||
7
Dev/sw_fw_scan_CSV/docker-compose.yml
Normal file
7
Dev/sw_fw_scan_CSV/docker-compose.yml
Normal file
@@ -0,0 +1,7 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
switch_firmware_scan_csv:
|
||||
build: .
|
||||
container_name: sw_fw_scan_csv
|
||||
restart: unless-stopped
|
||||
3
Dev/sw_fw_scan_CSV/docker_image_run.sh
Normal file
3
Dev/sw_fw_scan_CSV/docker_image_run.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
docker run --rm -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
|
||||
|
||||
docker run --rm -v /mnt/c/Tools/Docker/sw_fw_scan/config.json:/app/config.json -v /mnt/c/Tools/Docker/sw_fw_scan/results:/app/results sw-fw-scan-csv
|
||||
105
Dev/sw_fw_scan_CSV/get_aruba_firmware.py
Normal file
105
Dev/sw_fw_scan_CSV/get_aruba_firmware.py
Normal file
@@ -0,0 +1,105 @@
|
||||
|
||||
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.")
|
||||
44
Dev/sw_fw_scan_CSV/howto.md
Normal file
44
Dev/sw_fw_scan_CSV/howto.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# How-to: switch_firmware_scan_csv Docker Image
|
||||
|
||||
Ez a dokumentum leírja, hogyan kell használni a `switch_firmware_scan_csv` Docker image-et.
|
||||
|
||||
## 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"
|
||||
}
|
||||
```
|
||||
|
||||
## Futtatás
|
||||
|
||||
A konténer futtatásához használja a következő parancsot:
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name switch_firmware_scan_csv \
|
||||
-v /eleresi/ut/a/hoston/config.json:/app/config.json \
|
||||
-v /eleresi/ut/a/hoston/results:/app/results \
|
||||
switch_firmware_scan_csv
|
||||
```
|
||||
|
||||
### Magyarázat:
|
||||
|
||||
- `-d`: A konténer háttérben fut.
|
||||
- `--name switch_firmware_scan_csv`: A konténer neve.
|
||||
- `-v /eleresi/ut/a/hoston/config.json:/app/config.json`: Csatolja a helyi `config.json` fájlt a konténer `/app/config.json` útvonalához.
|
||||
- `-v /eleresi/ut/a/hoston/results:/app/results`: Csatol egy kötetet a konténer `/app/results` könyvtárához. A kimeneti CSV fájlok a gazda gép `/eleresi/ut/a/hoston/results` könyvtárában lesznek megtalálhatók.
|
||||
|
||||
```
|
||||
1
Dev/sw_fw_scan_CSV/requirements.txt
Normal file
1
Dev/sw_fw_scan_CSV/requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
netmiko
|
||||
@@ -0,0 +1,17 @@
|
||||
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-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
|
||||
|
@@ -0,0 +1,17 @@
|
||||
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-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
|
||||
|
Reference in New Issue
Block a user