📄 enviartrapinform.java
字号:
/*
* Status: Listo
*/
package versiones.TrapInform;
import java.io.*;
import java.util.*;
import org.snmp4j.*;
import org.snmp4j.event.*;
import org.snmp4j.log.*;
import org.snmp4j.mp.*;
import org.snmp4j.security.*;
import org.snmp4j.smi.*;
import org.snmp4j.asn1.*;
import org.snmp4j.test.*;
import org.snmp4j.tools.console.*;
import org.snmp4j.transport.*;
import org.snmp4j.util.*;
public class enviarTrapInform{
private Snmp snmp = null;
private static boolean respondio;
private static String dato;
public String trapv1(String ip, String puerto, String comunidad, int intentos, int tiempoEspera, String requerimiento,String vbsOID,int tipoTrapv1,int especificTrap){
String respuesta = "";
try{
Address targetAddress = GenericAddress.parse("udp:"+ip+"/"+puerto);
TransportMapping transport = new DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);
CommandResponder trapPrinter = new CommandResponder() {
public synchronized void processPdu(CommandResponderEvent e) {
PDU command = e.getPDU();
if (command != null) {
System.out.println(command.toString());
}
}
};
snmp.addCommandResponder(trapPrinter);
transport.listen();
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString(comunidad));
target.setAddress(targetAddress);
target.setRetries(intentos);
target.setTimeout(tiempoEspera);
target.setVersion(SnmpConstants.version1);
// creando el PDU
PDUv1 pdu = new PDUv1();
pdu.setType(PDU.V1TRAP);
pdu.setGenericTrap(tipoTrapv1);
if (tipoTrapv1==PDUv1.ENTERPRISE_SPECIFIC){
pdu.setSpecificTrap(especificTrap);
}
pdu.setTimestamp(20000);
Vector vbs = new Vector();
vbs = getVariableBinding(requerimiento);
pdu.setEnterprise(new OID(vbsOID));
// enviando el PDU
respondio=true;
dato="";
ResponseListener listener = new ResponseListener() {
public void onResponse(ResponseEvent event) {
PDU response = event.getResponse();
PDU request = event.getRequest();
if (response == null) {
//System.out.println("Request "+request+" timed out");
dato="Tiempo de espera excedido...";
}
else {
//System.out.println("Received response "+response+" on request "+request);
dato=String.valueOf(response);
//Tratamiento de la respuesta
//System.out.println("respuesta: "+dato);
}
respondio=false;
}};
snmp.sendPDU(pdu, target, null, listener);
//snmp.trap(pdu,target);
//System.out.println("envie el trapv1...");
snmp.close();
}catch (Exception e){e.printStackTrace();}
return respuesta;
}
private Vector getVariableBinding(String varbind) {
Vector v = new Vector(varbind.length());
String oid = null;
char type = 'i';
String value = null;
int equal = varbind.indexOf("={");
if (equal > 0) {
oid = varbind.substring(0, equal);
type = varbind.charAt(equal+2);
value = varbind.substring(varbind.indexOf('}')+1);
}else{
v.add(new VariableBinding(new OID(varbind)));
return v;
}
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;
}
public String trapv2c(String ip, String puerto, String comunidad, int intentos, int tiempoEspera, String requerimiento,String vbsOID){
String respuesta = "";
try{
Address targetAddress = GenericAddress.parse("udp:"+ip+"/"+puerto);
TransportMapping transport = new DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);
CommandResponder trapPrinter = new CommandResponder() {
public synchronized void processPdu(CommandResponderEvent e) {
PDU command = e.getPDU();
if (command != null) {
System.out.println(command.toString());
}
}
};
snmp.addCommandResponder(trapPrinter);
transport.listen();
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString(comunidad));
target.setAddress(targetAddress);
target.setRetries(intentos);
target.setTimeout(tiempoEspera);
target.setVersion(SnmpConstants.version2c);
// creando el PDU
PDU pdu = new PDU();
Vector vbs = new Vector();
if (
(vbsOID.equals(String.valueOf(SnmpConstants.coldStart)))||
(vbsOID.equals(String.valueOf(SnmpConstants.warmStart)))||
(vbsOID.equals(String.valueOf(SnmpConstants.linkDown)))||
(vbsOID.equals(String.valueOf(SnmpConstants.linkUp)))||
(vbsOID.equals(String.valueOf(SnmpConstants.authenticationFailure)))
){
if ((vbs.size() == 0) ||((vbs.size() > 1) &&(!((VariableBinding) vbs.get(0)).getOid().equals(SnmpConstants.sysUpTime)))) {
vbs.add(0, new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(0)));
}
if ((vbs.size() == 1) || ((vbs.size() > 2) &&(!((VariableBinding) vbs.get(1)).getOid().equals(SnmpConstants.snmpTrapOID)))) {
vbs.add(1, new VariableBinding(SnmpConstants.snmpTrapOID, new OID(vbsOID)));
}
}else{
vbs = getVariableBinding(requerimiento);
if ((vbs.size() == 0) ||((vbs.size() > 1) &&(!((VariableBinding) vbs.get(0)).getOid().equals(SnmpConstants.sysUpTime)))) {
vbs.add(0, new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(0)));
}
if ((vbs.size() == 1) || ((vbs.size() > 2) &&(!((VariableBinding) vbs.get(1)).getOid().equals(SnmpConstants.snmpTrapOID)))) {
vbs.add(1, new VariableBinding(SnmpConstants.snmpTrapOID, new OID(vbsOID)));
}
}
for (int i=0; i<vbs.size(); i++) {
pdu.add((VariableBinding)vbs.get(i));
}
pdu.setType(PDU.TRAP);
// enviando el PDU
respondio=true;
dato="";
ResponseListener listener = new ResponseListener() {
public void onResponse(ResponseEvent event) {
PDU response = event.getResponse();
PDU request = event.getRequest();
if (response == null) {
//System.out.println("Request "+request+" timed out");
dato="Tiempo de espera excedido...";
}
else {
System.out.println("Received response "+response+" on request "+request);
dato=String.valueOf(response);
//Tratamiento de la respuesta
System.out.println("respuesta: "+dato);
}
respondio=false;
}};
snmp.sendPDU(pdu, target, null, listener);
//System.out.println("envie el trapv2c...");
snmp.close();
}catch (Exception e){e.printStackTrace();}
return respuesta;
}
public String informv2c(String ip, String puerto, String comunidad, int intentos, int tiempoEspera, String requerimiento,String vbsOID){
String respuesta = "";
try{
Address targetAddress = GenericAddress.parse("udp:"+ip+"/"+puerto);
TransportMapping transport = new DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);
CommandResponder trapPrinter = new CommandResponder() {
public synchronized void processPdu(CommandResponderEvent e) {
PDU command = e.getPDU();
if (command != null) {
System.out.println(command.toString());
}
}
};
snmp.addCommandResponder(trapPrinter);
transport.listen();
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString(comunidad));
target.setAddress(targetAddress);
target.setRetries(intentos);
target.setTimeout(tiempoEspera);
target.setVersion(SnmpConstants.version2c);
// creando el PDU
PDU pdu = new PDU();
Vector vbs = new Vector();
vbs = getVariableBinding(requerimiento);
if ((vbs.size() == 0) ||((vbs.size() > 1) &&(!((VariableBinding) vbs.get(0)).getOid().equals(SnmpConstants.sysUpTime)))) {
vbs.add(0, new VariableBinding(SnmpConstants.sysUpTime, new TimeTicks(0)));
}
if ((vbs.size() == 1) || ((vbs.size() > 2) &&(!((VariableBinding) vbs.get(1)).getOid().equals(SnmpConstants.snmpTrapOID)))) {
vbs.add(1, new VariableBinding(SnmpConstants.snmpTrapOID, new OID(vbsOID)));
}
for (int i=0; i<vbs.size(); i++) {
pdu.add((VariableBinding)vbs.get(i));
}
pdu.setType(PDU.INFORM);
// enviando el PDU
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -