Signatur
Beschreibung
snmprealwalk() traversiert den SNMP-MIB-Baum ab der angegebenen object_id und liefert alle gefundenen Objekte als assoziatives Array, wobei die Schlüssel die vollständigen OIDs (Object Identifiers) und die Werte die zugehörigen Datenobjekte sind.
Im Unterschied zur Funktion snmpwalk(), die nur die Werte ohne die zugehörigen OIDs zurückgibt, enthält das Ergebnis von snmprealwalk() die kompletten OID-Pfade als Array-Schlüssel. Dies ist besonders nützlich, wenn die genaue Position eines Objekts im MIB-Baum für die Weiterverarbeitung benötigt wird.
Die Funktion verwendet SNMP Version 1 (SNMPv1) und kommuniziert über UDP. Soll SNMPv2c oder SNMPv3 verwendet werden, sind die Funktionen snmp2_real_walk() bzw. snmp3_real_walk() zu bevorzugen.
Ein typischer Einsatzbereich ist das Auslesen von Netzwerkgeräten wie Switches, Routern oder Servern, um deren Systemstatus, Schnittstelleninformationen oder andere verwaltungsrelevante Daten zu ermitteln.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hostname Pflicht | string | Hostname oder IP-Adresse des SNMP-Agenten (z. B. '192.168.1.1' oder 'router.example.com'). |
|
| $community Pflicht | string | SNMP-Community-String für die Authentifizierung (bei SNMPv1 typischerweise 'public' für Lesezugriff). |
|
| $object_id Pflicht | string | Die Ausgangs-OID, ab der der Walk im MIB-Baum beginnt (z. B. '1.3.6.1.2.1' für mib-2). Wird eine leere Zeichenkette übergeben, beginnt der Walk an der Wurzel des MIB-Baums. |
|
| $timeout | int | -1 | Timeout in Mikrosekunden, nach dem ein Verbindungsversuch abgebrochen wird. Der Standardwert -1 verwendet den systemweiten Standardwert. |
| $retries | int | -1 | Anzahl der Wiederholungsversuche bei Verbindungsfehlern. Der Standardwert -1 verwendet den systemweiten Standardwert. |
Rückgabewert
false zurückgegeben.Beispiele
Alle Systeminformationen eines Netzwerkgeräts auslesen
<?php
// SNMP-Walk ab der System-OID (1.3.6.1.2.1.1) durchführen
$result = snmprealwalk('192.168.1.1', 'public', '1.3.6.1.2.1.1');
if ($result === false) {
echo "Fehler beim Abrufen der SNMP-Daten.\n";
} else {
foreach ($result as $oid => $value) {
echo $oid . ' => ' . $value . "\n";
}
}
Schnittstellenanzahl eines Geräts ermitteln und OID-Schlüssel nutzen
<?php
// Walk über alle Schnittstellen-Beschreibungen (ifDescr)
$oid = '1.3.6.1.2.1.2.2.1.2'; // ifDescr
$result = snmprealwalk('switch.local', 'public', $oid, 1000000, 3);
if ($result === false) {
echo "Verbindung zum Gerät nicht möglich.\n";
exit(1);
}
echo 'Gefundene Schnittstellen: ' . count($result) . "\n";
foreach ($result as $oid => $description) {
// Schnittstellenindex aus der OID extrahieren
$parts = explode('.', $oid);
$ifIndex = end($parts);
echo "Interface #$ifIndex: $description\n";
}
// Wichtig · Fallstricke
Sicherheitshinweis: Community-Strings wie 'public' sollten in Produktionsumgebungen niemals unverändert verwendet werden, da sie öffentlich bekannt sind. Verwende komplexe, geheime Community-Strings oder steige auf SNMPv3 mit Authentifizierung und Verschlüsselung um (snmp3_real_walk()).
PHP-Erweiterung: Diese Funktion setzt voraus, dass die snmp-PHP-Erweiterung installiert und aktiviert ist (extension=snmp in der php.ini) sowie die Net-SNMP-Bibliothek auf dem System verfügbar ist.
Version: Für SNMPv2c empfiehlt sich snmp2_real_walk(), für SNMPv3 snmp3_real_walk(). Diese bieten bessere Sicherheit und Funktionalität.
Leistung: Bei großen MIB-Bäumen kann der Walk sehr viele SNMP-GET-NEXT-Anfragen erzeugen. Ein zu kleiner Timeout-Wert kann dabei zu unvollständigen Ergebnissen führen.