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

📄 java.txt

📁 用java实现snmp协议的发包功能。 还要介绍什么
💻 TXT
📖 第 1 页 / 共 3 页
字号:
    request.setNonRepeaters(0);
    OID rootOID = request.get(0).getOid();
    PDU response = null;
    int objects = 0;
    int requests = 0;
    long startTime = System.currentTimeMillis();
    do {
      requests++;
      ResponseEvent responseEvent = snmp.send(request, target);
      response = responseEvent.getResponse();
      if (response != null) {
        objects += response.size();
      }
    }
    while (!processWalk(response, request, rootOID));
    System.out.println();
    System.out.println("Total requests sent:    "+requests);
    System.out.println("Total objects received: "+objects);
    System.out.println("Total walk time:        "+
                       (System.currentTimeMillis()-startTime)+" milliseconds");
    return response;
  }

  private static boolean processWalk(PDU response, PDU request, OID rootOID) {
    if ((response == null) || (response.getErrorStatus() != 0) ||
        (response.getType() == PDU.REPORT)) {
      return true;
    }
    boolean finished = false;
    OID lastOID = request.get(0).getOid();
    for (int i=0; (!finished) && (i<response.size()); i++) {
      VariableBinding vb = response.get(i);
      if ((vb.getOid() == null) ||
          (vb.getOid().size() < rootOID.size()) ||
          (rootOID.leftMostCompare(rootOID.size(), vb.getOid()) != 0)) {
        finished = true;
      }
      else if (Null.isExceptionSyntax(vb.getVariable().getSyntax())) {
        System.out.println(vb.toString());
        finished = true;
      }
      else if (vb.getOid().compareTo(lastOID) <= 0) {
        System.out.println("Variable received is not lexicographic successor of requested one:");
        System.out.println(vb.toString() + " <= "+lastOID);
        finished = true;
      }
      else {
        System.out.println(vb.toString());
        lastOID = vb.getOid();
      }
    }
    if (response.size() == 0) {
      finished = true;
    }
    if (!finished) {
      VariableBinding next = response.get(response.size()-1);
      next.setVariable(new Null());
      request.set(0, next);
      request.setRequestID(new Integer32(0));
    }
    return finished;
  }

  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("-d")) {
        String debugOption = nextOption(args, i++);
        Logger.getRootLogger().setLevel(Level.toLevel(debugOption));
      }
      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("-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")) {
        operation = TIME_BASED_CVS_TABLE;
      }
      else if (args[i].equals("-Ot")) {
        operation = TABLE;
      }
      else if (args[i].equals("-Otd")) {
        operation = TABLE;
        useDenseTableOperation = true;
      }
      else if (args[i].equals("-Cil")) {
        lowerBoundIndex = new OID(nextOption(args, i++));
      }
      else if (args[i].equals("-Ciu")) {
        upperBoundIndex = new OID(nextOption(args, i++));
      }
      else if (args[i].equals("-v")) {
        String v = nextOption(args, i++);
        if (v.equals("1")) {
          version = SnmpConstants.version1;
        }
        else if (v.equals("2c")) {
          version = SnmpConstants.version2c;
        }
        else if (v.equals("3")) {
          version = SnmpConstants.version3;
        }
        else {
          throw new IllegalArgumentException("Version "+v+" not supported");
        }
      }
      else if (args[i].equals("-x")) {
        String s = nextOption(args, i++);
        if (s.equals("DES")) {
          privProtocol = PrivDES.ID;
        }
        else if ((s.equals("AES128")) || (s.equals("AES"))) {
          privProtocol = PrivAES128.ID;
        }
        else if (s.equals("AES192")) {
          privProtocol = PrivAES192.ID;
        }
        else if (s.equals("AES256")) {
          privProtocol = PrivAES256.ID;
        }
        else {
          throw new IllegalArgumentException("Privacy protocol " + s +
                                             " not supported");
        }
      }
      else if (args[i].equals("-p")) {
        String s = nextOption(args, i++);
        pduType = PDU.getTypeFromString(s);
        if (pduType == Integer.MIN_VALUE) {
          throw new IllegalArgumentException("Unknown PDU type " + s);
        }
      }
      else if (!args[i].startsWith("-")) {
        return i;
      }
      else {
        throw new IllegalArgumentException("Unknown option "+args[i]);
      }
    }
    return 0;
  }

  protected static void printVersion() {
    System.out.println();
    System.out.println("SNMP4J Command Line Tool v1.6 Copyright "+(char)0xA9+
                       " 2004-2005, Frank Fock and Jochen Katz");
    System.out.println("http://www.snmp4j.org");
    System.out.println();
    System.out.println("SNMP4J is licensed under the Apache License 2.0:");
    System.out.println("http://www.apache.org/licenses/LICENSE-2.0.txt");
    System.out.println();
  }

  /**
   * printUsage
   */
  protected static void printUsage() {
    String[] usage = new String[] {
        ""
    };

    for (int i=0; i<usage.length; i++) {
      System.out.println(usage[i]);
    }
  }


  protected static void printVariableBindings(PDU response) {
    for (int i=0; i<response.size(); i++) {
      VariableBinding vb = response.get(i);
      System.out.println(vb.toString());
    }
  }

  protected static void printReport(PDU response) {
    if (response.size() < 1) {
      System.out.println("REPORT PDU does not contain a variable binding.");
      return;
    }

    VariableBinding vb = response.get(0);
    OID oid =vb.getOid();
    if (SnmpConstants.usmStatsUnsupportedSecLevels.equals(oid)) {
      System.out.print("REPORT: Unsupported Security Level.");
    }
    else if (SnmpConstants.usmStatsNotInTimeWindows.equals(oid)) {
      System.out.print("REPORT: Message not within time window.");
    }
    else if (SnmpConstants.usmStatsUnknownUserNames.equals(oid)) {
      System.out.print("REPORT: Unknown user name.");
    }
    else if (SnmpConstants.usmStatsUnknownEngineIDs.equals(oid)) {
      System.out.print("REPORT: Unknown engine id.");
    }
    else if (SnmpConstants.usmStatsWrongDigests.equals(oid)) {
      System.out.print("REPORT: Wrong digest.");

⌨️ 快捷键说明

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