【问题标题】:How can I get variable names instead of numeric OIDs in the output of php's SNMP::walk()?如何在 php 的 SNMP::walk() 的输出中获取变量名而不是数字 OID?
【发布时间】:2014-09-17 19:58:02
【问题描述】:

我正在从事一个涉及 SNMP、MIBS 和 OIDS 的项目。

附录:我想将 OID 转换为名称,而不是数字格式。我只能远程访问服务器。

当我使用 LINUX 终端PHP 函数 时,我得到了 2 种不同的 OID 格式

这就是我的工作:

  1. 在 LINUX 终端输入:

    snmpwalk -v 1 -c public ip | less
    

输出与此类似(短版)

  1. 使用php

    <?php
    
    $session = new SNMP(SNMP::VERSION_1, ipaddress, "public");
    $session->oid_output_format = SNMP_OID_OUTPUT_FULL;
    $result = $session->walk("");
    print_r($result);
    
    ?>
    

输出如下

问题:如何在php中获得与linux终端格式相同的格式?

MAYBE: 有没有可以从 LINUX 终端运行的命令来改变 php 的 snmpwalk() 返回 OID 的格式?

【问题讨论】:

  • 请说明您的目标。它们提供相同的输出真的很重要,还是您正在寻找更具体的东西(例如,您是否希望将 OID 转换为名称,而不是数字格式)?
  • 另外,snmpwalk 可以配置为提供两种输出格式中的任何一种,请查看手册页中的 -O 标志。但这可能与您想要的相反。
  • Jolta: 好的,但是 php 的 snmpwalk() 函数没有指定返回 OID 的格式的参数。 snmpwalk(host, community, objectid)
  • 系统可以有 100 个 MIB,它们对客户端不可见。他们应该能够远程查看某种 MIB/OID 结构来选择所需的 OID。如果所有 OID 都是数字,他们将不知道哪个是哪个

标签: php snmp mib oid


【解决方案1】:

Php 必须知道它正在运行的 MIB,否则它无法将 OID 转换为变量名。名称和类型等在 MIB 文件中定义。

我现在无法访问要测试的 php 实例,但根据documentation,如果您有 MIB 文件,此示例应该可以工作:

snmp_read_mib('./FOO-BAR-MIB.txt');
print_r(snmprealwalk('localhost', 'public', 'FOO-BAR-MIB::someTable');

应该输出类似于

[FOO-BAR-MIB::someTable.0] => Gauge32: 6

如果您没有 MIB 文件,那么您就不走运了。尝试从设备供应商处获取它,或者只是在网络上搜索 OID。

编辑:澄清一下:如果没有定义该 OID 的 MIB 文件,就无法将数字 OID 转换为变量名称。如果本地计算机上没有 MIB 文件,则必须找到一种方法将它们放在那里。另见this question

【讨论】:

  • 您可以为本地主机执行此操作,并且知道 MIB 的名称。但是远程你无法读取 MIB,你必须发送 snmp walk
  • 这不是我想要的,但 +1 可以获得一些好的提示。我知道snmp_read_mib() 我的项目是远程执行此操作。
  • 我是说你不能远程操作。对此感到抱歉。您查询的网络设备可能在本地有 MIB 文件,但它们没有义务提供这些文件。因此,我建议联系供应商或网络搜索。那里有一些不错的 MIB 存储库。
猜你喜欢
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多