如果您曾经需要处理 SNMP,尤其是 PHP 中的 SNMP,您就会知道准确的名称到 OID 映射是多么重要。该库提供了这一点,并且以更多方式将SNMP库 - Net-SNMP
- 暴露给 PHP!
如果您讨厌 SNMP,我希望这个库可以说服您停止;)
SNMP 是一种允许主机之间进行信息交换的网络协议,可以将其视为 20 世纪 90 年代的 REST。虽然该协议确实已经过时,但它仍然在任何地方使用......因此几乎可以在所有支持网络的硬件上使用。
如今,SNMP 主要用于获取指标(例如,连接到 WiFi 接入点的设备列表,或服务器上的可用磁盘空间)...但没有人说它不能用于控制您的咖啡壶!
MIB(或管理信息库)是文本文件的集合,其中包含远程系统上存在的数据的描述。如果没有这些文件,大多数信息只是一组毫无意义的数字和字符串。更糟糕的是,如果没有 MIB,您就无法请求sysUpTime.0
,而是请求1.3.6.1.2.1.1.3.0
... 哎呀!
安装在调用远程 SNMP 主机的系统上的 MIB 允许简单地查询和验证数据。它们还准确描述了可以从远程系统请求什么。
几乎每个 *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
之外几乎没有完全兼容的选项。
Net-SNMP
吗?!是的!从 PHP 7.4 开始,这要归功于 FFI。这并不容易,因为许多地方都存在大量古老的 C 魔法,但也是可能的。
这个库隐藏了一个漂亮的面向对象接口背后的复杂性。
(上面的例子包含在
examples
目录中)
libnetsnmp
的发行版本/usr/lib/libnetsnmp.25.dylib
),以及snmptranslate
等所有工具snmp
)该图书馆本身已获得麻省理工学院的许可。但是,该代码使用并包含 Net-SNMP 的部分内容。代码源树包含Net-SNMP 头文件的一部分,以及从C 转换为PHP 的结构(例如常量)。
有关 NET-SNMP 许可的详细信息,请参阅LICENSE-NETSNMP。
我不是律师,但这个东西是免费和开源的,你可以使用它 - 只要公平竞争并包含许可证即可;)