使用 PHP 解析 SNMP 响应


Parsing SNMP responses with PHP

我目前正在使用 php 通过 SNMP 成功读取交换机上的几个属性。现在,我正在考虑使snmpgetsnmpwalk的结果输出实际上对我们API的消费者有用。

问题是响应看起来像这样:INTEGER: up(1)INTEGER: 10103...

关于如何解析此响应格式是否有任何约定/标准,或者响应供应商是否特定于我们尝试读取的每个设备?

是否已经有一个PHP库,函数或扩展可以将这些响应转换为php本机变量或至少可以使用的有用内容?


更新:

我发现了一些新东西,即 php 中确实有几个库可以解析二进制 ASN.1 字符串,如果我是对的,这些字符串基本上是 BER 编码的字符串。问题是我似乎找不到一种方法来使用 php 从设备中获取二进制数据......

您可以在脚本的开头简单地使用此函数:

snmp_set_quick_print(TRUE);

它将只返回您正在搜索的值,而不返回前导"INTEGER"左右;)

希望这有帮助!

我不确定您的特定 PHP 方法,但您的两个INTEGER示例之间的区别可能是您的系统是否具有与 OID 对应的 SNMP MIB(例如,确定 1 表示"向上")。

如果您只需要整数,您应该能够将参数传递给 get 或 walk 命令。 例如,net-snmp 的 snmpget 或 snmpwalk 命令需要-Oe才能删除符号标签。 从手册页:

              $ 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 手册页,因为它有很多输出选项,尤其是其他类型的显示,例如 timetick 和字符串。

如果你想在PHP中检索SNMP,你可以看看Cacti是如何做到的。