Start · Sprachen · PHP · Referenz · snmpwalkoid

snmpwalkoid

Funktion

Ruft den gesamten SNMP-Informationsbaum einer Netzwerkeinheit ab und gibt ihn als assoziatives Array mit OIDs als Schlüssel zurück.

seit PHP 4.0.0 Kategorie: http

Signatur

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

Beschreibung

snmpwalkoid() traversiert den SNMP-MIB-Baum (Management Information Base) einer Netzwerkeinheit, beginnend bei der angegebenen object_id, und gibt alle gefundenen OIDs zusammen mit ihren Werten als assoziatives Array zurück. Im Gegensatz zu snmpwalk(), das nur die Werte ohne OID-Schlüssel liefert, enthält das Ergebnis von snmpwalkoid() die OIDs als Array-Schlüssel – daher der Zusatz oid im Funktionsnamen.

Die Funktion eignet sich besonders dann, wenn nicht nur die reinen Werte, sondern auch die zugehörigen OID-Pfade benötigt werden – etwa um dynamisch herauszufinden, welche MIB-Knoten eine Netzwerkeinheit unterstützt, oder um Monitoring-Anwendungen zu entwickeln, die gezielt auf bestimmte OIDs reagieren müssen.

Wird für object_id ein leerer String '' übergeben, beginnt der Walk am Wurzelknoten des MIB-Baums und liefert alle verfügbaren Informationen. Dies kann bei komplexen Geräten eine sehr große Datenmenge erzeugen.

Hinweis: Diese Funktion unterstützt ausschließlich SNMPv1. Für SNMPv2c oder SNMPv3 sollte die objektorientierte SNMP-Klasse verwendet werden.

Parameter

Name Typ Default Beschreibung
$hostname Pflicht string Hostname oder IP-Adresse des SNMP-Agenten (Netzwerkeinheit), der abgefragt werden soll.
$community Pflicht string Der SNMP-Community-String für die Authentifizierung. Häufig 'public' für lesenden Zugriff.
$object_id Pflicht string Die Ausgangs-OID (Object Identifier), ab der der Walk beginnt. Ein leerer String '' startet am Wurzelknoten des MIB-Baums.
$timeout int -1 Timeout in Mikrosekunden. Der Standardwert -1 verwendet den systemseitigen Standard-Timeout.
$retries int -1 Anzahl der Wiederholungsversuche bei Timeout. Der Standardwert -1 verwendet die systemseitige Standard-Anzahl.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein assoziatives Array zurück, bei dem die OID-Strings als Schlüssel und die zugehörigen Werte als Array-Werte dienen. Im Fehlerfall (z. B. Host nicht erreichbar, ungültige Community) wird false zurückgegeben.

Beispiele

Alle Systeminformationen eines Routers auslesen

<?php
// Systeminformations-Teilbaum eines SNMP-Agenten abrufen
$hostname  = '192.168.1.1';
$community = 'public';
$baseOid   = '.1.3.6.1.2.1.1'; // system-MIB

$result = snmpwalkoid($hostname, $community, $baseOid);

if ($result === false) {
    echo 'SNMP-Abfrage fehlgeschlagen.' . PHP_EOL;
} else {
    foreach ($result as $oid => $value) {
        echo $oid . ' => ' . $value . PHP_EOL;
    }
}
.1.3.6.1.2.1.1.1.0 => STRING: Linux router 5.15.0 .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: (12345) 0:02:03.45 ...

Unterschied zwischen snmpwalk und snmpwalkoid verdeutlichen

<?php
$hostname  = '192.168.1.1';
$community = 'public';
$oid       = '.1.3.6.1.2.1.1.5'; // sysName

// snmpwalk: nur Werte, numerische Indizes
$values = snmpwalk($hostname, $community, $oid);
echo 'snmpwalk Ergebnis:' . PHP_EOL;
print_r($values);

// snmpwalkoid: OIDs als Schlüssel
$oidValues = snmpwalkoid($hostname, $community, $oid);
echo 'snmpwalkoid Ergebnis:' . PHP_EOL;
foreach ($oidValues as $key => $val) {
    echo '  OID: ' . $key . '  Wert: ' . $val . PHP_EOL;
}
snmpwalk Ergebnis: Array ( [0] => STRING: myrouter ) snmpwalkoid Ergebnis: OID: .1.3.6.1.2.1.1.5.0 Wert: STRING: myrouter

// Wichtig · Fallstricke

Sicherheitshinweis: Der Community-String wird bei SNMPv1 im Klartext über das Netzwerk übertragen. Verwende niemals öffentlich zugängliche Community-Strings wie 'public' in produktiven Umgebungen und schütze SNMP-Dienste durch Firewall-Regeln.

Deprecation: Für neue Projekte wird die Verwendung der objektorientierten SNMP-Klasse empfohlen, die SNMPv1, v2c und v3 unterstützt und mehr Flexibilität bietet. snmpwalkoid() unterstützt ausschließlich SNMPv1.

Ein vollständiger Walk vom Wurzelknoten (leerer object_id) kann sehr viele Daten und erheblichen Netzwerkverkehr erzeugen und sollte nur gezielt eingesetzt werden.