Signatur
Beschreibung
snmp2_real_walk() durchläuft den SNMP-Objektbaum ab der angegebenen OID und gibt ein assoziatives Array zurück, das sowohl die Objekt-IDs (OIDs) als Schlüssel als auch die zugehörigen Werte enthält. Im Gegensatz zu snmp2_walk(), das nur die Werte zurückgibt, enthält snmp2_real_walk() also explizit auch die vollständigen OIDs.
Die Funktion verwendet das SNMPv2c-Protokoll (Community-basiertes SNMPv2), das effizienter als SNMPv1 ist und u. a. den GetBulkRequest-Befehl unterstützt, wodurch größere Datemengen in weniger Anfragen abgerufen werden können.
Typische Einsatzszenarien sind das Auslesen von Netzwerkgeräte-Informationen (Router, Switches, Server), das Monitoring von Systemressourcen oder die Inventarisierung von Netzwerkkomponenten, wenn man präzise wissen muss, welcher Wert zu welcher OID gehört.
Die PHP-Installation muss mit SNMP-Unterstützung kompiliert sein (--with-snmp). Auf Unix-Systemen ist in der Regel die Net-SNMP-Bibliothek erforderlich.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hostname Pflicht | string | Hostname oder IP-Adresse des SNMP-Agenten (Zielgeräts). Optional kann ein Port mit Doppelpunkt angehängt werden, z. B. 192.168.1.1:161. |
|
| $community Pflicht | string | Der SNMPv2c Community-String für die Authentifizierung, typischerweise public für Lesezugriff. |
|
| $object_id Pflicht | array|string | Die Start-OID (Objekt-Identifikator), ab der der Walk beginnt. Beispiel: .1.3.6.1.2.1.1 für System-MIB. Kann auch ein Array von OIDs sein. |
|
| $timeout | int | -1 | Maximale Zeit in Mikrosekunden, die auf eine Antwort gewartet wird. -1 verwendet den Standardwert der SNMP-Bibliothek. |
| $retries | int | -1 | Anzahl der Wiederholungsversuche bei Zeitüberschreitung. -1 verwendet den Standardwert der SNMP-Bibliothek. |
Rückgabewert
false zurückgegeben.Beispiele
System-Informationen eines Netzwerkgeräts auslesen
<?php
// System-MIB eines Routers per SNMPv2c auslesen
$hostname = '192.168.1.1';
$community = 'public';
$oid = '.1.3.6.1.2.1.1'; // system MIB
$result = snmp2_real_walk($hostname, $community, $oid);
if ($result === false) {
echo "Fehler: SNMP-Abfrage fehlgeschlagen.\n";
} else {
foreach ($result as $oid => $value) {
echo $oid . ' => ' . $value . "\n";
}
}
Netzwerkinterfaces inventarisieren und als JSON ausgeben
<?php
// Alle Netzwerkinterface-Beschreibungen (ifDescr) auslesen
$hostname = '10.0.0.1';
$community = 'public';
$oid = '.1.3.6.1.2.1.2.2.1.2'; // ifDescr
$interfaces = snmp2_real_walk($hostname, $community, $oid, 1000000, 3);
if ($interfaces === false) {
echo json_encode(['error' => 'SNMP-Abfrage fehlgeschlagen']);
} else {
$inventory = [];
foreach ($interfaces as $oid => $descr) {
// Index aus OID extrahieren (letzter Teil)
$parts = explode('.', $oid);
$index = end($parts);
$inventory[$index] = $descr;
}
echo json_encode($inventory, JSON_PRETTY_PRINT);
}
// Wichtig · Fallstricke
Sicherheitshinweis: SNMPv2c überträgt den Community-String im Klartext über das Netzwerk. Verwenden Sie SNMP niemals über unsichere (öffentliche) Netzwerke und setzen Sie statt des Standards public einen sicheren Community-String ein. Für verschlüsselte Kommunikation sollte SNMPv3 mit snmp3_real_walk() verwendet werden.
Firewall: SNMP verwendet standardmäßig UDP-Port 161. Stellen Sie sicher, dass dieser Port zwischen PHP-Server und Zielgerät erreichbar ist.
Fehlerbehandlung: Bei nicht erreichbaren Geräten oder falschen Community-Strings gibt die Funktion false zurück und erzeugt eine PHP-Warnung. Mit @snmp2_real_walk(...) kann die Warnung unterdrückt werden, was aber generell nicht empfohlen wird — besser explizit mit set_error_handler() arbeiten.
MIB-Auflösung: Das Format der zurückgegebenen Werte (z. B. STRING: ...) hängt davon ab, ob MIB-Dateien auf dem System installiert sind und wie snmp_read_mib() konfiguriert ist.