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正是本机名称,原来这么简单,倒。。。