134 lines
4.6 KiB
Python
134 lines
4.6 KiB
Python
import os
|
|
import re
|
|
from datetime import datetime
|
|
import json
|
|
import requests
|
|
|
|
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.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.96", # NET-SW14
|
|
"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()
|
|
|
|
PASSWORD = os.getenv('ARUBA_PASSWORD')
|
|
if not PASSWORD:
|
|
print("Hiba: Az ARUBA_PASSWORD környezeti változó nincs beállítva.")
|
|
exit()
|
|
|
|
N8N_WEBHOOK_URL = os.getenv('N8N_WEBHOOK_URL')
|
|
if not N8N_WEBHOOK_URL:
|
|
print("Hiba: Az N8N_WEBHOOK_URL 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. Küldés az n8n webhookra...")
|
|
try:
|
|
proxies = { 'http': None, 'https': None }
|
|
response = requests.post(N8N_WEBHOOK_URL, json=all_switches_clients, proxies=proxies)
|
|
response.raise_for_status() # Hibát dob, ha a státuszkód 4xx vagy 5xx
|
|
print(f"Sikeresen elküldve {len(all_switches_clients)} kliens adat az n8n webhookra. Státusz: {response.status_code}")
|
|
except requests.exceptions.RequestException as e:
|
|
print(f"Hiba történt az adatok n8n webhookra küldése közben: {e}")
|
|
else:
|
|
print("\nEgyetlen switch-ről sem sikerült adatot gyűjteni.")
|