2011-12-30 23 views

Trả lời

6

Điều này yêu cầu bạn phải đi qua các tài liệu RFC, có nghĩa là điều này không liên quan đến lập trình và có thể thuộc về ServerFault.

Cung cấp cho bạn một số gợi ý:

  1. SNMP v1 định nghĩa một định dạng tin nhắn TRAP đặc biệt, khác với những tin nhắn khác (ví dụ như GET). http://tools.ietf.org/html/rfc1157#page-27 Định dạng thư này không được sử dụng nữa trong SNMP v2 và v3. Nếu một tác nhân SNMP gửi các tin nhắn TRAP như vậy cho v2 hoặc v3, đó có thể là một lỗi.
  2. Kể từ v2, TRAP bắt đầu sử dụng định dạng thông báo chung (giống như GET và vv). Vì vậy, nó được gọi là SNMPv2-Trap-PDU. http://tools.ietf.org/search/rfc3416#page-22
  3. SNMP v3 giới thiệu mô hình bảo mật cho tất cả các thư, vì vậy TRAP cũng nhận được bản cập nhật đó. Nó vẫn dựa trên SNMPv2-Trap-PDU.
+0

Về: "Nếu đại lý SNMP gửi thông báo TRAP đó cho v2 hoặc v3, đó có thể là lỗi". @ lex-li bạn có bất kỳ tham chiếu hoặc url nào cho nhận xét này không? Cảm ơn. – k1eran

+2

Đó là quan điểm cá nhân của tôi dựa trên RFC1157 và RFC3416. Vì định dạng tin nhắn TRAP mới được định nghĩa ở định dạng sau, định dạng cũ trong định dạng cũ nên lỗi thời hoàn toàn. Trong thực tế, tôi đã biết rằng một số thiết bị gửi định dạng cũ cho SNMP v2 (một người dùng #SNMP Library đã báo cáo điều đó với tôi), nhưng tôi nghĩ rằng đó phải là lỗi của chương trình cơ sở. –

+0

Có lẽ, # 3 ở trên, là lý do, Wireshark hiển thị các gói như 'msgVersion: 3' trong phần đầu và' snmpV2-trap' trong 'msgData' (sau khi giải mã) – vyom

2

SNMPv2 xác định bẫy theo cách hơi khác.

Trong một bẫy MIB, SNMPv1 được định nghĩa là bẫy Trap-PDU, SNMPv2 được định nghĩa là THÔNG BÁO-TYPE. SNMPv2 cũng không sử dụng khái niệm bẫy chung, thay vào đó, nó định nghĩa nhiều bẫy cụ thể (nói đúng, thông báo) trong các MIB công cộng.

bẫy SNMPv3, đơn giản là bẫy SNMPv2 có xác thực bổ sung (dựa trên thông tin xác thực) (Kỹ thuật xác thực chung MD5 hoặc SHA) và khả năng bảo mật (Kỹ thuật mã hóa - DES, 3DES, AES128/192/256).

Hầu hết hỗ trợ triển khai SNMP chỉ v1.

Reference_1Reference_2

Dưới đây là mã SNMP4j để gửi bẫy SNMPv3.

public void sendTrap_Version3() { 
    //TrasportMapping 
    TransportMapping transport; 
    try { 
     transport = new DefaultUdpTransportMapping(); 
     transport.listen(); 
     //Creating SNMP object 
     snmp = new Snmp(transport); 

     //Creating USM 
     USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0); 
     SecurityModels.getInstance().addSecurityModel(usm); 

     // Add user to the USM 
     snmp.getUSM().addUser(
       new OctetString("MD5DES"), 
       new UsmUser(new OctetString("MD5DES"), AuthMD5.ID, new OctetString("MD5DESUsrAuthPwd"), PrivDES.ID, 
         new OctetString("MD5DESUsrPrivPwd"))); 

     // Create the target 
     Address targetAddress = GenericAddress.parse("udp:10.120.7.107/162"); 
     UserTarget target = new UserTarget(); 
     target.setAddress(targetAddress); 
     target.setRetries(3); 
     target.setTimeout(5000); 
     target.setVersion(SnmpConstants.version3); 
     target.setSecurityLevel(SecurityLevel.AUTH_PRIV); 
     target.setSecurityName(new OctetString("MD5DES")); 
     // Create PDU 
     ScopedPDU pdu = new ScopedPDU(); 

     pdu.add(new VariableBinding(SnmpConstants.sysUpTime, new TimeTic(new Date().toString()))); 
     pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID,SnmpConstants.linkDown)); 
     pdu.add(new VariableBinding(SnmpConstants.snmpTrapAddress, new IpAddress("127.3.4.1"))); 
     pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.2.2.1.1.1"), new Integer32(1))); 

     pdu.setType(ScopedPDU.TRAP); 
     snmp.send(pdu, target); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

Đoạn mã trên cho v2? Tại sao có liên quan đến bảo mật trong đoạn mã? – ifelsemonkey

Các vấn đề liên quan