Start · Sprachen · PHP · Referenz · snmp3_walk

snmp3_walk

Funktion

Liest alle SNMP-Objekte (OIDs) eines SNMPv3-Agenten ab einem bestimmten Startpunkt und gibt sie als Array zurück.

seit PHP 4.0.0 Kategorie: http

Signatur

snmp3_walk(string $hostname, string $security_name, string $security_level, string $auth_protocol, string $auth_passphrase, string $priv_protocol, string $priv_passphrase, string $object_id, int $timeout = -1, int $retries = -1): array|false

Beschreibung

snmp3_walk() führt einen SNMP-WALK über einen SNMPv3-Agenten durch und liest alle verfügbaren Objekte (OIDs) unterhalb eines angegebenen Ausgangs-OID aus. Die Funktion gibt ein assoziatives Array zurück, in dem die OIDs als Schlüssel und die zugehörigen Werte als Einträge gespeichert sind. Damit lassen sich komplette SNMP-Teilbäume eines Netzwerkgeräts wie Router, Switches oder Server auslesen.

Im Gegensatz zu snmpwalk() (SNMPv1) und snmp2_walk() (SNMPv2c) unterstützt snmp3_walk() die Sicherheitsfunktionen von SNMPv3, darunter Authentifizierung (z. B. MD5, SHA) und Verschlüsselung (z. B. DES, AES). Damit ist es die bevorzugte Wahl, wenn Netzwerkgeräte eine sichere Kommunikation erfordern.

Typische Anwendungsfälle sind das Monitoring von Netzwerkgeräten, das Abrufen von Interface-Statistiken oder das vollständige Auslesen von Systeminfos (z. B. ab OID .1.3.6.1.2.1.1 für den system-Zweig).

Der Parameter object_id gibt den Startpunkt im OID-Baum an. Wird eine leere Zeichenkette übergeben, beginnt der Walk am Wurzelknoten des MIB-Baums. Bei einem Fehler oder einem nicht erreichbaren Agenten gibt die Funktion false zurück.

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".
$security_name Pflicht string SNMPv3-Benutzername (Security Name), wie er auf dem Agenten konfiguriert ist.
$security_level Pflicht string Sicherheitsniveau der Verbindung. Mögliche Werte: "noAuthNoPriv" (kein Schutz), "authNoPriv" (nur Authentifizierung), "authPriv" (Authentifizierung und Verschlüsselung).
$auth_protocol Pflicht string Authentifizierungsprotokoll. Zulässige Werte sind "MD5" oder "SHA". Wird ignoriert, wenn security_level "noAuthNoPriv" ist.
$auth_passphrase Pflicht string Passphrase für die Authentifizierung. Muss mindestens 8 Zeichen lang sein. Wird ignoriert, wenn kein Authentifizierungsprotokoll aktiv ist.
$priv_protocol Pflicht string Verschlüsselungsprotokoll (Privacy Protocol). Zulässige Werte sind z. B. "DES" oder "AES". Wird ignoriert, wenn security_level nicht "authPriv" ist.
$priv_passphrase Pflicht string Passphrase für die Verschlüsselung (Privacy Passphrase). Muss mindestens 8 Zeichen lang sein. Wird ignoriert, wenn keine Verschlüsselung aktiv ist.
$object_id Pflicht string Ausgangs-OID für den SNMP-Walk. Bei einer leeren Zeichenkette "" wird der gesamte MIB-Baum durchlaufen. Beispiel: ".1.3.6.1.2.1.1" für den System-Zweig.
$timeout int -1 Timeout in Mikrosekunden für eine SNMP-Anfrage. -1 verwendet den systemseitigen Standardwert.
$retries int -1 Anzahl der Wiederholungsversuche bei Timeout. -1 verwendet den systemseitigen Standardwert.

Rückgabewert

Typ
array|false
Beschreibung
Gibt bei Erfolg ein assoziatives Array zurück, in dem die OID-Strings als Schlüssel und die SNMP-Werte als Einträge hinterlegt sind. Bei einem Fehler (z. B. nicht erreichbarer Agent oder ungültige Parameter) wird false zurückgegeben.

Beispiele

Auslesen aller System-Informationen via SNMPv3

<?php
// SNMPv3-Walk auf den System-Zweig (.1.3.6.1.2.1.1)
$result = snmp3_walk(
    '192.168.1.1',       // Hostname / IP des Agenten
    'myuser',            // SNMPv3-Benutzername
    'authPriv',          // Sicherheitsniveau
    'SHA',               // Authentifizierungsprotokoll
    'authPassphrase123', // Auth-Passphrase (min. 8 Zeichen)
    'AES',               // Verschlüsselungsprotokoll
    'privPassphrase456', // Privacy-Passphrase (min. 8 Zeichen)
    '.1.3.6.1.2.1.1'     // Start-OID (System-Zweig)
);

if ($result === false) {
    echo 'SNMP-Walk fehlgeschlagen.' . PHP_EOL;
} else {
    foreach ($result as $oid => $value) {
        echo $oid . ' => ' . $value . PHP_EOL;
    }
}
.1.3.6.1.2.1.1.1.0 => STRING: Linux router 5.15.0 .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: (123456) 0:20:34.56 ...

SNMPv3-Walk ohne Authentifizierung (noAuthNoPriv)

<?php
// Walk ohne Authentifizierung und Verschlüsselung
$result = snmp3_walk(
    '192.168.1.1',
    'publicuser',
    'noAuthNoPriv',
    '',   // kein Auth-Protokoll
    '',   // keine Auth-Passphrase
    '',   // kein Priv-Protokoll
    '',   // keine Priv-Passphrase
    '.1.3.6.1.2.1.2.2' // Interface-Tabelle
);

if (is_array($result)) {
    echo 'Anzahl gefundener OIDs: ' . count($result) . PHP_EOL;
    print_r($result);
} else {
    echo 'Fehler beim SNMP-Walk.' . PHP_EOL;
}
Anzahl gefundener OIDs: 42 Array ( [.1.3.6.1.2.1.2.2.1.1.1] => INTEGER: 1 [.1.3.6.1.2.1.2.2.1.2.1] => STRING: lo ... )

// Wichtig · Fallstricke

Sicherheitshinweis: Verwenden Sie möglichst "authPriv" als security_level, um sowohl Authentifizierung als auch Verschlüsselung zu aktivieren. "noAuthNoPriv" sendet Daten ungesichert und sollte nur in isolierten Testumgebungen eingesetzt werden.

Passphrasen-Länge: Auth- und Privacy-Passphrases müssen laut SNMPv3-Standard mindestens 8 Zeichen lang sein. Kürzere Werte führen zu einem Fehler.

PHP-SNMP-Erweiterung: Diese Funktion setzt voraus, dass PHP mit der SNMP-Erweiterung kompiliert wurde (auf Debian/Ubuntu z. B. via apt install php-snmp). Ohne diese Erweiterung ist die Funktion nicht verfügbar.

Große MIB-Bäume: Bei einem Walk ab der Wurzel-OID kann die Ausführungszeit sehr lang werden und das PHP-Speicherlimit überschreiten. Empfehlenswert ist, gezielt nur benötigte Teilbäume abzufragen.