Signatur
Beschreibung
snmp2_getnext() sendet eine SNMP GET-NEXT-Anfrage an einen SNMP-Agenten und gibt den Wert des Objekts zurück, das in der MIB-Reihenfolge direkt nach der angegebenen Objekt-ID (OID) steht. Die Funktion verwendet das SNMPv2c-Protokoll.
Diese Funktion ist nützlich, wenn man sequenziell durch SNMP-Tabellen oder MIB-Zweige navigieren möchte, ohne die genauen OIDs aller Einträge zu kennen. Typische Anwendungsfälle sind das Traversieren von Schnittstellentabellen, Routing-Tabellen oder anderen tabellarischen SNMP-Strukturen auf Netzwerkgeräten.
Im Gegensatz zu snmp2_get(), das einen exakten OID-Wert abruft, springt snmp2_getnext() immer zum nächsten verfügbaren Objekt. Dadurch kann man mit einer Schleife die gesamte MIB traversieren, bis das Ende des MIB-Baums erreicht ist.
Die Funktion setzt voraus, dass die SNMP-Erweiterung (ext/snmp) in PHP aktiviert ist und die Net-SNMP-Bibliothek installiert ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hostname Pflicht | string | Hostname oder IP-Adresse des SNMP-Agenten. Optionale Angabe eines Ports mit Doppelpunkt, z. B. 192.168.1.1:161. |
|
| $community Pflicht | string | Der SNMPv2c Community-String (Read-Community), z. B. 'public'. |
|
| $object_id Pflicht | array|string | Die OID, nach der gesucht werden soll. Es wird das nächste Objekt in der MIB-Reihenfolge zurückgegeben. Kann ein String (einzelne OID) oder ein Array mit mehreren OIDs sein. | |
| $timeout | int | -1 | Timeout in Mikrosekunden. Der Wert -1 verwendet den System-Standardwert. |
| $retries | int | -1 | Anzahl der Wiederholungsversuche bei Zeitüberschreitung. Der Wert -1 verwendet den System-Standardwert. |
Rückgabewert
string zurück (bei einer einzelnen OID) oder als assoziatives array (bei mehreren OIDs). Im Fehlerfall wird false zurückgegeben und eine PHP-Warnung ausgegeben.Beispiele
Einzelnen Nachfolger einer OID abrufen
<?php
// Liest das SNMP-Objekt, das in der MIB direkt nach sysDescr (1.3.6.1.2.1.1.1.0) folgt
$next = snmp2_getnext('192.168.1.1', 'public', '1.3.6.1.2.1.1.1.0');
if ($next !== false) {
echo "Nächstes SNMP-Objekt: " . $next . PHP_EOL;
} else {
echo "Fehler beim Abrufen des SNMP-Objekts." . PHP_EOL;
}
MIB-Zweig sequenziell traversieren
<?php
// Traversiert alle Objekte unterhalb des Interface-Zweiges
$host = '192.168.1.1';
$community = 'public';
$baseOid = '1.3.6.1.2.1.2.2.1.2'; // ifDescr-Tabelle
$currentOid = $baseOid;
snmp_set_valueretrieval(SNMP_VALUE_PLAIN);
while (true) {
$result = snmp2_getnext($host, $community, $currentOid, 1000000, 3);
if ($result === false) {
echo "Fehler oder Ende der MIB erreicht." . PHP_EOL;
break;
}
// Prüfen, ob wir noch im gewünschten MIB-Zweig sind
// (snmp2_getnext liefert OID + Wert als String zurück)
// Für einfaches Beispiel geben wir den Wert direkt aus
echo $result . PHP_EOL;
// Im echten Einsatz: OID aus $result extrahieren und
// sicherstellen, dass die neue OID noch unter $baseOid liegt
break; // Hier nur ein Schritt als Demo
}
// Wichtig · Fallstricke
Sicherheitshinweis: Der Community-String wird bei SNMPv2c im Klartext über das Netzwerk übertragen. Für sicherheitskritische Umgebungen sollte stattdessen SNMPv3 mit snmp3_getnext() verwendet werden, das Authentifizierung und Verschlüsselung unterstützt.
Endlosschleifen vermeiden: Beim Traversieren der MIB muss sichergestellt werden, dass die zurückgegebene OID noch innerhalb des gewünschten Teilbaums liegt. Andernfalls kann die Schleife über den gesamten MIB-Baum des Geräts iterieren. Zum Traversieren ganzer Zweige ist snmp2_walk() eine bequemere Alternative.
Die PHP-SNMP-Erweiterung muss mit --with-snmp kompiliert oder als Modul geladen sein. Unter Linux wird dafür typischerweise das Paket php-snmp benötigt.