如果您曾經需要處理 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。
我不是律師,但這個東西是免費和開源的,你可以使用它 - 只要公平競爭並包含許可證即可;)