Start · Sprachen · PHP · Referenz · snmpgetnext

snmpgetnext

Funktion

Liest das nächste SNMP-Objekt (OID) nach der angegebenen Objekt-ID von einem SNMP-Agenten.

seit PHP 4.0.0 Kategorie: http

Signatur

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

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

Typ
mixed
Beschreibung
Gibt bei Erfolg den Wert des nächsten SNMP-Objekts als String zurück (z. B. 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;
}
Nächstes OID-Ergebnis: OID: .1.3.6.1.2.1.1.2.0

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;
}
OID: .1.3.6.1.2.1.1.2.0 => Wert: OID: .1.3.6.1.2.1.1.2.0 OID: .1.3.6.1.2.1.1.4.0 => Wert: STRING: admin@example.com

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.