Signatur
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
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";
}
}
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";
}
// 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.