转载 java利用snmp4j包来读取snmp协议数据(Manager端)
Posted 学海无涯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转载 java利用snmp4j包来读取snmp协议数据(Manager端)相关的知识,希望对你有一定的参考价值。
https://www.cnblogs.com/xdp-gacl/p/4187089.html
http://doc.okbase.net/yuanfy008/archive/265663.html
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) {
-
- SNMP4J源码主要类解析
SNMP4J SNMP用法小记
java-snmp4j之snmp
Snmp网络协议及Java开发相关
如何配置引擎 ID 以使用 SNMP4J 发送 SNMP 陷阱 V3?
snmp.jar和snmp4j.jar,这两个jar包的主要区别是啥?