Frage zu SNMP und PHP

Forum zu den aktuellen LANCOM Wireless Accesspoint Serien

Moderator: Lancom-Systems Moderatoren

Antworten
NLange
Beiträge: 171
Registriert: 11 Dez 2004, 12:19
Kontaktdaten:

Frage zu SNMP und PHP

Beitrag von NLange »

Ich versuch mich gerade zum ersten Mal an SNMP und möchte ein kleines PHP-Script schreiben, das z.B. die aktuellen Linkdaten ausliest. Folgendes Script funktioniert schon mal soweit daß da eine große Tabelle ausgelesen und im Browser ausgegeben wird:

Code: Alles auswählen

<?php
  $data=snmprealwalk('ip-vom-lancom','public',null);
  echo '<pre>'; var_dump($data); echo '</pre>';
?>
Jetzt habe ich mir mal die SNMP-MIB-Datei vom Lancom angeschaut und frage mich, wie ich jetzt beim PHP so eine Object-ID gezielt auslesen kann. Versucht habe ich es wie folgt, was aber nicht funktioniert hat:

Code: Alles auswählen

<?php
  $data = snmpget("ip-vom-lancom", "public", "staWlanWlanpaTransm.0");
  echo '<pre>'; var_dump($data); echo '</pre>';
?>
Wie verwende ich diese Object-ID's richtig bei PHP?
Benutzeravatar
alf29
Moderator
Moderator
Beiträge: 6207
Registriert: 07 Nov 2004, 19:33
Wohnort: Aachen
Kontaktdaten:

Beitrag von alf29 »

Moin,

diese Tabelle hat einen String als Index (ja, so etwas geht mit SNMP...). In einem
SNMP-Walk sieht das z.B. so aus:

Code: Alles auswählen

LANCOM-3050-MIB::staWlanWlanpaTransm."WLAN-1" = STRING: "15 dBm"
Gruß Alfred
“There is no death, there is just a change of our cosmic address."
-- Edgar Froese, 1944 - 2015
m-jelinski
Beiträge: 231
Registriert: 29 Mär 2005, 14:08
Wohnort: Kaufungen bei Kassel
Kontaktdaten:

Beitrag von m-jelinski »

Das klingt ja sehr interessant. Welche Möglichkeiten habe ich den mit den Lancom Geräten und PHP? Soll heißen: Was kann ich wie auslesen?
NLange
Beiträge: 171
Registriert: 11 Dez 2004, 12:19
Kontaktdaten:

Beitrag von NLange »

@Alfred: Also irgendwie krieg ich das nicht hin. Hier mein Code auf der Basis deines Codebeispiels:

Code: Alles auswählen

  $data = snmpget('ip-vom-lancom', 'public', 'staWlanWlanpaTransm."WLAN-1"');
  echo '<pre>'; var_dump($data); echo '</pre>';
Das quittiert PHP bzw. dessen SNMP-Engine mit der Meldung:

"Warning: snmpget() [function.snmpget]: Invalid object identifier: staWlanWlanpaTransm."WLAN-1" in snmp.php on line 3"

Ohne Anführungszeichen, also staWlanWlanpaTransm.WLAN-1 quittiert mit der selben Fehlermeldung.

PS: Es handelt sich um einen L-54ag.
Benutzeravatar
alf29
Moderator
Moderator
Beiträge: 6207
Registriert: 07 Nov 2004, 19:33
Wohnort: Aachen
Kontaktdaten:

Beitrag von alf29 »

Moin,

ja, da hat der snmpget von PHP wohl eine andere Syntax
als der von einem normalen snmpwalk/snmpget auf der
Kommandozeile...

Ich habe mal in einem PHP-Skript von einem anderen
Kunden nachgeschaut (das nachweislich mit PHP5
funktioniert) und dort wird der String einfach als Zahlenkette
mit Länge davor ausgeschrieben, also anstelle von
."WLAN-1" ein .6.87.76.65.78.45.49

Gruß Alfred
“There is no death, there is just a change of our cosmic address."
-- Edgar Froese, 1944 - 2015
NLange
Beiträge: 171
Registriert: 11 Dez 2004, 12:19
Kontaktdaten:

Beitrag von NLange »

Kannst du mir mal diese eine PHP-Codezeile geben? IP kannste ja rauslöschen. Ich krieg nur Fehlermeldungen. Entweder unbekannte Objekt-ID oder Syntax-Error.

Außerdem: Gibt es irgendwo eine genauere Beschreibung der SNMP-Parameter der Lancoms? Also welche Objekt-ID was bedeutet?
Benutzeravatar
alf29
Moderator
Moderator
Beiträge: 6207
Registriert: 07 Nov 2004, 19:33
Wohnort: Aachen
Kontaktdaten:

Beitrag von alf29 »

Moin,

aufs wesentliche reduziert, so wird z.B. der Rauschpegel
gemessen:

Code: Alles auswählen

snmp_read_mib("lancom.mib");
$oidsuffix      = ".6.87.76.65.78.45.49";
$community = "public"
$locnoise               = @snmpget($host, $community, "LANCOM-XAP-40-2-MIB::staWlanWlanpaNoisel".$oidsuffix, 100000);
Das war für einen XAP, den Gerätetyp mußt Du Dir
anpassen. $host ist die Geräte-IP-Adresse.

Gruß Alfred
“There is no death, there is just a change of our cosmic address."
-- Edgar Froese, 1944 - 2015
NLange
Beiträge: 171
Registriert: 11 Dez 2004, 12:19
Kontaktdaten:

Beitrag von NLange »

Also das mit der Zahlenkette von ASCII-Codes funktioniert bei mir nicht. Wenn ich mir den var_dump vom snmprealwalk von PHP5 so anschaue (der ja funktioniert weswegen ich den Fehler nicht bei der SNMP-Verbindung sehe), dann sind die Zahlenketten ganz andere, sicher keine ASCII-Codes:

Code: Alles auswählen

  [".iso.3.6.1.2.1.1.1.0"]=>
  string(61) "" LANCOM L-54ag Wireless 6.06.0012 / 27.03.2006 024070600486""
  [".iso.3.6.1.2.1.1.2.0"]=>
  string(33) "OID: .iso.3.6.1.4.1.2356.600.3.54"
  [".iso.3.6.1.2.1.1.3.0"]=>
  string(32) "Timeticks: (6086054) 16:54:20.54"
Nur weiß ich nun auch nicht mehr als vorher denn hier gibts gar keine Klartext-OID's mehr.

ABER: Mit so einem String (".iso.3.6.1.2.1.1.1.0") allein, also ohne MIB-Angabe ohne alles, klappt snmpget im PHP5.

Nur ohne einen Schlüssel welcher String für welchen Wert steht komme ich nicht weiter. Die lancom.mib gibt da jedenfalls keine Auskunft.

Nachtrag: Ich hab jetzt mal ein bissl bei Wikipedia über SNMP geschmökert und so langsam steige ich dahinter wie das alles zusammenhängt mit der Zahlenkette, der MIB-Datei, den Objekt-ID's usw. "2356.600.3.54" ist der Pfad vom Hersteller über WLAN, LAN-Router bis zum L-54ag. Aber kompliziert ist SNMP ja grad mal kein bischen oder? ;)
Benutzeravatar
alf29
Moderator
Moderator
Beiträge: 6207
Registriert: 07 Nov 2004, 19:33
Wohnort: Aachen
Kontaktdaten:

Beitrag von alf29 »

Moin,

.1.3.6.1.2.1.... ist die MIB-2, da willst Du eigentlich nicht hin,
oder?

Alles, was im LANCOM im Telnet zu sehen ist, steht in der
Enterprise-MIB, die man aus dem Gerät per WEBconfig
ziehen kann. Wenn man die nackten Nummernketten
sehen will, kann man z.B. auch auf der Telnet-Oberfläche
ein 'dir -a' machen, dann wird die Kette angezeigt.

Gruß Alfred
“There is no death, there is just a change of our cosmic address."
-- Edgar Froese, 1944 - 2015
NLange
Beiträge: 171
Registriert: 11 Dez 2004, 12:19
Kontaktdaten:

Beitrag von NLange »

Also ist der Basispfad "1.3.6.1.4.1.2356.600.3.54". Wenn ich das richtig verstehe müßten ja dann die weiteren Zahlen sogar mit dem übereinstimmen was man im Webinterface als Pfad sieht.
Benutzeravatar
alf29
Moderator
Moderator
Beiträge: 6207
Registriert: 07 Nov 2004, 19:33
Wohnort: Aachen
Kontaktdaten:

Beitrag von alf29 »

Moin,

so, also das funktioniert definitv hier bei mir:

Code: Alles auswählen

#!/usr/bin/php -q
<?php

$host           = "192.168.11.85";
$community      = "public";
$ifcsuffix      = ".6.87.76.65.78.45.49";

snmp_read_mib("lancom.mib");

$txpower = snmpget($host, $community, "LANCOM-L54ag-MIB::staWlanWlanpaTransm".$ifcsuffix, 100000);

printf("The current transmit power is %s", $txpower);

?>
Gruß Alfred
“There is no death, there is just a change of our cosmic address."
-- Edgar Froese, 1944 - 2015
NLange
Beiträge: 171
Registriert: 11 Dez 2004, 12:19
Kontaktdaten:

Beitrag von NLange »

Also bei mir gehts nicht. Allerdings hab ich inzwischen einen Verdacht warum es nicht geht. Wenn ich PHP5 bei mir mit der php_snmp.dll starte wirft PHP eine ganze Reihe von Fehlermeldungen aus daß verschiedene Bibliotheken nicht vorhanden wären. Das passiert auf zwei verschiedenen Maschinen wenn PHP unter Windows läuft. Bei PHP auf Linux geht dein Code. Das Problem war eben daß man diese PHP-Fehler nicht sieht wenn es als CGI im Apache läuft.
bild.jpg
Beiträge: 18
Registriert: 14 Apr 2007, 03:06

Beitrag von bild.jpg »

Hi,

ich check des mit SNMP noch net ganz ... :-(

das mit dem Basispfad "1.3.6.1.4.1.2356.500.4.1521" ist klar.
und auch der Pfad den ich will ist klar (z.B. CPU-Usage: "1.47")

also ergibt sich für mich hier dann der Pfad

1.3.6.1.4.1.2356.500.4.1521.1.47

so - gut - ich weiß das dieser nicht tut und ich weiß dass da meistens hinten noich was ran muss - aber was oder wie ka - google hilft auch net besonders weiter ... :-(

also HILFE HILFE HILFE HILFE HILFE

THX lg JPG
Benutzeravatar
alf29
Moderator
Moderator
Beiträge: 6207
Registriert: 07 Nov 2004, 19:33
Wohnort: Aachen
Kontaktdaten:

Beitrag von alf29 »

Moin,
und auch der Pfad den ich will ist klar (z.B. CPU-Usage: "1.47")
Mit 1.47 bist Du erstmal nur im Hardware-Status-Menü, für die CPU-Auslastung muß noch
die ID des Menüpunktes dran, also 1.47.3 . Je nach SNMP-Tool kann es noch erforderlich sein,
eine weitere Null anzuhängen (also 1.47.3.0) , das ist eine SNMP-Eigenheit beim Ansprechen
von Skalaren (also Werten, die nicht in Tabellen liegen).
also HILFE HILFE HILFE HILFE HILFE
Es wäre hilfreich zu wissen, was für ein SNMP-Tool Du verwendest - sonst wird das mit der Hilfe
schwierig...

Gruß Alfred
“There is no death, there is just a change of our cosmic address."
-- Edgar Froese, 1944 - 2015
Drachenlady
Beiträge: 82
Registriert: 29 Jun 2006, 14:56

Beitrag von Drachenlady »

NLange hat geschrieben:Das Problem war eben daß man diese PHP-Fehler nicht sieht wenn es als CGI im Apache läuft.
Du solltest dir beim Programmieren angewöhnen, zu prüfen, ob (k)ein fehlerhafter Aufruf einer Funktion stattfand.
Es ist nicht besonders geschickt, sich daraf zu verlassen, dass PHP schon eine Ausnahme anzeigt.
Geht in andern Skript-/Programmiersprachen doch auch.
Oder ist PHP wirklich so unflexibel?
Lancom 1821 Wireless ADSL (Annex B) Rev. E - LCOS 7.58.0045 MOD-E6.WI2 (KW50/05) -
ADSL 448/96 (T-Com) - DSLAM Infineon - Leitgsc. 6.26b/E74.02.54 - Leitgm. G.992.1
Win7
Antworten