แบบฟอร์มข้อความ Snmp เรากำลังพยายามทำให้การตรวจสอบ SNMP เป็นเรื่องง่าย แพ็คเกจ SNMP จาก Castle Rock Computing

ตัวย่อ SNMP สามารถถอดรหัสได้เป็น Simple Network Management Protocol ซึ่งก็คือ "โปรโตคอลการจัดการเครือข่ายอย่างง่าย" มาตรฐานนี้เป็นหนึ่งในมาตรฐานที่ใช้กันมากที่สุดในการจัดการอุปกรณ์บนเครือข่าย ในกรณีส่วนใหญ่ โปรโตคอลนี้สามารถใช้ได้ในกรณีที่จำเป็นต้องควบคุมการดำเนินการตามข้อกำหนดที่ระบุโดยผู้ดูแลระบบบนอุปกรณ์ที่เชื่อมต่อกับเครือข่าย ข้อมูลที่รวมอยู่ในการแลกเปลี่ยน SNMP จะแสดงด้วย ในรูปแบบของตัวแปร. ต้องขอบคุณพวกเขาที่ทำให้สามารถอธิบายการตั้งค่าของออบเจ็กต์ที่ได้รับการจัดการได้ แอปพลิเคชันควบคุมสามารถสร้างแบบสอบถามและระบุตัวแปรได้ในบางกรณี

ความสามารถของโปรโตคอล

คุณสมบัติหลักของโปรโตคอลนี้คือการกำหนดค่าระยะไกลของอุปกรณ์บนเครือข่ายโดยใช้คอมพิวเตอร์แม่ข่ายโดยไม่ต้องใช้ซอฟต์แวร์บุคคลที่สาม เมื่อจัดการกระบวนการเครือข่าย คุณไม่เพียงแต่สามารถทำงานได้กับขั้นตอนเฉพาะเท่านั้น แต่ยังตรวจสอบประสิทธิภาพโดยรวม ตรวจสอบทรัพยากร และระบุปัญหาที่เกิดขึ้นในโครงสร้างพื้นฐานอีกด้วย ดังนั้นโปรโตคอล SNMP จึงได้รับความนิยมอย่างมากในหมู่ผู้ดูแลระบบ

ส่วนประกอบพื้นฐานของ SNMP

ส่วนประกอบที่พบบ่อยที่สุด:

  • วัตถุทาส - วัตถุที่ส่งคำสั่งต่างๆ
  • ฐานข้อมูล MIB;
  • โปรแกรมควบคุม
  • โปรแกรมทาส (ตัวแทน);
  • ระบบที่เปิดใช้งานการโต้ตอบบนเครือข่าย

ข้อมูลจากออบเจ็กต์จะถูกส่งไปยังโปรแกรมควบคุมซึ่งจะตีความตามอัลกอริธึมที่ระบุ บนอุปกรณ์ทาสจะมีโปรแกรมตัวแทนที่ออกแบบมาเพื่อจัดระเบียบการรวบรวมข้อมูลบนอุปกรณ์เฉพาะ หากจำเป็น โปรแกรม (ซอฟต์แวร์) สามารถเผยแพร่ข้อมูลนี้ในรูปแบบที่ปรับให้เหมาะกับคุณสมบัติของ SNMP

ระบบเองเพื่อให้แน่ใจว่ามีปฏิสัมพันธ์ระหว่างวัตถุบนเครือข่ายทำให้ผู้ดูแลระบบสามารถทำงานกับโปรแกรมควบคุมหลายโปรแกรมได้ในคราวเดียว ทำให้สามารถควบคุมการทำงานของโครงสร้างพื้นฐานได้อย่างเต็มที่ สามารถติดตั้งซอฟต์แวร์ดังกล่าวได้หลายประเภทบนเครือข่ายพร้อมกัน

องค์ประกอบที่สำคัญที่สุดถือเป็นฐานข้อมูลการจัดการ “MIB” องค์ประกอบนี้จำเป็นเพื่ออธิบายโครงสร้างของฐานข้อมูล (DB) ซึ่งจำเป็นเมื่อแลกเปลี่ยนข้อมูลระหว่างการดูแลระบบอุปกรณ์ ฐานข้อมูลดังกล่าวทำให้สามารถบันทึกข้อมูลเกี่ยวกับส่วนประกอบที่เปิดใช้งานบนอุปกรณ์เพื่อควบคุมได้

ส่วนประกอบหลักของฐานข้อมูลคือตัวระบุประเภท OID ซึ่งช่วยให้คุณสามารถตั้งค่าตัวแปรที่กำหนดและอ่านผ่าน SMNP

ควบคุมความสามารถของโปรแกรม

โปรแกรมประเภทนี้ให้สิทธิ์ในการจัดการกลุ่มอุปกรณ์ต่าง ๆ ที่อยู่ในพื้นที่เครือข่ายเดียวกัน โปรแกรมควบคุมสามารถทำงานได้เฉพาะเมื่อมีการติดตั้งแอปพลิเคชันตัวแทนบนอุปกรณ์ทาสทั้งหมด แอปพลิเคชันจะส่งข้อมูลที่จำเป็นไปยังเซิร์ฟเวอร์ผู้ดูแลระบบโดยใช้ SNMP ในเวลาเดียวกัน โปรแกรมผู้จัดการทำงานบนพีซีหลักซึ่งมีหน้าที่รับผิดชอบในการประมวลผลข้อมูลที่ได้รับจากแอปพลิเคชันตัวแทน

ตัวอย่างซอฟต์แวร์

มีโปรแกรมที่คล้ายกันซึ่งดัดแปลงเพื่อใช้งานบน Windows และ Solaris ลองดูบางส่วนของพวกเขา

แพ็คเกจ SNMP จาก Castle Rock Computing

เป็นระบบการจัดการเครือข่ายที่ปลอดภัยที่ให้การตรวจสอบเครือข่ายทั้งหมดอย่างต่อเนื่อง

ขั้นพื้นฐาน ลักษณะผลิตภัณฑ์:

  • การตรวจสอบอุปกรณ์ การเชื่อมต่อ WAN เซิร์ฟเวอร์และแอปพลิเคชัน
  • รองรับอินเทอร์เน็ตโปรโตคอลเวอร์ชัน 6 (IPv6);
  • รองรับ SNMP v1, v2c และเวอร์ชันที่ปลอดภัย v3;
  • สถาปัตยกรรมที่ปรับขนาดได้และกระจาย
  • รองรับการรวมเข้ากับรายงานเครือข่าย SNMPc OnLine
  • เซิร์ฟเวอร์หลัก/เซิร์ฟเวอร์สำรองที่มีความทนทานต่อข้อผิดพลาดอัตโนมัติ
  • การบันทึกเหตุการณ์ใน Syslog;
  • คอนโซลระยะไกลของ Windows;
  • การค้นพบเครือข่ายอัตโนมัติ
  • สภาพแวดล้อมสำหรับการเขียนโปรแกรมและการเขียนสคริปต์

อินเทอร์เฟซโปรแกรม:

โปรแกรมนี้มีไว้สำหรับ การควบคุมและการจัดการอุปกรณ์เครือข่ายที่ใช้โปรโตคอล SNMP

ลักษณะเฉพาะ:


ยูทิลิตี้การวิจัยและการตรวจสอบที่ออกแบบมาสำหรับระบบตัวแทน มีให้ใน MIB สไตล์นักสำรวจที่ถูกเปิดเผยบนเอเจนต์ มันมี อินเทอร์เฟซที่ง่ายที่สุดของทั้งหมดที่นำเสนอแต่ยังใช้งานยากที่สุดอีกด้วย

โปรแกรมช่วยให้คุณ:


คุณสมบัติของฐานข้อมูล MIB

กระบวนการหลักระหว่างการดำเนินการ MIB คือการกำหนดแอดเดรสตัวแปร มันเกิดขึ้นโดยคำนึงถึงโครงสร้างขององค์ประกอบบางอย่างของโปรโตคอล MIB มีโครงสร้างในรูปแบบของต้นไม้ ซึ่งประกอบด้วยชุดขององค์ประกอบ ซึ่งแต่ละองค์ประกอบจะมีการกำหนด ID ที่ไม่ซ้ำกัน

ภายใน MIB ชื่อตัวแปรสะท้อนถึงที่อยู่ โดยเริ่มต้นจากไดเร็กทอรีราก ในโครงสร้างตัวแปรที่สามารถทำได้ ข้อมูลต่างๆ จะถูกเก็บไว้เช่นระยะเวลาการทำงานของอุปกรณ์ MIB อาจมีสาขาที่อุปกรณ์จำนวนมากสามารถทำงานได้ เช่นเดียวกับสาขาที่เพิ่มโดยบริษัทพัฒนาหรือบริษัทที่กำลังดำเนินการ

ก่อนที่จะนำโครงสร้างฐานข้อมูลไปใช้งาน คุณต้องกำหนดหมายเลขเฉพาะให้กับชุดตัวแปรที่สร้างขึ้นก่อน ด้วยเหตุนี้ วิศวกรหรือผู้ดูแลระบบที่ทำงานกับการตรวจสอบจึงสามารถสร้างสาขาใหม่ในโครงสร้าง ซึ่งจะช่วยให้วางตัวแปรจากแผนกของตนเท่านั้น

OID คืออะไร

OID – รหัสออบเจ็กต์ ซึ่งเป็นแอตทริบิวต์ใบรับรองเสริมที่ให้ข้อมูลเพิ่มเติมเกี่ยวกับเจ้าของ คีย์ หรือนำข้อมูลเพิ่มเติมสำหรับบริการที่ใช้ใบรับรองนี้

ส่วนใหญ่แล้ว OID จะใช้เพื่อควบคุมการเข้าถึงตามบทบาท ตัวอย่างเช่น ใบรับรองสามารถระบุเจ้าของคีย์และข้อมูลเกี่ยวกับคีย์ได้ ด้วยเหตุนี้ เขาจึงสามารถระบุได้ในระบบข้อมูลทั้งหมด และเขาจะสามารถเข้าถึงข้อมูลที่จำเป็น โดยไม่ต้องขออนุญาต สิ่งนี้เป็นไปได้ในกรณีที่ระบบข้อมูลทั้งหมดใช้ใบรับรองผู้ใช้ในการอนุญาตและวิเคราะห์คุณลักษณะเดียวกันในลักษณะเดียวกัน

กับดัก SNMP คืออะไร

SNMP trap คือสัญญาณที่กำหนดโดยอุปกรณ์ที่รองรับโปรโตคอล SNMP วัตถุประสงค์หลักคือเพื่อแจ้งให้ผู้ดูแลระบบทราบเกี่ยวกับเหตุฉุกเฉินของเครือข่าย

ตัวอย่าง: เครื่องสำรองไฟฟ้าบางประเภทจะส่งสัญญาณดังกล่าวเมื่ออุปกรณ์เปลี่ยนประเภทพลังงานเป็นพลังงานแบตเตอรี่ แทนที่จะเป็นพลังงานหลัก ในกรณีส่วนใหญ่ จำเป็นต้องมีการดำเนินการทันที ดังนั้นข้อความจึงถูกส่งโดยอุปกรณ์ผ่านโปรโตคอล SNMP โดยแยกจากกัน นอกจากนี้กับดักดังกล่าวยังรวมถึงเซ็นเซอร์การบุกรุกบางยี่ห้อด้วย เซ็นเซอร์เหล่านี้สามารถเชื่อมต่อกับเครือข่ายได้หากคุณต้องการรับสัญญาณเมื่อเปิดประตู

ในบริการของ Windows ด้วย มีบริการด้วยชื่อ “SNMP Trap Service” ซึ่งทำหน้าที่เดียวกัน ในคอมพิวเตอร์ที่ไม่ได้เชื่อมต่อกับเครือข่ายท้องถิ่น จะไม่ได้ใช้ แต่โดยปกติจะเปิดใช้งาน หากต้องการปิดใช้งานคุณต้องไปที่ "เริ่ม - แผงควบคุม - เครื่องมือการดูแลระบบ - บริการ" และค้นหาบริการที่ระบุในรายการที่เปิดขึ้น คลิกขวาที่มัน (RMB) จากนั้น " คุณสมบัติ” จากนั้นเปลี่ยน “ประเภทการเริ่มต้น” เป็น “ปิดการใช้งาน”

การติดตั้งและการกำหนดค่า SNMP

บริการติดตั้ง

คุณต้องทำสิ่งต่อไปนี้:

  1. ไปที่เส้นทาง “เริ่มต้น” - “ แผงควบคุม»;
  2. ไกลออกไป "การติดตั้งและการลบโปรแกรม";
  3. ค้นหารายการทางด้านซ้ายของหน้าต่าง: “การติดตั้งส่วนประกอบ Windows" และเลือกมัน;
  4. ต่อไปชี้ “อุปกรณ์ควบคุมและเฝ้าระวัง”เลือกแล้วคลิก "องค์ประกอบ";
  5. เลือก "โปรโตคอล SNMP";
  6. คลิกปุ่ม "ตกลง" และ "ถัดไป" เพื่อสิ้นสุดการติดตั้ง

จากนั้นไปที่บริการ Windows และดำเนินการต่อไปนี้:

  • เปิด " บริการ SNMP” นี่เป็นสิ่งจำเป็นในการเปิดใช้งานตัวแทน
  • วิ่ง " บริการดัก SNMP” เพื่อรับข้อความ

การกำหนดค่าตัวแทน

ในการกำหนดค่าเอเจนต์บน Windows:

  • คลิก “เริ่ม” – “วิ่ง” – ป้อน “ บริการ.msc" และกดปุ่ม "Enter" บนแป้นพิมพ์ นี่จะเป็นการเปิดคอนโซลการจัดการบริการ
  • ทางด้านขวาเลือก "บริการ SNMP" คลิกขวาที่มันจากนั้นเลือก "คุณสมบัติ"
  • ไปที่รายการ "ตัวแทน SNMP" ป้อนชื่อและตำแหน่งของเซิร์ฟเวอร์ และเลือกเหตุการณ์ที่คุณต้องการรายงานไปยังเซิร์ฟเวอร์ (หากจำเป็น)
  • ไปที่ "กับดัก" และป้อนชื่อกลุ่มและชื่อผู้รับข้อความกับดัก (ถ้าจำเป็น)
  • วี " ความปลอดภัย» เลือกระดับความปลอดภัยที่ต้องการสำหรับเซิร์ฟเวอร์
  • คลิกที่ปุ่ม "ใช้" จากนั้น "ตกลง";
  • คลิกขวาที่บริการและเลือก " เริ่มต้นใหม่» เพื่อใช้การเปลี่ยนแปลง

กระบวนการตั้งค่าเสร็จสมบูรณ์

กลยุทธ์ SNMP คือการตรวจติดตามความสมบูรณ์ของเครือข่ายในระดับรายละเอียดที่สำคัญใดๆ ก็ตามจะบรรลุผลสำเร็จได้โดยการหยั่งเสียงจากศูนย์ตรวจสอบเป็นหลัก ข้อความไม่พึงประสงค์ (กับดัก) จำนวนจำกัดช่วยให้มั่นใจในการซิงโครไนซ์และเปิดใช้งานการสำรวจ การจำกัดจำนวนข้อความไม่พึงประสงค์สอดคล้องกับเป้าหมายในการรักษาความเรียบง่ายและลดปริมาณการรับส่งข้อมูลที่สร้างโดยระบบการจัดการเครือข่าย

จากเครื่องหมายคำพูดเหล่านี้ เห็นได้ชัดว่าคำขอ TRAP และ INFORM ไม่ใช่ส่วนที่ใช้บ่อยที่สุดของ SNMP จะเหมาะสมกว่าที่จะแสดงบทความนี้สำหรับผู้เริ่มต้นพร้อมตัวอย่างการใช้คำขอ GET ทั่วไปมากกว่า

โดยทั่วไป ฉันขอแนะนำให้อ่าน RFC ที่เกี่ยวข้องกับ SNMP ทั้งหมดก่อนเริ่มต้นใช้งาน บางแง่มุมของ SNMP ไม่ชัดเจน และควรทำความเข้าใจจากแหล่งที่มา คุณสามารถเริ่มทำความคุ้นเคยกับเนื้อหาในวิกิได้

ก้าวแรก

นอกเหนือจากการอ่านเอกสารที่จำเป็นแล้ว สิ่งสำคัญคือต้องเข้าใจว่าเหตุใดเราจึงทำเช่นนี้ทั้งหมด ในทางปฏิบัติด้านโทรคมนาคม งานที่พบบ่อยที่สุดได้แก่:
  1. สำรวจอุปกรณ์ผ่าน SNMP (การบัญชี การตรวจสอบ)
  2. การจัดการอุปกรณ์ผ่าน SNMP (การเปิดใช้งาน)
งานที่เกี่ยวข้องกับอุปกรณ์โพลลงมาเพื่อสร้างคำขอ GET (และดังที่แสดงด้านล่าง GETNEXT) การจัดการอุปกรณ์ขึ้นอยู่กับการส่งคำขอ SET ซึ่งเปลี่ยนสถานะของตัวแปรที่เกี่ยวข้องบนอุปกรณ์ (เช่น ด้วยวิธีนี้ คุณสามารถปิดใช้งานอินเทอร์เฟซใดก็ได้)

งานการตรวจสอบ SNMP มีความโดดเด่นจากพื้นหลังทั่วไปโดยกำหนดให้มีอุปกรณ์จำนวนมากหรือจำนวนมากที่ถูกสำรวจ สมมุติว่านี่คือปัญหาที่เราต้องแก้พอดี

มาเริ่มเขียนโค้ดกัน ในตัวอย่างการทดสอบ เราจะติดต่อโฮสต์ของเราเองผ่าน SNMP และอ่านค่าของตัวแปรที่ระบุโดย OID 1.3.6.1.2.1.1.3.0 และมีค่าสถานะการออนไลน์ของโฮสต์:

คำขอ GET เดี่ยว

แพ็คเกจ com.acme.ae.tests.snmp; นำเข้า java.io.IOException; นำเข้า org.snmp4j.CommunityTarget; นำเข้า org.snmp4j.PDU; นำเข้า org.snmp4j.Snmp; นำเข้า org.snmp4j.Target; นำเข้า org.snmp4j.TransportMapping; นำเข้า org.snmp4j.event.ResponseEvent; นำเข้า org.snmp4j.mp.SnmpConstants; นำเข้า org.snmp4j.smi.Address; นำเข้า org.snmp4j.smi.GenericAddress; นำเข้า org.snmp4j.smi.OID; นำเข้า org.snmp4j.smi.OctetString; นำเข้า org.snmp4j.smi.VariableBinding; นำเข้า org.snmp4j.transport.DefaultUdpTransportMapping; การทดสอบคลาสสาธารณะ (สตริงคงที่สุดท้ายส่วนตัว SNMP_COMMUNITY = "สาธารณะ"; int คงที่สุดท้ายส่วนตัว SNMP_RETRIES = 3; ส่วนตัวสุดท้ายคงที่แบบยาว SNMP_TIMEOUT = 1,000L; Snmp snmp ส่วนตัว = null; การขนส่ง TransportMapping ส่วนตัว = null; การทดสอบโมฆะส่วนตัว () พ่น IOException ( Target t = getTarget("udp:127.0.0.1/161"); String r = send(t, "1.3.6.1.2.1.1.3.0"); System.out.println(r); ) สตริงส่วนตัว send( เป้าหมายเป้าหมาย String oid) พ่น IOException ( PDU pdu = new PDU(); pdu.add(new VariableBinding(new OID(oid))); pdu.setType(PDU.GET); ResponseEvent event = snmp.send(pdu, เป้าหมาย, null); if (เหตุการณ์ != null) ( return event.getResponse().get(0).toString(); ) else ( return "หมดเวลาเกิน"; ) ) เป้าหมายส่วนตัว getTarget(ที่อยู่สตริง) ( ที่อยู่ targetAddress = GenericAddress.parse (ที่อยู่); CommunityTarget target = new CommunityTarget (); target.setCommunity (OctetString ใหม่ (SNMP_COMMUNITY)); target.setAddress (targetAddress); target.setRetries (SNMP_RETRIES); target.setTimeout (SNMP_TIMEOUT); target.setVersion(SnmpConstants.version1); กลับเป้าหมาย; ) โมฆะส่วนตัว start() พ่น IOException ( Transport = new DefaultUdpTransportMapping(); snmp = new Snmp(transport); Transport.listen(); ) private void stop() พ่น IOException ( ลอง ( ถ้า (ขนส่ง != null) ( ขนส่ง .close(); Transport = null; ) ) ในที่สุด ( if (snmp != null) ( snmp.close(); snmp = null; ) ) ) public static void main(String args) ( Test t = new Test() ; ลอง ( ลอง ( t.start(); t.test(); ) ในที่สุด ( t.stop(); ) ) catch (IOException e) ( System.out.println(e.toString()); ) ) )


ขั้นแรกต้องตรวจสอบให้แน่ใจว่าบริการ SNMP บนโฮสต์ของเรากำลังทำงานและเรียกใช้โค้ดเพื่อดำเนินการ เราจะได้รับค่าเวลาทำงานที่ต้องการ (เวลาที่โฮสต์ทำงานไม่หยุดตั้งแต่การบูตครั้งล่าสุด):

1.3.6.1.2.1.1.3.0 = 2:28:55.06
การตรวจสอบสามารถทำได้โดยใช้ค่านี้ หากเราพบว่าค่าลดลง แสดงว่าโฮสต์รีบูตตั้งแต่การสำรวจครั้งถัดไป หากโฮสต์ไม่ตอบสนองภายในระยะหมดเวลาที่ระบุ (หลังจากพยายามอัตโนมัติหลายครั้ง) เป็นไปได้มากว่าโฮสต์หยุดทำงาน มันง่ายไหม?

พวกเขาคำนวณ - พวกเขาหลั่งน้ำตา

ไม่เชิง. เราจำได้ว่าเรามีคำขอมากมายที่ต้องทำ มาวัดกันว่าเราสามารถดำเนินการคำขอได้กี่คำขอต่อวินาที? มาแก้ไขโค้ดกันเล็กน้อย:

การทดสอบโมฆะส่วนตัว () พ่น IOException ( Target t = getTarget("udp:127.0.0.1/161"); Long timestamp = System.currentTimeMillis(); for (int i = 0; i< 1000; i++) { send(t, "1.3.6.1.2.1.1.3.0"); } System.out.println(1000000L /(System.currentTimeMillis() - timestamp)); }
และมาเริ่มกันเลย:

2463
เกือบสองพันห้าพันคำขอต่อวินาที! ไม่เลว?

ไม่ต้องรีบร้อน เราส่งคำขอไปยังอินเทอร์เฟซ Loopback และทำงานได้เร็วกว่าเครือข่ายท้องถิ่นเล็กน้อย มาดูกันว่าเราสามารถส่งคำขอไปยังโฮสต์อื่นบนเครือข่ายของเราได้กี่คำขอต่อวินาที:

182
เรายังไปไม่ถึงสองร้อยด้วยซ้ำ โดยทั่วไปนี่อาจจะเพียงพอแล้ว ทุกอย่างขึ้นอยู่กับงาน แต่เราดำเนินการวัดโดยมีเงื่อนไขว่าโฮสต์ที่สำรวจข้อมูลนั้นว่าง จะเกิดอะไรขึ้นถ้าโฮสต์ไม่ตอบสนอง?

จะมีความพยายามในการเข้าถึงหลายครั้ง (ในรหัสของเราที่เราตั้งค่าไว้ 3) คั่นด้วยการหมดเวลา (1,000 มิลลิวินาที) ซึ่งหมายความว่าในวินาทีนั้นเราจะไม่มีเวลาดำเนินการตามคำขอเดียว เนื่องจากโฮสต์ที่ไม่ตอบสนองไม่ใช่เรื่องแปลก จึงอาจเป็นปัญหาใหญ่ในโปรเจ็กต์จริงได้

ไปจดบันทึกกันเถอะ

สิ่งที่สามารถทำได้เกี่ยวกับเรื่องนี้? หากเรากำลังจัดการกับโปรโตคอลซิงโครนัสบางประเภท (เช่น telnet) เราจะไม่มีทางเลือกมากนัก เพื่อเพิ่มประสิทธิภาพ เราจะต้องรันหลายเธรดพร้อมกัน แต่ SNMP นั้นไม่ตรงกันโดยธรรมชาติ! ไม่จำเป็นต้องบังคับให้เข้าสู่เฟรมเวิร์กซิงโครนัส

จะเปลี่ยนไปใช้ตัวเลือกอะซิงโครนัสได้อย่างไร? ในกรณีของเรา มันค่อนข้างง่าย:

คำขอแบบอะซิงโครนัส

แพ็คเกจ com.acme.ae.tests.snmp; นำเข้า java.io.IOException; นำเข้า org.snmp4j.CommunityTarget; นำเข้า org.snmp4j.PDU; นำเข้า org.snmp4j.Snmp; นำเข้า org.snmp4j.Target; นำเข้า org.snmp4j.TransportMapping; นำเข้า org.snmp4j.event.ResponseEvent; นำเข้า org.snmp4j.event.ResponseListener; นำเข้า org.snmp4j.mp.SnmpConstants; นำเข้า org.snmp4j.smi.Address; นำเข้า org.snmp4j.smi.GenericAddress; นำเข้า org.snmp4j.smi.OID; นำเข้า org.snmp4j.smi.OctetString; นำเข้า org.snmp4j.smi.VariableBinding; นำเข้า org.snmp4j.transport.DefaultUdpTransportMapping; การทดสอบคลาสสาธารณะใช้ ResponseListener (สตริงคงที่สุดท้ายส่วนตัว SNMP_COMMUNITY = "สาธารณะ"; int คงที่สุดท้ายส่วนตัว SNMP_RETRIES = 3; ส่วนตัวสุดท้ายคงที่แบบยาว SNMP_TIMEOUT = 1,000L; Snmp ส่วนตัว snmp = null; การขนส่ง TransportMapping ส่วนตัว = null; โมฆะสาธารณะ onResponse (เหตุการณ์ ResponseEvent ) ( PDU response = event.getResponse(); if (response != null) ( System.out.println(response.get(0).toString()); return; ) ) การทดสอบโมฆะส่วนตัว () พ่น IOException ( เป้าหมาย t = getTarget("udp:192.168.131.253/161"); การประทับเวลาแบบยาว = System.currentTimeMillis(); for (int i = 0; i< 1000; i++) { send(t, "1.3.6.1.2.1.1.3.0"); } System.out.println(1000000L /(System.currentTimeMillis() - timestamp)); } private void send(Target target, String oid) throws IOException { PDU pdu = new PDU(); pdu.add(new VariableBinding(new OID(oid))); pdu.setType(PDU.GET); snmp.send(pdu, target, null, this); } private Target getTarget(String address) { Address targetAddress = GenericAddress.parse(address); CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString(SNMP_COMMUNITY)); target.setAddress(targetAddress); target.setRetries(SNMP_RETRIES); target.setTimeout(SNMP_TIMEOUT); target.setVersion(SnmpConstants.version1); return target; } private void start() throws IOException { transport = new DefaultUdpTransportMapping(); snmp = new Snmp(transport); transport.listen(); } private void stop() throws IOException { try { if (transport != null) { transport.close(); transport = null; } } finally { if (snmp != null) { snmp.close(); snmp = null; } } } public static void main(String args) { Test t = new Test(); try { try { t.start(); t.test(); } finally { t.stop(); } } catch (IOException e) { System.out.println(e.toString()); } } }


7142
คำขอก็เหมือนตกลงไปในถังที่ไร้ก้นบึ้ง! แน่นอนว่าคำตอบจะมาช้า แต่ก็จะมาเร็วเช่นกัน แต่เราจะรู้ได้อย่างไรว่าเจ้าบ้านไม่ตอบสนอง?

ง่ายมาก หลังจากพยายามและหมดเวลาตามจำนวนที่กำหนด SNMP4J จะส่งคืนเหตุการณ์ให้เรา ซึ่งการตอบสนองจะเป็นโมฆะ:

ฉบับแก้ไขแล้ว

คำขอ = HashSet ใหม่ (); ส่วนตัว Long firstTimestamp = null; LastTimestamp ส่วนตัวที่ยาวนาน; โมฆะสาธารณะ onResponse (เหตุการณ์ ResponseEvent) ( Integer32 requestId = event.getRequest().getRequestID(); การตอบสนอง PDU = event.getResponse(); if (ตอบกลับ != null) (lastTimestamp = System.currentTimeMillis(); if (firstTimestamp = = null) ( firstTimestamp = LastTimestamp; ) return; ) else ( ซิงโครไนซ์ (คำขอ) ( ถ้า (requests.contains(requestId)) ( System.out.println("หมดเวลาเกิน"); ) ) ) ซิงโครไนซ์ (คำขอ) ( คำขอ .remove(requestId); ) ) private void test() พ่น IOException ( Target t = getTarget("udp:192.168.131.253/161"); Long timestamp = System.currentTimeMillis(); for (int i = 0; i< 1000; i++) { send(t, "1.3.6.1.2.1.1.3.0"); } System.out.println(1000000L /(System.currentTimeMillis() - timestamp)); while (!requests.isEmpty()) { try { Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } } if (firstTimestamp != null) { System.out.println(1000000L /(lastTimestamp - firstTimestamp)); } } private void send(Target target, String oid) throws IOException { PDU pdu = new PDU(); pdu.add(new VariableBinding(new OID(oid))); pdu.setType(PDU.GET); snmp.send(pdu, target, null, this); synchronized (requests) { requests.add(pdu.getRequestID()); } } private Target getTarget(String address) { Address targetAddress = GenericAddress.parse(address); CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString(SNMP_COMMUNITY)); target.setAddress(targetAddress); target.setRetries(SNMP_RETRIES); target.setTimeout(SNMP_TIMEOUT); target.setVersion(SnmpConstants.version1); return target; } private void start() throws IOException { transport = new DefaultUdpTransportMapping(); snmp = new Snmp(transport); transport.listen(); } private void stop() throws IOException { try { if (transport != null) { transport.close(); transport = null; } } finally { if (snmp != null) { snmp.close(); snmp = null; } } } public static void main(String args) { Test t = new Test(); try { try { t.start(); t.test(); } finally { t.stop(); } } catch (IOException e) { System.out.println(e.toString()); } } }


มาวิเคราะห์ผลการดำเนินการกัน:

9174 283
เราจัดการเพื่อสร้างคำขอ 9174 รายการต่อวินาที และอุปกรณ์ที่ถูกโพลจัดการเพื่อประมวลผลคำขอด้วยความเร็ว 283 คำขอต่อวินาที ไม่มีเวลาตอบสนองต่อคำขอส่วนใหญ่ (ดังนั้น ข้อความ "เกินเวลาเกิน" จึงยังคงอยู่ในบันทึก) แน่นอนว่านี่จะไม่เป็นปัญหาเมื่อเราเริ่มสำรวจอุปกรณ์จำนวนมากโดยมีช่วงเวลาที่เหมาะสมระหว่างคำขอต่างๆ

เดินหน้าต่อไป

เราเรียนรู้วิธีรับค่าของตัวแปรสเกลาร์ผ่าน SNMP แต่นอกเหนือจากนั้น SNMP ยังมีตารางอีกด้วย (เช่น ตารางอินเทอร์เฟซบนอุปกรณ์) พวกเขาสร้างขึ้นมาได้อย่างไร? มาดูเบราว์เซอร์ MIB:

ใน OID mgmt.interfaces (1.3.6.1.2.1.2) เราจะเห็นตัวแปรสเกลาร์ ifNumber (1.3.6.1.2.1.2.1) ซึ่งมีจำนวนอินเทอร์เฟซในตาราง เช่นเดียวกับชุดของคอลัมน์ แต่ละคอลัมน์มี OID ของตัวเอง ตัวอย่างเช่น คอลัมน์ที่มีดัชนีอินเทอร์เฟซตัวเลข ifIndex มี OID = 1.3.6.1.2.1.2.2.1.1

ในการรับค่าของตัวแปรนี้ คุณต้องเพิ่มดัชนีอินเทอร์เฟซให้กับ OID (เช่น สำหรับอินเทอร์เฟซที่มีดัชนี 123 OID = 1.3.6.1.2.1.2.2.1.1.123) แต่เราจะได้รับดัชนีอินเทอร์เฟซได้อย่างไร ไม่จำเป็นต้องเป็นไปตามลำดับ! ตัวอย่างเช่น บนเครื่องของฉัน ตารางอินเทอร์เฟซจะมีลักษณะดังนี้:

เพื่อจุดประสงค์นี้คำขอ GETNEXT จึงถูกสร้างขึ้น เมื่อส่งคำนำหน้า OID ไปยังคำขอนี้ เราจะได้รับ OID และค่าของตัวแปรถัดไป (ตามลำดับพจนานุกรม) หลังจากคำนำหน้านี้ ซึ่งหมายความว่าโดยการส่งคำนำหน้าของ OID ของคอลัมน์ตารางเราจะได้รับ OID และค่าของแถวแรก หากต้องการรับแถวถัดไป คุณต้องเรียกใช้คำขออื่นโดยส่ง OID ที่ได้รับจากคำขอก่อนหน้าเข้าไป และต่อๆ ไปจนกว่าเราจะดูให้หมดโต๊ะ

แน่นอนว่า เมื่อคำนึงถึงทุกสิ่งที่กล่าวไว้ข้างต้น เราควรลดจำนวนคำขอให้เหลือน้อยที่สุด (ซึ่งจำเป็นเช่นกันโดยคำนึงถึงข้อเท็จจริงที่ว่าภายในคำขอเดียวตาม RFC มีการให้ข้อมูลที่สอดคล้องกัน หากเราขอดัชนีและอินเทอร์เฟซ ชื่อในคำขอติดต่อกันสองครั้งอาจไม่ตรงกัน) ภายใต้ SNMP เวอร์ชัน 1 เราต้องอ่านแถวทั้งหมดของตารางในแบบสอบถามเดียว

ควรสังเกตว่าค่อนข้างสะดวกที่ OID ของตัวแปรสเกลาร์จะเป็นคำนำหน้าด้วย ตัวอย่างเช่น สำหรับตัวแปร sysUpTime จริงๆ แล้ว OID จะเป็น 1.3.6.1.2.1.1.3 เราสามารถส่งผ่านไปยังคำขอ GETNEXT และรับ OID = 1.3.6.1.2.1.1.3.0 พร้อมกับค่าที่เกี่ยวข้อง ทำให้สามารถสืบค้นค่าสเกลาร์พร้อมกับค่าคอลัมน์ของตารางในแบบสอบถามเดียว

ดูแถวแรกของตาราง

แพ็คเกจ com.acme.ae.tests.snmp; นำเข้า java.io.IOException; นำเข้า java.util.HashSet; นำเข้า java.util.Set; นำเข้า org.snmp4j.CommunityTarget; นำเข้า org.snmp4j.PDU; นำเข้า org.snmp4j.Snmp; นำเข้า org.snmp4j.Target; นำเข้า org.snmp4j.TransportMapping; นำเข้า org.snmp4j.event.ResponseEvent; นำเข้า org.snmp4j.event.ResponseListener; นำเข้า org.snmp4j.mp.SnmpConstants; นำเข้า org.snmp4j.smi.Address; นำเข้า org.snmp4j.smi.GenericAddress; นำเข้า org.snmp4j.smi.Integer32; นำเข้า org.snmp4j.smi.OID; นำเข้า org.snmp4j.smi.OctetString; นำเข้า org.snmp4j.smi.VariableBinding; นำเข้า org.snmp4j.transport.DefaultUdpTransportMapping; การทดสอบคลาสสาธารณะใช้ ResponseListener (สตริงคงที่สุดท้ายส่วนตัว SNMP_COMMUNITY = "สาธารณะ"; int คงที่สุดท้ายส่วนตัว SNMP_RETRIES = 3; ส่วนตัวสุดท้ายคงที่แบบยาว SNMP_TIMEOUT = 1,000L; Snmp ส่วนตัว snmp = null; การขนส่ง TransportMapping ส่วนตัว = null; ชุดส่วนตัว คำขอ = HashSet ใหม่ (); โมฆะสาธารณะ onResponse (เหตุการณ์ ResponseEvent) ( Integer32 requestId = event.getRequest().getRequestID(); PDU response = event.getResponse(); if (response != null) ( System.out.println(response.toString()) ; return; ) else ( ซิงโครไนซ์ (คำขอ) ( if (requests.contains(requestId)) ( System.out.println("หมดเวลาเกิน"); ) ) ) ซิงโครไนซ์ (คำขอ) (ร้องขอremove(requestId); ) ) การทดสอบโมฆะส่วนตัว () พ่น IOException ( Target t = getTarget("udp:127.0.0.1/161"); send(t, new String ("1.3.6.1.2.1.1.3", "1.3.6.1.2.1.2.2. 1.1", "1.3.6.1.2.1.2.2.1.2")); ) โมฆะส่วนตัวส่ง (เป้าหมายเป้าหมาย, String oids) พ่น IOException ( PDU pdu = new PDU(); for (String oid: oids) ( pdu.add (VariableBinding ใหม่ (OID ใหม่ (oid))); ) pdu.setType (PDU.GETNEXT); เหตุการณ์ ResponseEvent = snmp.send(pdu, target, null); ซิงโครไนซ์ (คำขอ) (ร้องขอเพิ่ม (pdu.getRequestID() ); ) onResponse(event); ) เป้าหมายส่วนตัว getTarget(ที่อยู่สตริง) ( ที่อยู่ targetAddress = GenericAddress.parse(ที่อยู่); เป้าหมาย CommunityTarget = CommunityTarget ใหม่ (); target.setCommunity (OctetString ใหม่ (SNMP_COMMUNITY)); target.setAddress(ที่อยู่เป้าหมาย); target.setRetries (SNMP_RETRIES); เป้าหมาย.setTimeout(SNMP_TIMEOUT); target.setVersion(SnmpConstants.version1); กลับเป้าหมาย; ) โมฆะส่วนตัว start() พ่น IOException ( Transport = new DefaultUdpTransportMapping(); snmp = new Snmp(transport); Transport.listen(); ) private void stop() พ่น IOException ( ลอง ( ถ้า (ขนส่ง != null) ( ขนส่ง .close(); Transport = null; ) ) ในที่สุด ( if (snmp != null) ( snmp.close(); snmp = null; ) ) ) public static void main(String args) ( Test t = new Test() ; ลอง ( ลอง ( t.start(); t.test(); ) ในที่สุด ( t.stop(); ) ) catch (IOException e) ( System.out.println(e.toString()); ) ) )


โดยการรันโค้ดนี้ เราจะได้รับคำตอบดังนี้:

การตอบสนอง]
เราได้รับค่าสถานะการออนไลน์ ดัชนีของอินเทอร์เฟซแรกและชื่อ ซึ่งเข้ารหัสเป็นสตริงออคเต็ตในรูปแบบเลขฐานสิบหก หากต้องการรับแถวถัดไป เราจะต้องดำเนินการค้นหาตามลำดับ โดยส่งผ่าน OID ที่ได้รับก่อนหน้านี้

เมื่อพิจารณาถึงความจำเป็นในการรองรับความสามารถในการประมวลผลแบบอะซิงโครนัส สิ่งนี้อาจกลายเป็นงานที่ไม่สำคัญ (แต่ค่อนข้างแก้ไขได้) โชคดีที่ SNMP เวอร์ชัน 2 ได้เพิ่มการสืบค้นจำนวนมากซึ่งทำให้การดึงข้อมูลแบบตารางเป็นแบบอัตโนมัติ และลดจำนวนการสืบค้นที่ส่งให้เหลือน้อยที่สุด มาทำการเปลี่ยนแปลงโค้ดที่จำเป็น:

คำขอจำนวนมาก

แพ็คเกจ com.acme.ae.tests.snmp; นำเข้า java.io.IOException; นำเข้า java.util.HashSet; นำเข้า java.util.Set; นำเข้า org.snmp4j.CommunityTarget; นำเข้า org.snmp4j.PDU; นำเข้า org.snmp4j.Snmp; นำเข้า org.snmp4j.Target; นำเข้า org.snmp4j.TransportMapping; นำเข้า org.snmp4j.event.ResponseEvent; นำเข้า org.snmp4j.event.ResponseListener; นำเข้า org.snmp4j.mp.SnmpConstants; นำเข้า org.snmp4j.smi.Address; นำเข้า org.snmp4j.smi.GenericAddress; นำเข้า org.snmp4j.smi.Integer32; นำเข้า org.snmp4j.smi.OID; นำเข้า org.snmp4j.smi.OctetString; นำเข้า org.snmp4j.smi.VariableBinding; นำเข้า org.snmp4j.transport.DefaultUdpTransportMapping; การทดสอบคลาสสาธารณะใช้ ResponseListener (สตริงคงที่สุดท้ายส่วนตัว SNMP_COMMUNITY = "สาธารณะ"; int คงที่สุดท้ายส่วนตัว SNMP_RETRIES = 3; ส่วนตัวสุดท้ายคงที่แบบยาว SNMP_TIMEOUT = 1,000L; int คงที่สุดท้ายส่วนตัว BULK_SIZE = 50; Snmp ส่วนตัว snmp = null; การขนส่ง TransportMapping ส่วนตัว = null; ชุดส่วนตัว คำขอ = HashSet ใหม่ (); โมฆะสาธารณะ onResponse (เหตุการณ์ ResponseEvent) ( Integer32 requestId = event.getRequest().getRequestID(); PDU response = event.getResponse(); if (response != null) ( System.out.println(response.toString()) ; return; ) else ( ซิงโครไนซ์ (คำขอ) ( if (requests.contains(requestId)) ( System.out.println("หมดเวลาเกิน"); ) ) ) ซิงโครไนซ์ (คำขอ) (ร้องขอremove(requestId); ) ) การทดสอบโมฆะส่วนตัว () พ่น IOException ( Target t = getTarget("udp:127.0.0.1/161"); send(t, new String ("1.3.6.1.2.1.1.3", "1.3.6.1.2.1.2.2. 1.1", "1.3.6.1.2.1.2.2.1.2")); ) โมฆะส่วนตัวส่ง (เป้าหมายเป้าหมาย, String oids) พ่น IOException ( PDU pdu = new PDU(); for (String oid: oids) ( pdu.add (VariableBinding ใหม่ (OID ใหม่ (oid))); ) pdu.setType (PDU.GETBULK); pdu.setMaxRepetitions (BULK_SIZE); pdu.setNonRepeaters (1); เหตุการณ์ ResponseEvent = snmp.send (pdu, เป้าหมาย, null); ซิงโครไนซ์ (คำขอ) ( request.add(pdu.getRequestID()); ) onResponse(event); ) เป้าหมายส่วนตัว getTarget(ที่อยู่สตริง) ( ที่อยู่ targetAddress = GenericAddress.parse(address); เป้าหมาย CommunityTarget = CommunityTarget ใหม่ (); target.setCommunity (OctetString ใหม่ (SNMP_COMMUNITY)); target.setAddress(ที่อยู่เป้าหมาย); target.setRetries (SNMP_RETRIES); เป้าหมาย.setTimeout(SNMP_TIMEOUT); target.setVersion(SnmpConstants.version2c); กลับเป้าหมาย; ) โมฆะส่วนตัว start() พ่น IOException ( Transport = new DefaultUdpTransportMapping(); snmp = new Snmp(transport); Transport.listen(); ) private void stop() พ่น IOException ( ลอง ( ถ้า (ขนส่ง != null) ( ขนส่ง .close(); Transport = null; ) ) ในที่สุด ( if (snmp != null) ( snmp.close(); snmp = null; ) ) ) public static void main(String args) ( Test t = new Test() ; ลอง ( ลอง ( t.start(); t.test(); ) ในที่สุด ( t.stop(); ) ) catch (IOException e) ( System.out.println(e.toString()); ) ) )


ด้วยการเรียกใช้แบบสอบถามนี้ เราจะได้แถวทั้งหมดของตารางในแบบสอบถามเดียว:

ข้อมูลมากมาย

การตอบสนอง]


แน่นอน หากตารางมีมากกว่า 50 แถวที่ร้องขอ อีกครั้ง (สำหรับ SNMP เวอร์ชันที่ 1) คุณจะต้องสร้างคำขอเพื่อรับแถวถัดไป โดยส่ง OID ที่ได้รับสำหรับแถวสุดท้ายให้พวกเขา

ฉันไม่ได้บอกคุณอะไร?

มีหลายสิ่งที่ฉันไม่ได้พูดถึงในบทความนี้ ฉันไม่ได้พูดถึงวิธีเปลี่ยนค่าของตัวแปรบางตัว (ไม่ใช่ทั้งหมด) โดยใช้คำสั่ง SET ฉันไม่ได้พูดถึงว่า TRAP คืออะไรและจำเป็นสำหรับอะไร ฉันไม่ได้พูดอะไรเกี่ยวกับวิธีพัฒนาตัวแทน SNMP และฉันไม่ได้พูดอะไรสักคำเกี่ยวกับ SNMP เวอร์ชันที่ 3 และการเปลี่ยนแปลงที่เกิดขึ้น

แต่สิ่งที่ฉันพูดก็เพียงพอที่จะเข้าใจว่า SNMP ไม่ใช่เรื่องง่าย

อิวาเนนโก เอส.

เพื่อให้จัดการเครือข่ายได้สำเร็จ คุณจำเป็นต้องทราบสถานะขององค์ประกอบแต่ละองค์ประกอบพร้อมความสามารถในการเปลี่ยนพารามิเตอร์การทำงานของเครือข่าย โดยทั่วไป เครือข่ายประกอบด้วยอุปกรณ์จากผู้ผลิตหลายราย และการจัดการจะเป็นงานที่ยากหากอุปกรณ์เครือข่ายแต่ละเครื่องเข้าใจเพียงระบบคำสั่งของตัวเองเท่านั้น ดังนั้นจึงจำเป็นต้องสร้างภาษาการจัดการทรัพยากรเครือข่ายแบบครบวงจรที่อุปกรณ์ทั้งหมดจะเข้าใจ และด้วยเหตุนี้ แพ็คเกจการจัดการเครือข่ายทั้งหมดจึงจะใช้โต้ตอบกับอุปกรณ์เฉพาะได้

SNMP - Simple Network Management Protocol - กลายเป็นภาษาที่คล้ายกัน พัฒนาขึ้นสำหรับระบบที่ใช้ระบบปฏิบัติการ UNIX ซึ่งกลายเป็นมาตรฐานที่ยอมรับโดยทั่วไปสำหรับระบบการจัดการเครือข่าย และได้รับการสนับสนุนจากผู้ผลิตอุปกรณ์เครือข่ายส่วนใหญ่ในผลิตภัณฑ์ของตน ตามชื่อของมัน - Simple Network Management Protocol - งานหลักในการพัฒนาคือการบรรลุความเรียบง่ายสูงสุดของการใช้งาน เป็นผลให้เกิดโปรโตคอลที่มีชุดคำสั่งน้อยที่สุด แต่ทำให้สามารถดำเนินงานการจัดการอุปกรณ์เครือข่ายได้เกือบทั้งหมดตั้งแต่การรับข้อมูลเกี่ยวกับตำแหน่งของอุปกรณ์เฉพาะไปจนถึงความสามารถในการทดสอบ

แนวคิดพื้นฐานของโปรโตคอลคือข้อมูลทั้งหมดที่จำเป็นในการจัดการอุปกรณ์จะถูกจัดเก็บไว้ในตัวอุปกรณ์ ไม่ว่าจะเป็นเซิร์ฟเวอร์ โมเด็ม หรือเราเตอร์ ในส่วนที่เรียกว่า Management Information Base (MIB) MIB คือชุดของตัวแปรที่กำหนดลักษณะของวัตถุควบคุม ตัวแปรเหล่านี้สามารถสะท้อนถึงพารามิเตอร์ต่างๆ เช่น จำนวนแพ็คเก็ตที่ประมวลผลโดยอุปกรณ์ สถานะของอินเทอร์เฟซ เวลาการทำงานของอุปกรณ์ เป็นต้น ผู้ผลิตอุปกรณ์เครือข่ายแต่ละราย นอกเหนือจากตัวแปรมาตรฐานแล้ว ยังรวมพารามิเตอร์บางอย่างไว้ใน MIB สำหรับอุปกรณ์ที่กำหนดด้วย อย่างไรก็ตาม สิ่งนี้ไม่ได้ละเมิดหลักการนำเสนอและการเข้าถึงข้อมูลการบริหาร - ข้อมูลเหล่านี้ทั้งหมดจะเป็นตัวแปรใน MIB ดังนั้น SNMP ซึ่งเป็นโปรโตคอลเครือข่ายโดยตรงจึงจัดเตรียมชุดคำสั่งสำหรับการทำงานกับตัวแปร MIB เท่านั้น ชุดนี้ประกอบด้วยการดำเนินการดังต่อไปนี้:

ในการตรวจสอบการทำงานของอุปกรณ์เครือข่ายบางอย่าง คุณเพียงแค่ต้องเข้าถึง MIB ของมันซึ่งได้รับการอัพเดตอย่างต่อเนื่องโดยตัวอุปกรณ์เอง และวิเคราะห์ค่าของตัวแปรบางตัว

คุณลักษณะที่สำคัญของโปรโตคอล SNMP คือไม่มีคำสั่งการจัดการอุปกรณ์เฉพาะ แทนที่จะกำหนดช่วงที่เป็นไปได้ทั้งหมดของคำสั่งดังกล่าว ซึ่งจะทำให้โปรโตคอลยุ่งเหยิงอย่างแน่นอน ซึ่งยังถือว่าง่าย มีการกำหนดตัวแปร MIB ซึ่งอุปกรณ์จะรับรู้การสลับเป็นคำสั่งในการดำเนินการคำสั่งบางอย่าง ด้วยวิธีนี้ คุณสามารถรักษาความเรียบง่ายของโปรโตคอลได้ แต่ในขณะเดียวกันก็ทำให้มันเป็นเครื่องมือที่ทรงพลัง ทำให้สามารถตั้งค่าชุดคำสั่งสำหรับจัดการอุปกรณ์เครือข่ายได้ด้วยวิธีมาตรฐาน งานในการรับรองการดำเนินการตามคำสั่งจึงประกอบด้วยการลงทะเบียนตัวแปร MIB พิเศษและการตอบสนองต่อการเปลี่ยนแปลงของอุปกรณ์

การกำหนดแอดเดรสใน MIB เกิดขึ้นกับตัวแปรบางตัวอย่างไรในโครงสร้าง MIB คือต้นไม้ ดังแสดงในรูปที่ 1

แต่ละองค์ประกอบมีตัวระบุที่เป็นตัวเลขและสัญลักษณ์ ชื่อตัวแปรรวมถึงเส้นทางแบบเต็มจากรูทองค์ประกอบรูท ตัวอย่างเช่น เวลาการทำงานของอุปกรณ์ตั้งแต่การรีบูตจะถูกจัดเก็บไว้ในตัวแปรที่อยู่ในส่วนระบบภายใต้หมายเลข 3 และเรียกว่า sysUpTime ดังนั้น ชื่อตัวแปรจะรวมพาธทั้งหมด: iso(1).org(3).dod(6).internet(1).mgmt(2).mib-2(1).system(1).sysUpTime( 3) ; หรือในภาษาตัวเลข: 1.3.6.1.2.1.1.3 ควรสังเกตว่าโหนดต้นไม้ถูกคั่นด้วยจุด มีสาขา MIB มาตรฐานที่เกี่ยวข้องกับส่วนการจัดการการจัดการที่โดยปกติแล้วอุปกรณ์เครือข่ายทั้งหมดรองรับ

นอกจากนี้ ผู้ผลิตหรือองค์กรแต่ละรายสามารถพัฒนาชุดตัวแปรของตนเองและ "แขวน" ตัวแปรเหล่านั้นไว้ในแผนผัง MIB อย่างไรก็ตาม การดำเนินการนี้จะกระทำในสถานที่ที่กำหนดไว้อย่างเคร่งครัดเท่านั้น หากองค์กรกำลังพัฒนา MIB ของตนเอง ในขั้นตอนการทดลอง ตัวแปรสามารถถูกวางในส่วนการทดลองได้ อย่างไรก็ตาม หากต้องการลงทะเบียนโครงสร้างข้อมูลอย่างเป็นทางการสำหรับองค์กร จำเป็นต้องมีหมายเลขของตัวเองในส่วนองค์กรเอกชน ตัวแปรทั้งหมดที่กล่าวถึงในสาขาขององค์กรหนึ่งๆ อ้างอิงถึงผลิตภัณฑ์ของผู้ผลิตรายนั้นเท่านั้น

ดังที่ได้กล่าวไปแล้ว อุปกรณ์เครือข่ายแต่ละเครื่องประกอบด้วยข้อมูลที่จำเป็นในการจัดการ ข้อมูลนี้จะถูกจัดเก็บไว้ในการลงทะเบียนของอุปกรณ์ในทางใดทางหนึ่ง การเข้าถึงข้อมูลนี้มอบให้กับเวิร์กสเตชันเครือข่ายที่ดำเนินงานการจัดการเครือข่ายอย่างไร ในการประมวลผลคำขอจากสถานีการจัดการที่มาในรูปแบบของแพ็กเก็ต SNMP จะใช้โมดูลพิเศษที่เรียกว่าตัวแทนการจัดการ เอเจนต์ได้รับแพ็กเก็ต SNMP และดำเนินการที่เกี่ยวข้อง เช่น ส่งค่าของตัวแปรที่ร้องขอ ตั้งค่าของตัวแปร อัพเดตข้อมูล MIB เป็นระยะ และดำเนินการบางอย่างเพื่อตอบสนองต่อการตั้งค่าตัวแปรที่เกี่ยวข้อง เวิร์กสเตชันของผู้ดูแลระบบเครือข่ายสามารถทำหน้าที่เป็นสถานีการจัดการได้หากรันแพ็คเกจการจัดการใดๆ ที่รองรับโปรโตคอล SNMP ช่วยให้ผู้ดูแลระบบได้รับข้อมูลเฉพาะเกี่ยวกับการทำงานขององค์ประกอบเครือข่ายในด้านต่างๆ เช่น ที่ระดับการ์ด Ethernet หรือโปรโตคอล EGP ตัวอย่างของโปรแกรมดังกล่าว ได้แก่ Sun NetManager ของ Sun Microsystems ที่ออกแบบมาสำหรับระบบปฏิบัติการ Solaris และแพ็คเกจ SNMPc ของ Castle Rock Computing ที่พัฒนาขึ้นสำหรับ Windows แพ็คเกจทั้งสองช่วยให้คุณสร้างแผนที่เครือข่ายและทำงานโดยตรงกับ MIB ของโหนดใดก็ได้ ด้วยเครื่องมืออันทรงพลังเช่นนี้ ผู้ดูแลระบบเครือข่ายเพียงแค่ต้องเปิดเอกสาร MIB ของอุปกรณ์เฉพาะ เช่น เราเตอร์ Cisco และศึกษาความสามารถในการจัดการที่นักพัฒนารวมอยู่ในนั้น ตัวอย่างเช่น ในการจัดการเราเตอร์ Cisco คุณสามารถเข้าสู่ระบบ (เข้าสู่ระบบในฐานะรูท) และเข้าถึงคำสั่งการจัดการแบบออนไลน์ได้ หรือคุณสามารถกำหนดค่าเอเจนต์ SNMP บนเราเตอร์นี้ และดำเนินการคำสั่งเดียวกันทั้งหมด และรับผลลัพธ์เดียวกันโดยทำงานกับตัวแปร MIB เป็นตัวอย่างการดำเนินการ คุณสามารถรีบูทเราเตอร์ได้โดยเปลี่ยนตัวแปรหนึ่งตัวใน MIB ในเวลาเดียวกัน มีคำสั่งแยกต่างหากสำหรับการบูตระบบจากหน่วยความจำแฟลช, NVRAM หรือไฟล์ TFTP

เมื่อใช้ SNMP คุณสามารถทำการทดสอบการทำงานของอุปกรณ์เครือข่ายได้หลากหลาย โดยกำหนดไว้บนอุปกรณ์อีกครั้ง สิ่งนี้มีประโยชน์เพราะการสังเกตสถิติมักจะไม่ได้ให้ภาพที่สมบูรณ์ของสิ่งที่เกิดขึ้น ตัวอย่างเช่น สำหรับส่วนที่เกี่ยวข้องกับอินเทอร์เฟซอีเธอร์เน็ต จะมีการกำหนดการทดสอบ TDR (การสะท้อนกลับของโดเมนเวลา) ซึ่งช่วยให้คุณกำหนดระยะทางโดยประมาณถึงความผิดปกติในสายโคแอกเซียลได้ ในการรันการทดสอบ TDR จำเป็นต้องตั้งค่าของตัวแปร ifExtnsTestType (1.3.6.1.2.1.12.2.1.4) ซึ่งมีประเภทของการทดสอบที่จะดำเนินการ เพื่อให้มีตัวระบุการทดสอบ TDR ใน MIB: 1.3.6.1.2.1.10.7.6.1. อันดับแรก ผลลัพธ์ของการทดสอบจะเป็นค่าของตัวแปร ifExtnsTestResult (1.3.6.1.2.1.12.2.1.5) ซึ่งแสดงลักษณะของผลลัพธ์ของการทดสอบ:

    ขาดผลลัพธ์

    ดำเนินการ

    ไม่รองรับ

    เป็นไปไม่ได้ที่จะเริ่ม

    ยกเลิกแล้ว

    ความล้มเหลว

และประการที่สอง ค่าของตัวแปร ifExtnsTestCode (1.3.6.1.2.1.12.2.1.6) จะมีตัวระบุของตัวแปร MIB ที่มีผลการทดสอบ ผลการทดสอบถูกกำหนดให้เป็นช่วงเวลาในหน่วย 100 นาโนวินาทีระหว่างการเริ่มต้นการส่งแพ็กเก็ตทดสอบและการตรวจจับการชนกันของพาหะ โดยหลักการแล้ว สามารถกำหนดระยะทางที่ต้องการได้โดยใช้ค่านี้ ดังที่ได้กล่าวไปแล้ว การทดสอบประเภทนี้ได้รับการสนับสนุนจากผู้ผลิตหลายรายสำหรับผลิตภัณฑ์ของตน และสะท้อนให้เห็นในตัวแปร MIB ที่สอดคล้องกัน

จากที่กล่าวมาข้างต้น ยังคงสรุปได้ว่าผู้ดูแลระบบเครือข่ายสามารถค้นหาผู้ช่วยที่ดีในโปรโตคอล SNMP โดยมีสิทธิ์เข้าถึงคำอธิบายตัวแปร MIB ของอุปกรณ์เครือข่ายต่างๆ ได้อย่างเต็มที่ และแพ็คเกจที่มีประสิทธิภาพซึ่งจะทำให้ง่ายต่อการทำงานกับตัวแปรที่ยุ่งยากได้ง่ายขึ้น ชื่อใน SNMP

SNMP (Simple Network Management Protocol) เป็นโปรโตคอล OSI Layer 7 ที่ใช้ในการตรวจสอบและกำหนดค่าอุปกรณ์เครือข่ายจากระยะไกล SNMP ช่วยให้สถานีการจัดการเครือข่ายสามารถดูและเปลี่ยนแปลงการตั้งค่าเกตเวย์ เราเตอร์ สวิตช์ และอุปกรณ์เครือข่ายอื่นๆ SNMP สามารถใช้เพื่อดำเนินการหลายฟังก์ชันเดียวกันกับที่ทำผ่านคอนโซลที่เชื่อมต่อโดยตรง หรือสามารถใช้ภายในซอฟต์แวร์การจัดการเครือข่ายแบบรวม เช่น DView
SNMP ทำหน้าที่ดังต่อไปนี้:

    การส่งและรับแพ็กเก็ต SNMP ผ่าน IP

    การรวบรวมข้อมูลเกี่ยวกับสถานะและการกำหนดค่าปัจจุบันของอุปกรณ์เครือข่าย

    การเปลี่ยนการกำหนดค่าอุปกรณ์เครือข่าย

DES-3226S มีโปรแกรมที่เรียกว่า "ตัวแทน" ที่ประมวลผลคำขอ SNMP แต่โปรแกรมผู้ใช้ที่ส่งคำขอและรวบรวมการตอบสนองจะทำงานบนสถานีการจัดการ (คอมพิวเตอร์เฉพาะบนเครือข่าย) เอเจนต์ SNMP และโปรแกรมผู้ใช้ใช้โปรโตคอล UDP/IP เพื่อแลกเปลี่ยนแพ็กเก็ต

SNMP เวอร์ชัน 1,2 และ 3
DES-3226S รองรับ SNMP เวอร์ชัน 3 เช่นเดียวกับเวอร์ชัน 1 และ 2 ความแตกต่างหลักระหว่าง SNMP v.3 และ SNMP v.1 และ SNMP v.2 คือ SNMP v.3 ให้ระดับความปลอดภัยที่สูงกว่าเวอร์ชันก่อนหน้าอย่างมาก .
ใน SNMP v.1 และ SNMP v.2 การอนุญาตผู้ใช้จะดำเนินการโดยใช้ Community String ซึ่งทำหน้าที่เป็นรหัสผ่าน โปรแกรมผู้ใช้ SNMP แบบรีโมตและเอเจนต์ SNMP ต้องใช้ Community Strings เดียวกัน แพ็กเก็ต SNMP จากสถานีใดๆ ที่ไม่ได้รับอนุญาตจะถูกละเว้น (ละทิ้ง)
SNMP v.3 ใช้กระบวนการอนุญาตที่ซับซ้อนกว่าซึ่งแบ่งออกเป็นสองส่วน ส่วนแรกใช้เพื่อรักษารายชื่อผู้ใช้และคุณลักษณะที่ได้รับอนุญาตให้จัดการผ่าน SNMP ส่วนที่สองอธิบายถึงสิ่งที่ผู้ใช้แต่ละคนในรายการนี้สามารถทำได้เมื่อจัดการผ่าน SNMP
สวิตช์ช่วยให้คุณระบุและกำหนดค่ากลุ่มผู้ใช้ในรายการนี้ด้วยสิทธิ์ชุดเดียวกัน สามารถตั้งค่าเวอร์ชัน SNMP สำหรับกลุ่มที่ระบุได้ ดังนั้นจึงเป็นไปได้ที่จะสร้างกลุ่ม SNMP ที่ได้รับอนุญาตให้ดูข้อมูลแบบอ่านอย่างเดียวหรือรับกับดักโดยใช้ SNMP v.1 ในขณะที่กลุ่มอื่นถูกกำหนดระดับความปลอดภัยที่สูงกว่าพร้อมสิทธิ์อ่าน/เขียนโดยใช้ SNMP v. .3
เมื่อใช้ SNMP v.3 คุณสามารถเปิดใช้งานหรือปิดใช้งานผู้ใช้แต่ละรายหรือกลุ่มของผู้จัดการ SNMP จากการทำหน้าที่การจัดการ SNMP เฉพาะได้ คุณลักษณะที่เปิดหรือปิดใช้งานจะถูกกำหนดโดย Object Identifier (OID) ที่เชื่อมโยงกับ MIB เฉพาะ
นอกจากนี้ SNMP v.3 ยังมีระดับความปลอดภัยที่สามารถเข้ารหัสข้อความ SNMP ได้ (โดยใช้ระดับการอนุญาต HMAC-SHA-96 หรือ HMAC-MDA-96)

กับดัก
กับดักคือข้อความที่เตือนเกี่ยวกับเหตุการณ์ที่เกิดขึ้นในขณะที่สวิตช์ทำงาน เหตุการณ์อาจร้ายแรงพอๆ กับการรีบูต (มีคนปิดสวิตช์โดยไม่ได้ตั้งใจ) หรือร้ายแรงพอๆ กับการเปลี่ยนแปลงสถานะของพอร์ต สวิตช์จะสร้างกับดักและส่งไปยังสถานีการจัดการเครือข่าย
ผู้ดูแลระบบกับดักคือผู้ใช้พิเศษของเครือข่ายท้องถิ่นที่ได้รับสิทธิ์บางอย่างและการเข้าถึงเพื่อดูและบำรุงรักษาเครือข่าย ผู้ดูแลระบบได้รับกับดักที่ส่งมาจากสวิตช์ และต้องดำเนินการบางอย่างเพื่อป้องกันความล้มเหลวในอนาคตหรือการปิดระบบเครือข่าย
คุณสามารถกำหนดสถานีการจัดการที่สามารถรับกับดักจากสวิตช์ได้ ซึ่งสามารถทำได้โดยการป้อนรายการที่อยู่ IP ของสถานีการจัดการเครือข่ายที่ได้รับอนุญาต คุณยังสามารถระบุเวอร์ชัน SNMP ที่ใช้สำหรับการอนุญาตได้ คุณสามารถป้อนที่อยู่ IP ของผู้ดูแลระบบกับดักได้สูงสุดสี่รายการและสตริงชุมชน SNMP ที่เกี่ยวข้องสี่รายการ
ต่อไปนี้เป็นประเภทของกับดักที่ผู้ดูแลระบบอาจได้รับ:

  • Cold Start ข้อความนี้ระบุว่าสวิตช์ถูกเปิดและเตรียมใช้งานแล้ว เพื่อให้การตั้งค่าซอฟต์แวร์ทั้งหมดได้รับการกู้คืน และส่วนประกอบฮาร์ดแวร์ถูกรีบูต การสตาร์ทขณะเย็นแตกต่างจากการรีเซ็ตสวิตช์เป็นการตั้งค่าจากโรงงานตรงที่การตั้งค่าจะถูกจัดเก็บไว้ในหน่วยความจำแบบไม่ลบเลือน ซึ่งใช้เพื่อกู้คืนการกำหนดค่าของสวิตช์
  • Warm Start ข้อความนี้ระบุว่าสวิตช์ถูกรีบูต (ซอฟต์แวร์เท่านั้น) แต่ Power-On Self-Test (POST) ถูกข้ามไป
  • ความล้มเหลวในการรับรองความถูกต้อง ข้อความนี้หมายความว่ามีคนพยายามเชื่อมต่อกับสวิตช์โดยใช้สตริงชุมชน SNMP ที่ไม่ถูกต้อง สวิตช์จะจดจำที่อยู่ IP ของผู้ใช้ที่ไม่ได้รับอนุญาตโดยอัตโนมัติ
  • การเปลี่ยนแปลงโทโพโลยี ข้อความการเปลี่ยนแปลงโทโพโลยีจะถูกส่ง โดยสวิตช์เมื่อพอร์ตที่กำหนดค่าไว้ใดๆ เปลี่ยนจากสถานะการเรียนรู้เป็นการส่งต่อ หรือจากสถานะการส่งต่อไปยังการบล็อก กับดักนี้ไม่ถูกสร้างขึ้นหากมีการส่งกับดักรูทใหม่ในระหว่างการเปลี่ยนสถานะพอร์ตเดียวกัน
  • เหตุการณ์การเปลี่ยนแปลงลิงก์ ข้อความนี้จะถูกส่งเมื่อใดก็ตามที่สถานะของพอร์ตเปลี่ยนจากลิงก์ขึ้นเป็นลิงก์ลง หรือจากลิงก์ลงเป็นลิงก์ขึ้น
  • พาร์ติชันพอร์ต ข้อความนี้จะถูกส่งเมื่อใดก็ตามที่สถานะของพอร์ตเปลี่ยนเป็นพาร์ติชัน (พอร์ตถูกบล็อก) ซึ่งเป็นผลมาจากการชนกันมากกว่า 32 ครั้งเกิดขึ้นเมื่อทำงานที่ 10 Mbit/s หรือการชนกันมากกว่า 64 ครั้งเมื่อทำงานที่ 100 Mbit/ ส.
  • Broadcast\Multicast Storm ข้อความนี้จะถูกส่งเมื่อใดก็ตามที่พอร์ตเกินเกณฑ์แพ็กเก็ตออกอากาศ/มัลติคาสต์ (จำนวนแพ็กเก็ตต่อวินาที) ตั้งค่าทั่วโลกสำหรับสวิตช์ แต่ละพอร์ตจะรักษาตัวนับแยกกันสำหรับแพ็กเก็ตการออกอากาศและแพ็กเก็ตแบบหลายผู้รับ เกณฑ์เริ่มต้นคือ 128Kpps สำหรับการออกอากาศและมัลติคาสต์

MIB
ข้อมูลและพารามิเตอร์การจัดการสวิตช์จะถูกจัดเก็บไว้ในฐานข้อมูลการจัดการ (MIB) สวิตช์ใช้โมดูลฐานข้อมูลการจัดการ MIB-II มาตรฐาน ดังนั้นสามารถรับค่าของอ็อบเจ็กต์ที่รวมอยู่ใน MIB ได้โดยใช้เครื่องมือการจัดการเครือข่ายที่ใช้ SNMP นอกเหนือจากมาตรฐาน MIB-II แล้ว สวิตช์ยังรองรับ MIB ของตัวเองในรูปแบบของฐานข้อมูลการจัดการแบบขยายอีกด้วย สามารถรับออบเจ็กต์ของ MIB นี้ได้โดยการระบุ MIB OID (Object Identifier) ​​โดยผู้จัดการ ค่าอ็อบเจ็กต์ MIB สามารถเป็นแบบอ่านอย่างเดียวหรืออ่าน-เขียนได้
อ็อบเจ็กต์ MIB แบบอ่านอย่างเดียวอาจเป็นค่าคงที่ที่ตั้งโปรแกรมไว้ในสวิตช์ หรือตัวแปรที่เปลี่ยนแปลงในขณะที่สวิตช์กำลังทำงาน ตัวอย่างของค่าคงที่แบบอ่านอย่างเดียวคือจำนวนพอร์ตและประเภทของพอร์ต ตัวอย่างของตัวแปรอ่านอย่างเดียวคือค่าทางสถิติ เช่น จำนวนข้อผิดพลาดที่เกิดขึ้น หรือจำนวน KB ของข้อมูลที่ได้รับและส่งผ่านพอร์ต
โดยทั่วไปอ็อบเจ็กต์ MIB แบบอ่าน-เขียนจะเชื่อมโยงกับการตั้งค่าที่ผู้ใช้ดำเนินการ ตัวอย่างเช่น ที่อยู่ IP ของสวิตช์ พารามิเตอร์ Spanning Tree Algorithm และสถานะพอร์ต
หากคุณใช้ระบบการจัดการ SNMP ของบริษัทอื่นในการจัดการสวิตช์ จะมีฟล็อปปี้ดิสก์ที่มีสวิตช์ MIB พร้อมให้บริการเมื่อมีการร้องขอ หากระบบมีฟังก์ชันการดูหรือการแก้ไข MIB พารามิเตอร์ MIB ก็สามารถดึงข้อมูลและแก้ไขได้ (หากแอ็ตทริบิวต์ MIB สามารถเขียนได้) อย่างไรก็ตาม กระบวนการดึงข้อมูลวัตถุ MIB สามารถดำเนินการตามลำดับเท่านั้น เนื่องจากเราจำเป็นต้องทราบ MIB OID และดึงข้อมูลวัตถุทีละรายการ

ผู้ดูแลระบบเครือข่ายสามารถกำหนดค่า SNMPv2 เพื่อรับข้อมูลเครือข่ายจากอุปกรณ์เครือข่ายได้ ดังที่แสดงในภาพ ขั้นตอนการกำหนดค่า SNMP พื้นฐานจะดำเนินการในโหมดการกำหนดค่าส่วนกลาง

ขั้นตอนที่ 1.(จำเป็น) กำหนดค่าสตริงชุมชนและระดับการเข้าถึง (อ่านอย่างเดียวหรืออ่าน-เขียน) โดยใช้คำสั่ง ชุมชนเซิร์ฟเวอร์ snmp เชือก โร | ร.ร .

ขั้นตอนที่ 2.(ไม่บังคับ) บันทึกตำแหน่งของอุปกรณ์โดยใช้คำสั่ง ตำแหน่งเซิร์ฟเวอร์ snmp ข้อความ .

ขั้นตอนที่ 3(ทางเลือก) บันทึกเอกสารผู้ติดต่อของระบบโดยใช้คำสั่ง ผู้ติดต่อเซิร์ฟเวอร์ snmp ข้อความ .

ขั้นตอนที่ 4(ทางเลือก) จำกัดการเข้าถึง SNMP เฉพาะโฮสต์ NMS (ผู้จัดการ SNMP) ที่ได้รับอนุญาตโดย ACL: กำหนด ACL จากนั้นอ้างอิง ACL นั้นโดยใช้คำสั่ง ชุมชนเซิร์ฟเวอร์ snmp สตริงรายการเข้าถึงหมายเลขหรือชื่อ . คำสั่งนี้สามารถใช้ได้ทั้งเพื่อกำหนดสตริงชุมชนและเพื่อจำกัดการเข้าถึง SNMP โดยใช้รายการควบคุมการเข้าถึง หากต้องการ สามารถรวมขั้นตอนที่ 1 และ 4 เข้าด้วยกันได้หากต้องการ อุปกรณ์เครือข่าย Cisco จะรวมคำสั่งสองคำไว้ในคำสั่งเดียวหากป้อนแยกกัน

ขั้นตอนที่ 5(ทางเลือก) ระบุผู้รับการดำเนินการดักจับ SNMP โดยใช้คำสั่ง โฮสต์เซิร์ฟเวอร์ snmp รหัสโฮสต์ [ รุ่น { 1 | 2ซี | 3 [ รับรองความถูกต้อง | ไม่มีสิทธิ์ | ส่วนตัว ]}] สตริงชุมชน. โดยค่าเริ่มต้น ไม่มีการกำหนดตัวจัดการกับดักไว้

ขั้นตอนที่ 6(ทางเลือก) เปิดใช้งานกับดักบนเอเจนต์ SNMP โดยใช้คำสั่ง snmp-server เปิดใช้งานกับดัก ประเภทการแจ้งเตือน. หากไม่มีการกำหนดประเภทการแจ้งเตือนกับดักในคำสั่งนี้ ประเภทการแจ้งเตือนกับดักทั้งหมดจะถูกส่งไป หากคุณต้องการใช้กับดักประเภทใดประเภทหนึ่ง คุณต้องใช้คำสั่งนี้ซ้ำ

บันทึก. ตามค่าเริ่มต้น SNMP ไม่มีการติดตั้งกับดัก หากไม่มีคำสั่งนี้ ผู้จัดการ SNMP จะต้องสำรวจเพื่อรับข้อมูลที่เกี่ยวข้องทั้งหมด

กำลังตรวจสอบการตั้งค่า SNMP

มีโซลูชันซอฟต์แวร์มากมายสำหรับการดูเอาต์พุต SNMP ในส่วนหนึ่งของหลักสูตรของเรา เซิร์ฟเวอร์ Kiwi Syslog จะแสดงข้อความ SNMP ที่เกี่ยวข้องกับกับดัก SNMP

PC 1 และ R1 ได้รับการกำหนดค่าให้แสดงเอาต์พุตที่เกี่ยวข้องกับ SNMP trap ใน SNMP Manager

ดังแสดงในรูปที่ 1 พีซี 1 ได้รับการกำหนดที่อยู่ IP เป็น 192.168.1.3/24 ติดตั้งเซิร์ฟเวอร์ Syslog Kiwi บนพีซี 1

หลังจากกำหนดค่า R1 แล้ว เมื่อมีเหตุการณ์ที่ตรงตามข้อกำหนดของกับดักเกิดขึ้น กับดัก SNMP จะถูกส่งไปยังตัวจัดการ SNMP ตัวอย่างเช่น หากสถานะอินเทอร์เฟซเปลี่ยนเป็นใช้งานอยู่ กับดักจะถูกส่งไปยังเซิร์ฟเวอร์ การเปลี่ยนแปลงการกำหนดค่าบนเราเตอร์ยังทำให้กับดัก SNMP ถูกส่งไปยังตัวจัดการ SNMP รายการการแจ้งเตือนกับดักมากกว่า 60 ประเภทสามารถดูได้โดยใช้คำสั่ง snmp-server เปิดใช้งานกับดัก?. ในการตั้งค่า R1 ในคำสั่ง snmp-server เปิดใช้งานกับดัก ประเภทการแจ้งเตือนไม่ได้ระบุประเภทการแจ้งเตือนกับดัก ดังนั้นจึงส่งกับดักทั้งหมด

ในรูปที่ 2 ในเมนู ติดตั้ง(การตั้งค่า) ถูกเลือกไว้ ซึ่งหมายความว่าผู้ดูแลระบบเครือข่ายต้องการซอฟต์แวร์ตัวจัดการ SNMP เพื่อยอมรับกับดัก SNMP บนพอร์ต UDP 162

ในรูปที่ 3 บรรทัดบนสุดของเอาต์พุตกับดัก SNMP บ่งชี้ว่าสถานะอินเทอร์เฟซของ GigabitEthernet0/0 เปลี่ยนเป็นแอ็กทีฟแล้ว นอกจากนี้ เมื่อใดก็ตามที่คุณเข้าสู่โหมดการกำหนดค่าส่วนกลางจากโหมดสิทธิพิเศษ ผู้จัดการ SNMP จะได้รับกับดัก ดังที่แสดงในบรรทัดที่เน้นสี

หากต้องการตรวจสอบการกำหนดค่า SNMP ให้ใช้คำสั่งรูปแบบอื่น แสดง snmpในโหมดสิทธิพิเศษ สิ่งที่มีประโยชน์ที่สุดคือเพียงคำสั่ง แสดง snmpเนื่องจากจะแสดงข้อมูลที่โดยปกติแล้วสนใจเมื่อตรวจสอบการกำหนดค่า SNMP ของคุณ เมื่อกำหนดค่า SNMPv3 ตัวเลือกคำสั่งอื่นๆ ส่วนใหญ่จะแสดงเฉพาะส่วนของเอาต์พุตคำสั่งเท่านั้น แสดง snmp. รูปที่ 4 แสดงตัวอย่างผลลัพธ์ แสดง snmp .

ในเอาต์พุตคำสั่ง แสดง snmpข้อมูลเกี่ยวกับสตริงชุมชน SNMP หรือ ACL ที่เกี่ยวข้อง (หากมี) จะไม่แสดง รูปที่ 5 แสดงสตริงชุมชน SNMP และรายการข้อมูลการควบคุมการเข้าถึงที่ส่งออกโดยคำสั่ง แสดงชุมชน snmp .

แม้ว่า SNMP จะมีประโยชน์ในการตรวจสอบและแก้ไขจุดบกพร่อง (ดังแสดงในรูป) แต่ก็อาจทำให้เกิดช่องโหว่ด้านความปลอดภัยได้ ด้วยเหตุผลนี้ ให้ตรวจสอบแนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัยก่อนที่จะใช้ SNMP

SNMPv1 และ SNMPv2c ใช้สตริงชุมชน SNMP ที่ไม่ได้เข้ารหัสเพื่อตรวจสอบสิทธิ์การเข้าถึงอ็อบเจ็กต์ MIB ควรเลือกสตริงชุมชน เช่นเดียวกับรหัสผ่านอื่นๆ อย่างระมัดระวังเพื่อทำให้ยากต่อการถอดรหัส นอกจากนี้ จะต้องเปลี่ยนสตริงการเข้าถึงเป็นประจำตามนโยบายความปลอดภัยของเครือข่าย ตัวอย่างเช่น แถวจะเปลี่ยนไปหากผู้ดูแลระบบเครือข่ายเปลี่ยนบทบาทหรือลาออกจากบริษัท หากคุณใช้ SNMP สำหรับการมอนิเตอร์อุปกรณ์เท่านั้น ให้ใช้ชุมชนแบบอ่านอย่างเดียว

ตรวจสอบให้แน่ใจว่าข้อความ SNMP ไม่เผยแพร่นอกคอนโซลการจัดการ ใช้รายการควบคุมการเข้าถึงเพื่อป้องกันไม่ให้ข้อความ SNMP เข้าถึงอุปกรณ์ที่จำเป็น ต้องใช้รายการควบคุมการเข้าถึงเพื่อจำกัดการเข้าถึงเฉพาะระบบควบคุมบนอุปกรณ์ที่ได้รับการตรวจสอบเท่านั้น

ขอแนะนำให้ใช้โปรโตคอล SNMPv3 ซึ่งให้การรับรองความถูกต้องและการเข้ารหัส มีคำสั่งโหมดการกำหนดค่าส่วนกลางอื่นๆ อีกหลายคำสั่งที่ผู้ดูแลระบบเครือข่ายสามารถใช้เพื่อใช้ประโยชน์จากการรับรองความถูกต้องและการสนับสนุนการเข้ารหัสที่ SNMPv3 มอบให้:

  • ทีม กลุ่มเซิร์ฟเวอร์ snmp ชื่อกลุ่ม { เวอร์ชัน 1 | วี2ซี | v3 { รับรองความถูกต้อง | ไม่มีสิทธิ์ | ส่วนตัว)) สร้างกลุ่ม SNMP ใหม่บนอุปกรณ์
  • ทีม ผู้ใช้เซิร์ฟเวอร์ snmp ชื่อผู้ใช้ ชื่อกลุ่ม v3 [ เข้ารหัส ] [ รับรองความถูกต้อง { md5 | ชะอำ) รหัสผ่านการรับรองความถูกต้อง ] [ ส่วนตัว { รายละเอียด | 3des | ใช่ { 128 | 192 | 256 )) priv-password ] ใช้เพื่อเพิ่มผู้ใช้ใหม่ในกลุ่ม SNMP ที่กำหนดไว้ในคำสั่ง กลุ่มเซิร์ฟเวอร์ snmp ชื่อกลุ่ม .

บันทึก. การกำหนดค่า SNMPv3 อยู่นอกเหนือขอบเขตของโปรแกรมการฝึกอบรม CCNA

มีการเขียนมากมายเกี่ยวกับความจริงที่ว่าในชื่อ Simple Network Management Protocol คำว่า Simple สามารถเขียนได้อย่างปลอดภัยด้วยเครื่องหมายคำพูด โปรโตคอล SNMP นั้นค่อนข้างง่ายจากมุมมองของการสร้างเอเจนต์ SNMP แต่ที่ด้านข้างของซอฟต์แวร์การจัดการ (ตัวจัดการ SNMP) การประมวลผลโครงสร้างข้อมูลที่ซับซ้อนที่มีความสามารถของมักเป็นงานที่ไม่สำคัญ

เราได้พยายามทำให้กระบวนการตั้งค่าการรวบรวมข้อมูลและเหตุการณ์ SNMP ง่ายขึ้น และอนุญาตให้ผู้ใช้ในระหว่างกระบวนการนี้:

  • อย่าดูภายในไฟล์ MIB
  • ไม่รู้ว่า OID คืออะไร และไม่เคยใช้งานกับพวกมันเลย
  • อย่าใช้ยูทิลิตี้ SNMP แยกต่างหากเพื่อดูตัวอย่างข้อมูลระหว่างการตั้งค่า

ขั้นตอนที่ 1: เพิ่มไฟล์ MIB

ก่อนอื่นคุณต้องเข้าใจไฟล์ MIB ก่อน คำอธิบายของตรรกะของการเชื่อมต่อระหว่างองค์ประกอบข้อมูลและไวยากรณ์ถูกนำมาใช้ใน SNMP โดยใช้ไฟล์เหล่านี้เพื่อลดภาระบนเครือข่ายและทำให้การใช้งานตัวแทนง่ายขึ้น อย่างไรก็ตาม ผู้ใช้มักไม่ต้องการเข้าใจโครงสร้างภายในของตนเสมอไป

เมื่อเริ่มต้น โมดูล SNMP ของระบบ AggreGate Network Manager ของเราจะโหลดไฟล์ MIB ทั้งหมดที่อยู่ในโฟลเดอร์เซิร์ฟเวอร์พิเศษ จากนั้นให้คุณเพิ่มไฟล์ใหม่โดยใช้กล่องโต้ตอบง่ายๆ:

เมื่อดาวน์โหลดไฟล์แล้ว ไฟล์เหล่านั้นจะถูกคอมไพล์โดยอัตโนมัติ ตัวแก้ไข MIB ในตัวพร้อมการเน้นไวยากรณ์ใช้ได้เฉพาะในกรณีที่ MIB ปรากฏไม่สอดคล้องกับข้อกำหนดเฉพาะ ควรใช้น้อยมาก

บรรณาธิการ MIB



นี่คือจุดที่งานกับไฟล์ MIB สิ้นสุดลง จากนั้นชื่อจะใช้สำหรับการจัดกลุ่มเชิงตรรกะของข้อมูลที่รวบรวมไว้แล้วเท่านั้น หากจำเป็น คุณสามารถดูและค้นหาไฟล์ที่ดาวน์โหลดในตาราง MIB ได้ แต่ก็ไม่จำเป็นในระหว่างการทำงานปกติ

โต๊ะเอ็มไอบี


ขั้นตอนที่ 2: เชื่อมต่ออุปกรณ์ SNMP

ในกรณีของการสร้างระบบการตรวจสอบแบบคลาสสิก โดยปกติขั้นตอนนี้ไม่จำเป็น เนื่องจากอุปกรณ์ทั้งหมดจะถูกเพิ่มเข้าสู่ระบบโดยอัตโนมัติในระหว่างการค้นพบอุปกรณ์เป็นระยะ (การค้นพบเครือข่าย) อย่างไรก็ตาม เมื่อเพิ่มอุปกรณ์ที่ตรวจพบโดยการสแกนเครือข่าย จะมีการดำเนินการตามขั้นตอนเดียวกันโดยประมาณ:

ขั้นตอนที่ 3: ศึกษาภาพรวมของอุปกรณ์

หลังจากเสร็จสิ้นขั้นตอนการเชื่อมต่ออุปกรณ์ ระบบจะใช้เวลาหลายวินาทีถึงหลายนาทีในการโพลอุปกรณ์ภายใน MIB ที่เลือก เมื่อไอคอนอุปกรณ์เปลี่ยนเป็นสีเขียว คุณสามารถเปิดและตรวจสอบสิ่งที่เรียกว่า “device snapshot” ได้:

สแน็ปช็อตนี้รวบรวมสาระสำคัญเกือบทั้งหมดของแนวทางการทำงานกับข้อมูล SNMP ของเรา ประการแรกจะมีข้อมูลอุปกรณ์จริงทั้งหมด "อยู่ในมือ" เสมอ ในกรณีนี้ ข้อมูลทั้งหมดจะถูกอ่านเพียงครั้งเดียว การโพลครั้งต่อๆ ไปจะดำเนินการสำหรับเมตริกที่สำคัญเท่านั้น การอ่านสแนปช็อตของอุปกรณ์ซ้ำทั้งหมดจะดำเนินการวันละครั้ง เพื่อลดภาระบนเครือข่าย คุณสามารถปิดใช้งานได้อย่างสมบูรณ์ สแน็ปช็อตของอุปกรณ์จะถูกบันทึกลงในฐานข้อมูลเมื่อรีสตาร์ทระบบการตรวจสอบ

โดยทั่วไป ไม่จำเป็นต้องใช้ยูทิลิตี้ภายนอกใดๆ เมื่อคุณต้องการค้นหาข้อมูลที่เหมาะสมในการตรวจสอบตามคำอธิบายไฟล์ MIB หรือค่าต่างๆ ข้อมูลทั้งหมดถูกจัดกลุ่มตามไฟล์ MIB แล้ว แต่คุณยังสามารถจัดกลุ่มตามลำดับชั้น OID ได้ด้วย:

หากต้องการดูคำอธิบายโดยละเอียดของตัววัดหรือตารางที่มีอยู่ในไฟล์ MIB เพียงเลื่อนเมาส์ไปเหนือคำอธิบายหรือค่าของตัววัด คำแนะนำเครื่องมือยังแสดงประเภทข้อมูล SNMP และ OID แบบเต็ม:

หากเมตริกสามารถรับค่าตัวเลขค่าใดค่าหนึ่งจากหลายค่าที่อธิบายไว้ในไฟล์ MIB เป็นค่าคงที่ของข้อความ สแน็ปช็อตของอุปกรณ์จะแสดงค่าคงที่ที่สอดคล้องกับค่าปัจจุบันทันที รายการค่าคงที่ทั้งหมดและค่าตัวเลขสามารถดูได้จากเมนูบริบท:

ในกรณีนี้ คุณสามารถดูค่าตัวเลขปัจจุบันได้ในคำแนะนำเครื่องมือเสมอ สำหรับเมตริกที่แก้ไขได้ ง่ายกว่านั้นอีก: คุณสามารถเลือกค่าคงที่และดูค่าได้โดยตรงในรายการแบบเลื่อนลง:

แต่วิธีการของเราในการทำงานกับข้อมูล SNMP นั้นมีประโยชน์มากที่สุดเมื่อประมวลผลตาราง ตาราง SNMP แต่ละตารางจะแสดงในสแน็ปช็อตอุปกรณ์เป็นเมตริกประเภทตารางแยกกัน:

การแก้ไขข้อมูลในตารางสามารถทำได้โดยตรงในขณะที่ดู เช่น หากต้องการปิดใช้งานอินเทอร์เฟซเครือข่าย เพียงแค่เปลี่ยนค่าฟิลด์ ถ้าสถานะผู้ดูแลระบบบนบรรทัดที่เหมาะสม

เมื่อคุณวางเมาส์เหนือส่วนหัวของคอลัมน์ คำแนะนำเครื่องมือจะแสดงคำอธิบายของฟิลด์ที่ได้รับจากไฟล์ MIB รวมถึงประเภทและ OID:

หากมีหลายตารางที่เกี่ยวข้องกัน เช่น การใช้ดัชนีภายนอกหรือส่วนเสริม ระบบจะประมวลผลความสัมพันธ์ภายในทั้งหมดโดยอัตโนมัติ และนำข้อมูลของตารางที่เกี่ยวข้องมารวมเป็นหนึ่งเดียว ในกรณีส่วนใหญ่ ผู้ใช้จะไม่ได้ตระหนักถึงความซับซ้อนดังกล่าวด้วยซ้ำ ตัวอย่างเช่น นี่คือลักษณะของตาราง hrSWRunPerfTable:

ที่ระดับไฟล์ MIB ตารางนี้ประกอบด้วยสองคอลัมน์ ( hrSWRunPerfCPUและ hrSWRunPerfMem) ขยายตาราง hrSWRunTable. ในสแน็ปช็อตของอุปกรณ์ ตารางเหล่านี้จะถูกรวมเข้าด้วยกันแล้ว ซึ่งช่วยให้วิเคราะห์ข้อมูล สร้างรายงานและแผนภูมิ กำหนดค่าพื้นที่จัดเก็บข้อมูล ฯลฯ ได้ง่ายขึ้น

เนื่องจากโมเดลข้อมูลแบบรวมของแพลตฟอร์ม AggreGate นั้นมีตารางเป็นศูนย์กลาง ตารางข้อมูล SNMP จึงเป็นตัวเลือกที่เหมาะสำหรับการประมวลผลแบบเนทีฟ ช่วยสร้างโทโพโลยี L2/L3 วิเคราะห์ข้อมูล MPLS TE และ MPLS VPN ตรวจสอบและสร้างการทดสอบ IP SLA รวมถึงงานที่เรียบง่ายกว่าหลายร้อยงาน

ขั้นตอนที่ 4: ตั้งค่าระยะเวลาการลงคะแนนและระยะเวลาการเก็บรักษา

AggreGate Network Manager เป็นทั้งแพลตฟอร์มและผลิตภัณฑ์แบบแพ็กเกจ ดังนั้นในกรณีส่วนใหญ่ หลังจากเพิ่มอุปกรณ์โดยอัตโนมัติหรือด้วยตนเอง ระยะเวลาการโพลและระยะเวลาการจัดเก็บตัววัดจะได้รับการกำหนดค่าไว้ล่วงหน้าแล้วสำหรับตัววัดและตารางทั้งหมดที่ระบบ "เข้าใจ" กล่าวคือ แสดงบนแดชบอร์ดและวิเคราะห์ว่าจำเป็นต้องสร้างข้อความแจ้งเตือนหรือไม่

คุณสามารถปรับการตั้งค่าสำหรับการโพล (การซิงโครไนซ์) และการจัดเก็บตัวชี้วัดผ่านเมนูบริบทหรือผ่านการตั้งค่าบัญชีของคุณ (สำหรับตัวชี้วัดทั้งหมดในครั้งเดียว)

การตั้งค่าการโพลและการจัดเก็บ


กล่องโต้ตอบการตั้งค่าพื้นที่เก็บข้อมูลจะแสดงเฉพาะระยะเวลาการจัดเก็บข้อมูลสำหรับข้อมูล "ดิบ" ในฐานข้อมูลปกติ (เชิงสัมพันธ์หรือ NoSQL ขึ้นอยู่กับการตั้งค่าเซิร์ฟเวอร์) ในกรณีส่วนใหญ่ ข้อมูล SNMP จะถูกจัดเก็บไว้ในฐานข้อมูล Round-Robin (RRD) ซึ่งสร้างไว้ในแพลตฟอร์ม AggreGate ว่าด้วยเรื่องของการสร้างสรรค์ ช่องทางสถิติซึ่งถ่ายโอนหน่วยเมตริกและส่วนของตารางไปยังฐานข้อมูลแบบวงแหวน จะเป็นบทความแยกต่างหาก

ขั้นตอนที่ 5: ก้าวไปสู่การประมวลผลข้อมูลและการแสดงภาพ

เมื่อข้อมูลถูกรวบรวมและจัดเก็บไว้ในฐานข้อมูลเซิร์ฟเวอร์ คุณสามารถเริ่มใช้เพื่อธุรกิจได้ ซึ่งก็คือสำหรับการตรวจสอบและจัดการโครงสร้างพื้นฐานด้านไอที เมนูบริบทของตัววัดใดๆ ในภาพรวมของอุปกรณ์ช่วยให้สามารถเข้าถึงวิซาร์ดที่ช่วยให้คุณสามารถเริ่มกำหนดค่าการเตือน รายงาน กราฟ ข้อความค้นหา แดชบอร์ด และเครื่องมือการวิเคราะห์และการแสดงภาพอื่นๆ

การใช้เครื่องมือเหล่านี้ ผลกระทบของหน่วยวัดและตารางต่อการดำเนินการทั่วทั้งระบบในการค้นหาสาเหตุของความล้มเหลว การวิเคราะห์ประสิทธิภาพ การวางแผนและสินค้าคงคลัง การจัดการการกำหนดค่า และฟังก์ชันระบบอื่นๆ ได้รับการกำหนดค่า ระหว่างทางอินเทอร์เฟซต่างๆ จะถูก "วาด":

ผลที่ตามมา

กระบวนการที่อธิบายไว้ข้างต้นอาจดูซับซ้อนเนื่องจากมีรายละเอียดมากมายที่กล่าวถึง แต่ในทางปฏิบัติ ตั้งแต่วินาทีที่คุณเชื่อมต่ออุปกรณ์ใหม่ไปจนถึงการแสดงข้อมูลเฉพาะของอุปกรณ์บนแดชบอร์ดมาตรฐาน ใช้เวลาเพียงไม่กี่นาที ในช่วงเวลานี้ จำเป็นต้องออกจากระบบของเราในขณะที่ค้นหาไฟล์ MIB ที่ระบุบนเว็บไซต์ของผู้ผลิตอุปกรณ์ที่เชื่อมต่อเท่านั้น

เมื่อตั้งค่าการตรวจสอบ คุณไม่จำเป็นต้องระบุชื่อของ MIB ป้อน OID และตัวระบุระดับต่ำอื่นๆ ด้วยตนเอง ทำให้การตั้งค่าการตรวจสอบ SNMP ค่อนข้างรวดเร็วและง่ายดาย

แน่นอนว่าเรายังมีงานต้องทำอยู่ จำเป็นต้องมีกลไกที่ได้รับการปรับปรุงสำหรับการเลือกหน่วยวัดแต่ละรายการเพื่อหลีกเลี่ยงการสำรวจ MIB ทั้งหมดแม้แต่ครั้งเดียว ไม่จำเป็นต้องแยกแต่ละแถวและคอลัมน์ของตาราง SNMP ออกจากการสำรวจ เราสนใจที่จะทราบเกี่ยวกับข้อบกพร่องอื่นๆ ในกระบวนการตั้งค่าการตรวจสอบ SNMP ในระบบของเรา

และรายละเอียด?

บทความนี้ไม่ได้เกี่ยวข้องกับการรับ การประมวลผล และส่งกับดัก SNMP การทำงานร่วมกับ SNMP v3 และแง่มุมอื่นๆ เลย

สำหรับเรื่องราวที่มีรายละเอียดมากขึ้น เราขอเชิญ Habrazhitelnik ทุกคนเข้าร่วมการสัมมนาทางเว็บ การตรวจสอบและการจัดการผ่าน SNMP,ที่จะเกิดขึ้น 26 พฤษภาคม 2558 เวลา 11:00 นตามเวลามอสโก ในการสัมมนาผ่านเว็บนี้ เราจะสาธิตกระบวนการทั้งหมดที่อธิบายไว้ข้างต้นแบบสดๆ รวมถึงวิธีอื่นๆ อีกมากมายในการตรวจสอบเครือข่าย เซิร์ฟเวอร์ และอุปกรณ์ที่ไม่ได้มาตรฐานโดยใช้ SNMP