2012-06-05 29 views
0

我目前通过使用php成功读取了SNMP上的多个属性。现在我正在考虑使snmpgetsnmpwalk的结果输出对我们API的使用者实际有用。使用PHP解析SNMP响应

问题是,反应是这样的:INTEGER: up(1)INTEGER: 10103 ...

是否有关于如何解析这个响应格式的任何约定/标准或者是具体的,我们正在试图读取每个设备的响应的供应商?

是否有任何机会已经有一个PHP库,函数或扩展,可以在PHP本地变量或至少有用的东西,我们可以使用这些响应?


UPDATE:

我发现了一些新的东西即确实存在PHP可以解析二进制ASN.1串几个库基本上是BER编码字符串,如果我是对的。问题是,我似乎无法找到一种方式来获得与PHP的设备进行二进制数据...

回答

1

我不知道你的PHP特别的方法,但你的两个例子INTEGER之间的差异可能以确定您的系统是否具有与OID相对应的SNMP MIB(例如,确定1表示“up”)。

如果你只想要整数,你应该能够传递一个参数给你的get或walk命令。例如,net-snmp的snmpget或snmpwalk命令将使用-Oe删除符号标签。从manpage

   $ snmpget -c public -v 1 localhost ipForwarding.0 
       IP-MIB::ipForwarding.0 = INTEGER: forwarding(1) 
       $ snmpget -c public -v 1 -Oe localhost ipForwarding.0 
       IP-MIB::ipForwarding.0 = INTEGER: 1 

如果您正在分析的net-snmp输出,我建议你阅读snmpcmd man page,因为它有很多感兴趣的,将您特别是其他类型的显示器,比如timeticks和字符串输出选项。

如果你确实想在PHP中检索SNMP,你可以看看Cacti does it。 ;)

希望

snmp_set_quick_print(TRUE); 

它将只返回您正在搜索,没有领先的“整数”左右的值:

1

你可以简单地在你的脚本开始使用此功能这有助于!