java实现snmp的get和walk

    首先到http://www.snmp4j.org/上下载一个jar,然后加入引用。

    在这里我主要是参照别人的代码实现的snmpget和snmpwalk命令。具体的请看代码

package open.mis.test;

import java.io.IOException;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
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;
import snmp.SNMPObject;
import snmp.SNMPSequence;
import snmp.SNMPVarBindList;
import snmp.SNMPv1CommunicationInterface;

public class SnmpManager {
	private static final Log log = LogFactory.getLog(SnmpManager.class);
	private static int version=0;
	private static String protocol = "udp";
	private static String port="161";
	
	public static String snmpGet(String ipAddress,String community,String oid){
		String resultStat = null;
		StringBuilder address = new StringBuilder();
		address.append(protocol);
		address.append(":");
		address.append(ipAddress);
		address.append("/");
		address.append(port);
		Address targetAddress = GenericAddress.parse(address.toString());
		PDU pdu = new PDU();
		pdu.add(new VariableBinding(new OID(oid)));
		pdu.setType(PDU.GET);
		
		//创建共同体对象communityTarget
		CommunityTarget target = new CommunityTarget();
		target.setCommunity(new OctetString(community));
		target.setAddress(targetAddress);
		target.setVersion(SnmpConstants.version1);
		target.setTimeout(2000);
		target.setRetries(1);
		
		DefaultUdpTransportMapping udpTransportMapping = null;
		Snmp snmp = null;
		try{
			//发送同步消息
			udpTransportMapping = new DefaultUdpTransportMapping();
			udpTransportMapping.listen();
			snmp = new Snmp(udpTransportMapping);
			ResponseEvent response = snmp.send(pdu, target);
			PDU responsePdu = response.getResponse();
			
			if(responsePdu == null){
				log.info(ipAddress+":Request time out");
			}else {
				Object obj = responsePdu.getVariableBindings().firstElement();
				VariableBinding variable = (VariableBinding)obj;
				System.out.println(variable.getOid());
				resultStat = variable.getVariable().toString();
			}
		}catch (Exception e) {
			System.out.println("获取SNMP节点状态时发生错误"+e);
		}finally{
			if(snmp != null){
				try {
					snmp.close();
				} catch (IOException e2) {
					snmp = null;
				}
			}
			if(udpTransportMapping != null){
				try {
					udpTransportMapping.close();
				} catch (Exception e2) {
					udpTransportMapping = null;
				}
			}
		}
		System.out.println("IP" + ipAddress + " resultStat:"+resultStat);
		return resultStat;
	}
	
	public static String[] snmpwalk(String ipAddress,String community,String oid){
		String[] returnValueStrings = null; //oid走访结果数组
		SNMPv1CommunicationInterface comInterface = null;
		try{
			InetAddress hostAddress = InetAddress.getByName(ipAddress);
			comInterface = new SNMPv1CommunicationInterface(version,hostAddress,community);
			comInterface.setSocketTimeout(2000);
			
			//返回所有以oid开始的管理信息库变量值
			SNMPVarBindList tableVars = comInterface.retrieveMIBTable(oid);
			returnValueStrings = new String[tableVars.size()];
			
			//循环处理所有以oid开始的节点的返回值
			for(int i=0;i<tableVars.size();i++){
				SNMPSequence pair= (SNMPSequence)tableVars.getSNMPObjectAt(i);
				SNMPObject  snmpValue = pair.getSNMPObjectAt(1);
				String typesString = snmpValue.getClass().getName();
				if(typesString.equals("snmp.SNMPOctecString")){
					String snmpString = snmpValue.toString();
					int nullLocation = snmpString.indexOf('\0');
					if(nullLocation >=0){
						snmpString = snmpString.substring(0,nullLocation);
					}
					returnValueStrings[i] = snmpString;
					System.out.println(snmpString);
				}else {
					returnValueStrings[i] = snmpValue.toString();
					System.out.println(snmpValue.toString());
				}
			}
		}catch (SocketTimeoutException e) {
			System.out.println("走访IP为"+ipAddress+",OID为"+oid+"时超时!");
			returnValueStrings = null;
		}catch (Exception e) {
			System.out.println("SNMP走访节点时发生错误");
		}finally{
			if(comInterface!=null){
				try{
					comInterface.closeConnection();
				}catch (SocketException e) {
					comInterface = null;
				}
				
			}
		}
		return returnValueStrings;
	}
	
	public static void main(String[] args) {
		SnmpManager.snmpGet("127.0.0.1", "public", "1.3.6.1.2.1.1.5.0");
		//SnmpManager.snmpGet("127.0.0.1", "public", "sysName.0");
		//sSnmpManager.snmpwalk("127.0.0.1", "public", "SNMPv2-MIB");
	}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值