【问题标题】:Parsing SNMP responses with PHP使用 PHP 解析 SNMP 响应
【发布时间】:2012-06-09 16:07:45
【问题描述】:

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

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

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

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


更新:

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

【问题讨论】:

    标签: php encoding snmp asn.1


    【解决方案1】:

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

    如果您只想要整数,您应该能够将参数传递给您的 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,因为它有很多您会感兴趣的输出选项,尤其是其他类型的显示,例如时间标记和字符串。

    如果您确实想在 PHP 中检索 SNMP,您可以查看 Cacti does it 的方法。

    【讨论】:

      【解决方案2】:

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

      snmp_set_quick_print(TRUE);
      

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

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2014-03-26
        • 2013-10-06
        • 1970-01-01
        • 2016-12-14
        • 2012-09-10
        • 1970-01-01
        • 1970-01-01
        • 2012-10-23
        • 1970-01-01
        相关资源
        最近更新 更多