PHP 7.0.6 Released

La classe SNMP

(PHP 5 >= 5.4.0, PHP 7)

Introduction

Représente une session SNMP.

Synopsis de la classe

SNMP {
/* Propriétés */
public int $max_oids ;
public int $valueretrieval ;
public bool $quick_print ;
public bool $enum_print ;
public int $oid_output_format ;
public bool $oid_increasing_check ;
public int $exceptions_enabled ;
public array $info ;
/* Méthodes */
public __construct ( int $version , string $hostname , string $community [, int $timeout = 1000000 [, int $retries = 5 ]] )
public bool close ( void )
public mixed get ( mixed $object_id [, bool $preserve_keys = false ] )
public int getErrno ( void )
public string getError ( void )
public mixed getnext ( mixed $object_id )
public bool set ( mixed $object_id , mixed $type , mixed $value )
public bool setSecurity ( string $sec_level [, string $auth_protocol = [, string $auth_passphrase = [, string $priv_protocol = [, string $priv_passphrase = [, string $contextName = [, string $contextEngineID = ]]]]]] )
public array walk ( string $object_id [, bool $suffix_as_key = FALSE [, int $max_repetitions [, int $non_repeaters ]]] )
/* Constantes */
const integer ERRNO_NOERROR = 0 ;
const integer ERRNO_GENERIC = 2 ;
const integer ERRNO_TIMEOUT = 4 ;
const integer ERRNO_ERROR_IN_REPLY = 8 ;
const integer ERRNO_OID_NOT_INCREASING = 16 ;
const integer ERRNO_OID_PARSING_ERROR = 32 ;
const integer ERRNO_MULTIPLE_SET_QUERIES = 64 ;
const integer ERRNO_ANY = 126 ;
const integer VERSION_1 = 0 ;
const integer VERSION_2C = 1 ;
const integer VERSION_2c = 1 ;
const integer VERSION_3 = 3 ;
}

Propriétés

max_oids

Nombre maximal de OID par demande GET/SET/GETBULK

valueretrieval

Contrôle la façon dont les valeurs SNMP seront retournées

SNMP_VALUE_LIBRARY Les valeurs retournées le seront de la même façon que par la bibliothèque Net-SNMP.
SNMP_VALUE_PLAIN Les valeurs retournées le seront en valeur pleine, sans le type SNMP.
SNMP_VALUE_OBJECT Les valeurs retournées le seront sous forme d'objets avec les propriétés "value" et "type", où le type pourra être une constante SNMP_OCTET_STR, SNMP_COUNTER etc... La façon dont la "value" est retournée est basée suivant la constante définie : SNMP_VALUE_LIBRARY ou SNMP_VALUE_PLAIN.
quick_print

Valeur du paramètre quick_print dans la bibliothèque NET-SNMP

Définit la valeur du paramètre quick_print dans la bibliothèque NET-SNMP. Lorsqu'il est défini (1), la bibliothèque SNMP retournera des valeurs rapidement imprimables. Cela signifie uniquement que les valeurs seront imprimées. Lorsque le paramètre quick_print n'est pas défini (par défaut), la bibliothèque UCD SNMP imprimera des informations additionnelles incluant le type de la valeur (i.e. IpAddress ou OID). De plus, si quick_print n'est pas activé, la bibliothèque imprimera les valeurs hexadécimales pour toutes les chaînes contenant jusqu'à 3 caractères.

enum_print

Contrôle la façon dont les valeurs enum sont imprimées.

Permet d'indiquer à walk/get etc. s'ils doivent automatiquement chercher les valeurs enum dans le MIIB et les retourner en plus de leurs chaînes humainement lisibles.

oid_output_format

Contrôle le format de sortie OID

Représentation OID .1.3.6.1.2.1.1.3.0 pour diverses valeurs de oid_output_format
SNMP_OID_OUTPUT_FULLLa forme complète, comme "iso.org.dod...."
SNMP_OID_OUTPUT_NUMERICLa forme numérique, comme ".1.3.6.1.4.1.8072.3.2.10"
SNMP_OID_OUTPUT_MODULELa forme courte, comme "NET-SNMP-TC::linux"
SNMP_OID_OUTPUT_SUFFIXTBD
SNMP_OID_OUTPUT_UCDTBD
SNMP_OID_OUTPUT_NONETBD
oid_increasing_check

Contrôle la vérification de la désactivation pour l'augmentation de l'OID lors du parcours de l'arbre OID

Quelques agents SNMP sont connus pour retourner des OIDs dans la mauvais ordre, mais peuvent malgré tout continuer le parcours. D'autres agents retournent des OIDs dans la mauvais ordre et peuvent conduire la méthode SNMP::walk() dans une boucle infinie tant que la limite de mémoire n'est pas atteinte. La bibliothèque PHP SNMP, par défaut, effectue la vérification de l'augmentation de l'OID et stoppe le parcours sur l'arbre OID lorsqu'elle détecte une possible boucle en émettant une alerte. Définissez la variable oid_increasing_check à FALSE pour désactiver cette vérification.

exceptions_enabled

Contrôle quelle exception SNMPException sera émise au lieu des alertes. Utiliser l'opérateur OR des constantes SNMP::ERRNO_*. Par défaut, toutes les exceptions SNMP sont désactivées.

info

Propriété en lecture seul contenant la configuration de l'agent distant : nom d'hôte, port, délai d'expiration par défaut, nombre de récupération par défaut

Constantes pré-définies

Types d'erreurs SNMP

SNMP::ERRNO_NOERROR

Aucune erreur spécifique SNMP n'est survenue.

SNMP::ERRNO_GENERIC

Une erreur SNMP générique est survenue.

SNMP::ERRNO_TIMEOUT

Demande à l'agent SNMP d'atteindre le délai d'expiration.

SNMP::ERRNO_ERROR_IN_REPLY

L'agent SNMP retourne une erreur dans la réponse.

SNMP::ERRNO_OID_NOT_INCREASING

L'agent SNMP n'incrémente plus l'OID lors de l'exécution de la commande WALK (BULK). Ceci indique qu'un problème survient avec l'agent SNMP.

SNMP::ERRNO_OID_PARSING_ERROR

La bibliothèque échoue lors de l'analyse de l'OID (et/ou le type pour la commande SET). Aucune requête n'est effectuée.

SNMP::ERRNO_MULTIPLE_SET_QUERIES

La bibliothèque utilisera plusieurs requêtes pour l'opération SET demandée. Cela signifie que l'opération sera effectuée de façon non transactionnelle et que les morceaux suivants pourront échouer si un mauvais type ou une mauvaise valeur est fourni.

SNMP::ERRNO_ANY

Tous les codes opérateur OR des constantes SNMP::ERRNO_*.

Versions du protocole SNMP

SNMP::VERSION_1

SNMP::VERSION_2C, SNMP::VERSION_2c

SNMP::VERSION_3

Sommaire

add a note add a note

User Contributed Notes 1 note

up
0
madjev1990 at gmail dot com
1 month ago
Part of my diploma thesis was to create web interface to command device via SNMP. So I create my own level of abstraction over SNMP class:

<?php

/**
* Snmp library which add one level of abstraction to snmp native library.
* It adds functionality to work with module PicoIP.With this library you can:
* 1.Activate/deactive defined pin;
* 2.Get status of all pins.
*
* When make an instance you should pass to the constructor key word which will
* make the library create an object with necessary properetis and access permissions.
*
* Private properties set some of configurations:
* Host is IP address of the divece which we will command.
* Two passwords are set for reading and writing.
* Version of snmp protocol that we will use is version 1.
*
* @author Radoslav Madjev
* @year 2016
* @version 1.0 beta
*
*
*/
class snmp_lib {

    private
$snmpInstance;
    private
$VERSION = SNMP::VERSION_1;
    private
$HOST = '192.168.0.150';
    private
$passwordRead = '000000000000';
    private
$passwordWrite = 'private';
    private
$releys = array(1 => '1.3.6.1.4.1.19865.1.2.1.1.0',
       
2 => '1.3.6.1.4.1.19865.1.2.1.2.0');
    private
$allPorts = array('3' => '1.3.6.1.4.1.19865.1.2.1.33.0',
       
'5' => '1.3.6.1.4.1.19865.1.2.2.33.0');

   
/**
     * Create instance of SNMP native class, based on actions that we will
     * perform.
     *
     * @param string $action
     */
   
public function __construct($action) {
        if (
in_array($action, array('read', 'write'))) {
            if (
strcmp($action, 'read') === 0) {
               
$this->_read();
            } else {
               
$this->_write();
            }
        }
    }

   
/**
     * Create instance with reading permissions.
     */
   
private function _read() {
       
$this->snmpInstance = new SNMP($this->VERSION, $this->HOST, $this->passwordRead);
    }

   
/**
     * Create instance with writing permissions.
     */
   
private function _write() {
       
$this->snmpInstance = new SNMP($this->VERSION, $this->HOST, $this->passwordWrite);
    }

   
/**
     * Close snmp session.
     *
     * @return boolean
     */
   
public function closeSession() {
        return
$this->snmpInstance->close();
    }

   
/**
     * Set integer 1 as value of defined pin.
     */
   
public function activate($relay) {
       
$this->snmpInstance->set($this->releys[$relay], 'i', '1');
    }

   
/**
     * Set integer 0 as value of defined pin.
     */
   
public function deactivate($relay) {
       
$this->snmpInstance->set($this->releys[$relay], 'i', '0');
    }

   
/**
     * Get pin status of all ports of the module.
     *
     * @return array
     */
   
public function getAllPortsStatus() {
       
$allPins = array();
        foreach (
$this->allPorts as $number => $port) {
           
//get active pins as 8-bit integer of defined port
           
$getbits = $this->snmpInstance->get($port);
           
$bits = str_replace('INTEGER: ', '', $getbits);
           
//get pins status
           
$pinsStatus = $this->_getActivePins($bits);
           
$allPins[$number] = $pinsStatus;
        }

        return
$allPins;
    }

   
/**
     * Make bitwise operation which will determine,
     * which are active pins.
     *
     * @param int $bits
     * @return array
     */
   
private function _getActivePins($bits) {

       
$bitMapping = array(
           
1 => 1,
           
2 => 2,
           
3 => 4,
           
4 => 8,
           
5 => 16,
           
6 => 32,
           
7 => 64,
           
8 => 128
       
);

       
$pinsStatus = array();

        foreach (
$bitMapping as $int => $bit) {
            if ((
$bits & $bit) == $bit) {
               
$pinsStatus[$int] = true;
                continue;
            }
           
$pinsStatus[$int] = false;
        }

        return
$pinsStatus;
    }

}

?>

I have one module that receive SNMP request and send a command to relays. Also these are example scripts that use this lib:
Turn on script:
<?php
require_once 'snmp_lib.php';

$snmp = new snmp_lib('write');
$snmp->activate($getRelayNumber);
$snmp->closeSession();
?>

Turn off script:
<?php
require_once 'snmp_lib.php';

$snmp = new snmp_lib('write');
$snmp->deactivate($getRelayNumber);
$snmp->closeSession();
?>

Script that get all ports status:
<?php
require_once 'snmp_lib.php';

$snmp = new snmp_lib('read');
$getActive = $snmp->getAllPortsStatus();
?>
To Top