Start · Sprachen · PHP · Referenz · snmp3_getnext

snmp3_getnext

Funktion

Liest das auf die angegebene Objekt-ID folgende SNMP-Objekt eines Hosts über SNMPv3.

seit PHP 5.0.0 Kategorie: http

Signatur

snmp3_getnext(string $hostname, string $security_name, string $security_level, string $auth_protocol, string $auth_passphrase, string $priv_protocol, string $priv_passphrase, array|string $object_id, int $timeout = -1, int $retries = -1): mixed

Beschreibung

snmp3_getnext() sendet eine SNMP-GET-NEXT-Anfrage an den angegebenen Host und gibt den Wert des nächsten Objekts in der MIB-Hierarchie zurück, das auf die übergebene OID (Object Identifier) folgt. Dies entspricht dem SNMP-Befehl snmpgetnext auf Kommandozeilenebene, jedoch mit SNMPv3-Authentifizierung und optionaler Verschlüsselung.

Die Funktion ist nützlich, wenn man durch eine MIB traversieren möchte, ohne alle OIDs zu kennen, oder wenn man den Nachfolger eines bekannten Objekts abfragen will. Sie bildet damit die Grundlage für das Durchlaufen von SNMP-Tabellen, ähnlich wie snmp3_walk().

SNMPv3 bietet gegenüber den älteren Versionen erweiterte Sicherheitsmechanismen: Authentifizierung (z. B. mit MD5 oder SHA) und Privatsphäre (Verschlüsselung via DES oder AES). Über security_level lässt sich festlegen, ob keine Sicherheit (noAuthNoPriv), nur Authentifizierung (authNoPriv) oder beides (authPriv) verwendet wird.

Ist object_id ein Array, wird für jede enthaltene OID die jeweils nächste OID abgefragt und das Ergebnis als Array zurückgegeben.

Parameter

Name Typ Default Beschreibung
$hostname Pflicht string Hostname oder IP-Adresse des SNMP-Agents, der abgefragt werden soll. Optional kann ein Port mit Doppelpunkt angehängt werden, z. B. 192.168.1.1:161.
$security_name Pflicht string Der SNMPv3-Benutzername (Security Name), der für die Authentifizierung verwendet wird.
$security_level Pflicht string Das Sicherheitsniveau der Verbindung. Gültige Werte sind noAuthNoPriv (keine Authentifizierung, keine Verschlüsselung), authNoPriv (nur Authentifizierung) und authPriv (Authentifizierung und Verschlüsselung).
$auth_protocol Pflicht string Das Authentifizierungsprotokoll. Gültige Werte sind MD5, SHA, SHA256 und SHA512. Wird noAuthNoPriv als Security-Level verwendet, kann dieser Parameter leer gelassen werden.
$auth_passphrase Pflicht string Die Passphrase für das Authentifizierungsprotokoll. Muss mindestens 8 Zeichen lang sein, wenn Authentifizierung aktiviert ist.
$priv_protocol Pflicht string Das Verschlüsselungsprotokoll für die Privatsphäre. Gültige Werte sind DES und AES. Wird kein Priv-Level benötigt, kann dieser Parameter leer gelassen werden.
$priv_passphrase Pflicht string Die Passphrase für das Verschlüsselungsprotokoll. Muss mindestens 8 Zeichen lang sein, wenn Verschlüsselung aktiviert ist.
$object_id Pflicht array|string Die OID des Objekts, dessen Nachfolger in der MIB abgefragt werden soll. Kann auch ein Array von OIDs sein, um mehrere Nachfolger in einem Aufruf abzufragen.
$timeout int -1 Timeout in Mikrosekunden, nach dem ein Verbindungsversuch abgebrochen wird. -1 verwendet den systemseitigen Standardwert.
$retries int -1 Anzahl der Wiederholungsversuche bei Timeout. -1 verwendet den systemseitigen Standardwert.

Rückgabewert

Typ
mixed
Beschreibung
Gibt bei Erfolg den Wert des nächsten SNMP-Objekts als String zurück. Wenn object_id ein Array ist, wird ein assoziatives Array mit OIDs als Schlüssel und deren Werten zurückgegeben. Im Fehlerfall wird false zurückgegeben.

Beispiele

Nächstes SNMP-Objekt nach einer OID abrufen (authPriv)

<?php
// SNMPv3-GET-NEXT-Anfrage mit Authentifizierung und Verschlüsselung
$result = snmp3_getnext(
    '192.168.1.1',       // SNMP-Agent
    'myUser',            // SNMPv3-Benutzername
    'authPriv',          // Security Level
    'SHA',               // Authentifizierungsprotokoll
    'authPassphrase123', // Auth-Passphrase (min. 8 Zeichen)
    'AES',               // Verschlüsselungsprotokoll
    'privPassphrase456', // Priv-Passphrase (min. 8 Zeichen)
    '.1.3.6.1.2.1.1.1'  // OID: sysDescr, nächste OID wird abgefragt
);

if ($result === false) {
    echo 'Fehler beim Abrufen des SNMP-Objekts.';
} else {
    echo 'Nächstes Objekt: ' . $result;
}
Nächstes Objekt: STRING: "router-hostname"

Mehrere Nachfolger gleichzeitig abfragen

<?php
// Mehrere OIDs auf einmal abfragen: je nächste OID wird zurückgegeben
$oids = [
    '.1.3.6.1.2.1.1.1.0', // sysDescr
    '.1.3.6.1.2.1.1.3.0', // sysUpTime
];

$results = snmp3_getnext(
    '192.168.1.1',
    'myUser',
    'authNoPriv',
    'MD5',
    'authPassphrase123',
    '',
    '',
    $oids
);

if ($results === false) {
    echo 'Fehler beim Abrufen.';
} else {
    foreach ($results as $oid => $value) {
        echo $oid . ' => ' . $value . PHP_EOL;
    }
}
.1.3.6.1.2.1.1.2.0 => OID: .1.3.6.1.4.1.9.1.1 .1.3.6.1.2.1.1.4.0 => STRING: admin@example.com

// Wichtig · Fallstricke

Sicherheitshinweise: Speichere Passwörter (Auth- und Priv-Passphrase) niemals im Klartext im Quellcode. Verwende stattdessen Umgebungsvariablen oder sichere Konfigurationsdateien. Das Protokoll MD5 gilt als veraltet und sollte zugunsten von SHA256 oder SHA512 vermieden werden.

Abhängigkeit: Diese Funktion setzt voraus, dass PHP mit der Net-SNMP-Bibliothek kompiliert wurde (--with-snmp). Andernfalls steht sie nicht zur Verfügung.

Randfälle: Wenn die angegebene OID bereits die letzte in der MIB ist, gibt der Agent einen Fehler zurück, und die Funktion gibt false zurück. Außerdem kann snmp_set_oid_output_format() das Format der zurückgegebenen OIDs beeinflussen.