⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmprequest.java

📁 snmp4j 1.8.2版 The org.snmp4j classes are capable of creating, sending, and receiving SNMPv1/v2c/v3
💻 JAVA
📖 第 1 页 / 共 4 页
字号:

    if (version == SnmpConstants.version3) {
      USM usm = new USM(SecurityProtocols.getInstance(),
                        new OctetString(MPv3.createLocalEngineID()),
                        engineBootCount);
      SecurityModels.getInstance().addSecurityModel(usm);
      addUsmUser(snmp);
    }
    return snmp;
  }

  private Target createTarget() {
    if (version == SnmpConstants.version3) {
      UserTarget target = new UserTarget();
      if (authPassphrase != null) {
        if (privPassphrase != null) {
          target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
        }
        else {
          target.setSecurityLevel(SecurityLevel.AUTH_NOPRIV);
        }
      }
      else {
        target.setSecurityLevel(SecurityLevel.NOAUTH_NOPRIV);
      }
      target.setSecurityName(securityName);
      return target;
    }
    else {
      CommunityTarget target = new CommunityTarget();
      target.setCommunity(community);
      return target;
    }
  }

  public PDU send() throws IOException {
    Snmp snmp = createSnmpSession();
    this.target = createTarget();
    target.setVersion(version);
    target.setAddress(address);
    target.setRetries(retries);
    target.setTimeout(timeout);
    target.setMaxSizeRequestPDU(maxSizeResponsePDU);
    snmp.listen();

    PDU request = createPDU(target);
    if (request.getType() == PDU.GETBULK) {
      request.setMaxRepetitions(maxRepetitions);
      request.setNonRepeaters(nonRepeaters);
    }
    for (int i=0; i<vbs.size(); i++) {
      request.add((VariableBinding)vbs.get(i));
    }

    PDU response = null;
    if (operation == WALK) {
      walk(snmp, request, target);
      return null;
    }
    else {
      ResponseEvent responseEvent;
      long startTime = System.currentTimeMillis();
      responseEvent = snmp.send(request, target);
      if (responseEvent != null) {
        response = responseEvent.getResponse();
        System.out.println("Received response after "+
                           (System.currentTimeMillis()-startTime)+" millis");
      }
    }
    snmp.close();
    return response;
  }

  private PDU walk(Snmp snmp, PDU request, Target target) throws IOException {
    request.setNonRepeaters(0);
    OID rootOID = request.get(0).getOid();
    PDU response = null;
    final WalkCounts counts = new WalkCounts();
    final long startTime = System.currentTimeMillis();
    TreeUtils treeUtils = new TreeUtils(snmp, new DefaultPDUFactory());
    treeUtils.getSubtree(target, rootOID, null, new TreeListener() {
      public boolean next(TreeEvent e) {
        counts.requests++;
        if (e.getVariableBindings() != null) {
          counts.objects += e.getVariableBindings().length;
          for (int i=0; i<e.getVariableBindings().length; i++) {
            System.out.println(e.getVariableBindings()[i].toString());
          }
        }
        return true;
      }

      public void finished(TreeEvent e) {
        System.out.println();
        System.out.println("Total requests sent:    "+counts.requests);
        System.out.println("Total objects received: "+counts.objects);
        System.out.println("Total walk time:        "+
                           (System.currentTimeMillis()-startTime)+" milliseconds");
        if (e.isError()) {
          System.err.println("The following error occurred during walk:");
          System.err.println(e.getErrorMessage());
        }
      }
    });
    return response;
  }


  private static Vector getVariableBindings(String[] args, int position) {
    Vector v = new Vector(args.length-position+1);
    for (int i=position; i<args.length; i++) {
      String oid = args[i];
      char type = 'i';
      String value = null;
      int equal = oid.indexOf("={");
      if (equal > 0) {
        oid = args[i].substring(0, equal);
        type = args[i].charAt(equal+2);
        value = args[i].substring(args[i].indexOf('}')+1);
      }
      else if (oid.indexOf('-') > 0) {
        StringTokenizer st = new StringTokenizer(oid, "-");
        if (st.countTokens() != 2) {
          throw new IllegalArgumentException("Illegal OID range specified: '"+
                                             oid);
        }
        oid = st.nextToken();
        VariableBinding vbLower = new VariableBinding(new OID(oid));
        v.add(vbLower);
        long last = Long.parseLong(st.nextToken());
        long first = vbLower.getOid().lastUnsigned();
        for (long k=first+1; k<=last; k++) {
          OID nextOID = new OID(vbLower.getOid().getValue(), 0,
                                vbLower.getOid().size()-1);
          nextOID.appendUnsigned(k);
          VariableBinding next = new VariableBinding(nextOID);
          v.add(next);
        }
        continue;
      }
      VariableBinding vb = new VariableBinding(new OID(oid));
      if (value != null) {
        Variable variable;
        switch (type) {
          case 'i':
            variable = new Integer32(Integer.parseInt(value));
            break;
          case 'u':
            variable = new UnsignedInteger32(Long.parseLong(value));
            break;
          case 's':
            variable = new OctetString(value);
            break;
          case 'x':
            variable = OctetString.fromString(value, ':', 16);
            break;
          case 'd':
            variable = OctetString.fromString(value, '.', 10);
            break;
          case 'b':
            variable = OctetString.fromString(value, ' ', 2);
            break;
          case 'n':
            variable = new Null();
            break;
          case 'o':
            variable = new OID(value);
            break;
          case 't':
            variable = new TimeTicks(Long.parseLong(value));
            break;
          case 'a':
            variable = new IpAddress(value);
            break;
          default:
            throw new IllegalArgumentException("Variable type "+type+
                                               " not supported");
         }
         vb.setVariable(variable);
       }
       v.add(vb);
    }
    return v;
  }

  private static Address getAddress(String transportAddress) {
    String transport = "udp";
    int colon = transportAddress.indexOf(':');
    if (colon > 0) {
      transport = transportAddress.substring(0, colon);
      transportAddress = transportAddress.substring(colon+1);
    }
    // set default port
    if (transportAddress.indexOf('/') < 0) {
      transportAddress += "/161";
    }
    if (transport.equalsIgnoreCase("udp")) {
      return new UdpAddress(transportAddress);
    }
    else if (transport.equalsIgnoreCase("tcp")) {
      return new TcpAddress(transportAddress);
    }
    throw new IllegalArgumentException("Unknown transport "+transport);
  }

  private static String nextOption(String[] args, int position) {
    if (position+1 >= args.length) {
      throw new IllegalArgumentException("Missing option value for " +
                                         args[position]);
    }
    return args[position+1];
  }

  private static OctetString createOctetString(String s) {
    OctetString octetString;
    if (s.startsWith("0x")) {
      octetString = OctetString.fromHexString(s.substring(2), ':');
    }
    else {
      octetString = new OctetString(s);
    }
    return octetString;
  }

  private int parseArgs(String[] args) {
    for (int i=0; i<args.length; i++) {
      if (args[i].equals("-a")) {
        String s = nextOption(args, i++);
        if (s.equals("MD5")) {
          authProtocol = AuthMD5.ID;
        }
        else if (s.equals("SHA")) {
          authProtocol = AuthSHA.ID;
        }
        else {
          throw new IllegalArgumentException("Authentication protocol unsupported: "+s);
        }
      }
      else if (args[i].equals("-A")) {
       authPassphrase = createOctetString(nextOption(args, i++));
      }
      else if (args[i].equals("-X") || args[i].equals("-P")) {
       privPassphrase = createOctetString(nextOption(args, i++));
      }
      else if (args[i].equals("-c")) {
        community = createOctetString(nextOption(args, i++));
      }
      else if (args[i].equals("-b")) {
        engineBootCount = Math.max(Integer.parseInt(nextOption(args, i++)), 0);
      }
      else if (args[i].equals("-d")) {
        String debugOption = nextOption(args, i++);
        LogFactory.getLogFactory().getRootLogger().setLogLevel(
            LogLevel.toLevel(debugOption));
      }
      else if (args[i].equals("-l")) {
        localEngineID = createOctetString(nextOption(args, i++));
      }
      else if (args[i].equals("-e")) {
        authoritativeEngineID = createOctetString(nextOption(args, i++));
      }
      else if (args[i].equals("-E")) {
        contextEngineID = createOctetString(nextOption(args, i++));
      }
      else if (args[i].equals("-h")) {
        printUsage();
        System.exit(0);
      }
      else if (args[i].equals("-n")) {
        contextName = createOctetString(nextOption(args, i++));
      }
      else if (args[i].equals("-m")) {
        maxSizeResponsePDU = Integer.parseInt(nextOption(args, i++));
      }
      else if (args[i].equals("-r")) {
        retries = Integer.parseInt(nextOption(args, i++));
      }
      else if (args[i].equals("-t")) {
        timeout = Integer.parseInt(nextOption(args, i++));
      }
      else if (args[i].equals("-u")) {
        securityName = createOctetString(nextOption(args, i++));
      }
      else if (args[i].equals("-V")) {
        printVersion();
        System.exit(0);
      }
      else if (args[i].equals("-Cr")) {
        maxRepetitions = Integer.parseInt(nextOption(args, i++));
      }
      else if (args[i].equals("-Cn")) {
        nonRepeaters = Integer.parseInt(nextOption(args, i++));
      }
      else if (args[i].equals("-Ce")) {
        v1TrapPDU.setEnterprise(new OID(nextOption(args, i++)));
      }
      else if (args[i].equals("-Ct")) {
        trapOID = new OID(nextOption(args, i++));
      }
      else if (args[i].equals("-Cg")) {
        v1TrapPDU.setGenericTrap(Integer.parseInt(nextOption(args, i++)));
      }
      else if (args[i].equals("-Cs")) {
        v1TrapPDU.setSpecificTrap(Integer.parseInt(nextOption(args, i++)));
      }
      else if (args[i].equals("-Ca")) {
        v1TrapPDU.setAgentAddress(new IpAddress(nextOption(args, i++)));
      }
      else if (args[i].equals("-Cu")) {
        String upTime = nextOption(args, i++);
        v1TrapPDU.setTimestamp(Long.parseLong(upTime));
        sysUpTime.setValue(Long.parseLong(upTime));
      }
      else if (args[i].equals("-Ow")) {
        operation = WALK;
      }
      else if (args[i].equals("-Ol")) {
        operation = LISTEN;
      }
      else if (args[i].equals("-OtCSV")) {
        operation = CVS_TABLE;
      }
      else if (args[i].equals("-OttCSV")) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -