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,下载地址是:snmp4j.org - SNMP APIs for Java

 

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());
	        // 
  • 16
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DaveBobo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值