snmpv3trap.java.txt
上传用户:aonuowh
上传日期:2021-05-23
资源大小:35390k
文件大小:11k
源码类别:

SNMP编程

开发平台:

C/C++

  1. /* $Id: snmpv3trap.src,v 1.4 2002/09/09 05:36:52 parasuraman Exp $ */
  2. /*
  3.  * @(#)snmpv3trap.java
  4.  * Copyright (c) 1996-2003 AdventNet, Inc. All Rights Reserved.
  5.  * Please read the associated COPYRIGHTS file for more details.
  6.  */
  7. /**
  8.  * This is an example program to explain how to write an application to send a
  9.  * v3 Trap message using com.adventnet.snmp.snmp2 package of AdventNetSNMP2 api.
  10.  * The user could run this application by giving any one of the following usage.
  11.  *  
  12.  * java snmpv3trap [-d] [-p port] [-e engineID(0x....)] [-a auth_protocol] [-w auth_password] [-s priv_password] [-i context_id] userName host TimeTicksvalue OIDvalue [OID {INTEGER | STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | COUNTER | COUNTER64 | UNSIGNED32} value] ...
  13.  * e.g.
  14.  * java snmpv3trap -e 0x000012141516171819202121 -a MD5 -w initial2Pass -i initial initial2 10.3.2.120 16352 .1.3.6.1.4.1.2162.1000.2 .1.3.6.1.4.1.2162.1001.21.0 STRING TrapTest
  15.  *
  16.  * If the oid is not starting with a dot (.) it will be prefixed by .1.3.6.1.2.1 .
  17.  * So the entire OID of 1.1.0 will become .1.3.6.1.2.1.1.1.0 . You can also
  18.  * give the entire OID .
  19.  *
  20.  * Options:
  21.  * [-d]                  - Debug output. By default off.
  22.  * [-p] <port>           - remote port no. By default 162.
  23.  * [-e] <engineID>       - Engine ID.
  24.  * [-a] <autProtocol>    - The authProtocol(MD5/SHA). Mandatory if authPassword is specified
  25.  * [-w] <authPassword>   - The authentication password.
  26.  * [-s] <privPassword>   - The privacy protocol password. Must be accompanied with auth password and authProtocol fields.
  27.  * [-n] <contextName>    - The contextName to be used for the v3 pdu.
  28.  * [-i] <contextID>      - The contextID to be used for the v3 pdu.
  29.  * <username>         - The v3 principal/userName. Mandatory.
  30.  * <timeticks> Mandatory - the value of object sysUpTime when the event occurred
  31.  * <OID-value> Mandatory - Object Identifier  
  32.  * <host>      Mandatory - The RemoteHost (agent).Format (string without double qoutes/IpAddress).
  33.  * <OID>       Mandatory - Object Identifier.
  34.  * <value>     Mandatory - The object instance value to be set .
  35.  */ 
  36. import java.lang.*;
  37. import java.util.*;
  38. import java.net.*;
  39. import com.adventnet.snmp.snmp2.*;
  40. import com.adventnet.snmp.snmp2.usm.*;
  41. public class snmpv3trap {
  42.   private static final int DEBUG = 0;
  43.   private static final int PORT = 1;
  44.   private static final int AUTH_PROTOCOL = 2;
  45.   private static final int AUTH_PASSWORD = 3;
  46.   private static final int PRIV_PASSWORD = 4;
  47.   private static final int CONTEXT_NAME = 5;
  48.   private static final int CONTEXT_ID = 6;
  49.   private static final int ENGINEID = 7;
  50.   static final int USM_SECURITY_MODEL = 3;
  51.   public static void main(String args[]) {
  52.      // Take care of getting options
  53.     String usage = "snmpv3trap [-d] [-p port][-c community][-g agent-address][-e engineID(0x....)] [-a auth_protocol] [-w auth_password] [-s priv_password] [-n contextName] [-i contextID] nuserName host TimeTicksvalue OIDvalue [OID {INTEGER | STRING | GAUGE | TIMETICKS | OPAQUE | IPADDRESS | COUNTER | COUNTER64 | UNSIGNED32} value] ...";
  54.     String options[] = { "-d", "-p", "-a", "-w", "-s", "-n", "-i", "-e" ,"-c","-g"};
  55.     String values[] = { "None", null, null, null, null, null, null, null,null,null };
  56.    
  57.     String id = new String(""); 
  58. String userName = new String("");
  59. int authProtocol = USMUserEntry.NO_AUTH;
  60. String authPassword = new String ("");
  61. String privPassword = new String ("");
  62. String contextName = new String ("");
  63. String contextID = new String ("");
  64.     ParseOptions opt = new ParseOptions(args,options,values, usage);
  65.     if (opt.remArgs.length<4) opt.usage_error();
  66.     
  67.     // Start SNMP API
  68.     SnmpAPI api;
  69.     api = new SnmpAPI();
  70.     if (values[0].equals("Set")) api.setDebug( true );
  71.     
  72.     SnmpPDU pdu = new SnmpPDU(); 
  73.     Snmp3Message msg = (Snmp3Message)(pdu.getMsg());
  74.     pdu.setCommand( api.TRP2_REQ_MSG );
  75.                        
  76.     // Open session
  77.     SnmpSession session = new SnmpSession(api);
  78.     // set remoteHost
  79.     session.setPeername( opt.remArgs[1] );
  80.     // set version
  81.     session.setVersion( SnmpAPI.SNMP_VERSION_3 ) ;
  82.     
  83.     try {        
  84. if(values[PORT] != null)
  85. session.setRemotePort( Integer.parseInt(values[PORT]) );
  86. else
  87. session.setRemotePort(162);
  88.      if (values[ENGINEID]!=null) {
  89.             id =  values[ENGINEID];
  90.          if(id.startsWith("0x") || id.startsWith("0X"))
  91.              id = new String(gethexValue(values[ENGINEID]));
  92.      }
  93.     }
  94.     catch (NumberFormatException ex) {
  95.         System.err.println("Invalid Integer Arg");
  96.     }
  97. catch (StringIndexOutOfBoundsException sie){
  98.         System.err.println("Invalid engineID. Please specify proper" +
  99. " hex value. Exception = " + sie);
  100. opt.usage_error();
  101. }
  102. userName = opt.remArgs[0];
  103. if ((values[AUTH_PROTOCOL] != null) && (values[AUTH_PASSWORD] != null)) {
  104. if(values[AUTH_PROTOCOL].equals("SHA"))
  105. authProtocol = USMUserEntry.SHA_AUTH;
  106. else 
  107. authProtocol = USMUserEntry.MD5_AUTH;
  108. if(authProtocol==USMUserEntry.NO_AUTH){
  109. System.err.println("Enter authentication protocol");
  110. opt.usage_error();
  111. }
  112. authPassword = values[AUTH_PASSWORD];
  113. if (values[PRIV_PASSWORD] != null) 
  114. privPassword = values[PRIV_PASSWORD];
  115. }
  116. else if ((values[AUTH_PROTOCOL] != null) 
  117. || (values[AUTH_PASSWORD] != null) 
  118. || (values[PRIV_PASSWORD] != null)) {
  119. opt.usage_error();
  120. }
  121. if (values[CONTEXT_NAME] != null)
  122. contextName = values[CONTEXT_NAME];
  123. if (values[CONTEXT_ID] != null) 
  124. contextID = values[CONTEXT_ID];
  125.     createUSMTable(userName.getBytes(), id.getBytes(), authProtocol,
  126. authPassword, privPassword, api);
  127. pdu.setUserName(userName.getBytes());
  128.     // Build trap request PDU    
  129.     // Adding the sysUpTime variable binding 
  130.     SnmpOID oid = new SnmpOID(".1.3.6.1.2.1.1.3.0");
  131.     if (oid.toValue() == null) 
  132.         System.err.println("Invalid OID argument: .1.3.6.1.2.1.1.3.0");
  133.     else {
  134.         SnmpVar var = null ; 
  135.         try {
  136.             var = SnmpVar.createVariable(opt.remArgs[2], SnmpAPI.TIMETICKS);
  137.         }
  138.         catch (SnmpException e) {
  139.             System.err.println("Cannot create variable: " + oid 
  140. +" with value: "+opt.remArgs[1]);
  141.         }
  142.         SnmpVarBind varbind = new SnmpVarBind(oid, var);
  143.         pdu.addVariableBinding(varbind);
  144.         
  145.     }        
  146.     // Adding the snmpTrapOID variable binding
  147.      oid = new SnmpOID(".1.3.6.1.6.3.1.1.4.1.0");
  148.     if (oid.toValue() == null) System.err.println("Invalid OID argument: "
  149. + ".1.3.6.1.6.3.1.1.4.1.0");
  150.     else {
  151.         SnmpVar var = null ;
  152.         try {
  153.             var = SnmpVar.createVariable(opt.remArgs[3], SnmpAPI.OBJID);
  154.         }
  155.         catch (SnmpException e) {
  156.             System.err.println("Cannot create variable: " + oid 
  157. +" with value: "+opt.remArgs[2]);
  158.         }
  159.         SnmpVarBind varbind = new SnmpVarBind(oid, var);
  160.         pdu.addVariableBinding(varbind);
  161.         
  162.     }    
  163.     String agentAddress="";
  164. String community="";
  165. int otherVarBinds=0;
  166.     for (int i=4;i<opt.remArgs.length;) { // add Variable Bindings
  167.       if (opt.remArgs.length < i+3) opt.usage_error(); //need "{OID type value}"
  168.      
  169.         oid = new SnmpOID(opt.remArgs[i++]);
  170.       if (oid.toValue() == null) 
  171.         System.err.println("Invalid OID argument: " + opt.remArgs[i]);
  172.       else 
  173.         addVarBind(pdu, oid, opt.remArgs[i++], opt.remArgs[i++]);
  174.     } // end of add variable bindings
  175. if(values[8]!=null)
  176. {
  177.         oid = new SnmpOID(".1.3.6.1.6.3.18.1.3");
  178.         addVarBind(pdu, oid,"STRING" , values[8]);
  179. }
  180. if(values[9]!=null)
  181. {
  182.         oid = new SnmpOID(".1.3.6.1.6.3.18.1.4");
  183.         addVarBind(pdu, oid,"STRING", values[9]);
  184. }
  185.     try {
  186.         // Opening session
  187.         session.open();
  188.         // Send PDU
  189.          session.send(pdu);
  190.     
  191.     } 
  192.     catch (SnmpException e) {
  193.       System.err.println("Sending PDU"+e.getMessage());
  194.     }
  195.     // close session    
  196.     session.close();
  197.     // stop api thread
  198.     api.close();
  199.     System.exit(0);
  200.   }
  201.  /** <img SRC="images/v3only.jpg" ALT="v3 only"> adds the varbind with specified oid, type and value to the pdu */
  202.     static void addVarBind(SnmpPDU pdu, SnmpOID oid, String type, String value)
  203.     {        
  204.         byte dataType ;
  205.         if (type.equals("INTEGER")) {
  206.         dataType = SnmpAPI.INTEGER;
  207.         } else if (type.equals("STRING")) {
  208.         dataType = SnmpAPI.STRING;
  209.         } else if (type.equals("GAUGE")) {
  210.         dataType = SnmpAPI.GAUGE;
  211.         } else if (type.equals("TIMETICKS")) {
  212.         dataType = SnmpAPI.TIMETICKS;
  213.         } else if (type.equals("OPAQUE")) {
  214.         dataType = SnmpAPI.OPAQUE;
  215.         } else if (type.equals("IPADDRESS")) {
  216.         dataType = SnmpAPI.IPADDRESS;
  217.         } else if (type.equals("COUNTER")) {
  218.         dataType = SnmpAPI.COUNTER;
  219.         } else if (type.equals("OID")) { 
  220.         dataType = SnmpAPI.OBJID;
  221.         } else { // unknown type
  222.         System.err.println("Invalid variable type: " + type);
  223.         return;
  224.         }
  225.         
  226.         SnmpVar var = null;
  227.         try {
  228.         var = SnmpVar.createVariable( value, dataType );
  229.         }
  230.         catch(SnmpException e){
  231.         System.err.println("Cannot create variable: " + oid 
  232. + " with value: " + value);
  233.         return;
  234.         }
  235.         SnmpVarBind varbind = new SnmpVarBind(oid, var);
  236.         pdu.addVariableBinding(varbind);
  237.         
  238.     }
  239.   
  240.   
  241.     private static byte[] gethexValue(String value)
  242.     {
  243.         byte temp;
  244.         byte[] Key=new byte[value.length()/2 - 1];
  245.         String ss,str;
  246.         ss = value.substring(2);
  247.         for(int i = 0; i < ss.length(); i+=2)
  248.         {
  249.             str = ss.substring(i,i+2);
  250.             temp = (byte)Integer.parseInt(str,16);
  251.             Key[i/2] = temp;
  252.         }
  253.         return Key;    
  254.     }
  255.     public static void createUSMTable(byte[] name, byte[] engineID, 
  256. int authProtocol, String authPassword,
  257. String privPassword, SnmpAPI api)
  258.     {
  259.     byte level = 0;
  260.     
  261. USMUserTable uut = (USMUserTable)api.getSecurityProvider().
  262. getTable(USM_SECURITY_MODEL);
  263.     USMUserEntry entry = new USMUserEntry(name, engineID);
  264.     entry.setAuthProtocol(authProtocol);
  265.     if ((authProtocol != USMUserEntry.NO_AUTH) && (authPassword != null))
  266.     {
  267.         byte[] authKey = USMUtils.password_to_key(authProtocol, 
  268. authPassword.getBytes(), 
  269. authPassword.getBytes().length,
  270. engineID);
  271.             entry.setAuthKey(authKey);
  272.             level = 1;
  273.             
  274.             if ((privPassword != null)&&(privPassword.length()>0))
  275.             {
  276.                 byte[] tempKey = USMUtils.password_to_key(authProtocol, 
  277. privPassword.getBytes(),
  278. privPassword.getBytes().length,
  279. engineID);
  280.                 byte privKey[]=new byte[16];
  281.                 System.arraycopy(tempKey,0,privKey,0,16);
  282.                 entry.setPrivKey(privKey);
  283.                 level |= 2;
  284.             }
  285.     }
  286.     
  287.     entry.setSecurityLevel(level);
  288.     uut.addEntry(entry);
  289.     api.setSnmpEngineID(engineID);
  290.     }
  291.     
  292. }