import java.io.IOException;
import java.util.Vector;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.event.ResponseListener;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.Integer32;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;
@SuppressWarnings("unused")
public class SNMP4J_Test {
private Snmp snmp = null;
private String []amib = null;
private String []ipaddress = null;
private String []amibData = null; //???
private Address targetAddress = null;
private ResponseListener listener;
private Vector<dnode> dn = new Vector<dnode>();
private void initComm(String ipAddress) throws IOException {
// 设置Agent方的IP和端口
String str1 = "udp:";
String str2 = "/161";
String strTarget = str1+ ipAddress + str2;
targetAddress = GenericAddress.parse(strTarget);
TransportMapping transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
transport.listen();
}
private void argsParse(String[] argvs) throws IOException
{
if(argvs[0] == null || argvs[1] == null)
{
return;
}
ipaddress = argvs[0].split(",");
amib = argvs[1].split(",");
return;
}
public void javaAMIBGet(String[] argvs) throws IOException
{
argsParse(argvs);
listener = new ResponseListener() {
public void onResponse(ResponseEvent event) {
// Always cancel async request when response has been received
// otherwise a memory leak is created! Not canceling a request
// immediately can be useful when sending a request to a broadcast
// address.
((Snmp)event.getSource()).cancel(event.getRequest(), this);
for(int index = 0; index < dn.size(); index++) {
if(event.getRequest().getRequestID() == dn.elementAt(index).getRequestId()) {
}
}
System.out.println("Received response PDU is: "+event.getResponse());
}
};
for(int i = 0; i < ipaddress.length; i++) {
getAmibByIp(ipaddress[i]);
}
}
private void getAmibByIp(String vl1) throws IOException
{
initComm(vl1);
sendPDU();
}
private void sendPDU() throws IOException {
dnode dn = new dnode();
int []a = null;
//a = strToInt(strOID);
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
// 通信不成功时的重试次数
target.setRetries(2);
// 超时时间
target.setTimeout(1500);
target.setVersion(SnmpConstants.version1);
// 创建 PDU
PDU pdu = new PDU();
for(int i = 0; i < amib.length; i++) {
a = strToInt(amib[i]);
pdu.add(new VariableBinding(new OID(a)));
}
pdu.setType(PDU.GET);
dn.setRequestId(pdu.getRequestID());
dn.setRequestAddress(target.toString());
this.dn.add(dn);
snmp.send(pdu, target, null, listener);
}
int[] strToInt(String strData) throws IOException {
amibData = strData.split("\\.");
int []n = new int[this.amibData.length];
for(int i = 0; i < n.length; i++) {
n[i] = Integer.parseInt(this.amibData[i]);
}
//return ;
return n;
}
public static void main(String[] args) {
try {
SNMP4J_Test util = new SNMP4J_Test();
util.javaAMIBGet(args);
} catch (IOException e) {
e.printStackTrace();
}
}
public String [] getAmibData() {
return amibData;
}
public void setAmibData(String [] amibData) {
this.amibData = amibData;
}
}
class dnode{
private Integer32 requestId;
private String requestAddress;
private String[] requestOID;
private String[] requestAmibData;
public void setRequestAmibData(String[] requestAmibData) {
this.requestAmibData = requestAmibData;
}
public String[] getRequestAmibData() {
return requestAmibData;
}
public Integer32 getRequestId() {
return requestId;
}
public void setRequestId(Integer32 requestId) {
this.requestId = requestId;
}
public String getRequestAddress() {
return requestAddress;
}
public void setRequestAddress(String requestAddress) {
this.requestAddress = requestAddress;
}
public String[] getRequestOID() {
return requestOID;
}
public void setRequestOID(String[] requestOID) {
this.requestOID = requestOID;
}
}
//respEvnt.getResponse().getRequestID() == pdu.getRequestID()
批处理文件编程
最新推荐文章于 2024-04-09 19:22:44 发布