java利用snmp4j包来读取snmp协议数据(Manager端) - Go语言中文社区

java利用snmp4j包来读取snmp协议数据(Manager端)


1 snmp简单介绍

java利用snmp4j包来读取snmp协议数据,很简单的一个流程,就是利用java来读取运行snmp协议的数据,例如服务器、PC机或者路由器等运行了snmp协议的设备。

snmp协议是什么呢?

简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个 应用层 协议(application layer protocol)、 数据库模型 (database schema)和一组资源对象。该协议能够支持 网络管理系统 ,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。该协议是互联网工程工作小组(IETF,Internet Engineering TaskForce)定义的internet协议簇的一部分。SNMP的目标是管理 互联网 Internet上众多厂家生产的软硬件平台,因此SNMP受Internet标准 网络管理 框架的影响也很大。SNMP已经出到第三个版本的协议,其功能较以前已经大大地加强和改进了。

上面是百度百科上对于snmp的一个定义,其实很简单,就是用来管理网络、查看网络信息的一种协议。

2 在本机上开启snmp协议

那么如何在本机上开启snmp协议呢?

首先,在控制面板中找到“卸载程序”;

在弹出的窗口中单击“打开或关闭Windows功能”;

勾选弹出窗口中的“简单网络管理协议(SNMP)”项后单击“确定”并根据提示完成安装即可。

完成SNMP服务的安装后,右键单击“计算机”选择“管理”


在弹出的“计算机管理”窗口中左侧导航栏中找到“服务”,并在右侧找到“SNMPService”项;

鼠标双击“SNMPService”选项,在弹出的窗口中切换到“安全”选项卡中,如下图添加“接受的社区名称”和接收那些主机发出的SNMP数据包。

“接受的社区名称”是自己定义的任意字符都可以,接收那些主机发出的SNMP数据包定义成你的Nagios服务器即可。到这里被监控端的Windows主机的SNMP服务就配置完成了。

其中要注意的地方就是,在开启后,还要到服务里面给snmp协议添加public权限。

3 snmp4j.jar包的下载

包用的是snmp4j.jar,下载地址是:http://www.snmp4j.org

 

4 编码测试

 SnmpData:

package com.test.snmp;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
 
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.Null;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;

public class SnmpData {
	
	  public static final int DEFAULT_VERSION = SnmpConstants.version2c;
	  public static final String DEFAULT_PROTOCOL = "udp";
	  public static final int DEFAULT_PORT = 161;
	  public static final long DEFAULT_TIMEOUT = 3 * 1000L;
	  public static final int DEFAULT_RETRY = 3;
	 
	  /**
	   * 创建对象communityTarget,用于返回target
	   *
	   * @param targetAddress
	   * @param community
	   * @param version
	   * @param timeOut
	   * @param retry
	   * @return CommunityTarget
	   */
	  public static CommunityTarget createDefault(String ip, String community) {
	    Address address = GenericAddress.parse(DEFAULT_PROTOCOL + ":" + ip
	        + "/" + DEFAULT_PORT);
	    CommunityTarget target = new CommunityTarget();
	    target.setCommunity(new OctetString(community));
	    target.setAddress(address);
	    target.setVersion(DEFAULT_VERSION);
	    target.setTimeout(DEFAULT_TIMEOUT); // milliseconds
	    target.setRetries(DEFAULT_RETRY);
	    return target;
	  }
	  /*根据OID,获取单条消息*/
	  public static void snmpGet(String ip, String community, String oid) {
	 
	    CommunityTarget target = createDefault(ip, community);
	    Snmp snmp = null;
	    try {
	      PDU pdu = new PDU();
	      // pdu.add(new VariableBinding(new OID(new int[]
	      // {1,3,6,1,2,1,1,2})));
	      pdu.add(new VariableBinding(new OID(oid)));
	 
	      DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
	      snmp = new Snmp(transport);
	      snmp.listen();
	      System.out.println("-------> 发送PDU <-------");
	      pdu.setType(PDU.GET);
	      ResponseEvent respEvent = snmp.send(pdu, target);
	      System.out.println("PeerAddress:" + respEvent.getPeerAddress());
	      PDU response = respEvent.getResponse();
	 
	      if (response == null) {
	        System.out.println("response is null, request time out");
	      } else {
	 
	        // Vector<VariableBinding> vbVect =
	        // response.getVariableBindings();
	        // System.out.println("vb size:" + vbVect.size());
	        // if (vbVect.size() == 0) {
	        // System.out.println("response vb size is 0 ");
	        // } else {
	        // VariableBinding vb = vbVect.firstElement();
	        // System.out.println(vb.getOid() + " = " + vb.getVariable());
	        // }
	 
	        System.out.println("response pdu size is " + response.size());
	        for (int i = 0; i < response.size(); i++) {
	          VariableBinding vb = response.get(i);
	          System.out.println(vb.getOid() + " = " + vb.getVariable());
	        }
	 
	      }
	      System.out.println("SNMP GET one OID value finished !");
	    } catch (Exception e) {
	      e.printStackTrace();
	      System.out.println("SNMP Get Exception:" + e);
	    } finally {
	      if (snmp != null) {
	        try {
	          snmp.close();
	        } catch (IOException ex1) {
	          snmp = null;
	        }
	      }
	 
	    }
	  }
	  /*根据OID列表,一次获取多条OID数据,并且以List形式返回*/
	  public static void snmpGetList(String ip, String community, List<String> oidList)
	  {
	    CommunityTarget target = createDefault(ip, community);
	    Snmp snmp = null;
	    try {
	      PDU pdu = new PDU();
	 
	      for(String oid:oidList)
	      {
	        pdu.add(new VariableBinding(new OID(oid)));
	      }
	 
	      DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
	      snmp = new Snmp(transport);
	      snmp.listen();
	      System.out.println("-------> 发送PDU <-------");
	      pdu.setType(PDU.GET);
	      ResponseEvent respEvent = snmp.send(pdu, target);
	      System.out.println("PeerAddress:" + respEvent.getPeerAddress());
	      PDU response = respEvent.getResponse();
	 
	      if (response == null) {
	        System.out.println("response is null, request time out");
	      } else {
	 
	        System.out.println("response pdu size is " + response.size());
	        for (int i = 0; i < response.size(); i++) {
	          VariableBinding vb = response.get(i);
	          System.out.println(vb.getOid() + " = " + vb.getVariable());
	        }
	 
	      }
	      System.out.println("SNMP GET one OID value finished !");
	    } catch (Exception e) {
	      e.printStackTrace();
	      System.out.println("SNMP Get Exception:" + e);
	    } finally {
	      if (snmp != null) {
	        try {
	          snmp.close();
	        } catch (IOException ex1) {
	          snmp = null;
	        }
	      }
	 
	    }
	  }
	  /*根据OID列表,采用异步方式一次获取多条OID数据,并且以List形式返回*/
	  public static void snmpAsynGetList(String ip, String community,List<String> oidList)
	  {
	    CommunityTarget target = createDefault(ip, community);
	    Snmp snmp = null;
	    try {
	      PDU pdu = new PDU();
	 
	      for(String oid:oidList)
	      {
	        pdu.add(new VariableBinding(new OID(oid)));
	      }
	 
	      DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
	      snmp = new Snmp(transport);
	      snmp.listen();
	      System.out.println("-------> 发送PDU <-------");
	      pdu.setType(PDU.GET);
	      ResponseEvent respEvent = snmp.send(pdu, target);
	      System.out.println("PeerAddress:" + respEvent.getPeerAddress());
	      PDU response = respEvent.getResponse();
	 
	      /*异步获取*/
	      final CountDownLatch latch = new CountDownLatch(1);
	      ResponseListener listener = new ResponseListener() {
	        public void onResponse(ResponseEvent event) {
	          ((Snmp) event.getSource()).cancel(event.getRequest(), this);
	          PDU response = event.getResponse();
	          PDU request = event.getRequest();
	          System.out.println("[request]:" + request);
	          if (response == null) {
	            System.out.println("[ERROR]: response is null");
	          } else if (response.getErrorStatus() != 0) {
	            System.out.println("[ERROR]: response status"
	                + response.getErrorStatus() + " Text:"
	                + response.getErrorStatusText());
	          } else {
	            System.out.println("Received response Success!");
	            for (int i = 0; i < response.size(); i++) {
	              VariableBinding vb = response.get(i);
	              System.out.println(vb.getOid() + " = "
	                  + vb.getVariable());
	            }
	            System.out.println("SNMP Asyn GetList OID finished. ");
	            latch.countDown();
	          }
	        }
	      };
	 
	      pdu.setType(PDU.GET);
	      snmp.send(pdu, target, null, listener);
	      System.out.println("asyn send pdu wait for response...");
	 
	      boolean wait = latch.await(30, TimeUnit.SECONDS);
	      System.out.println("latch.await =:" + wait);
	 
	      snmp.close();
	 
	      System.out.println("SNMP GET one OID value finished !");
	    } catch (Exception e) {
	      e.printStackTrace();
	      System.out.println("SNMP Get Exception:" + e);
	    } finally {
	      if (snmp != null) {
	        try {
	          snmp.close();
	        } catch (IOException ex1) {
	          snmp = null;
	        }
	      }
	 
	    }
	  }
	  /*根据targetOID,获取树形数据*/
	  public static void snmpWalk(String ip, String community, String targetOid)
	  {
	    CommunityTarget target = createDefault(ip, community);
	    TransportMapping transport = null;
	    Snmp snmp = null;
	    try {
	      transport = new DefaultUdpTransportMapping();
	      snmp = new Snmp(transport);
	      transport.listen();
	 
	      PDU pdu = new PDU();
	      OID targetOID = new OID(targetOid);
	      pdu.add(new VariableBinding(targetOID));
	 
	      boolean finished = false;
	      System.out.println("----> demo start <----");
	      while (!finished) {
	        VariableBinding vb = null;
	        ResponseEvent respEvent = snmp.getNext(pdu, target);
	 
	        PDU response = respEvent.getResponse();
	 
	        if (null == response) {
	          System.out.println("responsePDU == null");
	          finished = true;
	          break;
	        } else {
	          vb = response.get(0);
	        }
	        // check finish
	        finished = checkWalkFinished(targetOID, pdu, vb);
	        if (!finished) {
	          System.out.println("==== walk each vlaue :");
	          System.out.println(vb.getOid() + " = " + vb.getVariable());
	 
	          // Set up the variable binding for the next entry.
	          pdu.setRequestID(new Integer32(0));
	          pdu.set(0, vb);
	        } else {
	          System.out.println("SNMP walk OID has finished.");
	          snmp.close();
	        }
	      }
	      System.out.println("----> demo end <----");
	    } catch (Exception e) {
	      e.printStackTrace();
	      System.out.println("SNMP walk Exception: " + e);
	    } finally {
	      if (snmp != null) {
	        try {
	          snmp.close();
	        } catch (IOException ex1) {
	          snmp = null;
	        }
	      }
	    }
	  }
	 
	  private static boolean checkWalkFinished(OID targetOID, PDU pdu,
	      VariableBinding vb) {
	    boolean finished = false;
	    if (pdu.getErrorStatus() != 0) {
	      System.out.println("[true] responsePDU.getErrorStatus() != 0 ");
	      System.out.println(pdu.getErrorStatusText());
	      finished = true;
	    } else if (vb.getOid() == null) {
	      System.out.println("[true] vb.getOid() == null");
	      finished = true;
	    } else if (vb.getOid().size() < targetOID.size()) {
	      System.out.println("[true] vb.getOid().size() < targetOID.size()");
	      finished = true;
	    } else if (targetOID.leftMostCompare(targetOID.size(), vb.getOid()) != 0) {
	      System.out.println("[true] targetOID.leftMostCompare() != 0");
	      finished = true;
	    } else if (Null.isExceptionSyntax(vb.getVariable().getSyntax())) {
	      System.out
	          .println("[true] Null.isExceptionSyntax(vb.getVariable().getSyntax())");
	      finished = true;
	    } else if (vb.getOid().compareTo(targetOID) <= 0) {
	      System.out.println("[true] Variable received is not "
	          + "lexicographic successor of requested " + "one:");
	      System.out.println(vb.toString() + " <= " + targetOID);
	      finished = true;
	    }
	    return finished;
	 
	  }
	  /*根据targetOID,异步获取树形数据*/
	  public static void snmpAsynWalk(String ip, String community, String oid)
	  {
	    final CommunityTarget target = createDefault(ip, community);
	    Snmp snmp = null;
	    try {
	      System.out.println("----> demo start <----");
	 
	      DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
	      snmp = new Snmp(transport);
	      snmp.listen();
	 
	      final PDU pdu = new PDU();
	      final OID targetOID = new OID(oid);
	      final CountDownLatch latch = new CountDownLatch(1);
	      pdu.add(new VariableBinding(targetOID));
	 
	      ResponseListener listener = new ResponseListener() {
	        public void onResponse(ResponseEvent event) {
	          ((Snmp) event.getSource()).cancel(event.getRequest(), this);
	 
	          try {
	            PDU response = event.getResponse();
	            // PDU request = event.getRequest();
	            // System.out.println("[request]:" + request);
	            if (response == null) {
	              System.out.println("[ERROR]: response is null");
	            } else if (response.getErrorStatus() != 0) {
	              System.out.println("[ERROR]: response status"
	                  + response.getErrorStatus() + " Text:"
	                  + response.getErrorStatusText());
	            } else {
	              System.out
	                  .println("Received Walk response value :");
	              VariableBinding vb = response.get(0);
	 
	              boolean finished = checkWalkFinished(targetOID,
	                  pdu, vb);
	              if (!finished) {
	                System.out.println(vb.getOid() + " = "
	                    + vb.getVariable());
	                pdu.setRequestID(new Integer32(0));
	                pdu.set(0, vb);
	                ((Snmp) event.getSource()).getNext(pdu, target,
	                    null, this);
	              } else {
	                System.out
	                    .println("SNMP Asyn walk OID value success !");
	                latch.countDown();
	              }
	            }
	          } catch (Exception e) {
	            e.printStackTrace();
	            latch.countDown();
	          }
	 
	        }
	      };
	 
	      snmp.getNext(pdu, target, null, listener);
	      System.out.println("pdu 已发送,等到异步处理结果...");
	 
	      boolean wait = latch.await(30, TimeUnit.SECONDS);
	      System.out.println("latch.await =:" + wait);
	      snmp.close();
	 
	      System.out.println("----> demo end <----");
	    } catch (Exception e) {
	      e.printStackTrace();
	      System.out.println("SNMP Asyn Walk Exception:" + e);
	    }
	  }
	  /*根据OID和指定string来设置设备的数据*/
	  public static void setPDU(String ip,String community,String oid,String val) throws IOException
	  {
	    CommunityTarget target = createDefault(ip, community);
	    Snmp snmp = null;
	    PDU pdu = new PDU();
	    pdu.add(new VariableBinding(new OID(oid),new OctetString(val)));
	    pdu.setType(PDU.SET);
	 
	    DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
	    snmp = new Snmp(transport);
	    snmp.listen();
	    System.out.println("-------> 发送PDU <-------");
	    snmp.send(pdu, target);
	    snmp.close();
	  }
}

SnmpTest:

package com.test.snmp;

import java.util.ArrayList;
import java.util.List;
import org.snmp4j.log.ConsoleLogFactory;
import org.snmp4j.log.LogAdapter;
import org.snmp4j.log.LogFactory;
import com.test.snmp.SnmpData;

public class SnmpTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		// TODO Auto-generated method stub
		SnmpTest test = new SnmpTest();
		
		test.testGet();
		
	}
	
	public void testGet()
	{
	String ip = "127.0.0.1";
	String community = "public";
	String oidval = "1.3.6.1.2.1.1.6.0";
	SnmpData.snmpGet(ip, community, oidval);
	}


	public void testGetList(){
	String ip = "127.0.0.1";
     String community = "public";
     List<String> oidList=new ArrayList<String>();
     oidList.add("1.3.6.1.2.1.1.5.0");
     oidList.add("1.3.6.1.2.1.1.7.0");
      SnmpData.snmpGetList(ip, community, oidList);
	}
	
	
	public void testGetAsyList()
	{
	String ip = "127.0.0.1";
	String community = "public";
	List<String> oidList=new ArrayList<String>();
	oidList.add("1.3.6.1.2.1");
	oidList.add("1.3.6.1.2.12");
	SnmpData.snmpAsynGetList(ip, community, oidList);
	System.out.println("i am first!");
	}

	
	public void testWalk()
	{
	String ip = "127.0.0.1";
	String community = "public";
	String targetOid = "1.3.6.1.2.1.1.5.0";
	SnmpData.snmpWalk(ip, community, targetOid);
	}
	

	public void testAsyWalk()
	{
	String ip = "127.0.0.1";
	String community = "public";
	// 异步采集数据
	SnmpData.snmpAsynWalk(ip, community, "1.3.6.1.2.1.25.4.2.1.2");
	}
	
	
	public void testSetPDU() throws Exception
	{
	String ip = "127.0.0.1";
	String community = "public";
	SnmpData.setPDU(ip, community, "1.3.6.1.2.1.1.6.0","jianghuiwen");
	}
	

	public void testVersion()
	{
		System.out.println(org.snmp4j.version.VersionInfo.getVersion());
	}
}

文档和源码csdn下载:http://download.csdn.net/detail/davebobo/9509435

ref: http://www.tuicool.com/articles/FF7fEbi

ref: http://blog.chinaunix.net/uid-21857285-id-3340206.html

-------------------------更新--------------------------------------

Trap功能的实现:

下面是两个用于发送和接收Trap报文信息的类:

接收Trap消息类:

import java.io.IOException;
import java.net.UnknownHostException;
import java.util.Vector;

import org.snmp4j.CommandResponder;
import org.snmp4j.CommandResponderEvent;
import org.snmp4j.MessageDispatcherImpl;
import org.snmp4j.Snmp;
import org.snmp4j.TransportMapping;
import org.snmp4j.mp.MPv1;
import org.snmp4j.mp.MPv2c;
import org.snmp4j.mp.MPv3;
import org.snmp4j.security.SecurityModels;
import org.snmp4j.security.SecurityProtocols;
import org.snmp4j.security.USM;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.TcpAddress;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultTcpTransportMapping;
import org.snmp4j.transport.DefaultUdpTransportMapping;
import org.snmp4j.util.MultiThreadedMessageDispatcher;
import org.snmp4j.util.ThreadPool;

/**
 * 本类用于监听代理进程的Trap信息
 * 
 * @author zhanjia
 *
 */
public class MultiThreadedTrapReceiver implements CommandResponder {

	private MultiThreadedMessageDispatcher dispatcher;
	private Snmp snmp = null;
	private Address listenAddress;
	private ThreadPool threadPool;

	public MultiThreadedTrapReceiver() {
		// BasicConfigurator.configure();
	}

	private void init() throws UnknownHostException, IOException {
		threadPool = ThreadPool.create("Trap", 2);
		dispatcher = new MultiThreadedMessageDispatcher(threadPool,
				new MessageDispatcherImpl());
		listenAddress = GenericAddress.parse(System.getProperty(
				"snmp4j.listenAddress", "udp:192.168.1.23/162")); // 本地IP与监听端口
		TransportMapping transport;
		// 对TCP与UDP协议进行处理
		if (listenAddress instanceof UdpAddress) {
			transport = new DefaultUdpTransportMapping(
					(UdpAddress) listenAddress);
		} else {
			transport = new DefaultTcpTransportMapping(
					(TcpAddress) listenAddress);
		}
		snmp = new Snmp(dispatcher, transport);
		snmp.getMessageDispatcher().addMessageProcessingModel(new MPv1());
		snmp.getMessageDispatcher().addMessageProcessingModel(new MPv2c());
		snmp.getMessageDispatcher().addMessageProcessingModel(new MPv3());
		USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3
				.createLocalEngineID()), 0);
		SecurityModels.getInstance().addSecurityModel(usm);
		snmp.listen();
	}

	
	public void run() {
		try {
			init();
			snmp.addCommandResponder(this);
			System.out.println("开始监听Trap信息!");
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	/**
	 * 实现CommandResponder的processPdu方法, 用于处理传入的请求、PDU等信息
	 * 当接收到trap时,会自动进入这个方法
	 * 
	 * @param respEvnt
	 */
	public void processPdu(CommandResponderEvent respEvnt) {
		// 解析Response
        if (respEvnt != null && respEvnt.getPDU() != null) {
        	Vector<VariableBinding> recVBs = respEvnt.getPDU().getVariableBindings();
           	for (int i = 0; i < recVBs.size(); i++) {
            	VariableBinding recVB = recVBs.elementAt(i);
               	System.out.println(recVB.getOid() + " : " + recVB.getVariable());
      		}
		}
	}

	public static void main(String[] args) {
		MultiThreadedTrapReceiver multithreadedtrapreceiver = new MultiThreadedTrapReceiver();
		multithreadedtrapreceiver.run();
	}

}
发送Trap消息的类:

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.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;

/**
 * 本类用于向管理进程发送Trap信息
 * 
 * @author zhanjia
 *
 */
public class SnmpUtilSendTrap {

	private Snmp snmp = null;

	private Address targetAddress = null;

	public void initComm() throws IOException {

		// 设置管理进程的IP和端口
		targetAddress = GenericAddress.parse("udp:192.168.1.23/162");
		TransportMapping transport = new DefaultUdpTransportMapping();
		snmp = new Snmp(transport);
		transport.listen();

	}

	/**
	 * 向管理进程发送Trap报文
	 * 
	 * @throws IOException
	 */
	public void sendPDU() throws IOException {

		// 设置 target
		CommunityTarget target = new CommunityTarget();
		target.setAddress(targetAddress);

		// 通信不成功时的重试次数
		target.setRetries(2);
		// 超时时间
		target.setTimeout(1500);
		// snmp版本
		target.setVersion(SnmpConstants.version2c);

		// 创建 PDU
		PDU pdu = new PDU();
		pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.1"),
				new OctetString("SnmpTrap")));
		pdu.add(new VariableBinding(new OID(".1.3.6.1.2.3377.10.1.1.1.2"),
				new OctetString("JavaEE")));
		pdu.setType(PDU.TRAP);

		// 向Agent发送PDU,并接收Response
		ResponseEvent respEvnt = snmp.send(pdu, target);

		// 解析Response
		if (respEvnt != null && respEvnt.getResponse() != null) {
			Vector<VariableBinding> recVBs = respEvnt.getResponse()
			.getVariableBindings();
			for (int i = 0; i < recVBs.size(); i++) {
				VariableBinding recVB = recVBs.elementAt(i);
				System.out.println(recVB.getOid() + " : " + recVB.getVariable());
			}
		}
	}

	public static void main(String[] args) {
		try {
			SnmpUtilSendTrap util = new SnmpUtilSendTrap();
			util.initComm();
			util.sendPDU();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

1、运行MultiThreadedTrapReceiver类,提示“开始监听Trap信息!”并处理监听状态

2、运行SnmpUtilSendTrap类,运行完毕后,将会在“开始监听Trap信息!”后面显示:

1.3.6.1.2.3377.10.1.1.1.1 : SnmpTrap
1.3.6.1.2.3377.10.1.1.1.2 : JavaEE

MultiThreadedTrapReceiver输出面板中显示以上两行即表示测试成功!

说明:

      本例只在本人电脑上测试过,操作系统为Windows

ref:
http://www.iteye.com/topic/308836
-----------------------------------------------------更新20160621-------------------------------------------------

接下来问题又来了,我们发的trap消息如果manager掉线我们应该考虑将trap消息保存下来,此时snmp inform就用上场了。详解请看下文:http://blog.csdn.net/davebobo/article/details/51730688


版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/DaveBobo/article/details/51308601
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-04-19 16:41:13
  • 阅读 ( 879 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢