基于php的snmp管理端开发

Posted isykw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于php的snmp管理端开发相关的知识,希望对你有一定的参考价值。

一.系统环境:

操作系统:CentOS 5.4                内核:Linux_2.6

编译环境:gcc 4.1.2                代码版本:php-5.2.8.tar.gz

二.安装php

1.首先要php支持snmp,按如下配置方法(红色部分是关于snmp的,其他参数视情况而定)

#./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --enable-trace-vars -with-MySQL=/var/lib/mysql --enable-soap --with-xmlrpc --enable-mbstring --enable-sockets --with-snmp

#make

#make install

三.函数介绍

安装完成后,php中即可调用如下函数

  3.1 snmpget 取得指定类识别码。

  语法:  snmpget(string hostname, string community, string object_id);

  返回值: oid对应类型(个人觉得都可以理解为字符串)

  函数种类: 网络系统

  内容说明: 本函数可用来取得指定的类识别代码 (OID, Object Identifier)。参数 hostname 为指定的机器。参数 community 为社群名称,有 public 或 private 等。参数 object_id 即为 OID 类,为 MIB 所定义的类。返回值为 OID 值,若失败则返回 false。

 

  使用范例,下面为部份范例

  <?php

    snmpget("127.0.0.1""public"" 1.3.6.1.2.1.1.4.0");

?> 

3.2snmpset  设置对应可写oid的值

语法:bool snmpset ( string hostname, string community, string object_id, string type, mixed value , int timeout , int retries )

返回值:逻辑值(0/1)

函数种类: 网络系统

内容说明: 本函数可用来设置指定的类识别代码 (OID, Object Identifier)。参数 hostname 为指定的机器。参数 community 为可写社群名称,有 public 或 private 等。Type为oid对应数据类型,,参数 object_id 即为 OID 类,为 MIB 所定义的类。设置成功返回值为 ture,若失败则返回 false。

使用范例:

<?php

    snmpset("127.0.0.1""223323"" 1.3.6.1.2.1.1.4.0",”string”,”[email protected]”,3,1);

?> 

 

  3.3 snmpwalk 取得所有类。

  语法: array snmpwalk(string hostname, string community, string object_id, int [timeout], int [retries]);

  返回值: 数组

  函数种类: 网络系统

  内容说明: 本函数可用来取得所有类识别代码 (OID, Object Identifier),取得类为从根类 (root) 开始的全部 MIB 类。参数 hostname 为指定的机器。参数 community 为社群名称,有 public 或 private 等。参数 object_id 即为 OID 类,为 MIB 所定义的类,只要输入空字符串即可。返回值为 OID 数组,若失败则返回 false。

  使用范例 下面为部份范例

  <?php

    $a = snmpwalk("127.0.0.1""public""1.3.6.1.2.1.1"); 

    for ($i=0; $i<count($a); $i++) {

      echo $a[$i]."<br>n";

    }

  ?>

  3.4 snmpwalkoid 取得网络本体树状信息。

  语法: array snmpwalkoid(string hostname, string community, string object_id, int [timeout], int [retries]);

  返回值: 数组

  函数种类: 网络系统

  内容说明: 本函数可用来取得所有类识别代码 (OID, Object Identifier),取得类为从根类 (root) 开始的全部 MIB 类及其值。参数 hostname 为指定的机器。参数 community 为社群名称,有 public 或 private 等。参数 object_id 即为 OID 类,为 MIB 所定义的类,只要输入空字符串即可。返回值为数组,若失败则返回 false。

 

  使用范例,下面为部份范例

  <?php

    $a = snmpwalkoid("127.0.0.1""public"""); 

    for (reset($a); $i = key($a); next($a)) {

      echo $i.": ".$a[$i]."<br>n";

    }

  ?> 

  3.5 snmp_get_quick_print 取得 snmp 函数库中的 quick_print 值。

  语法: boolean snmp_get_quick_print(void);

  返回值: 布尔值

  函数种类: 网络系统

  内容说明: 本函数可用来取得 UCD SNMP 函数库中的 quick_print 值,在 Windows NT 系统上本函数无法作用。本函数不需要输入参数,返回 0 表示 quick_print 关闭,1 表示打开。

 

  3.6 snmp_set_quick_print 配置 snmp函数库中的 quick_print 值。

  语法: void snmp_set_quick_print(boolean quick_print);

  返回值: 无

  函数种类: 网络系统

  内容说明: 本函数配置 UCD SNMP 函数库中的 quick_print 值,在 Windows NT 系统上本函数无法作用。参数 quick_print 值为 0 表示 quick_print 关闭,1 表示打开。本函数无返回值。

 

  使用范例 

  <?php

    snmp_set_quick_print(0);

    $a = snmpget("127.0.0.1""public"".1.3.6.1.2.1.2.2.1.9.1");

    echo $a."n";

    snmp_set_quick_print(1);

    $a = snmpget("127.0.0.1""public"".1.3.6.1.2.1.2.2.1.9.1");

    echo $a."n";

  ?>

  返回值为

  Timeticks: (0) 0:00:00.00

  0:00:00.00

 

三.调用snmp函数

1后台调用示例代码如下:(保存为snmp.php)//附件在下方,包含示例文件

<?php

switch ($_REQUEST[‘Submit‘])

{

       case "get":

              $ret = snmpget($_REQUEST[‘getip‘], $_REQUEST[‘getcom‘], $_REQUEST[‘getoid‘],5,1);

              echo $ret;break;

       case "walk":

              $ret=snmpwalk($_REQUEST[‘getip‘], $_REQUEST[‘getcom‘], $_REQUEST[‘getoid‘],5,1);

              for($i=0;$i<count($ret);$i++)

                     echo $ret[$i]."<br>";

              break;

       case "set":

              if(snmpset($_REQUEST[‘setip‘], $_REQUEST[‘setcom‘], $_REQUEST[‘setoid‘],$_REQUEST[‘type‘],$_REQUEST[‘setvalue‘],5,1))

                     echo "<br>Set <".$_REQUEST[‘setoid‘]."=".$_REQUEST[‘setvalue‘]."> ok!";

              else

              echo "<br>Set <".$_REQUEST[‘setoid‘]."> fail,maybe no this OID or it is just read-only!";

              break;

       default:

       echo "Without this operation:".$_REQUEST[‘Submit‘];

 

 

}

 

?>

以上是关于基于php的snmp管理端开发的主要内容,如果未能解决你的问题,请参考以下文章

关于SNMP的一个问题:向管理端发送SNMP Trap报警信息。

cacti——snmp和rrdtool

请问我电脑如何通过SNMP管理DELL服务器,SNMP协议已经安装,也设置代理,陷阱等,感觉好像还该安装个软件

SNMP协议开发概念理解-1

网络管理之SNMP协议

PHP语言基于Laravel+Layui的后台管理系统