SNMP4j V3例子

package snmp4j;
import java.io.IOException;
import org.snmp4j.CommunityTarget;
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.AuthMD5;
import org.snmp4j.security.PrivDES;
import org.snmp4j.security.SecurityLevel;
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.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;
public class GetOID {
 
 private static final OctetString NO_AUTH = new OctetString

("noAuthUser");
 private static final OctetString NO_AUTH_CONTEXT_NAME = new 

OctetString("noAuth");
 
 private static final OctetString AUTH = new OctetString("authUser");
 private static final OctetString AUTH_CONTEXT_NAME = new OctetString

("auth");
 
 private static final OctetString PRIV = new OctetString("privUser");
 private static final OctetString PRIV_CONTEXT_NAME = new OctetString

("priv");
 
 private static final OID AUTH_PROTOCOL = AuthMD5.ID;
 private static final OctetString AUTH_PASS = new OctetString

("authUser");
 private static final OID PRIV_PROTOCOL = PrivDES.ID;
 private static final OctetString PRIV_PASS = new OctetString

("privUser");
 
 public static void main(String[] args) {
  OID oid = new OID("1.3.6.1.2.1.25.1.3.0");
  Address address = GenericAddress.parse("udp:localhost/8001");
  getOIDValueV2(oid, address);
  getOIDValueV3(1, oid, address);
  getOIDValueV3(2, oid, address);
  getOIDValueV3(3, oid, address);
 }
 
 /**
  *
  * @param type==1, snmp v3, no authentication and no privacy
  *        type==2, snmp v3, authentication and no privacy
  *        type==3, snmp v3, authentication and privacy
  */
 
 private static void getOIDValueV3(int type, OID oid, Address address) 

{
  try {
   long startTime = System.currentTimeMillis();
   Snmp snmp = null;
   OctetString securityName = null;
   OctetString contextName = null;
   int securityLevel = 0;
   switch (type) {
    case 1:
     securityName = NO_AUTH;
     contextName = NO_AUTH_CONTEXT_NAME;
     snmp = createSnmpSession(securityName, null, null, null, null);
     securityLevel = SecurityLevel.NOAUTH_NOPRIV;
     break;
    case 2:
     securityName = AUTH;
     contextName = AUTH_CONTEXT_NAME;
     snmp = createSnmpSession(securityName,
       AUTH_PROTOCOL, AUTH_PASS, null, null);
     securityLevel = SecurityLevel.AUTH_NOPRIV;
     break;
    case 3:
     securityName = PRIV;
     contextName = PRIV_CONTEXT_NAME;
     snmp = createSnmpSession(securityName,
       AUTH_PROTOCOL, AUTH_PASS, PRIV_PROTOCOL, PRIV_PASS);
     securityLevel = SecurityLevel.AUTH_PRIV;
     break;
    default:
     System.out.println("Valid type is 0~3.");
     break;
   }
   snmp.listen();
   UserTarget myTarget = new UserTarget();
   myTarget.setAddress(address);
   myTarget.setVersion(SnmpConstants.version3);// org.snmp4j.mp.*;
   myTarget.setSecurityLevel(securityLevel);
   myTarget.setSecurityName(securityName);
   ScopedPDU pdu = new ScopedPDU();
   VariableBinding var = new VariableBinding(oid);
   pdu.add(var);
   pdu.setContextName(contextName);
   pdu.setType(PDU.GET);
   ResponseEvent response = snmp.send(pdu, myTarget);
   System.out.println(snmp.getUSM().getUserTable().getUser

(securityName));
   System.out.println(response.getResponse());
   System.out.println(response.getError());
   System.out.println("The cost time for snmpv3:" + 

(System.currentTimeMillis() - startTime));
  } catch (IOException e) {
   e.printStackTrace();
   System.out.println(e.getMessage());
   return;
  }
 }
 
 private static Snmp createSnmpSession(OctetString securityName,
   OID authProtocol, OctetString authPass,
   OID privacyProtocol, OctetString privacyPass) throws IOException {
   TransportMapping transport;
   transport = new DefaultUdpTransportMapping();
   Snmp snmp = new Snmp(transport);
   USM usm = new USM(SecurityProtocols.getInstance(), new
   OctetString(MPv3.createLocalEngineID()), 0);
   SecurityModels.getInstance().addSecurityModel(usm);
   UsmUser user = new UsmUser(securityName,
     authProtocol, authPass,
     privacyProtocol, privacyPass);
   snmp.getUSM().addUser(securityName, user);
   return snmp;
 }
 
 private static void getOIDValueV2(OID oid, Address address){
  try {
   long startTime = System.currentTimeMillis();
   TransportMapping transport = new DefaultUdpTransportMapping();
   Snmp snmp = new Snmp(transport);
   snmp.listen();
   // pdu
   PDU pdu = new PDU();
   pdu.add(new VariableBinding(oid));
   pdu.setType(PDU.GET);
   // target
   CommunityTarget target = new CommunityTarget();
   target.setCommunity(new OctetString("public"));
   target.setAddress(address);
   target.setVersion(SnmpConstants.version2c);
   //
   ResponseEvent response = snmp.send(pdu, target);
   System.out.println(response.getResponse());
   System.out.println(response.getError());
   System.out.println("The cost time for snmpv2:" + 

(System.currentTimeMillis() - startTime));
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值