Überschreitung des Volumentarifs & SNMP bzw. Syslog Meld

Forum zu aktuellen Geräten der LANCOM Router/Gateway Serie

Moderator: Lancom-Systems Moderatoren

DSL10Off
Beiträge: 73
Registriert: 28 Jul 2005, 13:17

Beitrag von DSL10Off »

So, ich hab den ganzen gestrigen Tag daran herumprobiert, und bin kurz davor aufzugeben. Ich bin zu dem Schluß gekommen, das ich einfach zu wenig über SNMP weiß.
Die Syntax dieses SNMPTools gibt mir z.B. immer noch Rätsel auf. Was ist ein Agent, bzw. viel wichtiger was ist die Community? Soviel ich verstanden habe ist der Agent der Lancom (also IP-Adresse|Hostname). Und Community scheint in diesem Fall irgendwie mit der MIB zusammenhängen. Was ich mir halt auf die schnelle so im Internet zusammenlesen konnte. Wobei da bei Community immer von "public" und "private" die Rede ist.

Von dem kleinen Fehler des SNMP Tools bin ich übrigens betroffen. Meine Ip-Adressen haben in allen Oktetts drei Zahlen. Deswegen muss ich immer mit dem Hostnamen arbeiten.
Ich habe dann ein ping -a <IP Adresse Lancom> gemacht um den herauszufinden. War das richtig? Der Hostname besteht nämlich kurioserweise aus dem Namen, den ich im Lanconfig vergeben habe und dem Wort "intern" dazwischen mit einem Punkt. Also <NAME>.intern.

Ich habe auch gedacht, es wäre ganz einfach, das Skript dahingehend anzupassen, das es kein Passwort benötigt. Also habe ich einfach alle %LC_PW% Variablen gelöscht, und über LanConfig auch den Haken bei der Option "SNMP Zugriffe nur mit Passwort" entfernt. In der Zugriffsliste ist übrigens der Zugriff per SNMP über das lokale Netz erlaubt.
Aber sobald ich dann "LancomGet" aufrufe, funktioniert es nicht mehr, und zeigt mir nur noch einen Syntaxfehler.

Ich verstehe auch nicht was diese Enterprise OID ist, die am Anfang im Skript ausgelesen wird. Für was braucht man die. Hat das irgendwas mit der Community zu tun? Oder ist das nur der Vorbau, an den dann der OID Eintrag angehängt wird, um den kompletten OID Pfad zu bekommen?

Wie gesagt, für Hilfe wäre ich dankbar. Vor allem wie ich es schaffe, das ganze ohne Angabe des Passworts zum laufen zu bringen.
Gruß
DSL10Off

Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
eddia
Beiträge: 1239
Registriert: 15 Nov 2004, 09:30

Beitrag von eddia »

Hallo DSL10Off,
Was ist ein Agent, bzw. viel wichtiger was ist die Community? Soviel ich verstanden habe ist der Agent der Lancom (also IP-Adresse|Hostname).
ja - ein Agent ist der, auf den SNMP-Operationen angewendet werden. Das Gegenstück ist der Manager, welcher SNMP-Befehle absetzt.
Und Community scheint in diesem Fall irgendwie mit der MIB zusammenhängen. Was ich mir halt auf die schnelle so im Internet zusammenlesen konnte. Wobei da bei Community immer von "public" und "private" die Rede ist.
Community ist quasi das Passwort. Das Standard-Passwort bei SNMP ist eben 'public'.

http://www.jklein.de/techniker_arbeit/t ... gemein.htm
Ich habe auch gedacht, es wäre ganz einfach, das Skript dahingehend anzupassen, das es kein Passwort benötigt.
Die verwendete snmptool.exe erfordert zwingend die Angabe des Community-Strings. Sorry - da war ich gestern etwas voreilig.
Also habe ich einfach alle %LC_PW% Variablen gelöscht, und über LanConfig auch den Haken bei der Option "SNMP Zugriffe nur mit Passwort" entfernt. In der Zugriffsliste ist übrigens der Zugriff per SNMP über das lokale Netz erlaubt.
Der Lancom reagiert in diesem Fall auf die Community 'public'. Das heisst, angeben musst Du ein Passwort, aber fürs Lesen eben 'public'. :-)
Ich verstehe auch nicht was diese Enterprise OID ist, die am Anfang im Skript ausgelesen wird. Für was braucht man die. Hat das irgendwas mit der Community zu tun? Oder ist das nur der Vorbau, an den dann der OID Eintrag angehängt wird, um den kompletten OID Pfad zu bekommen?
Genau. Das ist sozusagen der Einstiegspunkt in die private MIB. Da dieser sich aber bei den Lancoms je nach Modell unterscheidet, muss dieser vorher aus der Standard-MIB ermittelt werden.

Gruß

Mario
eddia
Beiträge: 1239
Registriert: 15 Nov 2004, 09:30

Beitrag von eddia »

Hallo DSL10Off,
Das einzige was ich hinsichtlich MS Syntax gemacht habe, war das Editieren der Config.sys und der Autoexec.bat zu meinen 386er Zeiten.
Und nichts anderes sind diese Batchdateien. Es ist der selbe Syntax - nur mit etwas anderen Befehlen als in einer autoexec.bat. :-)

Warum willst Du da etwas ändern? Gefallen Dir die Scripte nicht? ;-)

Gruß

Mario
DSL10Off
Beiträge: 73
Registriert: 28 Jul 2005, 13:17

Beitrag von DSL10Off »

Vielen Dank für deine Informationen. Vorallem den Link. Hab da zwar das SNMPTool heruntergeladen, aber gar nicht auf die Webseite geschaut. Das hat einige Fragen beantwortet.

Was die MS DOS Syntax angeht, war ich anscheinend etwas schwer von Begriff. Trotzdem hat sich mein Wissen was die Syntax angeht, immer nur auf das ändern irgendwelcher Paramter erstreckt. So richtig programmiert mit Variablen habe ich da nie. Deswegen weiß ich z.B. auch nicht, wie ich den Inhalt einer Variablen ausgeben kann. Habs mal mit ECHO probiert, hat aber nicht funktioniert. Auch diese !XXXX! Konstrukte sind mir vollkommen fremd. Ich hab das zuerst als Logischen NOT interpretiert. Bei einer Googlesuche habe ich jetzt aber diese Dokumentation gefunden, die mir hoffentlich weiterhilft.
http://www.robvanderwoude.com/allhelp.html
Warum willst Du da etwas ändern? Gefallen Dir die Scripte nicht? :wink:
Naja, ich möchte die Scripte an das Auslesen der Accountingdaten anpassen. Insbesondere die Ausgabe der Textdatei. Dazu muss ich ja soweit ich das bisher überblickt habe, nur was an den tokens ändern. Auf der anderen Seite hast du natürlich recht. Wenn ichs genau bedenke, kann man mit den Skripten alles auslesen was man braucht, um ein Skript zu füttern. Na mal sehen, wie ich es mache.

Vielleicht passe ich die cmd Dateien noch an, damit der lange OID Zweig nicht mit in die Datei geschrieben wird, sondern nur noch die Angaben unter
2.18.5.1.1 (Name des Computers)
2.18.5.1.5 (empfangene Pakete in kb)
2.18.5.1.6 (gesendete Pakete in kb)

Liegen die Accountingdaten bei allen Lancomgeräten eigentlich an der gleichen Stelle des OID Zweiges?

<Enterprises OID> .2.18.5


Ich habe ja nun den Haken bei 'SNMP Zugriffe nur mit Passwort" entfernt. Ist das irgendwie gefährlich, auch wenn bei mir jegliche Zugriffe auf den LANCOM Wan-seitig nicht erlaubt sind, und ich mir von LAN Seite keine Sorgen machen muss? (Sind nur 3 Computer und eine Dbox)
Gruß
DSL10Off

Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
eddia
Beiträge: 1239
Registriert: 15 Nov 2004, 09:30

Beitrag von eddia »

Hallo DSL10Off,
Auch diese !XXXX! Konstrukte sind mir vollkommen fremd. Ich hab das zuerst als Logischen NOT interpretiert. Bei einer Googlesuche habe ich jetzt aber diese Dokumentation gefunden, die mir hoffentlich weiterhilft.
http://www.robvanderwoude.com/allhelp.html
Das hättest Du auch einfacher haben können. Einfach help bzw. help <befehl> in einer Eingabeaufforderung eingeben - ist sogar in deutsch. ;-)

Und !xxx! steht für die Erweiterung einer Variable zur Laufzeit der For-Schleife.
Naja, ich möchte die Scripte an das Auslesen der Accountingdaten anpassen. Insbesondere die Ausgabe der Textdatei. Dazu muss ich ja soweit ich das bisher überblickt habe, nur was an den tokens ändern.
An dem Token nicht! Du kannst jedoch das Schreiben der ersten beiden Spalten (OID und Type) unterdrücken, dann erhälst Du nur noch die Werte.
Liegen die Accountingdaten bei allen Lancomgeräten eigentlich an der gleichen Stelle des OID Zweiges?

<Enterprises OID> .2.18.5
Das sollte eigentlich bei allen Lancoms identisch sein.
Ich habe ja nun den Haken bei 'SNMP Zugriffe nur mit Passwort" entfernt. Ist das irgendwie gefährlich, auch wenn bei mir jegliche Zugriffe auf den LANCOM Wan-seitig nicht erlaubt sind, und ich mir von LAN Seite keine Sorgen machen muss? (Sind nur 3 Computer und eine Dbox)
Na ja - jeder in Deinem lokalen Netz kann jetzt per SNMP alle Parameter des Lancoms lesen. Musst Du selbst einschätzen, wie kritisch das für Dich ist.

Gruß

Mario
DSL10Off
Beiträge: 73
Registriert: 28 Jul 2005, 13:17

Beitrag von DSL10Off »

Das hättest Du auch einfacher haben können. Einfach help bzw. help <befehl>
Oh , das tut richtig weh ;) Das ich daran nicht gedacht habe. Wird Zeit, das ich mein Hirn wieder aus der Reinigung abhole. :lol:
Na ja - jeder in Deinem lokalen Netz kann jetzt per SNMP alle Parameter des Lancoms lesen. Musst Du selbst einschätzen, wie kritisch das für Dich ist.

Auch wenn ich da LAN seitig keine Bedenken habe, wie steht es mit der Konfiguration per "Zugangsliste" mittels der man den Zugriff auf bestimmte IP Adressen beschränken kann?`
Also ich meine die Zugangsliste in LanConfig unter "Management" - Tab "Admin" - Button "Zugangsliste ..."
Damit sollte man den Zugriff doch theoretisch einschränken können, oder nicht?
Gruß
DSL10Off

Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
Benutzeravatar
Jirka
Beiträge: 5288
Registriert: 03 Jan 2005, 13:39
Wohnort: Ex-OPAL-Gebiet
Kontaktdaten:

Beitrag von Jirka »

Hi,

> Also ich meine die Zugangsliste in LanConfig unter "Management" - Tab "Admin" - Button "Zugangsliste ..."
> Damit sollte man den Zugriff doch theoretisch einschränken können, oder nicht?

Auf alle Fälle. Und wenn du dir auch noch die Zugriffsrechte links daneben anschaust und da ggf. einstellst, dass von entfernten Netzen kein Zugriff möglich ist, dann sollte das passen.

Viele Grüße,
Jirka
DSL10Off
Beiträge: 73
Registriert: 28 Jul 2005, 13:17

Beitrag von DSL10Off »

So, ich bin ein Stück weitergekommen. Ich habe jetzt mal die .cmd Dateien angepasst.

LancomAcc

Code: Alles auswählen

cmd /V:ON /C LancomAccSub %1 %2 %3
LancomAccSub.cmd

Code: Alles auswählen

@ECHO OFF

REM *** LancomAcc ***
REM *** dient dem Auslesen der Accountingtabelle des Lancoms per SNMP und Schreiben in eine Datei
REM
REM Voraussetzung: snmptool.exe  - download unter http://www.jklein.de/techniker_arbeit/tech_data/snmptool.exe
REM
REM Aufruf: LancomAcc IP-Adresse|Hostname Passwort Ausgabedatei
REM
REM Beispiel (liest Accounting Tabelle aus): LancomAcc 192.168.0.254 xxx acc.txt
REM
REM Sofern LAN-seitig der Lesezugriff ohne Passwort erlaubt ist, ist die Angabe des Gerätepassworts nicht erforderlich.
REM In diesem Fall können Sie das Passwort durch 'public' (ohne die Hochkommas) ersetzen.
REM
REM Achtung! snmptool.exe hat einen kleinen Fehler. Falls alle Oktets der IP-Adresse 3 Zeichen lang sind,
REM          wird das als Hostname interpretiert und bricht mit einem Fehler ab. Die Angabe des Hostnamen
REM          funktioniert aber.
REM
REM Verwendete Variablen:
REM   LC_IP - IP-Adresse oder Hostname des Lancoms
REM   LC_PW - Konfigurations-Passwort des Lancoms
REM   LC_Enterprises - die je nach Lancom spezifische Enterprises OID
REM   LC_ParaDatei - Dateiname der Ausgabedatei

SET LC_IP=%1
SET LC_PW=%2
SET LC_ParaDatei=%3

REM Auslesen der Enterprises OID des Lancoms
SET LC_Enterprises=
FOR /F "tokens=2" %%i IN ('snmptool get %LC_IP% %LC_PW% 1.2') DO SET LC_Enterprises=%%i

REM Falls Parameterdatei schon existiert: Löschen
IF EXIST %LC_ParaDatei% DEL %LC_ParaDatei%

REM Tabelleneinträge initialisieren
SET LC_HOSTS=
SET LC_RECEIVED=
SET LC_SENT=
SET LC_LZ=

REM Auslesen Hostnamen und abspeichern
FOR /F "tokens=1,*" %%i IN ('"snmptool walk %LC_IP% %LC_PW% .%LC_Enterprises%.2.18.5.1.1 | FINDSTR "Value""') DO (
	SET LC_LZ=%%j
	SET LC_HOSTS=!LC_LZ:~0,-1!
	@ECHO !LC_HOSTS!>> %LC_ParaDatei%
	SET LC_HOSTS=
)

REM Auslesen 'Empfangene Pakete in kb' und abspeichern
FOR /F "tokens=1,*" %%i IN ('"snmptool walk %LC_IP% %LC_PW% .%LC_Enterprises%.2.18.5.1.5 | FINDSTR "Value""') DO (
	SET LC_LZ=%%j
	SET LC_RECEIVED=!LC_LZ:~0,-1!
	@ECHO !LC_RECEIVED!kb>> %LC_ParaDatei%
	SET LC_RECEIVED=
)

REM Auslesen 'Gesendete Pakete in kb' und abspeichern
FOR /F "tokens=1,*" %%i IN ('"snmptool walk %LC_IP% %LC_PW% .%LC_Enterprises%.2.18.5.1.6 | FINDSTR "Value""') DO (
	SET LC_LZ=%%j
	SET LC_SENT=!LC_LZ:~0,-1!
	@ECHO !LC_SENT!kb>> %LC_ParaDatei%
	SET LC_SENT=
)
Die benötigten Angaben werden schon in die angegebene Datei geschrieben. Das Problem ist aber, das es untereinander geschrieben wird. Die Datei sieht folgendermaßen aus:

Code: Alles auswählen

HOST1
HOST2
empfangen in kb (von Host1)
empfangen in kb (von Host2)
gesendet in kb (von Host1)
gesendet in kb (von Host2)
Wie schaffe ich es, das die Angaben in eine Zeile geschrieben werden? z.B.

Code: Alles auswählen

HOST1;empfangen in kb (Host1);gesendet in kb (Host1)
HOST2;empfangen in kb (Host2);gesendet in kb (Host2)
Wie erzeuge ich z.B. Umgebungsvariablen in Abhängigkeit eines Index
SET LC_HOSTS!LC_LOOP! = ... hab ich in meiner Naivität schon probiert. ;) Aber irgendwie mache ich etwas falsch.
Gruß
DSL10Off

Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
eddia
Beiträge: 1239
Registriert: 15 Nov 2004, 09:30

Beitrag von eddia »

Hallo DSL10Off,
Wie schaffe ich es, das die Angaben in eine Zeile geschrieben werden?
Ein 'walk' ist hier ungünstig - nimm 'getnext'. Also snmptool getnext blabla 2.18.5.1.1 und so weiter. Damit das in eine Zeile kommt, musst Du die Werte für eine Zeile sammeln und in einem Rutsch mit einem echo schreiben. Und daran denken: getnext geht spaltenweise vor.
Wie erzeuge ich z.B. Umgebungsvariablen in Abhängigkeit eines Index
SET LC_HOSTS!LC_LOOP! = ... hab ich in meiner Naivität schon probiert.
Suchst Du das hier?

set lc_hosts=%%lc_hosts%%!lc_loop!

Gruß

Mario
DSL10Off
Beiträge: 73
Registriert: 28 Jul 2005, 13:17

Beitrag von DSL10Off »

Ein 'walk' ist hier ungünstig - nimm 'getnext'. Also snmptool getnext blabla 2.18.5.1.1 und so weiter.
Da ich mir das größtenteils aus den bestehenden Skripten hergeleitet habe, und auch nicht so recht verstehe, was der getnext Befehl tut, wäre ich für einen Tipp bzw. eine Erklärung dankbar, warum ich hier getnext verwenden sollte.

Ich habe in der .cmd Datei einfach mal walk durch getnext ersetzt, bekomme jetzt aber z.B nur noch den ersten Host (HOST1) ausgegeben.

Damit das in eine Zeile kommt, musst Du die Werte für eine Zeile sammeln und in einem Rutsch mit einem echo schreiben.
Vom Prinzip her war mir das schon klar. Ich fürchte nur mein Programmiertalent macht da irgendwie nicht mit. Inzwischen seh ich den Wald vor lauter Bäumen nicht mehr.
Suchst Du das hier?

set lc_hosts=%%lc_hosts%%!lc_loop!
Das weiß ich inzwischen auch nicht mehr so genau. Jetzt wo das mit getnext im Raum steht. Ursprünglich hatte ich gedacht, in der FOR Schleife eine Art Counter (LC_LOOP) einzusetzen, und dann in jedem Durchlauf den Wert in einer neuen Variablen abzuspeichern. Also:

1 Durchlauf : LC_LOOP = 1
Dann soll die Variabel LC_HOST1 erstellt werden und darin der WERT gespeichert werden.

2 Durchlauf : LC_LOOP = 2
LC_HOST2
...

Deshalb dachte ich es müsste einen Weg geben, ein Variable zu definieren, die in ihrem Namen den Wert des Counters enthält. Damit eben jede Ausgabe in einer eigenen Variable steht, um so am Schluß eine Zeile aufzubauen. !LC_HOST1!;!LC_RECEIVED1!;!LC_SENT1!
Gruß
DSL10Off

Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
eddia
Beiträge: 1239
Registriert: 15 Nov 2004, 09:30

Beitrag von eddia »

Hallo DSL10Off,
Da ich mir das größtenteils aus den bestehenden Skripten hergeleitet habe, und auch nicht so recht verstehe, was der getnext Befehl tut, wäre ich für einen Tipp bzw. eine Erklärung dankbar, warum ich hier getnext verwenden sollte.
weil Du Dich damit durch die Tabelle Wert für Wert durcharbeiten kannst, ohne die eigentliche OID zu kennen. Der Link, den ich Dir schon gegeben habe, erklärt das genauer.
Ursprünglich hatte ich gedacht, in der FOR Schleife eine Art Counter (LC_LOOP) einzusetzen, und dann in jedem Durchlauf den Wert in einer neuen Variablen abzuspeichern. Also:

1 Durchlauf : LC_LOOP = 1
Dann soll die Variabel LC_HOST1 erstellt werden und darin der WERT gespeichert werden.

2 Durchlauf : LC_LOOP = 2
LC_HOST2
...
Ach so - keine schlechte Idee. :-) Und sollte mit meinem Code-Beispiel auch so funktionieren.

Gruß

Mario
DSL10Off
Beiträge: 73
Registriert: 28 Jul 2005, 13:17

Beitrag von DSL10Off »

Hallo eddia,
weil Du Dich damit durch die Tabelle Wert für Wert durcharbeiten kannst, ohne die eigentliche OID zu kennen. Der Link, den ich Dir schon gegeben habe, erklärt das genauer.
ich habe die Seite von J.Klein gelesen, verstehe aber immer noch nicht, wie ich mit dem getnext Befehl weiterkomme. Auch wenn du geschrieben hast, das getnext spaltenweise arbeitet.

Ich tippe z.B. snmptool getnext <HOST|IPADRESSE> public .<ENTERPRISES OID>.2.18.5.1.1 und erhalte als Ausgabe den Eintrag des ersten HOST der AccountingTabelle.
Wie ich dann allerdings den Eintrag des nächsten HOST erhalte verstehe ich nicht. Wenn ich den gleichen Befehl nochmal so eingebe, erhalte ich wieder nur den ersten HOST. Wie muss ich den GETNEXT Befehl anpassen, damit er mir im Anschluss den zweiten Host ausgibt? Wie springe ich denn in die nächste Spalte oder Zeile, sofern mein Problem mit dieser spaltenweisen Arbeitsweise zu tun hat.
Und sollte mit meinem Code-Beispiel auch so funktionieren.
Da mein Programmierwissen sehr gering ist, habe ich mich gefragt, wenn es nicht zuviel verlangt ist, ob du mir evtl. ein kleines Codebeispiel geben könntest, wo mittels einer FOR Schleife die HOSTS der Accountingtabelle in der Schleife in Variablen - abhängig von der Anzahl der Schleifendurchläufe - gespeichert werden. Sprich, das am Ende die HOSTS in den Variablen LC_HOST1, LCHOST2, ... zu finden sind.

Wie gesagt, sofern es nicht zuviel verlangt ist, wäre ich dir wirklich unendlich dankbar für diese kleine Hilfe. :) Anhand des kleinen Beispiels könnte ich dann nachvollziehen, wie man das macht, und den restlichen Code selbst erstellen.

Aber selbst wenn nicht, danke ich dir natürlich für deine bisher aufgebrachte Zeit und Geduld.:)
Gruß
DSL10Off

Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
eddia
Beiträge: 1239
Registriert: 15 Nov 2004, 09:30

Beitrag von eddia »

Hallo DSL10Off,
Wie muss ich den GETNEXT Befehl anpassen, damit er mir im Anschluss den zweiten Host ausgibt?
Du musst die OID, die Dir der erste getnext geliefert hat abspeichern und als Parameter für den nächsten getnext benutzen.
Wie springe ich denn in die nächste Spalte oder Zeile, sofern mein Problem mit dieser spaltenweisen Arbeitsweise zu tun hat.
Das macht getnext automatisch.
Da mein Programmierwissen sehr gering ist, habe ich mich gefragt, wenn es nicht zuviel verlangt ist, ob du mir evtl. ein kleines Codebeispiel geben könntest, wo mittels einer FOR Schleife die HOSTS der Accountingtabelle in der Schleife in Variablen - abhängig von der Anzahl der Schleifendurchläufe - gespeichert werden. Sprich, das am Ende die HOSTS in den Variablen LC_HOST1, LCHOST2, ... zu finden sind.
Wenn es nicht so schwierig wäre, hätte ich das schon gemacht. :-)

Die Batchsprache von MS-DOS ist nur rudimentär. Nur eingeschränkte Stringbearbeitung und überhaupt keine Arrays (geschweige dynamische) möglich.

Aber mal sehen - vielleicht fällt mir noch was ein...

Gruß

Mario
eddia
Beiträge: 1239
Registriert: 15 Nov 2004, 09:30

Beitrag von eddia »

Hallo DSL10Off,
Anhand des kleinen Beispiels könnte ich dann nachvollziehen, wie man das macht, und den restlichen Code selbst erstellen.
Ich hab jetzt mal was zusammengeschrieben. Ist zwar noch mit der heißen Nadel und einiges noch hardcodiert - sollte aber funktionieren.

Code: Alles auswählen

SET LC_IP=%1
SET LC_PW=%2
SET LC_ParaDatei=%3

REM Auslesen der Enterprises OID des Lancoms
SET LC_Enterprises=
FOR /F "tokens=2" %%i IN ('snmptool get %LC_IP% %LC_PW% 1.2') DO SET LC_Enterprises=%%i

REM Falls Parameterdatei schon existiert: Löschen
IF EXIST %LC_ParaDatei% DEL %LC_ParaDatei%

REM Feste Variablen initialisieren
SET LC_TAB_ROW=0
SET LC_TAB_COL=8
SET LC_Host=Host
SET LC_RX=RX
SET LC_TX=TX

REM Schleifenvariablen initialisieren
SET LC_LZ=
SET LC_AKT_ROW=1
SET LC_AKT_COL=1

REM Ermitteln der Zeilenanzahl der Tabelle
FOR /F "tokens=1,*" %%i IN ('"snmptool walk %LC_IP% %LC_PW% .%LC_Enterprises%.2.18.5 | FINDSTR "Value""') DO (
	SET /A LC_TAB_ROW=!LC_TAB_ROW!+1
)
SET /A LC_TAB_ROW=!LC_TAB_ROW!/!LC_TAB_COL!

REM Auslesen Werte und dynamische Variablen erzeugen
FOR /F "tokens=1,*" %%i IN ('"snmptool walk %LC_IP% %LC_PW% .%LC_Enterprises%.2.18.5 | FINDSTR "Value""') DO (
	SET LC_LZ=%%j
	IF !LC_AKT_COL! EQU 1 SET %LC_host%!LC_AKT_ROW!=!LC_LZ!
	IF !LC_AKT_COL! EQU 5 SET %LC_RX%!LC_AKT_ROW!=!LC_LZ!
	IF !LC_AKT_COL! EQU 6 SET %LC_TX%!LC_AKT_ROW!=!LC_LZ!
	SET /A LC_AKT_ROW=!LC_AKT_ROW!+1
	IF !LC_AKT_ROW! GTR !LC_TAB_ROW! (
		SET /A LC_AKT_COL=!LC_AKT_COL!+1
		SET LC_AKT_ROW=1
	)
)

REM Dynamische Variablen schreiben
FOR /L %%i IN (1,1,%LC_TAB_ROW%) DO echo !%LC_host%%%i! !%LC_RX%%%i! !%LC_TX%%%i! >> %LC_ParaDatei%
Die optische Verfeinerung kannst Du ja machen. :-)

Gruß

Mario
DSL10Off
Beiträge: 73
Registriert: 28 Jul 2005, 13:17

Beitrag von DSL10Off »

Vielen, vielen Dank eddia, dass du soviel Zeit und Mühe investiert hast. :D

Ich habe noch einige kleine Änderungen an der Datei vorgenommen, damit Sie mir eine Art Logdatei schreibt.
Den Teil, in dem eine existierende Datei gelöscht wird, habe ich entfernt. Damit hängt der erneute Aufruf von LancomAcc die Daten einfach am Ende der Datei an.

Ansonsten nur noch kosmetische Änderungen:
  • @Echo Off, Kommentare am Anfang,
  • !LC_LZ:~0,-1! statt !LC_LZ! damit das letzte Leerzeichen am Ende entfernt wird.
  • Ausgabe in Datei erfolgt jetzt getrennt durch ";". Damit kann ich später besser arbeiten. (; als Delimiter)
  • Es wird das aktuelle Datum und die aktuelle Zeit mit ins Logfile geschrieben.
Damit ist die Datei jetzt soweit fertig, damit ich Sie mittels "Geplanten Tasks" einmal am Tag laufen lassen kann.

Im Anschluss jetzt noch die beiden Dateien. Und damit nochmal ein herzlicher Dank an alle, die mir geholfen haben.

LancomAcc

Code: Alles auswählen

cmd /V:ON /C LancomAccSub %1 %2 %3
LancomAccSub

Code: Alles auswählen

@ECHO OFF

REM *** LancomAcc ***
REM *** dient dem Auslesen der Accountingdaten des Lancoms per SNMP und mitloggen in eine Datei
REM
REM Voraussetzung: snmptool.exe  - download unter http://www.jklein.de/techniker_arbeit/tech_data/snmptool.exe
REM
REM Aufruf: LancomAcc IP-Adresse|Hostname Passwort Parameterdatei
REM
REM Beispiel : LancomAcc 192.168.0.254 xxx Acc.txt
REM
REM
REM Sofern das Auslesen per SNMP im lokalen Netzwerk ohne Angabe eines Passwortes erlaubt ist, können Sie statt
REM des Konfigurationspasswortes auch 'public' verwenden (ohne die Hochkomma). Das bietet sich an, Wenn Sie das 
REM Skript automatisieren wollen, aber nicht ihr Konfigurationspasswort im Klartext in diese Datei schreiben wollen.
REM
REM Achtung! snmptool.exe hat einen kleinen Fehler. Falls alle Oktets der IP-Adresse 3 Zeichen lang sind,
REM          wird das als Hostname interpretiert und bricht mit einem Fehler ab. Die Angabe des Hostnamen
REM          funktioniert aber.
REM
REM Verwendete Variablen:
REM   LC_IP - IP-Adresse oder Hostname des Lancoms
REM   LC_PW - Konfigurations-Passwort des Lancoms (siehe oben: u.U. funktioniert auch 'public' als Passwort)
REM   LC_LogDatei - Dateiname der Logdatei

SET LC_IP=%1
SET LC_PW=%2
SET LC_LogDatei=%3

REM Auslesen der Enterprises OID des Lancoms
SET LC_Enterprises=
FOR /F "tokens=2" %%i IN ('snmptool get %LC_IP% %LC_PW% 1.2') DO SET LC_Enterprises=%%i

REM Feste Variablen initialisieren
SET LC_TAB_ROW=0
SET LC_TAB_COL=8
SET LC_Host=Host
SET LC_RX=RX
SET LC_TX=TX

REM Schleifenvariablen initialisieren
SET LC_LZ=
SET LC_AKT_ROW=1
SET LC_AKT_COL=1

REM Ermitteln der Zeilenanzahl der Tabelle
FOR /F "tokens=1,*" %%i IN ('"snmptool walk %LC_IP% %LC_PW% .%LC_Enterprises%.2.18.5 | FINDSTR "Value""') DO (
   SET /A LC_TAB_ROW=!LC_TAB_ROW!+1
)
SET /A LC_TAB_ROW=!LC_TAB_ROW!/!LC_TAB_COL!

REM Auslesen Werte und dynamische Variablen erzeugen
FOR /F "tokens=1,*" %%i IN ('"snmptool walk %LC_IP% %LC_PW% .%LC_Enterprises%.2.18.5 | FINDSTR "Value""') DO (
   SET LC_LZ=%%j
   IF !LC_AKT_COL! EQU 1 SET %LC_host%!LC_AKT_ROW!=!LC_LZ:~0,-1!
   IF !LC_AKT_COL! EQU 5 SET %LC_RX%!LC_AKT_ROW!=!LC_LZ:~0,-1!
   IF !LC_AKT_COL! EQU 6 SET %LC_TX%!LC_AKT_ROW!=!LC_LZ:~0,-1!
   SET /A LC_AKT_ROW=!LC_AKT_ROW!+1
   IF !LC_AKT_ROW! GTR !LC_TAB_ROW! (
      SET /A LC_AKT_COL=!LC_AKT_COL!+1
      SET LC_AKT_ROW=1
   )
)

REM Dynamische Variablen schreiben
FOR /L %%i IN (1,1,%LC_TAB_ROW%) DO @echo %date%;%time%;!%LC_host%%%i!;!%LC_RX%%%i!;!%LC_TX%%%i! >> %LC_LogDatei%
Gruß
DSL10Off

Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
Antworten