用PHP来测试SNMP

1.原来PHP也是支持SNMP的,看来条条道路通罗马,语言只是一个工具而已。。。

2.首先打开php.ini中extension=php_snmp.dll,然后从PHP手册上复制一段代码:
<?php
$quickprint = snmp_get_quick_print();
?>
在CMD下运行结果如下:
D:/wamp/www/test/snmp>php test.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 (SNMPv2-MIB): At line 0 in (none)
Cannot find module (SNMPv2-SMI): 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 (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)

3.系统没有安装SNMP,赶紧找Win2003安装盘。。。(费劲。。。折腾。。。)
  添加Windows组件,选择管理与监控工具,安装过程发现snmp.exe,snmptrap.exe进入系统服务

4.再次运行前面代码,结果依旧,岂有此理。。。
  看看php_snmp.dll,函数只有一个get_module,估计是用来加载那些模块的,再搜索一下字符串,
  发现IP-MIB;IF-MIB;TCP-MIB;UDP-MIB;SNMPv2-MIB;RFC1213-MIB;UCD-SNMP-MIB;UCD-DEMO-MIB;......

5.研究一下PHP手册中关于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试试!

6.进入http://www.net-snmp.org/,果然有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.

7.再次运行前面代码,结果什么也不显示了,看来模块是找到了,那么SNMP正常?
  snmp_get_quick_print()是取什么UCD库(NET-SNMP?)的quick_print设置的当前值,返回true或false,
  检查前面代码中$quickprint,发现是false,改用下面的代码就是true,这个函数先不管它.
<?php
snmp_set_quick_print(1);
$quickprint = snmp_get_quick_print();
if($quickprint)echo 'true';else echo 'false';
?> 
8.函数snmpwalk:Fetch all the SNMP objects from an agent,从SNMP代理获取所有对象,这样应该可以检测
  SNMP是否正常工作,因为本机安装了SNMP服务,那么本机也是一个SNMP代理,从它那里应可获得其作为网络节点的信息
<?php
$a = snmpwalk("127.0.0.1", "public", "");
foreach ($a as $val) {
    echo "$val/n";
}
?>

9.不幸的是Warning: snmpwalk(): No response from 127.0.0.1...
  难道SNMP服务没起作用?硬着头皮又开始费劲。。。折腾。。。
  (1) 两个服务都已启动,netstat -na看看端口都还正常,有人说要LISTENING,于是GOOGLE一阵乱挖表明并非如此
      UDP    0.0.0.0:161            *:*
      UDP    0.0.0.0:162            *:*
  (2) 是否防火墙和防毒墙阻止,按理不会,全部停掉重启重启试试,当然不是,白折腾了
  (3) 发现安装的NET-SNMP也带有Agent和Trap两个服务D:/usr/bin/snmpd.exe和snmptrapd.exe,试试还是一个鸟样

10.没招,准备放弃时突然想起网上多次提到SNMP服务可以设置参数,于是认真起来,发现SNMP服务的属性果然与众不同,
   其中安全页上有接受团体名称,团体就是Community啊,赶紧添加一个public,再次运行snmpwalk代码,结果显示大把信息:
Hardware: x86 Family 6 Model 9 Stepping 5 AT/AT COMPATIBLE -
Software: Windows Version 5.2 (Build 3790 Uniprocessor Free)
OID: enterprises.311.1.1.3.1.2
Timeticks: (397439) 1:06:14.39
MOVEPC
......
MOVEPC正是本机名称,原来这么简单,倒。。。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值