Signatur
Beschreibung
snmp3_real_walk() durchsucht einen SNMP-Agenten ab einer angegebenen Objekt-ID (OID) rekursiv und gibt alle gefundenen OID-Wert-Paare als assoziatives Array zurück. Im Gegensatz zu snmp3_walk() enthält das Rückgabe-Array als Schlüssel die vollständigen OIDs der jeweiligen Objekte und nicht nur die relativen Endpunkte.
Die Funktion verwendet SNMPv3, das im Vergleich zu SNMPv1 und SNMPv2c umfangreiche Sicherheitsmechanismen bietet: Authentifizierung (z. B. mit MD5 oder SHA) und optionale Verschlüsselung (z. B. DES oder AES). Die Parameter security_level, auth_protocol und priv_protocol steuern, welche Sicherheitsstufe verwendet wird.
Typischer Einsatzbereich ist das vollständige Auslesen von MIB-Teilbäumen in Netzwerkmonitoring-Anwendungen, etwa um alle Interfaces, Prozesse oder Systemwerte eines Geräts zu erfassen. Da die OIDs als Schlüssel erhalten bleiben, lassen sich die Ergebnisse einfach weiterverarbeiten oder mit bekannten OID-Strukturen abgleichen.
Die PHP-Installation muss mit SNMP-Unterstützung kompiliert worden sein (--with-snmp), und die Net-SNMP-Bibliothek muss SNMPv3 unterstützen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hostname Pflicht | string | Hostname oder IP-Adresse des SNMP-Agenten, der abgefragt werden soll. Optional kann ein Port angegeben werden (z. B. 192.168.1.1:161). |
|
| $security_name Pflicht | string | Der SNMPv3-Benutzername (Security Name), der für die Authentifizierung verwendet wird. | |
| $security_level Pflicht | string | Die Sicherheitsstufe der Verbindung. Mögliche Werte sind noAuthNoPriv (keine Authentifizierung, keine Verschlüsselung), authNoPriv (mit Authentifizierung, ohne Verschlüsselung) und authPriv (mit Authentifizierung und Verschlüsselung). |
|
| $auth_protocol Pflicht | string | Das Authentifizierungsprotokoll, z. B. MD5, SHA, SHA256 oder SHA512. Wird nur ausgewertet, wenn security_level Authentifizierung erfordert. |
|
| $auth_passphrase Pflicht | string | Das Passwort für die Authentifizierung. Wird nur ausgewertet, wenn security_level Authentifizierung erfordert. |
|
| $priv_protocol Pflicht | string | Das Verschlüsselungsprotokoll, z. B. DES oder AES. Wird nur ausgewertet, wenn security_level Verschlüsselung erfordert (authPriv). |
|
| $priv_passphrase Pflicht | string | Das Passwort für die Verschlüsselung. Wird nur ausgewertet, wenn security_level Verschlüsselung erfordert (authPriv). |
|
| $object_id Pflicht | string | Die Basis-OID, ab der der WALK beginnt, z. B. .1.3.6.1.2.1.1 für allgemeine Systeminformationen. Alle darunter liegenden Objekte werden zurückgegeben. |
|
| $timeout | int | -1 | Timeout in Mikrosekunden, der auf eine SNMP-Antwort gewartet wird. -1 verwendet den Standard-Timeout der Net-SNMP-Bibliothek. |
| $retries | int | -1 | Anzahl der Wiederholungsversuche bei fehlgeschlagener Anfrage. -1 verwendet den Standardwert der Net-SNMP-Bibliothek. |
Rückgabewert
false zurückgegeben.Beispiele
Alle System-Objekte eines SNMP-Agenten auslesen
<?php
$hostname = '192.168.1.1';
$secName = 'snmpv3user';
$secLevel = 'authPriv';
$authProtocol = 'SHA';
$authPass = 'geheimesAuthPasswort';
$privProtocol = 'AES';
$privPass = 'geheimesPrivPasswort';
$baseOid = '.1.3.6.1.2.1.1'; // SNMPv2-MIB::system
$result = snmp3_real_walk(
$hostname,
$secName,
$secLevel,
$authProtocol,
$authPass,
$privProtocol,
$privPass,
$baseOid
);
if ($result === false) {
echo 'SNMP-Abfrage fehlgeschlagen.' . PHP_EOL;
} else {
foreach ($result as $oid => $value) {
echo $oid . ' => ' . $value . PHP_EOL;
}
}
Interface-Tabelle eines Netzwerkgeräts auslesen
<?php
$result = snmp3_real_walk(
'switch.example.local',
'monitor',
'authNoPriv',
'MD5',
'meinPasswort123',
'',
'',
'.1.3.6.1.2.1.2.2', // IF-MIB::ifTable
5000000, // 5 Sekunden Timeout
2 // 2 Wiederholungen
);
if ($result !== false) {
// Nur Interface-Namen (ifDescr = .1.3.6.1.2.1.2.2.1.2) ausgeben
foreach ($result as $oid => $value) {
if (str_contains($oid, '.1.3.6.1.2.1.2.2.1.2.')) {
$ifIndex = substr($oid, strrpos($oid, '.') + 1);
echo 'Interface ' . $ifIndex . ': ' . $value . PHP_EOL;
}
}
}
// Wichtig · Fallstricke
Sicherheitshinweis: Speichern Sie SNMPv3-Passwörter niemals im Klartext im Quellcode. Verwenden Sie stattdessen Umgebungsvariablen oder sichere Secret-Management-Systeme. Bevorzugen Sie SHA oder stärker gegenüber MD5 als Authentifizierungsprotokoll sowie AES gegenüber DES als Verschlüsselungsprotokoll, da MD5 und DES als unsicher gelten.
Bei security_level = 'noAuthNoPriv' können die Parameter auth_protocol, auth_passphrase, priv_protocol und priv_passphrase als leere Strings übergeben werden. Bei authNoPriv müssen auth_protocol und auth_passphrase gesetzt, priv_protocol und priv_passphrase können leer sein.
Im Unterschied zu snmp3_walk() enthält das zurückgegebene Array die vollständigen absoluten OIDs als Schlüssel und eignet sich daher besser für die maschinelle Weiterverarbeitung und den Abgleich mit MIB-Datenbanken.