noflash/snmp-mib-parser

基于真实Net-SNMP库的真正的SNMP MIB解析器

dev-master 2020-06-29 02:17 UTC

This package is auto-updated.

Last update: 2024-08-29 05:43:16 UTC


README

如果您曾经需要处理SNMP,尤其是PHP中的SNMP,您就知道准确的名称到OID映射是多么重要。这个库提供了这个,以及更多,通过暴露Net-SNMP库来为PHP提供SNMP库!

如果您讨厌SNMP,我希望这个库能说服您停止 ;)

基础

什么是SNMP?

SNMP是一种网络协议,允许主机之间进行信息交换,想想看就像90年代的REST。虽然该协议确实过时了,但它仍然被广泛使用......因此几乎所有的网络硬件都支持。

如今,SNMP主要用于获取指标(例如连接到WiFi接入点的设备列表或服务器的空闲磁盘空间)......但没有人说不能用来控制您的咖啡机

那么,MIB是什么?

MIB,或管理信息库,是一组包含远程系统上数据描述的文本文件集合。没有这些文件,大部分信息只是一组没有意义的数字和字符串。更糟糕的是,没有MIB,您无法请求sysUpTime.0而是1.3.6.1.2.1.1.3.0......天啊!

安装在系统上的MIB允许对远程SNMP主机进行简单的查询和验证数据。它们还描述了可以从远程系统请求什么。

这个库带来了什么?

几乎所有的*nix系统都附带Net-SNMP库及其工具。例如,要查看描述Synology NAS上安装的磁盘结构的结构,您可以使用单个命令打印一个漂亮的树。

% snmptranslate -Tp 'SYNOLOGY-DISK-MIB::diskTable'
+--diskTable(1)
   |
   +--diskEntry(1)
      |  Index: diskIndex, diskStatus
      |
      +-- ---- Integer32 diskIndex(1)
      |        Range: 0..2147483647
      +-- -R-- String    diskID(2)
      +-- -R-- String    diskModel(3)
      +-- -R-- String    diskType(4)
      +-- -R-- Integer32 diskStatus(5)
      |        Range: 1..5
      +-- -R-- Integer32 diskTemperature(6)

然而,没有程序可以访问树中显示的所有信息(解析它也是一个脆弱的噩梦)。

Net-SNMP提供了所需的一切,它是用于SNMP交互和MIB解析的库。不幸的是,它是用C编写的,没有PHP绑定。由于MIB标准已经活跃发展了近35年,几乎没有完全兼容的选项,除了Net-SNMP

但是,我们能否在PHP中使用Net-SNMP呢?

是的!从PHP 7.4开始,由于FFI,这是可能的。这并不容易,由于许多地方都存在大量的古老C语言魔法,但还是可能的。
这个库隐藏了后面复杂的面向对象接口。

tree-example (上面的例子包含在examples目录中)

要求

  • PHP 7.4(64位,因为SNMP包含这些类型)
  • libnetsnmp的发布版本
    • macOS自带它(/usr/lib/libnetsnmp.25.dylib),以及所有工具,如snmptranslate
    • Linux 需要安装一个软件包(例如 Debian/Ubuntu: snmp
    • Windows 需要安装,Net-SNMP 存储库 包含预编译的二进制文件

许可证

该库本身遵循 MIT 许可证。然而,该代码使用并包含了 Net-SNMP 的部分。代码源树包含了 Net-SNMP 的头文件部分,以及从 C 转换为 PHP 的结构(例如常量)。
有关 NET-SNMP 许可证的详细信息,请参阅 LICENSE-NETSNMP

我不是律师,但这些内容是免费和开源的,你可以使用它们——只要公平使用并包含许可证即可 ;)