إذا كنت بحاجة إلى التعامل مع SNMP، وخاصة مع SNMP في PHP، فأنت تعرف مدى أهمية دقة الاسم في تعيينات OID. توفر هذه المكتبة ذلك، بالإضافة إلى تعريض مكتبة SNMP - Net-SNMP
- إلى PHP!
إذا كنت تكره SNMP، أتمنى أن تقنعك هذه المكتبة بالتوقف؛)
SNMP هو بروتوكول شبكة يسمح بتبادل المعلومات بين المضيفين، فكر في الأمر مثل REST من التسعينيات. على الرغم من أن البروتوكول قديم بالتأكيد، إلا أنه لا يزال مستخدمًا في كل مكان... وبالتالي فهو متاح على جميع الأجهزة التي تدعم الشبكة تقريبًا.
في الوقت الحاضر، يتم استخدام SNMP في الغالب لسحب المقاييس (على سبيل المثال، قائمة الأجهزة المتصلة بنقطة وصول WiFi، أو مساحة القرص الحرة على الخادم)... ولكن لم يقل أحد أنه لا يمكن استخدامه للتحكم في وعاء القهوة الخاص بك!
MIB، أو قاعدة المعلومات الإدارية ، عبارة عن مجموعة من الملفات النصية التي تحتوي على وصف للبيانات الموجودة على نظام بعيد. بدون هذه الملفات، تكون معظم المعلومات مجرد مجموعة لا معنى لها من الأرقام والسلاسل. والأسوأ من ذلك، أنه بدون MIBs لا يمكنك طلب sysUpTime.0
ولكن 1.3.6.1.2.1.1.3.0
... يعجبك!
تسمح MIBs المثبتة على نظام يتصل بمضيف 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
.
Net-SNMP
في PHP؟! نعم! منذ PHP 7.4، أصبح ذلك ممكنًا بفضل FFI. الأمر ليس سهلاً، نظرًا لوجود الكثير من سحر لغة C القديمة في العديد من الأماكن، ولكنه ممكن.
تخفي هذه المكتبة التعقيد وراء واجهة لطيفة موجهة للكائنات.
(المثال أعلاه مدرج في دليل
examples
)
libnetsnmp
/usr/lib/libnetsnmp.25.dylib
)، بالإضافة إلى جميع الأدوات مثل snmptranslate
snmp
) المكتبة نفسها مرخصة من معهد ماساتشوستس للتكنولوجيا. ومع ذلك، يستخدم الكود ويتضمن أجزاء من Net-SNMP. تحتوي شجرة مصدر التعليمات البرمجية على أجزاء من ملفات رأس Net-SNMP، بالإضافة إلى الهياكل (مثل الثوابت) المترجمة من لغة C إلى لغة PHP.
للحصول على تفاصيل حول ترخيص NET-SNMP، راجع LICENSE-NETSNMP.
أنا لست محاميًا، ولكن هذه الأشياء مجانية ومفتوحة المصدر ويمكنك استخدامها - ما عليك سوى اللعب بشكل عادل وتضمين التراخيص ;)