Signatur
Beschreibung
snmpgetnext() sendet eine SNMP-GET-NEXT-Anfrage an den angegebenen Host und gibt den Wert des OID-Eintrags zurück, der in der MIB-Hierarchie direkt auf die übergebene OID folgt. Diese Funktion ist nützlich, wenn man durch eine MIB iterieren möchte, ohne die genauen OIDs zu kennen.
Die Funktion arbeitet über SNMP Version 1 und nutzt den angegebenen Community-String für die Authentifizierung. Der hostname-Parameter kann optional einen Port enthalten (z. B. example.com:161) sowie eine Zeitzone für IPv6-Adressen.
Typische Anwendungsfälle sind das Traversieren von SNMP-Tabellen, das Erkunden unbekannter MIB-Strukturen oder das Einlesen von Netzwerkgeräte-Informationen. Für komfortableres Traversieren eignet sich alternativ snmpwalk().
Die Rückgabe enthält den Typ und den Wert des nächsten OID-Eintrags als String in der Form SNMP_TYPE: value, sofern keine Fehler auftreten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hostname Pflicht | string | Hostname oder IP-Adresse des SNMP-Agenten. Optional kann ein Port mit Doppelpunkt angehängt werden (z. B. 192.168.1.1:161). |
|
| $community Pflicht | string | Der SNMP-Community-String für die Authentifizierung (z. B. public). |
|
| $object_id Pflicht | array|string | Die OID, nach der das nächste Objekt gesucht wird. Kann als String (einzelne OID) oder Array (mehrere OIDs) übergeben werden. | |
| $timeout | int | -1 | Timeout in Mikrosekunden für die Anfrage. Bei -1 wird der systemseitige Standardwert verwendet. |
| $retries | int | -1 | Anzahl der Wiederholungsversuche bei Ausbleiben einer Antwort. Bei -1 wird der systemseitige Standardwert verwendet. |
Rückgabewert
STRING: value oder INTEGER: 42). Wird ein Array von OIDs übergeben, ist der Rückgabewert ein assoziatives Array. Im Fehlerfall wird false zurückgegeben und eine Warnung ausgegeben.Beispiele
Nächstes SNMP-Objekt nach einer bekannten OID abrufen
<?php
// Lese das SNMP-Objekt, das auf sysDescr (1.3.6.1.2.1.1.1.0) folgt
$result = snmpgetnext('192.168.1.1', 'public', '1.3.6.1.2.1.1.1.0');
if ($result !== false) {
echo "Nächstes OID-Ergebnis: " . $result . PHP_EOL;
} else {
echo "Fehler beim Abrufen des SNMP-Objekts." . PHP_EOL;
}
Mehrere OIDs gleichzeitig abrufen (Array-Modus)
<?php
// Nächste Objekte nach zwei verschiedenen OIDs abrufen
$oids = [
'1.3.6.1.2.1.1.1.0', // sysDescr
'1.3.6.1.2.1.1.3.0', // sysUpTime
];
$results = snmpgetnext('192.168.1.1', 'public', $oids, 1000000, 3);
if ($results !== false) {
foreach ($results as $oid => $value) {
echo "OID: $oid => Wert: $value" . PHP_EOL;
}
} else {
echo "Fehler beim SNMP-Abruf." . PHP_EOL;
}
MIB iterativ traversieren mit snmpgetnext
<?php
// Manuelle Iteration durch eine MIB-Subtree ab einer Start-OID
$host = '192.168.1.1';
$community = 'public';
$baseOid = '1.3.6.1.2.1.1';
$currentOid = $baseOid;
for ($i = 0; $i < 10; $i++) {
$result = snmpgetnext($host, $community, $currentOid);
if ($result === false) {
echo "Traversierung beendet oder Fehler aufgetreten." . PHP_EOL;
break;
}
echo "Ergebnis: $result" . PHP_EOL;
// Nächste OID aus der Antwort extrahieren (vereinfacht)
// In der Praxis: snmp_parse_oid oder Regex verwenden
$currentOid = /* nächste OID aus $result */ $currentOid . '.0';
}
// Wichtig · Fallstricke
Sicherheit: Der Community-String wird im SNMP-v1-Protokoll im Klartext übertragen. In produktiven Umgebungen sollte SNMP Version 3 mit Authentifizierung und Verschlüsselung verwendet werden (via snmp3_getnext()). Schränken Sie den Zugriff auf SNMP-Agenten durch Firewall-Regeln ein.
Erweiterung: Diese Funktion setzt die PHP-SNMP-Erweiterung voraus, die standardmäßig nicht in allen PHP-Builds aktiviert ist. Die Erweiterung ist unter Linux meist über das Paket php-snmp verfügbar.
Alternativen: Für umfangreicheres MIB-Traversieren bieten sich snmpwalk() oder die objektorientierte SNMP-Klasse an. snmprealwalk() liefert zusätzlich die OID-Schlüssel zu den Werten.
Fehlerbehandlung: Bei ungültigem Community-String oder nicht erreichbarem Host gibt die Funktion false zurück und erzeugt eine PHP-Warnung. Verwenden Sie @snmpgetnext() in Kombination mit expliziter Fehlerbehandlung, wenn Sie Warnungen unterdrücken möchten.