Start · Sprachen · PHP · Referenz · snmpset

snmpset

Funktion

Setzt den Wert eines oder mehrerer SNMP-Objekte auf einem entfernten Gerät via SNMPv1.

seit PHP 4.0.0 Kategorie: http

Signatur

snmpset(string $hostname, string $community, array|string $object_id, array|string $type, array|mixed $value, int $timeout = -1, int $retries = -1): bool

Beschreibung

snmpset() schreibt einen Wert in ein SNMP-Objekt (identifiziert durch seine OID) auf einem Netzwerkgerät, das per SNMP erreichbar ist. Typische Einsatzgebiete sind die Konfiguration von Netzwerkgeräten (Router, Switches, Drucker) sowie die Fernsteuerung von SNMP-fähiger Hardware über PHP-Skripte.

Der Parameter type legt den ASN.1-Datentyp des Wertes fest (z. B. i für Integer, s für String, x für Hex-String, d für Dezimalstring, n für Null, o für OID, t für Timeticks, a für IP-Adresse, b für Bits). Die korrekte Angabe des Typs ist zwingend, da SNMP-Agenten bei Typkonflikten den Schreibvorgang ablehnen.

Um mehrere OIDs gleichzeitig zu setzen, können Arrays für object_id, type und value übergeben werden – alle drei Arrays müssen dann dieselbe Länge haben. Für modernere SNMP-Versionen (v2c, v3) sollte snmp2_set() bzw. snmp3_set() verwendet werden.

Die Funktion nutzt die SNMPv1-Community als einfaches Passwort. Da Community-Strings im Klartext übertragen werden, sollte SNMP-Zugriff auf vertrauenswürdige Netzwerke beschränkt und nach Möglichkeit SNMPv3 mit Authentifizierung und Verschlüsselung eingesetzt werden.

Parameter

Name Typ Default Beschreibung
$hostname Pflicht string Hostname oder IP-Adresse des SNMP-Agenten (Zielgeräts). Optionaler UDP-Port kann per hostname:port angegeben werden.
$community Pflicht string SNMPv1 Write-Community-String, der zur Authentifizierung beim Agenten dient. Häufig private als Standard – sollte in Produktionsumgebungen geändert werden.
$object_id Pflicht array|string OID (Object Identifier) des zu setzenden SNMP-Objekts, z. B. .1.3.6.1.2.1.1.6.0. Kann auch ein Array von OIDs sein, wenn mehrere Objekte gleichzeitig gesetzt werden sollen.
$type Pflicht array|string ASN.1-Typkürzel des Wertes. Gültige Werte: i (Integer), u (Unsigned Integer), s (String), x (Hex-String), d (Dezimalstring), n (Null), o (OID), t (Timeticks), a (IP-Adresse), b (Bits). Bei Array-Übergabe muss die Länge mit object_id und value übereinstimmen.
$value Pflicht array|mixed Der zu setzende Wert. Bei Array-Übergabe muss die Länge mit object_id und type übereinstimmen.
$timeout int -1 Timeout in Mikrosekunden für die Antwort des Agenten. -1 verwendet den Standardwert der SNMP-Bibliothek.
$retries int -1 Anzahl der Wiederholungsversuche bei Timeout. -1 verwendet den Standardwert der SNMP-Bibliothek.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn der Schreibvorgang erfolgreich war, andernfalls false. Bei einem Fehler (z. B. unerreichbarer Host, falscher Community-String, unbekannte OID) wird zusätzlich eine PHP-Warnung ausgegeben.

Beispiele

Systemstandort eines SNMP-Geräts setzen

<?php
// Setzt den sysLocation-Wert (OID .1.3.6.1.2.1.1.6.0) auf einem Router
$host      = '192.168.1.1';
$community = 'private';
$oid       = '.1.3.6.1.2.1.1.6.0';
$type      = 's';  // String
$value     = 'Serverraum EG, Schrank 3';

$result = snmpset($host, $community, $oid, $type, $value);

if ($result) {
    echo "Standort erfolgreich gesetzt.\n";
} else {
    echo "Fehler beim Setzen des Standorts.\n";
}
Standort erfolgreich gesetzt.

Mehrere OIDs in einem Aufruf setzen

<?php
// Mehrere SNMP-OIDs gleichzeitig schreiben (Arrays müssen gleich lang sein)
$host      = '192.168.1.1';
$community = 'private';

$oids   = [
    '.1.3.6.1.2.1.1.5.0',  // sysName
    '.1.3.6.1.2.1.1.6.0',  // sysLocation
];
$types  = ['s', 's'];
$values = ['Router-01', 'Rechenzentrum Berlin'];

$result = snmpset($host, $community, $oids, $types, $values);

if ($result) {
    echo "Alle SNMP-Werte erfolgreich gesetzt.\n";
} else {
    echo "Fehler: Mindestens ein Wert konnte nicht gesetzt werden.\n";
}
Alle SNMP-Werte erfolgreich gesetzt.

// Wichtig · Fallstricke

Sicherheitshinweis: SNMPv1 überträgt Community-Strings unverschlüsselt im Klartext. Ein Angreifer im selben Netzwerk kann den Write-Community-String mitlesen und beliebige SNMP-Werte manipulieren. Verwende SNMPv3 mit snmp3_set() für produktive Umgebungen, da es Authentifizierung und Datenverschlüsselung unterstützt.

SNMP-Extension erforderlich: Die Funktion ist nur verfügbar, wenn PHP mit der SNMP-Extension kompiliert wurde (--with-snmp) und die Net-SNMP-Bibliothek installiert ist. Prüfe die Verfügbarkeit mit extension_loaded('snmp').

Zugriffsrechte: Viele SNMP-Agenten unterscheiden zwischen Read-Community (public) und Write-Community (private). Schreiboperationen benötigen die Write-Community, andernfalls lehnt der Agent die Anfrage ab. Außerdem können ACLs auf dem Agenten den Schreibzugriff auf bestimmte IP-Adressen beschränken.

Typ-Mismatch: Wenn der angegebene Typ nicht mit dem im MIB definierten Typ übereinstimmt, wird der SNMP-Agent den SET-Request mit einem Fehler ablehnen. Die Fehlermeldung erscheint als PHP-Warnung.