Start · Sprachen · PHP · Referenz · snmp2_real_walk

snmp2_real_walk

Funktion

Liefert alle SNMP-Objekte samt ihrer Objekt-IDs (OIDs) innerhalb des angegebenen Bereichs über SNMPv2c.

seit PHP 5.0.0 Kategorie: http

Signatur

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

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

Typ
array|false
Beschreibung
Gibt ein assoziatives Array zurück, bei dem die Schlüssel die vollständigen OIDs und die Werte die zugehörigen SNMP-Datenwerte sind. Bei einem Fehler (z. B. nicht erreichbares Gerät, falscher Community-String) wird 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";
    }
}
.1.3.6.1.2.1.1.1.0 => STRING: Linux router 5.4.0 #1 SMP .1.3.6.1.2.1.1.2.0 => OID: .1.3.6.1.4.1.8072.3.2.10 .1.3.6.1.2.1.1.3.0 => Timeticks: (12345) 0:02:03.45 .1.3.6.1.2.1.1.4.0 => STRING: admin@example.com .1.3.6.1.2.1.1.5.0 => STRING: router.example.com .1.3.6.1.2.1.1.6.0 => STRING: Server Room A

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);
}
{ "1": "STRING: lo", "2": "STRING: eth0", "3": "STRING: eth1" }

// 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.