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