phpSNMP is an SNMP implementation based on libsnmp, which is written in Python. It has been ported to 100% pure PHP.
Why not just use the SNMP extension?
Dependencies
phpSNMP requires PHP 4.3.0 or better with sockets enabled. Mcrypt is required for privacy in SNMP v3.
phpSNMP is known to work on FreeBSD, Linux and Windows.
NOTE: users of previous versions should modify their code to use the version constants rather than hardcoded numbers. $snmp->version = 2; will not have the desired effect. Use $snmp->version = SNMP_VERSION_2;
Download
TODO
FAQ
| Benchmarks: | 1363 GETs | 1363 WALKs |
|---|---|---|
| PHP SNMP extension: | 522.7428 | 1076.4026 |
| NetSNMP shell call: | 713.8399 | 1250.5760 |
| phpSNMP: | 1770.8982 | 3752.9192 |
| phpSNMP parallel: | 31.5648 | 256.4561 |
define('SNMP_SHORT_INT_LENGTH',
1);. That will tell phpSNMP to always encode lengths as short
integers.Usage
<?php
error_reporting(E_ALL);
ini_set('memory_limit', '256M');
require('snmp.php');
$snmp = new snmp();
$oid = '.1.3.6.1.2.1.69.1.1.3';
$oid = $argv[1];
// test the oid_format function
$z = oid_format($oid, OID_TEXT);
$zz = oid_format($z, OID_NUMERIC);
echo "$oid => $z => $zz\n";
exit;
$ip = '172.16.0.116'; // ip address or hostname
$ips = array($ip, '172.16.0.64'); // array of ip addresses or hostnames
$community = 'public'; // community string
$oid = '.1.3.6.1.2.1.1'; // only numerical oids are supported
$oids = array('.1.3.6.1.2.1.1.1', '.1.3.6.1.2.1.1.3');
$snmp = new snmp();
$snmp->version = SNMP_VERSION_3;
print_r($snmp->get('localhost', '.1.3.6.1.2.1.1.3.0', array('v3_flags'=>SNMP_AUTH_PRIV, 'v3_user'=>'v3user',
'v3_auth'=>'authpassword', 'v3_priv'=>'privpassword')));
$snmp->version = SNMP_VERSION_2;
print_r($snmp->walk($ip, $oid, $community));
print_r($snmp->multi_walk($ips, $oid, $community));
// get system uptime
print_r($snmp->get($ip, '.1.3.6.1.2.1.1.3.0', $community));
print_r($snmp->multi_get($ips, '.1.3.6.1.2.1.1.3.0', $community));
// bulk get
print_r($snmp->bulk_get($ip, $oids));
// reset cable modem(s)
$oid = '.1.3.6.1.3.83.1.1.4.0.1.1.3.0';
$snmp->set($ip, $oid, 1, 'i', 'private');
$snmp->multi_set($ips, $oid, 1, 'i', 'private');
// send a trap
$ip = '123.45.12.3';
$community = 'public';
$varbind = $snmp->build_varbind('.1.3.6.1.3.83.1.1.4.1', 17, 'i');
$enterprise = '.1.3.6.1.3.83.1.1.4.0.1.1.3.0';
$agent = '127.0.0.1';
$trap_type = TRAP_LINKUP;
$specific_trap_type = 2;
$uptime = 123;
$snmp->trap($ip, $community, $varbind, $enterprise, $agent, $trap_type, $specific_trap_type, $uptime);
?>