Signatur
Beschreibung
snmp2_set() ermöglicht es, über das Simple Network Management Protocol in Version 2c (SNMPv2c) den Wert eines SNMP-Objekts auf einem entfernten Gerät zu setzen. Die Funktion entspricht einem SNMP-SET-Request und wird typischerweise verwendet, um Geräteparameter wie Schnittstellenstatus, Konfigurationswerte oder Zähler auf Netzwerkgeräten (Router, Switches, Server) ferngesteuert zu ändern.
Der Typ des zu setzenden Werts muss explizit als SNMP-Typ-Kennung angegeben werden, z. B. i für Integer, s für String, x für Hexadezimal, d für Dezimal, n für Null-OID, o für OID, t für Timeticks, a für IPv4-Adresse, b für Bits oder u für Unsigned Integer. Die Typen entsprechen denen, die auch das Kommandozeilentool snmpset kennt.
Wenn mehrere OIDs gleichzeitig gesetzt werden sollen, können Arrays für object_id, type und value übergeben werden. Alle drei Arrays müssen dabei dieselbe Länge besitzen. Damit lassen sich mehrere Werte in einem einzigen SNMP-Request atomar setzen, was netzwerkeffizienter ist als mehrere separate Aufrufe.
Im Erfolgsfall gibt die Funktion true zurück, im Fehlerfall false. Für komplexere Anwendungsfälle (z. B. SNMPv3 mit Authentifizierung und Verschlüsselung) sollte stattdessen die objektorientierte SNMP-Klasse verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $hostname Pflicht | string | Hostname oder IP-Adresse des SNMP-Agenten. Optional kann ein Port mit Doppelpunkt angehängt werden, z. B. '192.168.1.1:161'. |
|
| $community Pflicht | string | Die SNMPv2c-Community-Zeichenkette (Write-Community), die für den SET-Zugriff berechtigt, z. B. 'private'. |
|
| $object_id Pflicht | array|string | Die OID (Object Identifier) des zu setzenden SNMP-Objekts als Zeichenkette, z. B. '1.3.6.1.2.1.1.6.0', oder ein Array von OIDs für Mehrfach-Sets. |
|
| $type Pflicht | array|string | Der SNMP-Typ des Werts als einzelnes Zeichen: i (Integer), u (Unsigned Integer), s (String), x (Hex-String), d (Decimal String), n (Null OID), o (OID), t (Timeticks), a (IPv4-Adresse), b (Bits). Bei Arrays muss die Reihenfolge der Typen der Reihenfolge der OIDs entsprechen. |
|
| $value Pflicht | array|string | Der zu setzende Wert als Zeichenkette oder Array von Zeichenketten. Bei Arrays muss die Reihenfolge der Werte der Reihenfolge der OIDs entsprechen. | |
| $timeout | int | -1 | Timeout in Mikrosekunden. Der Wert -1 verwendet den globalen Standard-Timeout (standardmäßig 1.000.000 µs = 1 Sekunde). |
| $retries | int | -1 | Anzahl der Wiederholungsversuche bei Timeout. Der Wert -1 verwendet den globalen Standardwert (standardmäßig 5 Versuche). |
Rückgabewert
true zurück, wenn der SNMP-SET-Request erfolgreich war, andernfalls false. Im Fehlerfall wird zusätzlich eine PHP-Warnung ausgegeben.Beispiele
Standortbeschreibung eines Netzwerkgeräts setzen
<?php
// sysLocation.0 auf einem Switch/Router via SNMPv2c setzen
$hostname = '192.168.1.1';
$community = 'private'; // Write-Community
$oid = '1.3.6.1.2.1.1.6.0'; // sysLocation.0
$result = snmp2_set($hostname, $community, $oid, 's', 'Serverraum EG, Rack 3');
if ($result) {
echo "Standort erfolgreich gesetzt.\n";
} else {
echo "Fehler beim Setzen des Standorts.\n";
}
Mehrere OIDs in einem einzigen SNMP-Request setzen
<?php
// sysName.0 und sysContact.0 gleichzeitig setzen
$hostname = '192.168.1.1';
$community = 'private';
$oids = ['1.3.6.1.2.1.1.5.0', '1.3.6.1.2.1.1.4.0']; // sysName, sysContact
$types = ['s', 's'];
$values = ['MeinRouter-01', 'admin@example.com'];
$result = snmp2_set($hostname, $community, $oids, $types, $values);
if ($result) {
echo "Gerätename und Kontakt erfolgreich aktualisiert.\n";
} else {
echo "SNMP SET fehlgeschlagen.\n";
}
// Wichtig · Fallstricke
Sicherheitshinweis: SNMPv2c überträgt die Community-Zeichenkette im Klartext über das Netzwerk. Verwenden Sie SNMP-Write-Zugriff daher ausschließlich in abgesicherten, isolierten Netzwerksegmenten oder über verschlüsselte Tunnel (z. B. VPN). Für produktive Umgebungen mit höheren Sicherheitsanforderungen sollte SNMPv3 mit der SNMP-Klasse eingesetzt werden, das Authentifizierung (MD5/SHA) und Verschlüsselung (AES/DES) unterstützt.
Typangabe: Ein falscher SNMP-Typ führt zu einem Fehler auf dem Agenten oder zu einem stillen Fehlschlag. Prüfen Sie die MIB-Definition des jeweiligen Objekts, um den korrekten Typ zu ermitteln.
PHP-Extension: Die Funktion erfordert die aktivierte snmp-Extension (extension=snmp in der php.ini) sowie eine installierte Net-SNMP-Bibliothek auf dem System.