Start Neue Main
This commit is contained in:
20
Dev/sw_ip_scann_CSV/Dockerfile
Normal file
20
Dev/sw_ip_scann_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_clients.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_clients.py"]
|
||||
19
Dev/sw_ip_scann_CSV/config.json
Normal file
19
Dev/sw_ip_scann_CSV/config.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"network": {
|
||||
"subnet": "10.101.0.0/24",
|
||||
"auto_detect": false
|
||||
},
|
||||
"scanning": {
|
||||
"ping_timeout": 0.3,
|
||||
"ping_delay": 0.001,
|
||||
"max_threads": 10
|
||||
},
|
||||
"database": {
|
||||
"devices_file": "known_devices.json"
|
||||
},
|
||||
"logging": {
|
||||
"enabled": true,
|
||||
"log_file": "network_scanner.log",
|
||||
"log_level": "INFO"
|
||||
}
|
||||
}
|
||||
167
Dev/sw_ip_scann_CSV/get_aruba_clients.py
Normal file
167
Dev/sw_ip_scann_CSV/get_aruba_clients.py
Normal file
@@ -0,0 +1,167 @@
|
||||
import os
|
||||
import re
|
||||
import csv
|
||||
from datetime import datetime
|
||||
|
||||
from netmiko import ConnectHandler
|
||||
from netmiko.exceptions import NetmikoTimeoutException, NetmikoAuthenticationException
|
||||
|
||||
def get_aruba_clients(host, username, password):
|
||||
"""
|
||||
Connects to an Aruba switch via SSH, gets hostname and client info,
|
||||
and returns a list of dictionaries, each representing a client.
|
||||
"""
|
||||
device = {
|
||||
'device_type': 'aruba_aoscx',
|
||||
'host': host,
|
||||
'username': username,
|
||||
'password': password,
|
||||
}
|
||||
|
||||
all_clients_data = []
|
||||
print(f"Csatlakozás a(z) {host} eszközhöz...")
|
||||
try:
|
||||
with ConnectHandler(**device) as net_connect:
|
||||
print("Sikeres csatlakozás. Adatok lekérdezése...")
|
||||
|
||||
prompt = net_connect.find_prompt()
|
||||
switch_hostname = prompt.strip('#> ')
|
||||
|
||||
output = net_connect.send_command('show client ip')
|
||||
ip_pattern = re.compile(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$')
|
||||
|
||||
if isinstance(output, str):
|
||||
lines = output.splitlines()
|
||||
for line in lines[2:]:
|
||||
columns = line.split()
|
||||
if len(columns) >= 4:
|
||||
potential_ip = columns[-1]
|
||||
if ip_pattern.match(potential_ip):
|
||||
client_data = {
|
||||
'switch_name': switch_hostname,
|
||||
'mac_address': columns[0],
|
||||
'interface': columns[1],
|
||||
'vlan': columns[2],
|
||||
'ip_address': potential_ip,
|
||||
}
|
||||
all_clients_data.append(client_data)
|
||||
return all_clients_data
|
||||
|
||||
print("Hiba: A parancs kimenete nem volt a várt formátumban.")
|
||||
return None
|
||||
|
||||
except NetmikoTimeoutException:
|
||||
print(f"Hiba: Időtúllépés a(z) {host} eszközhöz való csatlakozáskor.")
|
||||
return None
|
||||
except NetmikoAuthenticationException:
|
||||
print(f"Hiba: Sikertelen hitelesítés a(z) {host} eszközön. Ellenőrizd a jelszót.")
|
||||
return None
|
||||
except Exception as e:
|
||||
print(f"Váratlan hiba történt: {e}")
|
||||
return None
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
# --- IDE DEFINIÁLD A SWITCH-EK IP CÍMEIT ---
|
||||
|
||||
SWITCH_IPS = [
|
||||
|
||||
"10.220.1.84", # NET-SW01
|
||||
"10.220.1.85", # NET-SW02
|
||||
"10.220.1.86", # NET-SW04
|
||||
"10.220.1.87", # NET-SW05
|
||||
"10.220.1.88", # NET-SW06
|
||||
"10.220.1.89", # NET-SW01 - Core
|
||||
"10.220.1.90", # NET-SW07
|
||||
"10.220.1.91", # NET-SW08
|
||||
"10.220.1.92", # NET-SW09
|
||||
"10.220.1.93", # NET-SW10
|
||||
"10.220.1.94", # NET-SW11
|
||||
"10.220.1.96", # NET-SW13
|
||||
"10.220.1.98", # NET-SW16 - HA
|
||||
"10.220.1.99", # NET-SW17
|
||||
|
||||
]
|
||||
|
||||
USERNAME = os.getenv('ARUBA_USER', 'svc.operator') # Felhasználónév környezeti változóból, alapértelmezett értékkel
|
||||
if not USERNAME:
|
||||
print("Hiba: Az ARUBA_USER környezeti változó nincs beállítva.")
|
||||
exit()
|
||||
|
||||
|
||||
|
||||
# A kimeneti mappa a konténeren belül
|
||||
|
||||
OUTPUT_DIR = "/data"
|
||||
|
||||
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
|
||||
|
||||
CSV_FILENAME = os.path.join(OUTPUT_DIR, f"aruba_clients_ALL_{timestamp}.csv")
|
||||
|
||||
|
||||
|
||||
|
||||
PASSWORD = os.getenv('ARUBA_PASSWORD')
|
||||
if not PASSWORD:
|
||||
print("Hiba: Az ARUBA_PASSWORD környezeti változó nincs beállítva.")
|
||||
exit()
|
||||
|
||||
|
||||
|
||||
all_switches_clients = []
|
||||
|
||||
|
||||
|
||||
for ip in SWITCH_IPS:
|
||||
|
||||
print(f"\n--- Feldolgozás: {ip} ---")
|
||||
|
||||
clients_from_one_switch = get_aruba_clients(ip, USERNAME, PASSWORD)
|
||||
|
||||
if clients_from_one_switch:
|
||||
|
||||
all_switches_clients.extend(clients_from_one_switch)
|
||||
|
||||
print(f"Sikeresen lekérdezve {len(clients_from_one_switch)} kliens a(z) {ip} switch-ről.")
|
||||
|
||||
else:
|
||||
|
||||
print(f"Nem sikerült adatot lekérdezni a(z) {ip} switch-ről.")
|
||||
|
||||
|
||||
|
||||
if all_switches_clients:
|
||||
|
||||
print(f"\nÖsszesen {len(all_switches_clients)} kliens adat gyűjtve. Mentés a(z) {CSV_FILENAME} fájlba...")
|
||||
|
||||
|
||||
|
||||
fieldnames = all_switches_clients[0].keys()
|
||||
|
||||
|
||||
|
||||
try:
|
||||
|
||||
# Biztosítjuk, hogy a kimeneti mappa létezzen
|
||||
|
||||
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
||||
|
||||
with open(CSV_FILENAME, 'w', newline='', encoding='utf-8') as csvfile:
|
||||
|
||||
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
|
||||
|
||||
writer.writeheader()
|
||||
|
||||
writer.writerows(all_switches_clients)
|
||||
|
||||
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.")
|
||||
36
Dev/sw_ip_scann_CSV/howto.md
Normal file
36
Dev/sw_ip_scann_CSV/howto.md
Normal file
@@ -0,0 +1,36 @@
|
||||
# How-to: switch_ip_scann_csv Docker Image
|
||||
|
||||
Ez a dokumentum leírja, hogyan kell használni a `switch_ip_scann_csv` Docker image-et.
|
||||
|
||||
## Környezeti Változók
|
||||
|
||||
A Docker image a következő környezeti változókat használja:
|
||||
|
||||
- `ARUBA_USER`: (Opcionális) A switch-ekhez való csatlakozáshoz használt felhasználónév.
|
||||
- Alapértelmezett érték: `svc.operator`
|
||||
- `ARUBA_PASSWORD`: (Kötelező) A switch-ekhez való csatlakozáshoz használt jelszó.
|
||||
|
||||
## Futtatás
|
||||
|
||||
A konténer futtatásához használja a következő parancsot:
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name switch_ip_scann_csv \
|
||||
-e ARUBA_USER="az_on_felhasznaloneve" \
|
||||
-e ARUBA_PASSWORD="az_on_jelszava" \
|
||||
-v /eleresi/ut/a/hoston:/data \
|
||||
switch_ip_scann_csv
|
||||
```
|
||||
|
||||
### Magyarázat:
|
||||
|
||||
- `-d`: A konténer háttérben fut.
|
||||
- `--name switch_ip_scann_csv`: A konténer neve.
|
||||
- `-e ARUBA_USER="..."`: Beállítja a felhasználónevet. Ha nem adja meg, az alapértelmezett `svc.operator` lesz használva.
|
||||
- `-e ARUBA_PASSWORD="..."`: Beállítja a jelszót. Ezt kötelező megadni.
|
||||
- `-v /eleresi/ut/a/hoston:/data`: Csatol egy kötetet a konténer `/data` könyvtárához. A kimeneti CSV fájlok a `/eleresi/ut/a/hoston` könyvtárban lesznek megtalálhatók a gazda gépen.
|
||||
|
||||
## Switch IP Címek
|
||||
|
||||
Jelenleg a switch-ek IP címei a `get_aruba_clients.py` szkriptben vannak rögzítve. A jövőben javasolt a szkript módosítása, hogy a switch-ek IP címeit egy környezeti változóból (pl. `SWITCH_IPS`, vesszővel elválasztva) olvassa be.
|
||||
1
Dev/sw_ip_scann_CSV/requirements.txt
Normal file
1
Dev/sw_ip_scann_CSV/requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
netmiko
|
||||
Reference in New Issue
Block a user