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