Start · Sprachen · PHP · Referenz · snmpwalk

snmpwalk

Funktion

Ruft alle SNMP-Objekte eines Agenten ab und gibt sie als assoziatives Array zurück.

seit PHP 4.0.0 Kategorie: http

Signatur

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

Beschreibung

snmpwalk() führt einen SNMP-Walk auf dem angegebenen Agenten durch und liefert alle OIDs (Object Identifiers) sowie deren Werte, die unterhalb des angegebenen Basis-OID $object_id liegen. Wird als $object_id ein leerer String übergeben, werden alle Objekte des gesamten MIB-Baums abgerufen.

Die Funktion verwendet SNMPv1 und kommuniziert mit dem Agenten über UDP auf Port 161. Sie ist besonders nützlich für die Netzwerküberwachung, das Auslesen von Systemdaten (z. B. Netzwerkinterfaces, Routing-Tabellen, CPU- und Speicherauslastung) sowie für das Inventarisieren von Netzwerkgeräten.

Der Rückgabewert ist ein numerisch indiziertes Array, dessen Einträge die Werte der gefundenen OIDs als Strings enthalten. Für die vollständige Zuordnung von OID zu Wert sollte stattdessen snmprealwalk() verwendet werden, das ein assoziatives Array liefert.

Die SNMP-Erweiterung muss beim Kompilieren von PHP aktiviert sein (--with-snmp). Unter Linux ist außerdem das Paket net-snmp erforderlich.

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 (SNMPv1/v2c), der als einfaches Passwort dient. Typisch ist 'public' für lesenden Zugriff.
$object_id Pflicht string Die Basis-OID, ab der der Walk gestartet wird. Ein leerer String '' startet den Walk am Wurzelknoten des gesamten MIB-Baums. Beispiel: '1.3.6.1.2.1.1' für System-OIDs.
$timeout int -1 Wartezeit in Mikrosekunden auf eine Antwort des Agenten. Bei -1 wird der Standardwert der SNMP-Bibliothek verwendet.
$retries int -1 Anzahl der Wiederholungsversuche bei Zeitüberschreitung. Bei -1 wird der Standardwert der SNMP-Bibliothek verwendet.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein numerisch indiziertes Array mit den Werten aller gefundenen SNMP-Objekte zurück. Im Fehlerfall (z. B. Verbindungsfehler, ungültige OID, falscher Community-String) wird false zurückgegeben.

Beispiele

Alle Systemdaten eines Netzwerkgeräts abrufen

<?php
// Alle OIDs unterhalb des System-MIB-Zweigs abrufen
$host      = '192.168.1.1';
$community = 'public';
$baseOid   = '1.3.6.1.2.1.1'; // iso.org.dod.internet.mgmt.mib-2.system

$values = snmpwalk($host, $community, $baseOid);

if ($values === false) {
    echo 'SNMP-Walk fehlgeschlagen.' . PHP_EOL;
} else {
    foreach ($values as $index => $value) {
        echo "[$index] $value" . PHP_EOL;
    }
}
[0] STRING: Linux router 5.15.0 [1] STRING: .1.3.6.1.4.1.8072.3.2.10 [2] Timeticks: (123456) 0:20:34.56 ...

Netzwerkinterfaces eines Switches auflisten

<?php
// Interfacenamen (ifDescr) aller Interfaces auslesen
$host      = 'switch.example.local';
$community = 'public';
$ifDescrOid = '1.3.6.1.2.1.2.2.1.2'; // ifDescr

$interfaces = snmpwalk($host, $community, $ifDescrOid, 1000000, 3);

if ($interfaces === false) {
    echo 'Fehler beim Abrufen der Interfaces.' . PHP_EOL;
} else {
    echo 'Gefundene Interfaces:' . PHP_EOL;
    foreach ($interfaces as $i => $iface) {
        echo ($i + 1) . '. ' . $iface . PHP_EOL;
    }
}
Gefundene Interfaces: 1. STRING: eth0 2. STRING: eth1 3. STRING: lo ...

// Wichtig · Fallstricke

Sicherheitshinweis: SNMPv1 überträgt den Community-String im Klartext über das Netzwerk. Verwende für produktive Umgebungen SNMPv3 mit Authentifizierung und Verschlüsselung über die Klasse SNMP oder die Funktion snmp3_walk().

Community-String: Der Standardwert 'public' ist auf vielen Geräten aktiviert und ein häufiges Angriffsziel. Geräte sollten mit einem individuellen, schwer erratbaren Community-String konfiguriert werden.

OID vs. Wert: snmpwalk() gibt nur die Werte zurück, ohne die zugehörigen OIDs. Soll die OID-zu-Wert-Zuordnung benötigt werden, ist snmprealwalk() die bessere Wahl.

Firewall: SNMP verwendet UDP-Port 161. Stelle sicher, dass dieser Port zwischen PHP-Server und SNMP-Agent erreichbar ist.