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