Start · Sprachen · PHP · Referenz · snmp2_get

snmp2_get

Funktion

Liest ein oder mehrere SNMP-Objekte von einem SNMP-Agenten mittels SNMPv2c und gibt den Wert zurück.

seit PHP 5.2.0 Kategorie: http

Signatur

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

Beschreibung

snmp2_get() sendet eine SNMP-GET-Anfrage an einen SNMP-Agenten (z. B. einen Router, Switch oder Server) und liest den Wert eines oder mehrerer OIDs (Object Identifiers) aus. Die Funktion verwendet SNMPv2c, das gegenüber SNMPv1 verbesserte Fehlerbehandlung und 64-Bit-Counter-Unterstützung bietet.

Der Parameter $object_id kann entweder ein einzelner OID-String oder ein Array von OIDs sein. Im Falle eines Arrays werden mehrere Werte in einem einzigen Netzwerkaufruf abgefragt (Bulk-Abfrage), was effizienter ist als mehrere Einzelaufrufe.

Diese Funktion ist sinnvoll, wenn bekannt ist, welchen OID man abfragen möchte, und keine Traversierung des MIB-Baums benötigt wird. Für das Durchlaufen von Tabellen oder unbekannten OID-Strukturen eignen sich stattdessen snmp2_walk() oder snmp2_real_walk().

Damit die Funktion verfügbar ist, muss PHP mit SNMP-Unterstützung kompiliert worden sein (Extension snmp muss geladen sein). Unter Linux wird dazu in der Regel die Net-SNMP-Bibliothek benötigt.

Parameter

Name Typ Default Beschreibung
$hostname Pflicht string Hostname oder IP-Adresse des SNMP-Agenten, der abgefragt werden soll. Kann optional einen Port enthalten, z. B. 192.168.1.1:161.
$community Pflicht string Der SNMPv2c Community-String, der als einfaches Authentifizierungsmittel dient. Standardmäßig ist dieser bei vielen Geräten public (nur Lesen).
$object_id Pflicht array|string Ein einzelner OID-String oder ein Array von OID-Strings, die abgefragt werden sollen. Beispiel: .1.3.6.1.2.1.1.1.0 für den System-Beschreibungsstring.
$timeout int -1 Timeout in Mikrosekunden, der auf eine Antwort gewartet wird. Der Wert -1 verwendet den Standard-Timeout der SNMP-Bibliothek.
$retries int -1 Anzahl der Wiederholungsversuche bei Timeout. Der Wert -1 verwendet die Standardanzahl der SNMP-Bibliothek.

Rückgabewert

Typ
mixed
Beschreibung
Gibt bei Erfolg den SNMP-Objektwert zurück. Wenn $object_id ein Array ist, wird ein assoziatives Array mit den OIDs als Schlüssel zurückgegeben. Im Fehlerfall wird false zurückgegeben und eine Warnung ausgegeben.

Beispiele

System-Beschreibung eines SNMP-Geräts auslesen

<?php
// OID .1.3.6.1.2.1.1.1.0 entspricht sysDescr (Systembeschreibung)
$hostname  = '192.168.1.1';
$community = 'public';
$oid       = '.1.3.6.1.2.1.1.1.0';

$result = snmp2_get($hostname, $community, $oid);

if ($result === false) {
    echo 'SNMP-Abfrage fehlgeschlagen.';
} else {
    echo 'Systembeschreibung: ' . $result;
}
Systembeschreibung: STRING: Linux router 5.15.0 #1 SMP x86_64

Mehrere OIDs in einem Aufruf abfragen

<?php
$hostname  = '192.168.1.1';
$community = 'public';

// Gleichzeitig sysDescr, sysName und sysUpTime abfragen
$oids = [
    '.1.3.6.1.2.1.1.1.0', // sysDescr
    '.1.3.6.1.2.1.1.5.0', // sysName
    '.1.3.6.1.2.1.1.3.0', // sysUpTime
];

$results = snmp2_get($hostname, $community, $oids, 1000000, 3);

if ($results === false) {
    echo 'Fehler bei der SNMP-Abfrage.';
} else {
    foreach ($results as $oid => $value) {
        echo $oid . ' => ' . $value . PHP_EOL;
    }
}
.1.3.6.1.2.1.1.1.0 => STRING: Linux router 5.15.0 .1.3.6.1.2.1.1.5.0 => STRING: myrouter .1.3.6.1.2.1.1.3.0 => Timeticks: (123456) 0:20:34.56

// Wichtig · Fallstricke

Sicherheitshinweis: Der Community-String wird bei SNMPv2c im Klartext über das Netzwerk übertragen und bietet keine echte Sicherheit. Für produktive Umgebungen sollte SNMPv3 mit Authentifizierung und Verschlüsselung (über die SNMP-Klasse oder snmp3_*()-Funktionen) eingesetzt werden.

Firewall/Netzwerk: SNMP nutzt standardmäßig UDP-Port 161. Stellen Sie sicher, dass dieser Port zwischen PHP-Server und SNMP-Agent erreichbar ist, da sonst Timeouts auftreten.

Extension: Die Funktion erfordert, dass die PHP-SNMP-Extension (extension=snmp) in der php.ini aktiviert ist und die Net-SNMP-Bibliothek auf dem System installiert ist.

OID-Format: OIDs können entweder als numerische Pfade (z. B. .1.3.6.1.2.1.1.1.0) oder als MIB-Namen (z. B. SNMPv2-MIB::sysDescr.0) angegeben werden, sofern die entsprechenden MIB-Dateien auf dem System vorhanden sind.