全部博文(2065)
分类: 系统运维
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 >=
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"); |
snmpgetnext -- Fetch a SNMP object
string snmpgetnext ( string host, string
community, string object_id [, int timeout [, int retries]] )
7. snmprealwalk
(PHP 3 >=
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++) { |
二、在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也应该保留,现在看来有误,既然在Unix中PHP的SNMP是基于NET-SNMP,那么在Windows上可能也是基于NET-SNMP,而以前的WinNT带有NET-SNMP,现在估计都不带了,因此在Win2003上安装NET-SNMP试试!
进入,果然有windows版本,下载net-snmp-
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
Cannot find module (IF-MIB): At line
Cannot find module (TCP-MIB): At line
Cannot find module (UDP-MIB): At line
Cannot find module (HOST-RESOURCES-MIB): At line
Cannot find module (SNMPv2-MIB): At line
Cannot find module (SNMPv2-SMI): At line
Cannot find module (NOTIFICATION-LOG-MIB): At line
Cannot find module (UCD-SNMP-MIB): At line
Cannot find module (UCD-DEMO-MIB): At line
Cannot find module (SNMP-TARGET-MIB): At line
Cannot find module (NET-SNMP-AGENT-MIB): At line
Cannot find module (DISMAN-EVENT-MIB): At line
Cannot find module (SNMP-VIEW-BASED-ACM-MIB): At line
Cannot find module (SNMP-COMMUNITY-MIB): At line
Cannot find module (UCD-DLMOD-MIB): At line
Cannot find module (SNMP-FRAMEWORK-MIB): At line
Cannot find module (SNMP-MPD-MIB): At line
Cannot find module (SNMP-USER-BASED-SM-MIB): At line
Cannot find module (SNMP-NOTIFICATION-MIB): At line
Cannot find module (SNMPv2-TM): At line
解决方案:
原因:
找不到相关模块.
解决:
可到
下载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
.
DISMAN-EVENT-MIB::sysUpTimeInstance
说明:将OID值转换成文本的形式是行得通的哦!