SNMP、特に PHP の SNMP を扱う必要があった場合は、名前と OID の正確なマッピングがいかに重要であるかをご存知でしょう。このライブラリはそれを提供し、さらに SNMPライブラリであるNet-SNMP
PHP に公開します。
SNMP が嫌いなら、このライブラリがあなたにやめるよう説得できることを願っています ;)
SNMP はホスト間の情報交換を可能にするネットワーク プロトコルで、1990 年代の REST のようなものだと考えてください。このプロトコルは確かに古いですが、今でもどこでも使用されているため、ほぼすべてのネットワーク対応ハードウェアで利用できます。
現在、SNMP は主にメトリクス (WiFi アクセス ポイントに接続されているデバイスのリスト、サーバー上の空きディスク領域など) を取得するために使用されています...しかし、コーヒー ポットの制御に SNMP を使用できないとは誰も言いません。
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
)ライブラリ自体は MIT ライセンスを取得しています。ただし、コードには Net-SNMP の一部が使用されており、その一部が含まれています。コード ソース ツリーには、Net-SNMP ヘッダー ファイルの一部と、C から PHP に変換された構造体 (定数など) が含まれています。
NET-SNMP ライセンスの詳細については、「LICENSE-NETSNMP」を参照してください。
私は弁護士ではありませんが、これは無料でオープンソースなので使用できます。公平を期してライセンスを含めてください ;)