Signatur
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
$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;
}
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;
}
}
// 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.