หากคุณเคยจำเป็นต้องจัดการกับ SNMP และโดยเฉพาะอย่างยิ่งกับ SNMP ใน PHP คุณจะรู้ว่าชื่อที่ถูกต้องในการแมป OID นั้นสำคัญเพียงใด ไลบรารีนี้นำเสนอสิ่งนั้นและวิธีที่มากขึ้นในการเปิดเผย ไลบรารี SNMP - Net-SNMP
- เป็น PHP!
หากคุณเกลียด SNMP ฉันหวังว่าห้องสมุดนี้สามารถโน้มน้าวให้คุณหยุดได้ ;)
SNMP เป็นโปรโตคอลเครือข่ายที่ช่วยให้สามารถแลกเปลี่ยนข้อมูลระหว่างโฮสต์ ลองคิดดูว่ามันเหมือนกับ REST จากปี 1990 แม้ว่าโปรโตคอลจะเก่าไปบ้าง แต่ก็ยังใช้ได้ทุกที่... และสามารถใช้งานได้กับฮาร์ดแวร์ที่เปิดใช้งานเครือข่ายเกือบทั้งหมด
ในปัจจุบัน SNMP ส่วนใหญ่จะใช้เพื่อดึงการวัด (เช่น รายการอุปกรณ์ที่เชื่อมต่อกับจุดเชื่อมต่อ WiFi หรือพื้นที่ว่างในดิสก์บนเซิร์ฟเวอร์)... แต่ไม่มีใครบอกว่าไม่สามารถใช้ควบคุมหม้อกาแฟของคุณได้!
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
Net-SNMP
ใน PHP ไม่ได้ใช่ไหม! ใช่! ตั้งแต่ 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
ฉันไม่ใช่ทนายความ แต่เนื้อหานี้เป็นบริการฟรีและเป็นโอเพ่นซอร์สและคุณสามารถใช้มันได้ เพียงแค่แสดงอย่างยุติธรรมและรวมใบอนุญาตด้วย ;)