修改该目录下的php\php.ini文件,打开php_snmp模块支持:
安装net-snmp
要把 里面有一个 mibs 文件复制到 php安装盘:usr/mibs 这里
如果测试snmp服务是否在本机已经正常运行
在win7进行测试过程中,先在增加删除程序中增加 snmp服务,在看是否开启,里面的安全是否加入了 public 等关键字
http://blog.jiankongbao.com/?p=185
如果在cli下面执行 snmp函数操作 会报很多错误,基本是常量路径没有设置,在我的电脑高级里面设置路径指向 php安装盘:usr/mibs 中重启就好了
在net-snmp中的bin中 执行 ,把 mibs复制到这里面
snmpwalk.exe -t 100 -M mibs -v 2c -c public 192.168.0.88:161
如果有信息出来就说明正确了.
php snmp 常见函数说明
http://www.php.net/manual/zh/function.snmpgetnext.php
这是调出的样式 SNMPv2-MIB::sysDescr.0 = STRING: ZTE Ethernet Switch ZXR10 2818S, Version: V1.1.12.B
snmprealwalk
snmpwalkoid() 和 snmpwalk() 这三个命令都是获取所有的 oid对象信息 ,但后两个要退出历史的舞台了,建议使用第一个
命令 : snmprealwalk("192.168.0.88", "public", "SNMPv2-MIB::sysDescr");
结果:
Array
( [SNMPv2-MIB::sysDescr.0] => STRING: ZTE Ethernet Switch ZXR10 2818S, Version: V1.1.12.B
)
得到的结果是这个 可以看前面的键值 是一个oid名称
如果后面不加参数是获取所有 如果加的话是单个
命令:$nameOfSecondInterface = snmpgetnetxt('localhost', 'public', 'IF-MIB::ifName.1';
安理说这个函数比较好用,但测试没成功,可能是我的PHP版本有点底,意思是直接得到一个text值,不是上面的数组.
命令:$a = snmpget("192.168.0.88", "public", "SNMPv2-MIB::sysDescr.0");
结果:STRING: ZTE Ethernet Switch ZXR10 2818S, Version: V1.1.12.B
可以看出 snmpget只返回一个字符串,就是值,
命令:$a = snmp2_walk("192.168.0.88", "public", "SNMPv2-MIB::sysDescr");
结果:
Array
(
[0] => STRING: ZTE Ethernet Switch ZXR10 2818S, Version: V1.1.12.B
)
可以看出 snmp2_walk 把oid值变为了数据 0
所有的函数中都有 这几个参数 snmpget(地址,关键字,OID,超时时间,重试次数) 非常方便吧这里 超时时间是非常大的数,1000000 = 一秒
$time_start = microtime(true);
$reponse = snmpget("192.168.0.88", "public", "SNMPv2-MIB::sysDescr.0",1000000,5);
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Delay in $time secondes\n";
snmp2_real_walk 这个函数感觉和 snmprealwalk 一样,结果是数组,操作不能带.0
$a = snmp2_getnext("192.168.0.88", "public", "SNMPv2-MIB::sysDescr"); 这个和 snmpget 一样
snmp2_get 和上面的也差不多
snmp_set_valueretrieval 设置反回值的类型
snmp_set_valueretrieval(SNMP_VALUE_LIBRARY);
$ret = snmpget('localhost', 'public', 'IF-MIB::ifName.1');
// $ret = "STRING: lo"
snmp_set_valueretrieval(SNMP_VALUE_PLAIN);
$ret = snmpget('localhost', 'public', 'IF-MIB::ifName.1');
// $ret = "lo";
snmp_set_valueretrieval(SNMP_VALUE_OBJECT);
$ret = snmpget('localhost', 'public', 'IF-MIB::ifName.1');
// stdClass Object
// (
// [type] => 4 <-- SNMP_OCTET_STR, see constants
// [value] => lo
// )
// PHP 5.4+ examples
snmp_set_valueretrieval(SNMP_VALUE_OBJECT | SNMP_VALUE_PLAIN);
$ret = snmpget('localhost', 'public', 'IF-MIB::ifName.1');
// stdClass Object
// (
// [type] => 4 <-- SNMP_OCTET_STR, see constants
// [value] => lo
// )
snmp_set_valueretrieval(SNMP_VALUE_OBJECT | SNMP_VALUE_LIBRARY);
$ret = snmpget('localhost', 'public', 'IF-MIB::ifName.1');
// stdClass Object
// (
// [type] => 4 <-- SNMP_OCTET_STR, see constants
// [value] => STRING: lo
// )
?>
snmp_set_quick_print() 这个函数windows下不可用,费我很多时间,
snmp_set_oid_output_format 这个函数是设置oid名称的显示样式,是数字还是字母,还是全名
snmp_read_mib("/usr/share/mibs/netsnmp/NET-SNMP-TC");
// default or SNMP_OID_OUTPUT_MODULE in PHP >= 5.3.6
print_r( snmprealwalk('localhost', 'public', 'RFC1213-MIB::sysObjectID') );
snmp_set_oid_output_format(SNMP_OID_OUTPUT_NUMERIC);
print_r( snmprealwalk('localhost', 'public', 'RFC1213-MIB::sysObjectID') );
snmp_set_oid_output_format(SNMP_OID_OUTPUT_FULL);
print_r( snmprealwalk('localhost', 'public', 'RFC1213-MIB::sysObjectID') );
?>
The above would output:
Array ( [RFC1213-MIB::sysObjectID.0] => OID: NET-SNMP-TC::linux ) Array ( [.1.3.6.1.2.1.1.2.0] => OID: .1.3.6.1.4.1.8072.3.2.10 ) Array ( [.iso.org.dod.internet.mgmt.mib-2.system.sysObjectID.0] => OID: .iso.org.dod.internet.private.enterprises.netSnmp.netSnmpEnumerations.netSnmpAgentOIDs.linux )
新增加 mibs
要在 .index 文件中增加相关内容
CISCO-TC CISCO-TC.txt
cisco的 在 http://tools.cisco.com/Support/SNMP/do/BrowseMIB.do?local=en&step=2 这下载
snmptranslate -On -IR IB-TRAP-MIB::ibTrapOneModule
然后手动执行
D:\usr\bin>snmpwalk.exe -M D:\usr\mibs -v 2c -c fawvwnmro 10.228.8.15:161 IB-SMI
-MIB::infoblox > d:\234.txt
所有CDP信息,包括地址,名,接口
D:\usr\bin\mibs>snmpwalk.exe -M D:\usr\mibs -v 2c -c fawvwnmro 10.255.240.1:161
CISCO-CDP-MIB::ciscoCdpMIB
所有VLAN信息,但没有INT VLAN
D:\usr\bin\mibs>snmpwalk.exe -M D:\usr\mibs -v 2c -c fawvwnmro 10.255.240.1:161 CISCO-VLAN-MEMBERSHIP-MIB::ciscoVlanMembershipMIB >d:\vlan.txt
只收集所有INT VLAN
D:\usr\bin\mibs>snmpwalk.exe -M D:\usr\mibs -v 2c -c fawvwnmro 10.255.240.1:161 CISCO-VLAN-IFTABLE-RELATIONSHIP-MIB::ciscoVlanIfTableRelationshipMIB
所有进程
D:\usr\bin\mibs>snmpwalk.exe -M D:\usr\mibs -v 2c -c fawvwnmro 10.255.240.1:161 CISCO-PROCESS-MIB::ciscoProcessMIB >d:\processes.txt
环境查询
D:\usr\bin\mibs>snmpwalk.exe -M D:\usr\mibs -v 2c -c fawvwnmro 10.255.240.1:161 CISCO-ENVMON-MIB::ciscoEnvMonMIB
判断是二层还是三层端口
D:\usr\bin\mibs>snmpwalk.exe -M D:\usr\mibs -v 2c -c fawvwnmro 10.255.240.30:161 CISCO-L2L3-INTERFACE-CONFIG-MIB::ciscoL2L3IfConfigMIB