omnivista-scripting
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
omnivista-scripting [2018/01/31 19:05] – angelegt benny | omnivista-scripting [2024/06/09 10:29] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== | + | ====== |
- | Der folgende Tech-Tipp soll die Möglichkeiten des Scripting Moduls des OmniVista2500 aufzeigen. Neben der Nutzung der bekannten AOS CLI Syntax, besteht die Möglichkeit Kommandos in JavaScript einzubinden, | + | Der folgende Tech-Tipp soll die Möglichkeiten des Scripting Moduls des OmniVista2500 aufzeigen. Neben der Nutzung der bekannten AOS CLI Syntax, besteht die Möglichkeit Kommandos in JavaScript einzubinden, |
- | Das Modul kann zur Ausführung der Scripte neben den eingebauten System Variablen (z.B. GeräteTyp, IP-Adresse, MAC-Adresse) auch Benutzer Variablen zur Ausführung der Scripte heranziehen. Details zu den Möglichkeiten werden im OmniVista direkt unter dem Menüpunkt ?Help im CLI-Scripting Modul angeboten. | + | Das Modul kann zur Ausführung der Scripte neben den eingebauten System-Variablen (z.B. GeräteTyp, IP-Adresse, MAC-Adresse) auch Benutzer-Variablen zur Ausführung der Scripte heranziehen. Details zu den Möglichkeiten werden im OmniVista direkt unter dem Menüpunkt ?Help im CLI-Scripting Modul angeboten. |
Folgend werden einige Beispiel Scripte kurz erklärt, die individuell angepasst werden können und den Konfigurationsaufwand in einigen Fällen bereits erheblich reduzieren können. | Folgend werden einige Beispiel Scripte kurz erklärt, die individuell angepasst werden können und den Konfigurationsaufwand in einigen Fällen bereits erheblich reduzieren können. | ||
- | ===== Überprüfung von gleichartiger 802.1x Konfiguration ===== | + | :!: __Hinweis: |
- | + | ||
+ | ===== Überprüfung der installierten FPGA Version ===== | ||
+ | Das folgende Script führt ein Kommando "show ni" auf den Geräten aus, und sucht in dessen Ausgabe nach dem Vorkommen eines regulären Ausdrucks. In diesem Fall wird die FPGA Version 11 gesucht. Je nach Resultat, wird unter **Administrator-> | ||
+ | |||
+ | < | ||
+ | <js> | ||
+ | /*@@Check if correct FPGA is installed. Use on your own risk! Benjamin Domroese, Januar 2018@@ */ | ||
+ | cli.sendCmd(" | ||
+ | var response = cli.lastResponse(); | ||
+ | var pattern = / | ||
+ | if (pattern.test(response)==true) | ||
+ | { | ||
+ | cli.trace(" | ||
+ | }/*if*/ | ||
+ | else | ||
+ | { | ||
+ | | ||
+ | }/*else*/ | ||
+ | </js> | ||
+ | </ | ||
+ | |||
+ | ===== Bedingte Konfiguration, | ||
+ | |||
+ | Das nächste Beispiel beinhaltet eine bedingte Konfiguration. Hier wird eine Liste der mobilen Ports angelegt, und diese für ein bestimmtes Kommando herangezogen. In diesem Fall " | ||
+ | < | ||
+ | <js> | ||
+ | /*@@Check if there are mobile Ports with default vlan restore ENABLED. If yes, disable it. Use on your own risk! Benjamin Domroese, Januar 2018@@ */ | ||
+ | |||
+ | cli.sendCmd(" | ||
+ | var response = cli.lastResponse(); | ||
+ | var pattern = / | ||
+ | |||
+ | if (pattern.test(response)==false) | ||
+ | { | ||
+ | cli.trace(" | ||
+ | }/*if*/ | ||
+ | else | ||
+ | { | ||
+ | var ListOfMobilePorts = response.match(pattern); | ||
+ | for (i=0; | ||
+ | { | ||
+ | | ||
+ | | ||
+ | }/*for*/ | ||
+ | }/*else*/ | ||
+ | |||
+ | </js> | ||
+ | </ | ||
+ | |||
+ | Das Ergebnis kann sowohl im Audit Log, als auch im CLI Scripting Modul unter **Configuration-> | ||
+ | {{ : | ||
+ | |||
+ | |||
+ | ===== Überprüfung der ausgerollten Konfigurationen ===== | ||
+ | |||
+ | Folgender Code kann genutzt werden, um das Vorhandensein diverser Konfigurationen zu prüfen. | ||
+ | Dafür werden 2 Funktionen definiert, die folgende Parameter erhalten: | ||
+ | |||
+ | * Einen regulären Ausdruck nach dem gesucht wird. | ||
+ | * Ein Kommando in dessen Ausgabe der Ausdruck erwartet wird. | ||
+ | * Ein Namen um das Audit Log File einfacher interpretieren zu können. | ||
+ | |||
+ | Je nachdem ob es gewünscht ist den Ausdruck zu finden, oder nicht zu finden - stehen 2 Funktionen zur Verfügung die das Ergebnis je nach positiver oder negativer Sichtweise interpretieren. | ||
+ | |||
+ | < | ||
+ | <js> | ||
+ | /*@@ Checks if expected configuration is found. The Log Message could be either positiv or negativ. Depending if you want to find the REGEX Pattern or not. Use on your own risk! Benjamin Domroese, Januar 2018@@ */ | ||
+ | / | ||
+ | function ConfigCheckPositiv(repattern, | ||
+ | { | ||
+ | cli.sendCmd(command); | ||
+ | var response= cli.lastResponse(); | ||
+ | if (repattern.test(response)==true) | ||
+ | { | ||
+ | | ||
+ | }/*if*/ | ||
+ | else | ||
+ | { | ||
+ | cli.errorLog(name + " " + " | ||
+ | }/*else*/ | ||
+ | }/ | ||
+ | |||
+ | function ConfigCheckNegative(repattern, | ||
+ | { | ||
+ | cli.sendCmd(command); | ||
+ | var response= cli.lastResponse(); | ||
+ | if (repattern.test(response)==false) | ||
+ | { | ||
+ | | ||
+ | }/*if*/ | ||
+ | else | ||
+ | { | ||
+ | cli.errorLog(name + " " + " | ||
+ | }/*else*/ | ||
+ | }/ | ||
+ | |||
+ | /*Start of Script*/ | ||
+ | |||
+ | var pattern_1 = / | ||
+ | ConfigCheckNegative(pattern_1," | ||
+ | |||
+ | var pattern_2 = / | ||
+ | ConfigCheckNegative(pattern_2," | ||
+ | |||
+ | var pattern_3 = / | ||
+ | ConfigCheckPositiv(pattern_3," | ||
+ | |||
+ | var pattern_4 = / | ||
+ | ConfigCheckPositiv(pattern_4," | ||
+ | |||
+ | var pattern_5 = / | ||
+ | ConfigCheckPositiv(pattern_5," | ||
+ | |||
+ | var pattern_6 = / | ||
+ | ConfigCheckPositiv(pattern_6," | ||
+ | |||
+ | var pattern_7 = / | ||
+ | ConfigCheckNegative(pattern_7," | ||
+ | |||
+ | var pattern_8 = / | ||
+ | ConfigCheckPositiv(pattern_8," | ||
+ | |||
+ | var pattern_9 = / | ||
+ | ConfigCheckPositiv(pattern_9," | ||
+ | </js> | ||
+ | </ | ||
+ | |||
+ | Das Ergebnis sieht dann im Idealfall wie folgt aus: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ===== Überprüfung von gleichartiger 802.1x Konfiguration ===== | ||
+ | |||
Das folgende Script überprüft, | Das folgende Script überprüft, | ||
- | Anhand eines Regulären Ausdrucks wird hier mithilfe des Kommandos "show vlan port mobile" | + | Anhand eines Regulären Ausdrucks wird hier mithilfe des Kommandos "show vlan port mobile" |
Aus: | Aus: | ||
Zeile 26: | Zeile 157: | ||
</ | </ | ||
- | Diese Konfiguration wird nun mit dem jeweilig nächsten Port verglichen und auf Differenzen untersucht (z.B. Port 1/2 mit Port 1/3).Dieser Vorgang wird für alle 802.1x Ports ausgeführt, | + | Diese Konfiguration wird nun mit dem jeweilig nächsten Port verglichen und auf Differenzen untersucht (z.B. Port 1/2 mit Port 1/3). Dieser Vorgang wird für alle 802.1x Ports ausgeführt, |
- | Anbei der JavaScript Code für diese Funtion. | + | Anbei der JavaScript Code für diese Funktion. |
- | :!: __Hinweis: | ||
< | < | ||
<js> | <js> | ||
Zeile 83: | Zeile 213: | ||
</ | </ | ||
Anbei ein Screenshot der Ausgabe, die Hinweise auf unterschiedliche Konfigurationen bietet. | Anbei ein Screenshot der Ausgabe, die Hinweise auf unterschiedliche Konfigurationen bietet. | ||
- | {{ : | + | {{ : |
+ | |||
+ | ===== UNP´s anhand von Vorlagen erstellen ===== | ||
+ | |||
+ | Der nächste Code erstellt ein UNP anhand einer Vorlage (eines vorhandenen UNP). Sofern das UNP bereits existiert, oder die " | ||
+ | |||
+ | < | ||
+ | < | ||
+ | /*@@Script for creating a UNP with usage of an existing " | ||
+ | cli.sendCmd(" | ||
+ | var response_1 = cli.lastResponse(); | ||
+ | var pattern_unp_embedded = / | ||
+ | var pattern_unp_secu = / | ||
+ | if (pattern_unp_secu.test(response_1)==true) | ||
+ | { | ||
+ | cli.trace(" | ||
+ | }/*if*/ | ||
+ | else if (pattern_unp_embedded.test(response_1)==true) | ||
+ | { | ||
+ | var pattern_unp_embedded_vlan = / | ||
+ | var vlan_for_unp_secu = pattern_unp_embedded_vlan.exec(response_1); | ||
+ | |||
+ | cli.sendCmd(" | ||
+ | cli.trace(" | ||
+ | }/*else if*/ | ||
+ | |||
+ | else | ||
+ | { | ||
+ | cli.errorLog(" | ||
+ | }/*else*/ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Überprüfung ob alle Ports per 802.1x gesichert sind ===== | ||
+ | |||
+ | Das nächste Beispiel benötigt bei der Ausführung die Eingabe von **User Variablen**. Im "Send Script Wizard" | ||
+ | |||
+ | Die Anzahl der Ports habe ich in diesem Beispiel per "show interfaces status" | ||
+ | |||
+ | Die Anzahl der 802.1x Ports wird erneut mit "show vlan port mobile" | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | /*@@Script for checking if all Ports are configured as 8021x. Use on your own risk! Benjamin Domroese, Januar 2018@@*/ | ||
+ | /*@@Dont forget to enter the number of expected Uplinks as uservariable in the CLI Module. This Script checks for unsecured Ports@@*/ | ||
+ | |||
+ | function unique(array)/ | ||
+ | { | ||
+ | array.sort(); | ||
+ | for (i=0; | ||
+ | if (a[i]==a[i+1]) | ||
+ | { | ||
+ | a.splice(i, | ||
+ | |||
+ | }/*if*/ | ||
+ | return array.length; | ||
+ | }/* function for removing duplicates */ | ||
+ | |||
+ | /* Check the number of available Ports on the System */ | ||
+ | cli.sendCmd(" | ||
+ | var response_1 = cli.lastResponse(); | ||
+ | var pattern_1 = / | ||
+ | var a = response_1.match(pattern_1); | ||
+ | var nr_of_ports_available = unique(a); /*Create a Array with the Ports. This is created with var " | ||
+ | |||
+ | /* Check the number of 8021x Ports */ | ||
+ | cli.sendCmd(" | ||
+ | var response_2 = cli.lastResponse(); | ||
+ | var pattern_2 = / | ||
+ | var b = response_2.match(pattern_2); | ||
+ | if (b != null)/* Check if there is no 8021x */ | ||
+ | { | ||
+ | var nr_of_ports_8021x = b.length; | ||
+ | }/* if */ | ||
+ | else | ||
+ | { | ||
+ | var nr_of_ports_8021x = 0; | ||
+ | }/*else* | ||
+ | |||
+ | /* Check if there are more unsecured Ports than expected and return unsecured Ports to logfile */ | ||
+ | if (nr_of_ports_8021x + parseInt(" | ||
+ | { | ||
+ | cli.trace(" | ||
+ | }/* if */ | ||
+ | else if (nr_of_ports_8021x + parseInt(" | ||
+ | { | ||
+ | cli.errorLog(" | ||
+ | }/*else*/ | ||
+ | else | ||
+ | { | ||
+ | var nr_of_ports_without_8021x = nr_of_ports_available - (nr_of_ports_8021x + parseInt(" | ||
+ | cli.errorLog(" | ||
+ | }/*else*/ | ||
+ | </ | ||
+ | </ |
omnivista-scripting.1517425507.txt.gz · Zuletzt geändert: 2024/06/09 10:29 (Externe Bearbeitung)