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