noflash / snmp-mib-parser
基于真实Net-SNMP库的真正的SNMP MIB解析器
Requires
- php-64bit: ^7.4.0
- noflash/math-set: dev-master
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语言魔法,但还是可能的。
这个库隐藏了后面复杂的面向对象接口。
(上面的例子包含在
examples
目录中)
要求
- PHP 7.4(64位,因为SNMP包含这些类型)
- libnetsnmp的发布版本
- macOS自带它(
/usr/lib/libnetsnmp.25.dylib
),以及所有工具,如snmptranslate
- Linux 需要安装一个软件包(例如 Debian/Ubuntu:
snmp
) - Windows 需要安装,Net-SNMP 存储库 包含预编译的二进制文件
- macOS自带它(
许可证
该库本身遵循 MIT 许可证。然而,该代码使用并包含了 Net-SNMP 的部分。代码源树包含了 Net-SNMP 的头文件部分,以及从 C 转换为 PHP 的结构(例如常量)。
有关 NET-SNMP 许可证的详细信息,请参阅 LICENSE-NETSNMP。
我不是律师,但这些内容是免费和开源的,你可以使用它们——只要公平使用并包含许可证即可 ;)