一個pdu中要支持獲取多個OID

<span style="font-family:Times New Roman;">package snmp_get;

import java.io.IOException;
import java.util.ArrayList;
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.mp.SnmpConstants;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;

/**
 *  GET : 一個pdu中要支持獲取多個OID
 * @author Shinetien
 *
 */
public class SnmpGet {

	private Address targetAddress;
	private Snmp snmp;

	public static void main(String[] args) {
		SnmpGet gu = new SnmpGet();
		gu.init();

	}

	// 初始化targetAddress, snmp,開啓transport監聽消息
	private void init() {

		System.out.println("--------初始化----------");
		// 設置Agent的IP和端口
		targetAddress = GenericAddress.parse("udp:127.0.0.1/161");
		TransportMapping transport = null;
		try {
			// A transport mapping can only support a single transport protocol
			transport = new DefaultUdpTransportMapping();
		} catch (IOException e) {
			e.printStackTrace();
		}
		snmp = new Snmp(transport);
		try {
			transport.listen();
		} catch (IOException e) {
			e.printStackTrace();
		}
		// 發送PDU,並將返回的ResponseEvent進行讀取
		parseResponseEvent(sendPDU(getPdu(), getTarget()));

	}

	// get PDU
	private PDU getPdu() {
		PDU pdu = new PDU();
		for (int i = 0; i < getOidList().size(); i++) {
			pdu.add(new VariableBinding(new OID(getOidList().get(i))));// pcName

		}
		pdu.setType(PDU.GET);
		return pdu;
	}

	// get Target
	private CommunityTarget getTarget() {
		CommunityTarget target = new CommunityTarget();
		target.setCommunity(new OctetString("public"));
		target.setAddress(targetAddress);
		// 通信不成功時的重試次數
		target.setRetries(2);
		// 超時時間
		target.setTimeout(1500);
		target.setVersion(SnmpConstants.version2c);
		return target;
	}

	// 發送PDU,返回ResponseEvent對象
	private ResponseEvent sendPDU(PDU pdu, CommunityTarget target) {
		try {
			return snmp.send(pdu, target);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	// parse ResponseEvent
	private void parseResponseEvent(ResponseEvent responseEvent) {
		// 解析Response
		System.out.println("----------解析Response-------------");
		if (responseEvent != null && responseEvent.getResponse() != null) {
			@SuppressWarnings("unchecked")
			Vector<VariableBinding> vbs = responseEvent.getResponse()
					.getVariableBindings();
			for (int i = 0; i < vbs.size(); i++) {
				VariableBinding vb = vbs.elementAt(i);
				System.out.println(" oid=" + vb.getOid() + "\n value= "
						+ vb.getVariable()+"\n");
			}
		} else {
			System.out.println("----------解析ResponseEvent失敗-------------");
		}
	}

	private ArrayList<String> getOidList() {
		ArrayList<String> oidList = new ArrayList<String>();
		oidList.add("1.3.6.1.2.1.1.1.0"); //Get OID_sysDescr   
		oidList.add(".1.3.6.1.2.1.1.2.0");//Get OID_sysObjectID   
		oidList.add(".1.3.6.1.2.1.1.3.0");//Get OID_sysUpTime   
		return oidList;

	}

}
</span>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章