Start · Sprachen · PHP · Referenz · snmp2_walk

snmp2_walk

Funktion

Liest alle SNMP-Objekte eines SNMP-v2c-Agenten aus und gibt sie als Array zurück.

seit PHP 5.2.0 Kategorie: http

Signatur

snmp2_walk(string $hostname, string $community, string $object_id, int $timeout = -1, int $retries = -1): array|false

Beschreibung

snmp2_walk() führt einen SNMP-GET-NEXT-Walk über einen SNMPv2c-Agenten durch und gibt alle gefundenen OID-Werte als indiziertes Array zurück. Die Funktion ist die SNMPv2c-Variante von snmp_walk() und eignet sich besonders, wenn SNMPv2c-spezifische Funktionen wie Bulk-Transfers oder 64-Bit-Zähler benötigt werden.

Als object_id kann entweder eine konkrete OID (z. B. .1.3.6.1.2.1.1) oder ein symbolischer Name (z. B. system) übergeben werden. Wird ein leerer String übergeben, durchläuft die Funktion den gesamten MIB-Baum des Agenten ab der Wurzel.

Der Rückgabewert ist ein numerisch indiziertes Array, dessen Einträge die Werte der gefundenen OIDs als Strings enthalten. Benötigt man auch die zugehörigen OID-Bezeichner, sollte stattdessen snmp2_real_walk() verwendet werden, das ein assoziatives Array mit OIDs als Schlüssel liefert.

Die Funktion setzt eine korrekt konfigurierte SNMP-Erweiterung sowie Netzwerkzugang zum Agenten voraus. Fehler (z. B. Verbindungsprobleme oder ein nicht vorhandener Host) führen zu einem Rückgabewert false.

Parameter

Name Typ Default Beschreibung
$hostname Pflicht string Hostname oder IP-Adresse des SNMP-Agenten. Optional kann ein Port mit Doppelpunkt angehängt werden, z. B. 192.168.1.1:161.
$community Pflicht string Der SNMP-Community-String für den Lesezugriff (SNMPv2c), typischerweise public.
$object_id Pflicht string Die OID, ab der der Walk gestartet wird. Ein leerer String "" startet den Walk an der MIB-Wurzel und liest alle verfügbaren Objekte.
$timeout int -1 Timeout in Mikrosekunden für einen einzelnen SNMP-Request. -1 verwendet den Systemstandard.
$retries int -1 Anzahl der Wiederholungsversuche bei fehlgeschlagenen Requests. -1 verwendet den Systemstandard.

Rückgabewert

Typ
array|false
Beschreibung
Gibt bei Erfolg ein numerisch indiziertes Array mit allen ausgelesenen SNMP-Werten zurück. Im Fehlerfall (z. B. ungültiger Host, falscher Community-String oder Timeout) wird false zurückgegeben.

Beispiele

Alle System-OIDs eines SNMP-Agenten auslesen

<?php
// Alle OIDs unterhalb der 'system'-Gruppe auslesen
$result = snmp2_walk('192.168.1.1', 'public', 'system');

if ($result === false) {
    echo "Fehler beim SNMP-Walk.\n";
} else {
    echo "Gefundene SNMP-Werte: " . count($result) . "\n";
    foreach ($result as $index => $value) {
        echo "[$index] $value\n";
    }
}
Gefundene SNMP-Werte: 9 [0] STRING: My Router [1] STRING: .1.3.6.1.4.1.9.1.1 [2] STRING: Server Room ...

Kompletten MIB-Baum auslesen mit Fehlerbehandlung

<?php
// Timeout 2 Sekunden (2.000.000 µs), 3 Wiederholungen
$result = snmp2_walk('10.0.0.1', 'public', '', 2000000, 3);

if ($result === false) {
    echo "SNMP-Walk fehlgeschlagen. Prüfen Sie Host und Community-String.\n";
    exit(1);
}

echo "Insgesamt " . count($result) . " SNMP-Objekte gefunden.\n";

// Alle Werte ausgeben, die auf 'Mbps' hinweisen
$filtered = array_filter($result, fn($v) => str_contains($v, 'Mbps'));
foreach ($filtered as $v) {
    echo $v . "\n";
}
Insgesamt 342 SNMP-Objekte gefunden. INTEGER: 100Mbps INTEGER: 1000Mbps

// Wichtig · Fallstricke

Sicherheitshinweis: SNMPv2c verwendet Community-Strings im Klartext ohne Authentifizierung oder Verschlüsselung. Für produktive und sicherheitskritische Umgebungen sollte snmp3_walk() mit SNMPv3 und Authentifizierung/Verschlüsselung eingesetzt werden.

Der Community-String public ist ein weit verbreiteter Standard-Wert und sollte in Produktivumgebungen durch einen individualisierten String ersetzt werden, um unbefugten Zugriff zu erschweren.

Wenn sowohl OID-Schlüssel als auch Werte benötigt werden, ist snmp2_real_walk() die bessere Wahl, da es ein assoziatives Array mit den OID-Bezeichnern als Schlüssel liefert.

Die PHP-SNMP-Erweiterung muss beim Compilieren mit der Option --with-snmp aktiviert worden sein. Unter Linux ist oft das Paket php-snmp zu installieren.