怎么利用snmp4j 中文帮助文档-agent在PC端模拟snmp服务

java利用snmp4j包来读取snmp协议数据 - 推酷
java利用snmp4j包来读取snmp协议数据
java利用snmp4j包来读取snmp协议数据,很简单的一个流程,就是利用java来读取运行snmp协议的数据,例如服务器、PC机或者路由器等运行了snmp协议的设备。
snmp协议是什么呢?
简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个
协议(application layer protocol)、
(database schema)和一组资源对象。该协议能够支持
,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。该协议是互联网工程工作小组(IETF,Internet Engineering Task Force)定义的internet协议簇的一部分。SNMP的目标是管理
Internet上众多厂家生产的软硬件平台,因此SNMP受Internet标准
框架的影响也很大。SNMP已经出到第三个版本的协议,其功能较以前已经大大地加强和改进了。
上面是百度百科上对于snmp的一个定义,其实很简单,就是用来管理网络、查看网络信息的一种协议。
那么如何在本机上开启snmp协议呢?非常简单,可以参考一篇文章:
,其中要注意的地方就是,在开启后,还要到服务里面给snmp协议添加public权限。
package com.test.snmp;
import java.io.IOException;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import munityTarget;
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;
* 演示: GET单个OID值
* @author Michael
public class SnmpData {
public static final int DEFAULT_VERSION = SnmpConstants.version2c;
public static final
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( ip,
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( ip,
community,
CommunityTarget target = createDefault(ip, community);
Snmp snmp = null;
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();
.out.println(&-------& 发送PDU &-------&);
pdu.setType(PDU.GET);
ResponseEvent respEvent = snmp.send(pdu, target);
.out.println(&PeerAddress:& + respEvent.getPeerAddress());
PDU response = respEvent.getResponse();
if (response == null) {
.out.println(&response is null, request time out&);
// 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());
.out.println(&response pdu size is & + response.size());
for (int i = 0; i & response.size(); i++) {
VariableBinding vb = response.get(i);
.out.println(vb.getOid() + & = & + vb.getVariable());
.out.println(&SNMP GET one OID value finished !&);
} catch ( e) {
e.printStackTrace();
.out.println(&SNMP Get Exception:& + e);
} finally {
if (snmp != null) {
snmp.close();
} catch ( ex1) {
snmp = null;
/*根据OID列表,一次获取多条OID数据,并且以List形式返回*/
public static void snmpGetList( ip,
community, List&String& oidList)
CommunityTarget target = createDefault(ip, community);
Snmp snmp = null;
PDU pdu = new PDU();
for( oid:oidList)
pdu.add(new VariableBinding(new OID(oid)));
DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
snmp.listen();
.out.println(&-------& 发送PDU &-------&);
pdu.setType(PDU.GET);
ResponseEvent respEvent = snmp.send(pdu, target);
.out.println(&PeerAddress:& + respEvent.getPeerAddress());
PDU response = respEvent.getResponse();
if (response == null) {
.out.println(&response is null, request time out&);
.out.println(&response pdu size is & + response.size());
for (int i = 0; i & response.size(); i++) {
VariableBinding vb = response.get(i);
.out.println(vb.getOid() + & = & + vb.getVariable());
.out.println(&SNMP GET one OID value finished !&);
} catch ( e) {
e.printStackTrace();
.out.println(&SNMP Get Exception:& + e);
} finally {
if (snmp != null) {
snmp.close();
} catch ( ex1) {
snmp = null;
/*根据OID列表,采用异步方式一次获取多条OID数据,并且以List形式返回*/
public static void snmpAsynGetList( ip,
community,List&String& oidList)
CommunityTarget target = createDefault(ip, community);
Snmp snmp = null;
PDU pdu = new PDU();
for( oid:oidList)
pdu.add(new VariableBinding(new OID(oid)));
DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
snmp.listen();
.out.println(&-------& 发送PDU &-------&);
pdu.setType(PDU.GET);
ResponseEvent respEvent = snmp.send(pdu, target);
.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();
.out.println(&[request]:& + request);
if (response == null) {
.out.println(&[ERROR]: response is null&);
} else if (response.getErrorStatus() != 0) {
.out.println(&[ERROR]: response status&
+ response.getErrorStatus() + & Text:&
+ response.getErrorStatusText());
.out.println(&Received response Success!&);
for (int i = 0; i & response.size(); i++) {
VariableBinding vb = response.get(i);
.out.println(vb.getOid() + & = &
+ vb.getVariable());
.out.println(&SNMP Asyn GetList OID finished. &);
latch.countDown();
pdu.setType(PDU.GET);
snmp.send(pdu, target, null, listener);
.out.println(&asyn send pdu wait for response...&);
boolean wait = latch.await(30, TimeUnit.SECONDS);
.out.println(&latch.await =:& + wait);
snmp.close();
.out.println(&SNMP GET one OID value finished !&);
} catch ( e) {
e.printStackTrace();
.out.println(&SNMP Get Exception:& + e);
} finally {
if (snmp != null) {
snmp.close();
} catch ( ex1) {
snmp = null;
/*根据targetOID,获取树形数据*/
public static void snmpWalk( ip,
community,
targetOid)
CommunityTarget target = createDefault(ip, community);
TransportMapping transport = null;
Snmp snmp = null;
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;
.out.println(&----& demo start &----&);
while (!finished) {
VariableBinding vb = null;
ResponseEvent respEvent = snmp.getNext(pdu, target);
PDU response = respEvent.getResponse();
if (null == response) {
.out.println(&responsePDU == null&);
finished = true;
vb = response.get(0);
// check finish
finished = checkWalkFinished(targetOID, pdu, vb);
if (!finished) {
.out.println(&==== walk each vlaue :&);
.out.println(vb.getOid() + & = & + vb.getVariable());
// Set up the variable binding for the next entry.
pdu.setRequestID(new Integer32(0));
pdu.set(0, vb);
.out.println(&SNMP walk OID has finished.&);
snmp.close();
.out.println(&----& demo end &----&);
} catch ( e) {
e.printStackTrace();
.out.println(&SNMP walk Exception: & + e);
} finally {
if (snmp != null) {
snmp.close();
} catch ( ex1) {
snmp = null;
private static boolean checkWalkFinished(OID targetOID, PDU pdu,
VariableBinding vb) {
boolean finished = false;
if (pdu.getErrorStatus() != 0) {
.out.println(&[true] responsePDU.getErrorStatus() != 0 &);
.out.println(pdu.getErrorStatusText());
finished = true;
} else if (vb.getOid() == null) {
.out.println(&[true] vb.getOid() == null&);
finished = true;
} else if (vb.getOid().size() & targetOID.size()) {
.out.println(&[true] vb.getOid().size() & targetOID.size()&);
finished = true;
} else if (targetOID.leftMostCompare(targetOID.size(), vb.getOid()) != 0) {
.out.println(&[true] targetOID.leftMostCompare() != 0&);
finished = true;
} else if (Null.isExceptionSyntax(vb.getVariable().getSyntax())) {
.println(&[true] Null.isExceptionSyntax(vb.getVariable().getSyntax())&);
finished = true;
} else if (vb.getOid().compareTo(targetOID) &= 0) {
.out.println(&[true] Variable received is not &
+ &lexicographic successor of requested & + &one:&);
.out.println(vb.toString() + & &= & + targetOID);
finished = true;
return finished;
/*根据targetOID,异步获取树形数据*/
public static void snmpAsynWalk( ip,
community,
final CommunityTarget target = createDefault(ip, community);
Snmp snmp = null;
.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);
PDU response = event.getResponse();
// PDU request = event.getRequest();
// System.out.println(&[request]:& + request);
if (response == null) {
.out.println(&[ERROR]: response is null&);
} else if (response.getErrorStatus() != 0) {
.out.println(&[ERROR]: response status&
+ response.getErrorStatus() + & Text:&
+ response.getErrorStatusText());
.println(&Received Walk response value :&);
VariableBinding vb = response.get(0);
boolean finished = checkWalkFinished(targetOID,
if (!finished) {
.out.println(vb.getOid() + & = &
+ vb.getVariable());
pdu.setRequestID(new Integer32(0));
pdu.set(0, vb);
((Snmp) event.getSource()).getNext(pdu, target,
null, this);
.println(&SNMP Asyn walk OID value success !&);
latch.countDown();
} catch ( e) {
e.printStackTrace();
latch.countDown();
snmp.getNext(pdu, target, null, listener);
.out.println(&pdu 已发送,等到异步处理结果...&);
boolean wait = latch.await(30, TimeUnit.SECONDS);
.out.println(&latch.await =:& + wait);
snmp.close();
.out.println(&----& demo end &----&);
} catch ( e) {
e.printStackTrace();
.out.println(&SNMP Asyn Walk Exception:& + e);
/*根据OID和指定string来设置设备的数据*/
public static void setPDU( ip, community, oid, val) throws
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();
.out.println(&-------& 发送PDU &-------&);
snmp.send(pdu, target);
snmp.close();
package mySNMP;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.snmp4j.log.ConsoleLogFactory;
import org.snmp4j.log.LogAdapter;
import org.snmp4j.log.LogFactory;
import com.test.snmp.SnmpData;
* @filename SnmpGet.java
* @author code by jianghuiwen
* 下午2:21:53
public class TestSnmpGet {
public void testGet()
ip = &127.0.0.1&;
community = &public&;
oidval = &1.3.6.1.2.1.1.6.0&;
SnmpData.snmpGet(ip, community, oidval);
public void testGetList()
ip = &127.0.0.1&;
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()
ip = &127.0.0.1&;
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);
.out.println(&i am first!&);
public void testWalk()
ip = &127.0.0.1&;
community = &public&;
targetOid = &1.3.6.1.2.1.1.5.0&;
SnmpData.snmpWalk(ip, community, targetOid);
public void testAsyWalk()
ip = &127.0.0.1&;
community = &public&;
// 异步采集数据
SnmpData.snmpAsynWalk(ip, community, &1.3.6.1.2.1.25.4.2.1.2&);
public void testSetPDU() throws
ip = &127.0.0.1&;
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());
注意,工程采用的是maven工程,并且测试类用的是junit4测试方法,包用的是snmp4j.jar,下载地址是:http://www.snmp4j.org
关键词:snmp snmp4j
文章来自IT部落格,,版权所有,转载请注明出处!
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
没有分页内容
图片无法显示
视频无法显示
与原文不一致&&&&snmp4j AGENT 开发必备
&snmp4j AGENT 开发必备
进行snmp4J网管开发的基础东东
agent代理端例子: Java代码 import java.util.*; import org.snmp4j.*; import org.snmp4j.smi.*; //agent代理端例子: public class Test2 { public static class Handler implements org.sn ...
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
免积分&&极速下载60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
开发技术下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
snmp4j AGENT 开发必备
所需积分:5
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
snmp4j AGENT 开发必备
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!}

我要回帖

更多关于 snmp4j agent 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信