Start · Sprachen · PHP · Referenz · snmp2_set

snmp2_set

Funktion

Setzt den Wert eines oder mehrerer SNMP-Objekte über SNMPv2c auf einem Netzwerkgerät.

seit PHP 5.2.0 Kategorie: http

Signatur

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

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

Typ
bool
Beschreibung
Gibt 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";
}
Standort erfolgreich gesetzt.

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";
}
Gerätename und Kontakt erfolgreich aktualisiert.

// 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.