2010-07-11 11 views
10

Tôi cần tạo một tác nhân trong SNMP4J, nhưng tài liệu về cách bắt đầu khá kém. Có ai có bất kỳ kinh nghiệm với SNMP4J và có thể cho tôi một ý tưởng về làm thế nào để bắt đầu? Cảm ơn.Bắt đầu với SNMP4J

+0

thậm chí bạn có thể xem xét thân thiệnSnmp, trừu tượng hơn snmp4j .http: //www.friendlysnmp.org/ – Inv3r53

Trả lời

10

Bạn có thể tải về mã nguồn cho SNMP4JAgent đây:

http://www.snmp4j.org/html/download.html

Mã nguồn bao gồm một đại lý mẫu - nhìn trong gói org.snmp4j.agent.example cho tất cả các lớp học có liên quan.

http://www.snmp4j.org/agent/doc/org/snmp4j/agent/example/SampleAgent.html

Một cách để bắt đầu sẽ là để tạo ra một đại lý bằng cách sử dụng mã ví dụ và sau đó sửa đổi nó cho phù hợp với nhu cầu của bạn. JavaDoc mô tả từng lớp là một chút terse, nhưng nó hoàn thành.

+1

Giới thiệu về cách chạy SampleAgent, tôi đã từng viết blog tại đây, http://www.lextm.com/2009 /09/trident-sign-how-to-set-up-snmp4j-agent.html –

+0

tôi đã tạo Snmp Agent sử dụng Snmp4j .... chỉ vấn đề tôi có là làm thế nào có thể cho phép/mã để chạy đại lý của tôi mãi mãi ... –

1

Tốt tài liệu của SNMPv3 thực hiện bằng cách sử dụng thư viện SNMP4j thực sự khó tìm. Không có ví dụ nào về các tác nhân SNMPv3 trong tài liệu chính thức. Tôi đã viết một SNMP Agent cơ bản có thể kết nối bằng giao thức SNMPv3 và thực hiện các thao tác GET và SET trên máy chủ.

import java.io.IOException; 

import org.snmp4j.PDU; 
import org.snmp4j.ScopedPDU; 
import org.snmp4j.Snmp; 
import org.snmp4j.TransportMapping; 
import org.snmp4j.UserTarget; 
import org.snmp4j.event.ResponseEvent; 
import org.snmp4j.mp.MPv3; 
import org.snmp4j.mp.SnmpConstants; 
import org.snmp4j.security.AuthGeneric; 
import org.snmp4j.security.AuthSHA; 
import org.snmp4j.security.PrivAES128; 
import org.snmp4j.security.PrivacyGeneric; 
import org.snmp4j.security.SecurityModels; 
import org.snmp4j.security.SecurityProtocols; 
import org.snmp4j.security.USM; 
import org.snmp4j.security.UsmUser; 
import org.snmp4j.smi.Address; 
import org.snmp4j.smi.GenericAddress; 
import org.snmp4j.smi.OID; 
import org.snmp4j.smi.OctetString; 
import org.snmp4j.smi.TransportIpAddress; 
import org.snmp4j.smi.VariableBinding; 
import org.snmp4j.transport.DefaultTcpTransportMapping; 
import org.snmp4j.transport.DefaultUdpTransportMapping; 

public class SNMPV3Agent { 

    private Address nmsIP; 
    private String user; 
    private String securityName; 
    private String privacyPassword; 
    private String authorizationPassword; 
    private AuthGeneric authProtocol; 
    private PrivacyGeneric privacyProtocol; 
    private String protocol; 

    private long timeOut = 1000L; 
    private int noOfRetries = 2; 

    private Snmp snmp; 
    private UserTarget target; 

    SNMPV3Agent(String ip, String protocol, int snmpPort, String username, 
      String securityName, String privacyPassword, String authPassowrd, 
      AuthGeneric authProtocol, PrivacyGeneric privacyProtocol) { 

     nmsIP = GenericAddress.parse(protocol + ":" + ip + "/" + snmpPort); 
     System.out.println("NMS IP set : " + nmsIP.toString()); 

     this.protocol = protocol; 
     this.user = username; 
     this.securityName = securityName; 
     this.privacyPassword = privacyPassword; 
     this.authorizationPassword = authPassowrd; 
     this.authProtocol = authProtocol; 
     this.privacyProtocol = privacyProtocol; 

    } 

    public static void main(String[] args) { 

     SNMPV3Agent agent = new SNMPV3Agent("nms/server-ip", "udp", 162, 
       "abhinav", "abhinav", "myprivpass", "myauthpass", 
       new AuthSHA(), new PrivAES128()); 
     try { 
      agent.startAgent(); 
      ResponseEvent response = agent 
        .snmpGetOperation(SnmpConstants.sysName); 
      System.out.println(response.getResponse()); 
      // Similarly you can perform set operation. 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    public void startAgent() throws IOException { 
     if (snmp == null) { 
      TransportMapping<? extends TransportIpAddress> transport = null; 
      if (protocol.equalsIgnoreCase("udp")) { 
       System.out.println("UDP Protocol selected."); 
       transport = new DefaultUdpTransportMapping(); 
      } else { 
       System.out.println("TCP Protocol selected."); 
       transport = new DefaultTcpTransportMapping(); 
      } 
      snmp = new Snmp(transport); 
      USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(
        MPv3.createLocalEngineID()), 0); 
      SecurityModels.getInstance().addSecurityModel(usm); 
      transport.listen(); 
      snmp.getUSM().addUser(
        new OctetString(user), 
        new UsmUser(new OctetString(securityName), authProtocol 
          .getID(), new OctetString(authorizationPassword), 
          privacyProtocol.getID(), new OctetString(
            privacyPassword))); 

      target = createUserTarget(); 
     } 

    } 

    public ResponseEvent snmpSetOperation(VariableBinding[] vars) 
      throws IOException { 
     PDU setPdu = new ScopedPDU(); 
     for (VariableBinding variableBinding : vars) { 
      setPdu.add(variableBinding); 
     } 
     return snmp.send(setPdu, target); 
    } 

    public ResponseEvent snmpGetOperation(OID oid) throws IOException { 

     PDU getPdu = new ScopedPDU(); 
     getPdu.add(new VariableBinding(oid)); 
     return snmp.get(getPdu, target); 
    } 

    private UserTarget createUserTarget() { 
     UserTarget target = new UserTarget(); 
     target.setAddress(nmsIP); 
     target.setRetries(noOfRetries); 
     target.setTimeout(timeOut); 
     target.setVersion(3); 
     target.setSecurityLevel(3); 
     target.setSecurityName(new OctetString(securityName)); 
     return target; 
    } 

    public long getTimeOut() { 
     return timeOut; 
    } 

    public void setTimeOut(long timeOut) { 
     this.timeOut = timeOut; 
    } 

    public int getNoOfRetries() { 
     return noOfRetries; 
    } 

    public void setNoOfRetries(int noOfRetries) { 
     this.noOfRetries = noOfRetries; 
    } 
} 

Thêm các hoạt động khác như GETBulk sẽ tương đối dễ dàng khi bạn hiểu cách thức hoạt động của GET và SET. Hãy cho tôi biết nếu bạn cần giải thích thêm trong các ý kiến.