Start · Sprachen · PHP · Referenz · snmpget

snmpget

Funktion

Ruft einen einzelnen SNMP-Wert von einem Netzwerkgerät über das Simple Network Management Protocol (SNMP) ab.

seit PHP 4.0.0 Kategorie: http

Signatur

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

Beschreibung

snmpget() fragt einen bestimmten SNMP-Wert (OID – Object Identifier) von einem entfernten Gerät ab, das einen SNMP-Agenten betreibt. Die Funktion unterstützt SNMPv1 und gibt den Wert als Zeichenkette zurück, sofern das Gerät erreichbar ist und die Community-Zeichenkette stimmt.

SNMP wird häufig zur Netzwerküberwachung eingesetzt, etwa um Informationen wie Systemname (1.3.6.1.2.1.1.5.0), Uptime, Schnittstellen-Traffic-Zähler oder andere MIB-Werte auszulesen. Typische Einsatzgebiete sind Monitoring-Systeme, Netzwerk-Inventarisierung und automatisierte Geräteverwaltung.

Für komplexere Anfragen – z. B. SNMPv2c- oder SNMPv3-Kommunikation mit Authentifizierung und Verschlüsselung – empfiehlt sich die objektorientierte SNMP-Klasse (SNMP), da snmpget() nur SNMPv1 unterstützt.

Die PHP-SNMP-Erweiterung muss beim Kompilieren aktiviert sein (abhängig von der Net-SNMP-Bibliothek). Unter Linux ist dafür typischerweise das Paket libsnmp-dev und die PHP-Erweiterung php-snmp erforderlich.

Parameter

Name Typ Default Beschreibung
$hostname Pflicht string Hostname oder IP-Adresse des SNMP-Agenten (z. B. '192.168.1.1' oder 'router.example.com'). Optional kann ein Port mit Doppelpunkt angehängt werden: '192.168.1.1:161'.
$community Pflicht string Die SNMP-Community-Zeichenkette, die als einfaches Passwort dient. Für Lesezugriff ist häufig 'public' voreingestellt, sollte jedoch in Produktivumgebungen geändert werden.
$object_id Pflicht array|string Der OID (Object Identifier) des abzurufenden SNMP-Objekts, z. B. '1.3.6.1.2.1.1.1.0' für die Systembeschreibung. Kann als Zeichenkette oder ab PHP 5.4 auch als Array mehrerer OIDs angegeben werden.
$timeout int -1 Zeitlimit in Mikrosekunden, nach dem ein Verbindungsversuch abgebrochen wird. -1 verwendet den Standardwert der Net-SNMP-Bibliothek.
$retries int -1 Anzahl der Wiederholungsversuche bei Nichtantwort des Agenten. -1 verwendet den Standardwert der Net-SNMP-Bibliothek.

Rückgabewert

Typ
mixed
Beschreibung
Gibt den SNMP-Wert als Zeichenkette zurück, wenn der Abruf erfolgreich war. Bei einem Fehler (z. B. unerreichbarer Host, falsche Community, ungültige OID) wird false zurückgegeben und ein PHP-Fehler der Stufe E_WARNING ausgegeben.

Beispiele

Systemname eines Routers per SNMP abfragen

<?php
// Systemname (sysName) eines Netzwerkgeräts abrufen
$hostname  = '192.168.1.1';
$community = 'public';
$oid       = '1.3.6.1.2.1.1.5.0'; // sysName

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

if ($result !== false) {
    echo 'Systemname: ' . $result . PHP_EOL;
} else {
    echo 'SNMP-Abfrage fehlgeschlagen.' . PHP_EOL;
}
Systemname: STRING: "router.example.com"

Uptime und Systembeschreibung abfragen mit Timeout

<?php
// SNMPv1-Abfrage mit individuellem Timeout (2 Sekunden) und 3 Wiederholungen
$hostname  = '192.168.1.1';
$community = 'public';

// sysDescr: Textuelle Beschreibung des Systems
$sysDescr = snmpget($hostname, $community, '1.3.6.1.2.1.1.1.0', 2000000, 3);
// sysUpTime: Zeit seit dem letzten Neustart in Hundertstelsekunden
$sysUpTime = snmpget($hostname, $community, '1.3.6.1.2.1.1.3.0', 2000000, 3);

if ($sysDescr !== false) {
    echo 'Beschreibung: ' . $sysDescr . PHP_EOL;
}
if ($sysUpTime !== false) {
    echo 'Uptime: ' . $sysUpTime . PHP_EOL;
}
Beschreibung: STRING: "Linux router 5.15.0 #1 SMP x86_64" Uptime: Timeticks: (123456) 0:20:34.56

// Wichtig · Fallstricke

Sicherheitshinweis: Die Community-Zeichenkette wird im SNMPv1-Protokoll im Klartext über das Netzwerk übertragen und bietet keinen ausreichenden Schutz. In sicherheitskritischen Umgebungen sollte SNMPv3 mit Authentifizierung und Verschlüsselung (via SNMP-Klasse) eingesetzt werden.

Nur SNMPv1: snmpget() unterstützt ausschließlich SNMP Version 1. Für SNMPv2c steht snmp2_get() zur Verfügung, für SNMPv3 snmp3_get() oder die SNMP-Klasse.

Rückgabeformat: Der zurückgegebene Wert enthält den SNMP-Datentyp als Präfix, z. B. STRING: "Wert", INTEGER: 42 oder Timeticks: (100) 0:00:01.00. Für maschinelle Weiterverarbeitung muss dieser Präfix ggf. herausgeparst werden.

Firewall/Erreichbarkeit: SNMP kommuniziert standardmäßig über UDP-Port 161. Stellen Sie sicher, dass dieser Port auf dem Zielgerät nicht geblockt ist und der Agent Anfragen von der abfragenden IP-Adresse akzeptiert.