Das hier ist eine Toolsamlung auf Python-Basis, welche mit Aruba Instant Virtual Controllern kommuniziert und Debug-Ausgaben liefert. Ich habe sie mit Gemini in Python geschrieben und lerne dadurch. Es hat ein paar Rückmeldungen von Euch gegeben und ich folge Euren Wünschen, aber auch meinen, um mir die Arbeit zu erleichtern.
Im Moment besteht die Sammlung aus 4 Teilen:
- Kernbiblothek
- config.json
- ap_check.py – „Überprüft den Status von Aruba Access Points über SSH und erstellt Berichte“
- ap_client_debug.py – (unveröffentlicht) „Tool zum Finden von Clients und Identifizieren von Clientproblemen“
Weiter unten findest Du eine Howto, downloads und eine vollständige Dokumentation.
Anbei ein aktualisierter Entwurf meines Python-Scripts, welches vom jeweiligen Schwarm-Conductor (Master) die AP’s auflistet (show aps), diese dann threaded per show interface durchbrömmelt, um nachzufragen, ob sie denn Gigabit angebunden sind, und oder ob CRC-Fehler auf einem oder beiden Interfaces aufgetreten sind, sprich sie schaun da mal in’s Glas, wie spät das ist. Die fehlerhaften AP’s (meint Zuleitungen) mögen dann in einer CSV gelistet werden.
Erfolgreich getestet habe ich das mit LTS Instant OS 8.10.0.16 auf 305-345, 505-555,374,375,574,575,577. Die aktuelle 8.10.0.17 ist ja gerade kaputt bzw. macht im ARM was nur sie und sonst keiner will, ist also von einer Berliner Asi-Plaste nicht mehr zu unterscheiden. Ich frage mich inzwischen wirklich, wie viel Vertrauen die da noch verbrennen wollen. Aber: Mit 8.10.x sollte das Script auf den oben erwähnten AP’s funktionieren, bei anderen Instant OS Versionen ist mir noch unklar, wie sich das Parsing der AP-Übersicht verhält. Ich freue mich sehr über eine kurze Mail mit Versionsnummer und funktioniert oder funktioniert nicht.
Anwendung auf eigene Gefahr! Du musst die Ausgabe bitte immer auch selbst prüfen. Schau Dir bitte die als fehlerhaft erkannten AP’s nochmal selbst an. Ich bin mir inzwischen zwar relativ sicher, dass ich da im Parsen nicht daneben liege. Verbesserungsvorschläge sind willkommen.
Nutzbar ist das Tool in Aruba Instant 8.10.0.0 – Getestet bis 8.10.0.16
Bitte habe Verständnis: Support kann ich keinen leisten!
Changelog ab Version 5.0:
Version 5.2: Komplette Überarbeitung der Logik zum Speichern und Laden von Anmeldeinformationen, um die Abhängigkeit von der config.json
zu entfernen.
Version 5.3: Stabilisierung der show aps
-Analyse durch einen regulären Ausdruck und Entfernung der fehleranfälligen Login-Wiederholungsschleife.
Version 5.4: Umstellung der Kommandozeilen-Verarbeitung auf das robuste argparse
-Modul zur korrekten Erkennung von Schaltern wie --importfile
.
Version 5.4.1: Wiederherstellung und Integration der ursprünglichen, flexiblen CSV-Importfunktion aus Version 5.0 in die stabilisierte Codebasis.
Version 5.5: Ein Tippfehler in der Betriebssystem-Erkennung wurde behoben, wodurch die Auswahl des Windows Credential Managers wiederhergestellt wurde.
Version 5.6: Die Abarbeitung der Access Points wurde nach IP-Adressen sortiert und das Parsen der AP-Liste flexibler gestaltet, um den „monitor“-Modus zu erkennen.
Version 5.7: Die Erkennung des „monitor“-Modus als Fehler wurde implementiert und eine „Problem-Grund“-Spalte zum Fehlerbericht hinzugefügt.
Version 5.8: Eine neue Prüfroutine zur Erkennung von Problemen mit der Stromversorgung (PoE-Status) wurde pro AP hinzugefügt.
Version 5.9: Die Performance wurde optimiert, ein Firmware-Kompatibilitäts-Check, eine detailliertere Zusammenfassung und die Anzeige der Skript-Version wurden hinzugefügt.
Version 6.0: Der Fehlerbericht wurde auf Englisch umgestellt (ap_errors.csv
), die Logik für den Power-Status korrigiert und Anleitungen am Ende aller CSV-Berichte hinzugefügt.
Version 6.1: Das Skript legt nun für jeden Durchlauf automatisch einen neuen Ordner mit Zeitstempel an, in dem alle Ergebnisdateien zur Archivierung gespeichert werden.
Version 6.2: Der Fehlerbericht (ap_errors.csv
) zeigt nun wieder den exakten Power-Status zur detaillierten Analyse an; zusätzlich wurde der Text des Handbuch-Verweises präzisiert.
Version 6.3: Stabiler Meilenstein nach umfangreichen Bugfixes in den Bereichen Parsing, Fehlererkennung und Reporting.
Version 6.4: Anpassung der config.json: Schalter für neue Prüfungen sowie Kommentare (sieht fürchterlich aus, aber ich brauche die da)
Version 6.5: Grundlegende Überarbeitung der Anmelde-Logik mit „Pre-Flight-Check“ und sofortiger Validierung von Anmeldedaten für einen robusteren und unterbrechungsfreien Ablauf.
Version 6.6: Die Texte im Menü zur Auswahl der Anmeldedaten wurden präzisiert und um Links zur Dokumentation der verwendeten Bibliotheken erweitert.
Version 6.7: Neue Werkzeuge zur manuellen (--delete-credentials
) und automatischen (nach einem Lauf) Bereinigung von veralteten Anmeldedaten wurden hinzugefügt und die --help
-Ausgabe verbessert.
Version 7.0: Ich habe in eine Kernbibliothek und Tools aufgesplittet.
Changelog für Version 7.0
Diese Version stellt ein grundlegendes architektonisches Refactoring dar, um die Wartbarkeit und Wiederverwendbarkeit des Codes für zukünftige Projekte zu verbessern.
- Einführung der
aruba_helper.py
-Bibliothek: Alle Kernfunktionen für die SSH-Kommunikation, die Anmeldeinformations-Verwaltung (keyring
,pycryptodome
), die Abhängigkeiten-Prüfung und die Abfrage von Conductor-Daten wurden in eine zentrale Helper-Bibliothek ausgelagert. - Modularisierung von
ap_check.py
: Das Hauptskript wurde entschlackt und importiert nun die ausgelagerten Kernfunktionen. Es enthält nur noch die Logik, die spezifisch für die Überprüfung und das Reporting von AP-Fehlern ist. - Zukunftssicherheit: Durch diese neue Struktur kann die
aruba_helper.py
-Bibliothek nun als stabile Basis für neue Tools (wie das geplanteapdebug.py
) dienen, ohne dass der Code dupliziert werden muss. Zukünftige Bugfixes an der Kernlogik wirken sich automatisch auf alle Tools aus, die die Bibliothek nutzen. - Code-Qualität: Ein neuer, einheitlicher Header wurde für alle Skript-Dateien des Projekts „Aruba Instant Python Tools“ eingeführt. Kleinere Fehler, die während des Refactorings auftraten, wurden behoben.
Python / Installation:
- Das Script benötigt Python, falls nicht installiert, findbar unter python.org/downloads/. Achtung: Die Pfadvariable muss unter Windows gesetzt werden (Add Python to PATH), und es sollte mit Admin-Rechten installiert werden.
- Tool herunterladen (link am Ende) und entpacken. Konsole starten und in’s Verzeichnis wechseln,
- dort die Bibliotheken für Python nachinstallieren, mit
- pip install -r requirements.txt
- config.json bei Bedarf anpassen (siehe Beschreibung)
Genutzte Bibliotheken
paramiko
Damit lassen sich ssh-Verbindungen herstellen. Auch jene, die nur mit älteren Cipher-Suites (+ssh-rsa) funktionieren, so wie bei den Aruba VC’s erforderlich. Das war ein ziemliches Chrüsimüsi.
keyring
Um – sofern möglich – den Windows-Anmeldespeicher zu verwenden. Dies soll eine sichere Speichermethode für Zugangsdaten sein, wobei „sicher“ immer relativ zu sehen ist.
pycryptodome
Um wenigstens halbwegs Sicherheit bei der Ablage der Zugangsdaten zu haben, so dass die Zugangsdaten nicht im klartext sichtbar sind. Der Anwender ist selbst für seine Sicherheit verantwortlich, ich weise im Script darauf hin.
Erforderliche Vorarbeiten
Die o.g. Bibliotheken must Du vor der Ausführung installieren. Ich habe das so jetzt in eine requierements.txt reingekippt, dem Standard nach soll das wohl so sein.
Das komplette Tool mit der Beispiel config.json ist am ENDE des Posts herunterzuladen!
Dokumentation:
config.json:
{
"//_comment_main": "Hauptkonfiguration für Ziel-IPs und globale Einstellungen.",
"conductor_ips": [
"10.20.20.5",
"10.20.30.5",
"10.20.40.5"
],
"timeout_seconds": 30,
"num_threads": 10,
"//_comment_switches": "Globale Schalter zum Aktivieren (true) oder Deaktivieren (false) von Prüfroutinen.",
"crccheck": true,
"_crccheck_comment": "Prüft auf CRC-Fehler auf den Ethernet-Ports.",
"check_monitor_mode": true,
"_check_monitor_mode_comment": "Meldet APs, die im 'monitor'-Modus sind.",
"check_power_status": true,
"_check_power_status_comment": "Prüft auf eine eingeschränkte Stromversorgung (PoE).",
"check_ip_anomaly": true,
"_check_ip_anomaly_comment": "Prüft auf falsche Subnetze oder große Lücken im IP-Bereich.",
"//_comment_thresholds": "Schwellenwerte für die Problemerkennung.",
"minspeed": 1000,
"_minspeed_comment": "Minimale Geschwindigkeit in Mb/s für eth0 (und eth1, falls nicht ignoriert).",
"mincrc": 100,
"_mincrc_comment": "Maximale Anzahl an erlaubten CRC-Fehlern.",
"eth1_ignore_speed": true,
"_eth1_ignore_speed_comment": "Wenn true, wird die Geschwindigkeit von eth1 nicht geprüft.",
"//_comment_language": "Diese Werte sollten nur geändert werden, wenn die Sprache der APs nicht Englisch ist.",
"language_terms": {
"header_ip": "IP Address",
"header_serial": "Serial #",
"header_age": "Age",
"interface_speed": "Speed",
"interface_duplex": "duplex",
"interface_address": "address is",
"errors_crc": "Receive CRC errors"
}
}
Erklärung:
master_ip
: Sinnvoll, wenn Du häufig nur dieselben Schwärme abfragst: Die IP(s) der Master APs oder der Virtual Controller, jene das Skript zuerst kontaktiert, um die Liste aller Member-APs zu erhalten. Dieser Wert wird überschrieben, wenn Du eine IP-Adresse oder mehrere (kommasepariert) direkt beim Start des Skripts angibst (z.B. py ap_check.py 10.x.x.x
).
Skript-Verhalten
timeout_seconds
: Die maximale Wartezeit in Sekunden, die das Skript auf eine Verbindung zu einem AP wartet. Reagiert ein AP nicht innerhalb dieser Zeit, wird er als „crashed“ markiert.num_threads
: Die Anzahl der APs, die gleichzeitig (parallel) überprüft werden. Ein Wert von10
beschleunigt den gesamten Vorgang erheblich im Vergleich zu einer rein sequenziellen Abarbeitung.showmac
: Wenn dieser Wert auftrue
gesetzt ist, enthält der fertige CSV-Bericht zusätzliche Spalten für die MAC-Adressen der Interfaces (eth0_mac
,eth1_mac
).appendcsv
: Steuert, wie die CSV-Datei geschrieben wird.false
: Die alteap_fehlerbericht.csv
wird bei jedem Durchlauf gelöscht und komplett neu erstellt.true
: Die Ergebnisse werden an eine bereits existierendeap_fehlerbericht.csv
angehängt.
Anomalitätenroutine:
"check_ip_anomaly": true
Dies ist der Hauptschalter für die gesamte IP-Anomalie-Prüfung.
true
: Das Skript führt die zweistufige Prüfung (falsches Subnetz & statistische Ausreißer) durch und erstellt dieap_ip_anomaly.csv
.false
: Die gesamte IP-Anomalie-Prüfung wird übersprungen.
"anomaly_gap_factor": 10
Dieser Wert steuert die Empfindlichkeit der statistischen Ausreißer-Erkennung (der Lücken-Analyse). Er ist ein Multiplikator für den durchschnittlichen Abstand zwischen den IP-Adressen.
- Ein höherer Wert (z.B.
20
) macht die Erkennung unempfindlicher. Eine Lücke im IP-Bereich muss dann extrem groß sein, um als Anomalie zu gelten. - Ein niedrigerer Wert (z.B.
5
) macht die Erkennung empfindlicher und lässt sie auch auf kleinere Lücken reagieren.
Der Standardwert 10
hat sich als guter Mittelweg erwiesen.
Fehler- und Schwellenwerteinstellungen
minspeed
: Definiert die erwartete Mindestgeschwindigkeit für dieeth0
-Schnittstelle in Mb/s. Jeder kleinere Wert wird als Fehler gemeldet. Wenn Du1000
einträgst, sind Verbindungen mit größeren Werten 2500 oder 5000 Mb/s ebenfalls alle in Ordnung.crccheck
: Ein einfacher An/Aus-Schalter für die Überprüfung von CRC-Fehlern.true
: Access Points mit CRC-Fehlern (> 0) auf einer ihrer Schnittstellen werden im Bericht aufgeführt.false
: CRC-Fehler werden vollständig ignoriert.
mincrc
: Notiert Fehlern bei AP’s erst ab dieser Anzahl von Fehlern, um ein Grundrauschen auszuklammerneth1_ignore_speed
: Eine spezielle Regel für das zweite Interface (eth1
).true
: Die Geschwindigkeit voneth1
wird ignoriert. Dies ist nützlich, da eine Geschwindigkeit von 10M hier i.d.R. nur bedeutet, dass der Port nicht belegt ist. Der AP wird also nicht als fehlerhaft gemeldet, nur weileth1
10M meldet.false
: Auch eine Geschwindigkeit von unterminspeed
aufeth1
wird als Fehler gewertet und im Bericht aufgeführt.
Spracheinstellungen
language_terms
: Dies ist der Abschnitt, um das Skript etwas zukunftssicher zu machen. Er enthält alle Begriffe, nach denen das Skript in der Ausgabe der Aruba-Geräte sucht. Solltest Du jemals Geräte haben, deren Kommandozeile davon abweicht, kannst Du die Begriffe in diesem Abschnitt anpassen (z.B."interface_speed": "Geschwindigkeit"
), und das Skript würde (so ist es mindestens mal geplant) ohne Code-Änderung weiter funktionieren.
Starten lässt sich das Geraffel mit:
py ap_check.py <vc-IP>
py ap_check.py <vc-IP>,<vc-IP2>,<vc-IP3>
py ap_check.py 10.20.30.200 –log (erstellt ein Protokoll)
py ap_check.py –importfile c:\users\max\ap_list_12345678.csv (kann Airwave Tabellen importieren)
Wenn Du die IP der VC’s nicht ranschreibst, dann nimmt er die IP aus der config.json (siehe Beschreibung). Als Ergebnis bekommst Du dann eine CSV, welche alle AP’s mit ihren IPs und Seriennummern auflistet, welche mit weniger als 1G angebunden sind und oder CRC-Fehler auf den Litzen haben.