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

SNMP编程

开发平台:

C/C++

  1. /* $Id: snmpv3informreqd.src,v 1.5 2002/09/09 05:36:52 parasuraman Exp $ */
  2. /*
  3.  * @(#)snmpv3informreqd.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 for receiving SNMP Inform Requests using the
  9.  * 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 snmpv3informreqd [options]
  13.  *
  14.  * java snmpv3informreqd [-d] <-p port> <-u user> <-e engineId>
  15.  * [-a authProtocol] [-w auth_password] [-s priv_password]
  16.  * e.g. 
  17.  * java snmpv3informreqd -p 2000 -u inform_test -e 1234 
  18.  * 
  19.  * Mandatory Options:
  20.  * <-p port>        - remote port no.
  21.  * <-u user> - user name
  22.  * <-e engineId> - Engine Id
  23.  *
  24.  * Optional Options:
  25.  * [-d]                - Debug output. By default off.
  26.  * [-a authProtocol]   - Authentication protocol used.
  27.  * [-w auth_password]  - Authentication password used.
  28.  * [-s priv_password]  - Priv protocol used.
  29.  *
  30.  * Note: 
  31.  * 1. If neither of -a, -w, -s are used, then the security level is NO_AUTH, 
  32.  *  NO_PRIV,
  33.  * 2. If -a, -w are used, then the security level is AUTH, NO_PRIV,
  34.  * 3. If -a, -w and -s are used, then the security level is AUTH, PRIV,
  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 snmpv3informreqd implements SnmpClient {
  42.   private final static int PORT = 1;
  43.   private final static int COMMUNITY = 2;
  44.   private final static int USER_NAME = 3;
  45.   private final static int ENGID = 4;
  46.   private final static int AUTH_PROTOCOL = 5;
  47.   private final static int AUTH_PASSWORD = 6;
  48.   private final static int PRIV_PASSWORD = 7;
  49.   static final int USM_SECURITY_MODEL = 3;
  50. SnmpAPI api;
  51. SnmpSession session; 
  52. int localport;
  53. byte[] engineId = null;
  54. public snmpv3informreqd () {
  55.      // Start SNMP API
  56.      api = new SnmpAPI();
  57.    // Create session 
  58.      session = new SnmpSession(api);
  59. }
  60.   public static void main(String args[]) {
  61.         
  62.    // Take care of getting options
  63.    String usage = "snmpv3informreqd [-d] [-p port] [-c community] [-u user] [-e engineId] [-a authProtocol] [-w auth_password] [-s priv_password]";
  64.    String options[] = { "-d", "-p", "-c", "-u", "-e", "-a", "-w", "-s"};
  65.    String values[] = { "None", null, null, null, null, null, null, null};
  66.    ParseOptions opt = new ParseOptions(args,options,values, usage);
  67.    String userName = null;
  68.    int authProtocol = USMUserEntry.NO_AUTH;
  69.    String authPassword = null;
  70.   String privPassword = null;
  71. int privProtocol = 0;
  72. byte secLevel = 0;
  73. snmpv3informreqd infReqObj = new snmpv3informreqd();
  74.     if (values[0].equals("Set")) 
  75. {
  76.    infReqObj.api.setDebug( true );
  77. }
  78.         
  79.     if (opt.remArgs.length > 0) 
  80. {
  81.    opt.usage_error();
  82. }
  83.         
  84.   // Add client to the session 
  85.     infReqObj.session.addSnmpClient(infReqObj);
  86.     // Set local port
  87.     try {
  88. if (values[PORT] != null)
  89.    {
  90.          infReqObj.localport = Integer.parseInt(values[PORT]);
  91.          infReqObj.session.setLocalPort(infReqObj.localport);
  92. }
  93. else 
  94. {
  95.          infReqObj.session.setLocalPort(162);
  96. }
  97. if (values[USER_NAME] != null) 
  98.    {
  99.          userName = values[USER_NAME];
  100. }
  101. if (values[ENGID] != null)
  102. {
  103. infReqObj.engineId = values[ENGID].getBytes();
  104. }
  105. if (values[AUTH_PROTOCOL] != null) 
  106.    {
  107. if(infReqObj.engineId == null) {
  108. System.out.println("EngineID is missing");        
  109. opt.usage_error();
  110. }   
  111. if (values[AUTH_PROTOCOL].equals("SHA"))
  112. {
  113. authProtocol = USMUserEntry.SHA_AUTH;
  114. secLevel |= 0x01;
  115. }
  116. else if (values[AUTH_PROTOCOL].equals("MD5"))
  117. {
  118. authProtocol = USMUserEntry.MD5_AUTH;
  119. secLevel |= 0x01;
  120. }
  121. else
  122. {
  123. authProtocol = USMUserEntry.NO_AUTH;
  124. }
  125.        }
  126.             
  127. if (values[AUTH_PASSWORD] != null) 
  128. {
  129. if(infReqObj.engineId == null) {
  130. System.out.println("EngineID is missing");        
  131. opt.usage_error();
  132. }
  133. if (secLevel == 0x01)
  134. {
  135. authPassword = values[AUTH_PASSWORD];
  136. }
  137. else
  138. {
  139. opt.usage_error();
  140. }
  141.    }
  142.             
  143. if(values[PRIV_PASSWORD] != null) 
  144. {
  145. if(infReqObj.engineId == null) {
  146. System.out.println("EngineID is missing");        
  147. opt.usage_error();
  148. }
  149. if (secLevel == 0x01)
  150. {
  151. privPassword = values[PRIV_PASSWORD];
  152. privProtocol = USMUserEntry.CBC_DES;
  153. secLevel |= 0x02;
  154. }
  155. else
  156. {
  157. opt.usage_error();
  158. }
  159.        }
  160.   }
  161. catch (NumberFormatException ex) {
  162. System.err.println("Invalid Integer Arg");
  163.      }
  164. if(userName != null) {
  165. // Create the USM table entry.
  166. infReqObj.createUSMTable(userName.getBytes(), authProtocol, 
  167. authPassword, privPassword, infReqObj.api);
  168. }
  169. // set community in case of v1/v2c
  170. if(values[COMMUNITY] != null)
  171. infReqObj.session.setCommunity(values[COMMUNITY]);
  172.     // Open the session
  173.     try { 
  174.    infReqObj.session.open(); 
  175. System.out.println ("Waiting to receive SNMP Inform requestsn");
  176. }
  177.     catch (SnmpException e) {
  178.       System.err.println(e);
  179.       System.exit(1);
  180.     }
  181.   }    
  182.     
  183.   public boolean authenticate(SnmpPDU pdu, String community){
  184. if(pdu.getVersion() == SnmpAPI.SNMP_VERSION_3)
  185. return (true);
  186. else
  187. return (pdu.getCommunity().equals(community));
  188.   }
  189.  
  190.   /*
  191.    * Callback method that is invoked on receiving an SNMP Inform request message
  192.    */
  193.   public boolean callback(SnmpSession session,SnmpPDU pdu, int requestID)
  194.   {
  195.     // Check received SNMP PDU command type.
  196.     if (pdu.getCommand() == api.INFORM_REQ_MSG) 
  197.    {
  198.       System.out.println("INFORM REQUEST received from: " + pdu.getAddress());
  199.       System.out.println("nVARBINDS:");
  200.   
  201.       // Print varbinds
  202.       for (Enumeration e=pdu.getVariableBindings().elements();
  203.    e.hasMoreElements();)
  204.   {
  205.         System.out.println(((SnmpVarBind) e.nextElement()).toTagString());
  206.      }
  207.     }
  208.     else
  209.    {
  210.       System.err.println("Unexpected SNMP message recieved.");
  211.    }
  212.     System.out.println("");
  213.   
  214.     return true;
  215.   }
  216.     
  217.   public void debugPrint(String debugOutput) {
  218.   
  219.     System.out.println(debugOutput);
  220.     return;    
  221.   }
  222. /*
  223.  * Method to create the USM user entry in the USM table and the engine Id 
  224.  * entry in the engine table.
  225.  */
  226.   public void createUSMTable(byte[] name, int authProtocol, 
  227. String authPassword, String privPassword, SnmpAPI api)
  228.   {
  229.     byte level = 0;
  230.     USMUserEntry entry = new USMUserEntry(name, engineId);
  231.     entry.setAuthProtocol(authProtocol);
  232.     if ((authProtocol != USMUserEntry.NO_AUTH) && (authPassword != null))
  233.     {
  234.       byte[] authKey = USMUtils.password_to_key(authProtocol, 
  235.    authPassword.getBytes(), 
  236. authPassword.getBytes().length, 
  237. engineId);
  238.       entry.setAuthKey(authKey);
  239.       level = 1;
  240.       if (privPassword != null)
  241.       {
  242.         byte[] tempKey = USMUtils.password_to_key(authProtocol, 
  243. privPassword.getBytes(),
  244. privPassword.getBytes().length,
  245. engineId);
  246.         byte privKey[]=new byte[16];
  247.         System.arraycopy(tempKey,0,privKey,0,16);
  248.         entry.setPrivKey(privKey);
  249.         level |= 2;
  250.       }
  251.     }
  252.     entry.setSecurityLevel(level);
  253. USMUserTable USMTable = (USMUserTable)api.getSecurityProvider().
  254. getTable(USM_SECURITY_MODEL);
  255. USMTable.addEntry(entry);
  256.     byte[] names=entry.getUserName();
  257. byte[] id=entry.getEngineID();
  258.     SnmpEngineEntry e = new SnmpEngineEntry("localhost", localport);
  259.     e.setEngineID(engineId);
  260.     entry.setEngineEntry(e);
  261.     api.setSnmpEngineID(engineId);
  262.   }
  263. }