Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29334698
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: 系统运维

2010-08-27 17:53:55

php实现snmp函数

1.      需求

为了在 Unix 中使用 SNMP 函数库,您需要安装 包。

2.安装

重点:为了使用 UCD SNMP 包,您需要在编译之前将 NO_ZEROLENGTH_COMMUNITY 定义为 1。 在 configuring UCD SNMP 之后,编辑 config.h,查找 NO_ZEROLENGTH_COMMUNITY,将 #define 所在行的注释去掉。修改后应该类似这样:

#define NO_ZEROLENGTH_COMMUNITY 1

然后使用 --with-snmp[=DIR] 选项编译 PHP

3. 常用的函数列表

 --  返回 UCD 库中 quick_print 设置的当前值

 --  Return the method how the SNMP values will be returned

 --  Reads and parses a MIB file into the active MIB tree

 --  Return all values that are enums with their enum value instead of the raw integer

 --  Return all objects including their respective object id within the specified one

 --  设置 UCD SNMP 库中 quick_print 的值

 --  Specify the method how the SNMP values will be returned

 -- 获取一个 SNMP 对象

 --  Fetch a SNMP object

 --  返回指定的所有对象,包括它们各自的对象 ID

 -- 设置一个 SNMP 对象

 -- 从代理返回所有的 SNMP 对象

 -- 查询关于网络实体的信息树

 

详细介绍下相关函数的用法

4. snmp_set_quick_print

(PHP 3 >= 3.0.8, PHP 4, PHP 5)

snmp_set_quick_print --  设置 UCD SNMP 库中 quick_print 的值

 

5. snmpget -- 获取一个 SNMP 对象

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

成功则返回 SNMP 的对象值,失败则返回 FALSE

函数 snmpget() 用于读取由 object_id 指定的 SNMP 对象值。hostname 指定 SNMP 代理,而 community 参数指定具有读权限的域的名字。

$syscontact = snmpget("127.0.0.1", "public", "system.SysContact.0");
?>

 

6. snmpgetnext

snmpgetnext --  Fetch a SNMP object

string snmpgetnext ( string host, string community, string object_id [, int timeout [, int retries]] )

7. snmprealwalk

(PHP 3 >= 3.0.8, PHP 4, PHP 5)

snmprealwalk --  返回指定的所有对象,包括它们各自的对象 ID

描述

array snmprealwalk ( string host, string community, string object_id [, int timeout [, int retries]] )

8. snmpwalk

snmpwalk -- 从代理返回所有的 SNMP 对象

描述

array snmpwalk ( string hostname, string community, string object_id [, int timeout [, int retries]] )

返回由 object_id 作为根的SNMP 对象值所组成的数组,错误则返回 FALSE

snmpwalk() 函数是用来读取所有由 hostname 指定的 SNMP 代理的值。Community 指定该代理中具有读权限的域。一个为 NULL object_id 将被看作 SNMP 对象树的根,而在此树下的所有对象将作为一个数组被返回。如果指定了 object_id,则返回所有在 object_id 下的 SNMP 对象。

$a = snmpwalk("127.0.0.1", "public", "");
?>

上边的函数调用将从运行于本机的 SNMP 代理那里返回所有的 SNMP 对象。可使用循环遍历这些值。

for ($i=0; $i < count($a); $i++) {
   echo $a[$i];
}
?>

 

 

 

 

 

二、在window平台安装snmp

2.1 去下载一个NET-SNMP

In order to use the SNMP functions on Unix you need to install the ? NET-SNMP package.
On Windows these functions are only available on NT and not on Win95/98.
 
原来认为WinNT有的Win2003也应该保留,现在看来有误,既然在UnixPHPSNMP是基于NET-SNMP,那么在Windows上可能也是基于NET-SNMP,而以前的WinNT带有NET-SNMP,现在估计都不带了,因此在Win2003上安装NET-SNMP试试!

进入,果然有windows版本,下载net-snmp-5.4.2.1-1.win32.exe安装到D:\USR,然后将D:\USR\share\snmp\mibs复制到D:\USR,这是按照手册中要求的:
  The Windows distribution contains support files for SNMP in the mibs directory.
  This directory should be moved to DRIVE:\usr\mibs, where DRIVE must be replaced with the
  driveletter where PHP is installed on, e.g.c:\usr\mibs.

 

安装SNMP的方法

为了让一个类似MRTG这样的工具正常工作,并从你的Windows Server 2003系统中收集静态信息,你需要在每一台服务器上启用SNMP 使用添加/删除程序来完成这个任务。

  进入“Start(开始)| Control Panel(控制面板)| Add Or Remove Programs(添加/删除程序)

  选择“Add/Remove Windows Components(添加/删除Windows的组件)

  在Windows组件窗口中,卷动窗口,选中“Management And Monitoring Tools(管理和监控工具) 不要在选择框中打上复选标记;仅仅选择该入口即可。

  点击“Details(详细)

  卷动窗口,然后选中在“Simple Network Management Protocol(简单网络管理协议)旁边的复选框。

  点击“OK(确定),返回Windows组件窗口。

  点击“Next(下一步),如果出现了相关提示,则插入Windows的安装光盘。 通过添加/删除程序来启用SNMP   完成了上述步骤之后,打开服务控制面板,并找到SNMP服务,然后使用正确的通讯字符串来配置SNMP 双击该服务,就可以打开服务的属性页面。

重新启动 SNMP 服务(命令行)

打开一个命令行提示符并执行以下命令行:

net stop snmp

这将停止 SNMP 服务。

执行下列命令:

net start snmp

这将启动 SNMP 服务。

说明:通过这个命令就可以运行与关闭SNMP服务了!

 

 

相关QA说明:

1.   直接在CMD窗口运行php的时候报

Cannot find module (IP-MIB): At line 0 in (none)
Cannot find module (IF-MIB): At line 0 in (none)
Cannot find module (TCP-MIB): At line 0 in (none)
Cannot find module (UDP-MIB): At line 0 in (none)
Cannot find module (HOST-RESOURCES-MIB): At line 0 in (none)
Cannot find module (SNMPv2-MIB): At line 0 in (none)
Cannot find module (SNMPv2-SMI): At line 0 in (none)
Cannot find module (NOTIFICATION-LOG-MIB): At line 0 in (none)
Cannot find module (UCD-SNMP-MIB): At line 0 in (none)
Cannot find module (UCD-DEMO-MIB): At line 0 in (none)
Cannot find module (SNMP-TARGET-MIB): At line 0 in (none)
Cannot find module (NET-SNMP-AGENT-MIB): At line 0 in (none)
Cannot find module (DISMAN-EVENT-MIB): At line 0 in (none)
Cannot find module (SNMP-VIEW-BASED-ACM-MIB): At line 0 in (none)
Cannot find module (SNMP-COMMUNITY-MIB): At line 0 in (none)
Cannot find module (UCD-DLMOD-MIB): At line 0 in (none)
Cannot find module (SNMP-FRAMEWORK-MIB): At line 0 in (none)
Cannot find module (SNMP-MPD-MIB): At line 0 in (none)
Cannot find module (SNMP-USER-BASED-SM-MIB): At line 0 in (none)
Cannot find module (SNMP-NOTIFICATION-MIB): At line 0 in (none)
Cannot find module (SNMPv2-TM): At line 0 in (none)

 

解决方案:

原因:
找不到相关模块.

解决:
可到
下载WIN32安装包.用安装的方式.

也可以在这直接下载MIBS相关文件:

添加系统环境变量,
名称:MIBDIRS
:E:\File\bin\share\mibs

值填写你真实 mibs路径.                 (我是用第二种方法解决)

现在我发现直接输入php不再报错了说明模块已经成功安装才对的。后面我在一个PHP页面里面写上这样的代码:$a = snmpwalk("127.0.0.1", "public", "");  还是不认识这个函数。那就奇怪了~

Q2. IIS+PHP配置环境下运行的时候还是不行。要怎么办呢

我尝试在IIS服务器进行访问它的时候发现还是不认识这个函数。后来我直接用PHP命令行运行就可以。

估计是跟IIS服务器配置有关系的

 

Q3. 使用snmpwalk命令试着去探测发现总是返回no response没响应

 

一个不太常用,但是非常有用的命令是snmptranslate,使用'snmptranslate' 命令可以获得一个文本项对应的OID.

说明:通过使用snmptranslate 命令就能够把文本项找出来其对应的OID值了!

还可以用snmptranslate命令把OID转化成文字描述

心得:这个命令能够把文本项转换成OID也可以把OID转换成文本项

 

示例:

E:\PHPCMS\projcode\showimage>snmptranslate .1.3.6.1.2.1.1.3.0

DISMAN-EVENT-MIB::sysUpTimeInstance

说明:将OID值转换成文本的形式是行得通的哦!

阅读(1520) | 评论(0) | 转发(0) |
0

上一篇:SNMP常用命令

下一篇:今日新闻2010-08-27

给主人留下些什么吧!~~