Start · Sprachen · PHP · Referenz · snmprealwalk

snmprealwalk

Funktion

Führt einen SNMP-WALK durch und gibt alle Objekte samt ihrer vollständigen Objekt-IDs (OIDs) als assoziatives Array zurück.

seit PHP 4.0.0 Kategorie: http

Signatur

snmprealwalk(string $hostname, string $community, string $object_id, int $timeout = -1, int $retries = -1): array|false

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

Typ
array|false
Beschreibung
Gibt im Erfolgsfall ein assoziatives Array zurück, bei dem die Schlüssel die vollständigen OIDs und die Werte die zugehörigen SNMP-Datenobjekte (als Zeichenketten) sind. Bei einem Fehler wird 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";
    }
}
1.3.6.1.2.1.1.1.0 => STRING: Linux router 5.15.0 #1 SMP 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 1.3.6.1.2.1.1.4.0 => STRING: admin@example.com 1.3.6.1.2.1.1.5.0 => STRING: router.example.com 1.3.6.1.2.1.1.6.0 => STRING: Server Room 1.3.6.1.2.1.1.7.0 => INTEGER: 72

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";
}
Gefundene Schnittstellen: 4 Interface #1: STRING: lo Interface #2: STRING: eth0 Interface #3: STRING: eth1 Interface #4: STRING: wlan0

// 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.