0

我目前正在使用 php 成功读取我们的 SNMP 交换机上的几个属性。现在,我正在考虑为我们的 API 的消费者制作最终的输出snmpgetsnmpwalk真正有用。

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

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

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


更新:

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

4

2 回答 2

1

我不确定您的特定 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 手册页,因为它有很多您会感兴趣的输出选项,尤其是其他类型的显示,例如时间刻度和字符串。

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

于 2012-06-08T07:55:30.243 回答
1

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

snmp_set_quick_print(TRUE);

它只会返回您正在搜索的值,没有前导“INTEGER”左右;)

希望这可以帮助 !

于 2015-02-04T16:41:48.880 回答