📄 snmprequest.java.svn-base
字号:
USM usm = new USM(SecurityProtocols.getInstance(),
new OctetString(MPv3.createLocalEngineID()), 0);
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);
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) {
response = walk(snmp, request, target);
}
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 static PDU walk(Snmp snmp, PDU request, Target target) throws IOException {
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++);
LogFactory.getLogFactory().getRootLogger().setLogLevel(
LogLevel.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++);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -