Überschreitung des Volumentarifs & SNMP bzw. Syslog Meld
Moderator: Lancom-Systems Moderatoren
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.
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)
DSL10Off
Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
Hallo DSL10Off,
http://www.jklein.de/techniker_arbeit/t ... gemein.htm

Gruß
Mario
ja - ein Agent ist der, auf den SNMP-Operationen angewendet werden. Das Gegenstück ist der Manager, welcher SNMP-Befehle absetzt.Was ist ein Agent, bzw. viel wichtiger was ist die Community? Soviel ich verstanden habe ist der Agent der Lancom (also IP-Adresse|Hostname).
Community ist quasi das Passwort. Das Standard-Passwort bei SNMP ist eben 'public'.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.
http://www.jklein.de/techniker_arbeit/t ... gemein.htm
Die verwendete snmptool.exe erfordert zwingend die Angabe des Community-Strings. Sorry - da war ich gestern etwas voreilig.Ich habe auch gedacht, es wäre ganz einfach, das Skript dahingehend anzupassen, das es kein Passwort benötigt.
Der Lancom reagiert in diesem Fall auf die Community 'public'. Das heisst, angeben musst Du ein Passwort, aber fürs Lesen eben 'public'.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.

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.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?
Gruß
Mario
Hallo DSL10Off,

Warum willst Du da etwas ändern? Gefallen Dir die Scripte nicht?
Gruß
Mario
Und nichts anderes sind diese Batchdateien. Es ist der selbe Syntax - nur mit etwas anderen Befehlen als in einer autoexec.bat.Das einzige was ich hinsichtlich MS Syntax gemacht habe, war das Editieren der Config.sys und der Autoexec.bat zu meinen 386er Zeiten.

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

Gruß
Mario
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
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)
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
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.Warum willst Du da etwas ändern? Gefallen Dir die Scripte nicht?
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)
DSL10Off
Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
Hallo DSL10Off,

Und !xxx! steht für die Erweiterung einer Variable zur Laufzeit der For-Schleife.
Gruß
Mario
Das hättest Du auch einfacher haben können. Einfach help bzw. help <befehl> in einer Eingabeaufforderung eingeben - ist sogar in deutsch.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

Und !xxx! steht für die Erweiterung einer Variable zur Laufzeit der For-Schleife.
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.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.
Das sollte eigentlich bei allen Lancoms identisch sein.Liegen die Accountingdaten bei allen Lancomgeräten eigentlich an der gleichen Stelle des OID Zweiges?
<Enterprises OID> .2.18.5
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.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ß
Mario
Oh , das tut richtig wehDas hättest Du auch einfacher haben können. Einfach help bzw. help <befehl>


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)
DSL10Off
Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
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
> 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
So, ich bin ein Stück weitergekommen. Ich habe jetzt mal die .cmd Dateien angepasst.
LancomAcc
LancomAccSub.cmd
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:
Wie schaffe ich es, das die Angaben in eine Zeile geschrieben werden? z.B.
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.
LancomAcc
Code: Alles auswählen
cmd /V:ON /C LancomAccSub %1 %2 %3
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=
)
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)
Code: Alles auswählen
HOST1;empfangen in kb (Host1);gesendet in kb (Host1)
HOST2;empfangen in kb (Host2);gesendet in kb (Host2)
SET LC_HOSTS!LC_LOOP! = ... hab ich in meiner Naivität schon probiert.

Gruß
DSL10Off
Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
DSL10Off
Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
Hallo DSL10Off,
set lc_hosts=%%lc_hosts%%!lc_loop!
Gruß
Mario
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 schaffe ich es, das die Angaben in eine Zeile geschrieben werden?
Suchst Du das hier?Wie erzeuge ich z.B. Umgebungsvariablen in Abhängigkeit eines Index
SET LC_HOSTS!LC_LOOP! = ... hab ich in meiner Naivität schon probiert.
set lc_hosts=%%lc_hosts%%!lc_loop!
Gruß
Mario
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.Ein 'walk' ist hier ungünstig - nimm 'getnext'. Also snmptool getnext blabla 2.18.5.1.1 und so weiter.
Ich habe in der .cmd Datei einfach mal walk durch getnext ersetzt, bekomme jetzt aber z.B nur noch den ersten Host (HOST1) ausgegeben.
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.Damit das in eine Zeile kommt, musst Du die Werte für eine Zeile sammeln und in einem Rutsch mit einem echo schreiben.
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:Suchst Du das hier?
set lc_hosts=%%lc_hosts%%!lc_loop!
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)
DSL10Off
Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
Hallo DSL10Off,
Und sollte mit meinem Code-Beispiel auch so funktionieren.
Gruß
Mario
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.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.
Ach so - keine schlechte Idee.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
...

Gruß
Mario
Hallo eddia,
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.
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.
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.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 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.
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.Und sollte mit meinem Code-Beispiel auch so funktionieren.
Wie gesagt, sofern es nicht zuviel verlangt ist, wäre ich dir wirklich unendlich dankbar für diese kleine Hilfe.

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)
DSL10Off
Lancom DSL/I-10+ (LCOS 7.80.0081Rel)
Hallo DSL10Off,

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
Du musst die OID, die Dir der erste getnext geliefert hat abspeichern und als Parameter für den nächsten getnext benutzen.Wie muss ich den GETNEXT Befehl anpassen, damit er mir im Anschluss den zweiten Host ausgibt?
Das macht getnext automatisch.Wie springe ich denn in die nächste Spalte oder Zeile, sofern mein Problem mit dieser spaltenweisen Arbeitsweise zu tun hat.
Wenn es nicht so schwierig wäre, hätte ich das schon gemacht.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.

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
Hallo DSL10Off,
Die optische Verfeinerung kannst Du ja machen. 
Gruß
Mario
Ich hab jetzt mal was zusammengeschrieben. Ist zwar noch mit der heißen Nadel und einiges noch hardcodiert - sollte aber funktionieren.Anhand des kleinen Beispiels könnte ich dann nachvollziehen, wie man das macht, und den restlichen Code selbst erstellen.
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%

Gruß
Mario
Vielen, vielen Dank eddia, dass du soviel Zeit und Mühe investiert hast.
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:
Im Anschluss jetzt noch die beiden Dateien. Und damit nochmal ein herzlicher Dank an alle, die mir geholfen haben.
LancomAcc
LancomAccSub

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.
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
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)
DSL10Off
Lancom DSL/I-10+ (LCOS 7.80.0081Rel)