Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1233051
  • 博文数量: 135
  • 博客积分: 10576
  • 博客等级: 上将
  • 技术积分: 1670
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-11 20:49
个人简介

不疯魔,不成活! --疯魔老杨(Crazy.LaoYang) http://www.inotes.cn/

文章分类

全部博文(135)

文章存档

2014年(4)

2012年(13)

2011年(5)

2010年(30)

2009年(56)

2008年(27)

分类: 系统运维

2012-05-17 09:45:36

PHP之SNMP函数:snmpget/snmp2_get/snmp3_get

snmpget/snmp2_get/snmp3_get
说明:获取一个 SNMP 对象(snmpget:php4/5;snmp2_get:php5>=5.2.0;snmp3_get:php4/5)

string snmpget ( string $hostname , string $community , string $object_id [, int $timeout [, int $retries ]] )

string snmp2_get ( string $host , string $community , string $object_id [, string $timeout = 1000000 [, string $retries = 5 ]] )

string snmp3_get ( string $host , string $sec_name , string $sec_level , string $auth_protocol , string $auth_passphrase , string $priv_protocol , string $priv_passphrase , string $object_id [, string $timeout = 1000000 [, string $retries = 5 ]] )

示例1:snmpget()

点击(此处)折叠或打开

  1. <?php
  2. $syscontact = snmpget("localhost","public","sysContact.0");
  3. $sysname = snmpget("localhost","public","sysName.0");
  4. echo $syscontact;
  5. echo "\r\n";
  6. echo $sysname;
  7. echo "\r\n";
  8. ?>
输出结果:
     STRING: MAOS (configure /etc/snmp/snmp.local.conf)
     STRING: enochost


示例2:snmp3_get()

点击(此处)折叠或打开

  1. <?php
  2. $nameOfSecondInterface = snmp3_get('localhost', 'james', 'authPriv', 'SHA', 'secret007', 'AES', 'secret007', 'IF-MIB::ifName.2');
  3. var_dump($nameOfSecondInterface);
  4. ?>

示例3: snmp2_get()

点击(此处)折叠或打开

  1. <?php
  2.     function get_server_info($host,$snmpkey,$oid){
  3.             $c = snmp2_get($host,$snmpkey,$oid);
  4.     // echo $c;
  5.             $tmp = explode(":",$c);
  6.     // var_dump($tmp);
  7.             if(count($tmp)>1){$c = trim($tmp[1]);}
  8.             return $c;
  9.     }
  10.     $host="localhost";
  11.     $snmpkey="public";
  12.     $load1 = get_server_info($host,$snmpkey,".1.3.6.1.4.1.2021.10.1.3.1");
  13.     echo $load1;
  14.     $sysDescr = get_server_info($host,$snmpkey,".1.3.6.1.2.1.1.1.0");
  15.     echo $sysDescr;
  16.     ?>
说明:
1. 定义一个function get_server_info(),通过snmp2_get()取出相应的字串存入$c中,通过":"分割$c存入数组$tmp,如果$tmp数组有多个值,截取$tmp数组的第二个值(下标为1)存回$c,并返回$c的值;
2. 可以去除注释来查看理解函数的执行过程;


示例4:一个适应snmp各个版本的封装类(wrapper class),

点击(此处)折叠或打开

  1. <?php
  2. class SNMP_Wrapper {
  3.     protected $_host;
  4.     protected $_community;
  5.     protected $_version;

  6.     public function __construct($host='localhost',$community='public',$version=1)
  7.     {
  8.         $this->_host = $host;
  9.         $this->_community = $community;
  10.         switch ($version) {
  11.             case 2:
  12.                 $this->_version = '2';
  13.                 break;
  14.             case 3:
  15.                 $this->_version = '3';
  16.             default:
  17.                 $this->_version = '';
  18.                 break;
  19.         }
  20.     }

  21.     public function __call($func,$args)
  22.     {
  23.         $func = strtolower(preg_replace('/([A-Z])/', '_$1', $func));
  24.         $function = 'snmp' . $this->_version . (empty($this->_version) ? '' : '_') . $func;
  25.         if (function_exists($function)) {
  26.             return call_user_func_array($function, array_merge(array($this->_host,$this->_community),$args));
  27.         }
  28.     }
  29. }

  30. // Testing it
  31. $snmp = new SNMP_Wrapper('localhost','public','2');
  32. print_r($snmp->realWalk('IF-MIB::ifName'));
  33. ?>



阅读(3334) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~