Hopefully this helps someone else out because this was driving be bonkers for a good two hours. It looks like valueretrieval and enum_print work together in a way that I wasn't expecting, and after re-reading may be by design but I'm not sure. If you can't get enums to print, this might be why.
<?php
$snmp = new SNMP(SNMP::VERSION_2C,'192.168.1.9','test');
$snmp->oid_output_format = SNMP_OID_OUTPUT_SUFFIX;
$snmp->valueretrieval = SNMP_VALUE_PLAIN;
$snmp->enum_print = 0;
echo $snmp->get('IF-MIB::ifOperStatus.10110') . "\n";
$snmp->enum_print = 1;
echo $snmp->get('IF-MIB::ifOperStatus.10110') . "\n";
$snmp->quick_print = 1;
echo $snmp->get('IF-MIB::ifOperStatus.10110') . "\n";
$snmp->valueretrieval = SNMP_VALUE_LIBRARY;
echo $snmp->get('IF-MIB::ifOperStatus.10110') . "\n";
$snmp->enum_print = 0;
echo $snmp->get('IF-MIB::ifOperStatus.10110') . "\n";
?>
Output:
1
1
1
1
up
PHP.mk документација
SNMP
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Патека
class.snmp.php
Локална патека за оваа страница.
Извор
php.net/manual/en
Оригиналниот HTML се реупотребува и локално се стилизира.
Режим
Прокси + превод во позадина
Кодовите, табелите и белешките остануваат читливи во истиот тек.
Референца
class.snmp.php
SNMP
Референца за `class.snmp.php` со подобрена типографија и навигација.
SNMP класа
(PHP 5 >= 5.4.0, PHP 7, PHP 8)
Вовед
Презентира SNMP session.
Синопсис на класата
class SNMP
{
/* Константи */
/* Својства */
/* Методи */
public __construct(
int
string
string
int
int
)
}int
$version,string
$hostname,string
$community,int
$timeout = -1,int
$retries = -1)
Својства
- max_oids
- Максимален OID по GET/SET/GETBULK барање
- valueretrieval
-
Ја контролира методата како ќе се вратат SNMP вредностите
SNMP_VALUE_LIBRARYНаведете го методот како ќе се вратат SNMP вредностите SNMP_VALUE_PLAINВратените вредности ќе бидат како што се вратени од библиотеката Net-SNMP. SNMP_VALUE_OBJECTВратените вредности ќе бидат објекти со својствата "value" и "type", каде што вториот е една од константите SNMP_OCTET_STR, SNMP_COUNTER итн. Начинот на кој се враќа "value" се базира на тоа кој од SNMP_VALUE_LIBRARY,SNMP_VALUE_PLAIN(двоен наводник) - quick_print
-
Вредност на
quick_printво рамките на NET-SNMP library Поставува вредност наquick_printво рамките на NET-SNMP библиотеката. Кога ова е поставено (1), SNMP библиотеката ќе врати „брзо отпечатени“ вредности. Ова значи дека само вредноста ќе биде отпечатена. Когаquick_printне е овозможено (стандардно), NET-SNMP библиотеката печати дополнителни информации вклучувајќи го типот на вредноста (т.е. IpAddress или OID). Дополнително, ако quick_print не е овозможено, библиотеката печати дополнителни хексадецимални вредности за сите низи од три или помалку знаци. - enum_print
- Ја контролира начинот на печатење на enum вредностите Параметарот вклучува дали walk/get итн. треба автоматски да ги бара enum вредностите во MIB и да ги врати заедно со нивниот човечки читлив стринг.
- oid_output_format
-
Ја контролира формата на излезниот OID
го поставува форматот на излез на целосен или нумерички. oid_output_format values SNMP_OID_OUTPUT_FULL.iso.org.dod.internet.mgmt.mib-2.system.sysUpTime.sysUpTimeInstance SNMP_OID_OUTPUT_NUMERIC.1.3.6.1.2.1.1.3.0 SNMP_OID_OUTPUT_MODULEDISMAN-EVENT-MIB::sysUpTimeInstance SNMP_OID_OUTPUT_SUFFIXsysUpTimeInstance SNMP_OID_OUTPUT_UCDsystem.sysUpTime.sysUpTimeInstance SNMP_OID_OUTPUT_NONEПретставување на OID .1.3.6.1.2.1.1.3.0 за разни - oid_increasing_check
-
Ја контролира деактивацијата на проверката за зголемување на OID при шетање низ OID дрвото
Некои SNMP агентите се познати по враќање на OID-и по погрешен редослед, но сепак можат да го завршат шетањето. Други агенти враќаат OID-и што се надвор од редослед и можат да предизвикаат поддрво на објекти
бесконечно повторување додека не се достигне границата на меморијата. PHP SNMP библиотеката стандардно врши проверка за зголемување на OID и запира со шетање на OID дрвото кога ќе открие можна јамка издавајќи предупредување за соочен OID што не се зголемува. Постави oid_increasing_check to
falseза да ја оневозможите оваа проверка. - exceptions_enabled
-
Ги контролира кои грешки ќе подигнат SNMPException наместо предупредување. Користете бинарно OR-ирани
SNMP::ERRNO_*константи. Стандардно, сите SNMP исклучоци се оневозможени. - info
- Својство само за читање со конфигурација на далечински агент: име на хост, порта, стандардно време на чекање, стандарден број на обиди
Претходно дефинирани константи
SNMP Типови на грешки
SNMP::ERRNO_NOERROR- Овозможува пишување SNMP-специфична грешка се случи.
SNMP::ERRNO_GENERIC- Генерална SNMP грешка се случи.
SNMP::ERRNO_TIMEOUT- Барање до SNMP агентот истече.
SNMP::ERRNO_ERROR_IN_REPLY- SNMP агентот врати грешка во одговорот.
SNMP::ERRNO_OID_NOT_INCREASING- SNMP агентот се соочи со циклус на OID што повторно пријавува OID што не се зголемува додека извршува (BULK)WALK команда. Ова укажува на лажен далечински управувач SNMP agent.
SNMP::ERRNO_OID_PARSING_ERROR- Библиотеката не успеа при парсирањето на OID (и/или типот за командата SET). Не се направени прашања.
SNMP::ERRNO_MULTIPLE_SET_QUERIES- Библиотеката ќе користи повеќе прашања за бараната операција SET. Тоа значи дека операцијата ќе се изврши на не-трансакциски начин и вториот или последователните делови може да откажат ако се соочат со неуспех на типот или вредноста.
SNMP::ERRNO_ANY- Сите SNMP::ERRNO_* кодови бинарно OR-ирани.
SNMP Протоколни верзии
Содржина
- SNMP::close — Бара дрво од информации за мрежен ентитет
- SNMP::__construct — Затвора SNMP сесија
- SNMP::get — Определува метод како ќе бидат вратени SNMP вредностите
- SNMP::getErrno — Создава SNMP инстанца што претставува сесија со далечински SNMP агент
- SNMP::getError — Земи ја последната порака за грешка
- SNMP::getnext — Преземи SNMP објект што го следи дадениот објект ID
- SNMP::set — Враќа сите објекти вклучувајќи го нивниот соодветен ID на објект во рамките на наведениот
- SNMP::setSecurity — Конфигурира параметри за SNMPv3 сесија поврзани со безбедност
- SNMP::walk — Преземи поддрво на SNMP објект
Белешки од корисници 2 забелешки
swannie на swannie dot net ¶
пред 5 години
madjev1990 на gmail dot com ¶
пред 10 години
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();
?>