`
avery_leo
  • 浏览: 388340 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

snmp4j完整示例

阅读更多
#mib.properties
#Fri Jul 11 15:57:28 CST 2008
1.3.6.1.2.1.1.6.0=beijing
1.3.6.1.2.1.1.8.0=test
1.3.6.1.2.1.1.5.0=admin
1.3.6.1.2.1.1.7.0=8899

 mib搞的两天不是很明白,于是自己定义了个配置文件来充当mib库,mib.properties

 

下面的例子是服务器端,也就是manager:

 

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;

public class SnmpUtil {
	private Snmp snmp = null;
	private Address targetAddress = null;

	public void initComm() throws IOException {
		// 设置Agent方的IP和端口
		targetAddress = GenericAddress.parse("udp:192.168.10.191/161");
		TransportMapping transport = new DefaultUdpTransportMapping();
		snmp = new Snmp(transport);
		transport.listen();
	}

	public ResponseEvent sendPDU(PDU pdu) throws IOException {
		// 设置 target
		CommunityTarget target = new CommunityTarget();
		target.setCommunity(new OctetString("public"));
		target.setAddress(targetAddress);
		// 通信不成功时的重试次数
		target.setRetries(2);
		// 超时时间
		target.setTimeout(1500);
		target.setVersion(SnmpConstants.version1);
		// 向Agent发送PDU,并返回Response
		return snmp.send(pdu, target);
	}

	public void setPDU() throws IOException {
		// set PDU
		PDU pdu = new PDU();
		pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 7,
				0 }), new OctetString("8899")));
		pdu.setType(PDU.SET);
		sendPDU(pdu);
	}
	public void getPDU() throws IOException {
		// get PDU
		PDU pdu = new PDU();
		pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 6,
				0 })));// pcName
		pdu.setType(PDU.GET);
		readResponse(sendPDU(pdu));
	}

	public void readResponse(ResponseEvent respEvnt) {
		// 解析Response
		System.out.println("----------解析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) {
		System.out.println("----------start-------------");
		try {
			SnmpUtil util = new SnmpUtil();
			util.initComm();
			 util.setPDU();
			util.getPDU();
		} catch (IOException e) {

			e.printStackTrace();

		}

	}

}

 

agent代理端代码:

 

import java.util.*;
/**
 * agent代理端
 * leo
 * 20080710
 */
import org.snmp4j.*;
import org.snmp4j.smi.*;

import snmputil.Config;

public class OTAAgent {

	public static class Handler implements org.snmp4j.CommandResponder {
		protected java.lang.String mAddress = null;
		protected int mPort = 0;
		protected java.lang.String mMyCommunityName = null;
		protected org.snmp4j.TransportMapping mServerSocket = null;
		protected org.snmp4j.Snmp mSNMP = null;

		public Handler() {
		}

		public void configure() {
			mAddress = "192.168.10.191";
			mPort = 161;
			mMyCommunityName = "OAagent";
		}

		public void start() {
			try {
				mServerSocket = new org.snmp4j.transport.DefaultUdpTransportMapping(
						new org.snmp4j.smi.UdpAddress(java.net.InetAddress
								.getByName(mAddress), mPort));
				mSNMP = new org.snmp4j.Snmp(mServerSocket);
				mSNMP.addCommandResponder(this);
				mServerSocket.listen();
			} catch (java.net.UnknownHostException vException) {
				System.out.println(vException);
			} catch (java.io.IOException vException) {
				System.out.println(vException);
			}
		}

		public synchronized void processPdu(
				org.snmp4j.CommandResponderEvent aEvent) {
			java.lang.String vCommunityName = new java.lang.String(aEvent
					.getSecurityName());
			System.out.println("Community name " + vCommunityName);
			org.snmp4j.PDU vPDU = aEvent.getPDU();
			Config config=new Config();
			if (vPDU == null) {
				System.out.println("Null pdu");
			} else {
				System.out.println("(rcv) " + vPDU.toString());
				switch (vPDU.getType()) {
				case org.snmp4j.PDU.GET:
				case org.snmp4j.PDU.GETNEXT:
					break;
				case org.snmp4j.PDU.SET:
					System.out.println("------SET----------");
					String reciv=vPDU.get(0).getVariable().getSyntaxString();
					System.out.println("----set------"+vPDU.get(0).toString());
					String setoid=vPDU.get(0).toString();
					System.out.println("-----set-----"+setoid.substring(0, setoid.indexOf("=")-1));
					System.out.println("-----set-----"+setoid.substring(setoid.indexOf("=")+1));
					config.setValueByOID(setoid.substring(0, setoid.indexOf("=")-1).trim(), setoid.substring(setoid.indexOf("=")+1).trim());
				}
				org.snmp4j.mp.StatusInformation statusInformation = new org.snmp4j.mp.StatusInformation();
				org.snmp4j.mp.StateReference ref = aEvent.getStateReference();
				try {
					System.out.println("Sending response");
					vPDU.setType(PDU.RESPONSE);
					
					OID oid=vPDU.get(0).getOid();
					String setoid=vPDU.get(0).toString();
					System.out.println("----get------"+setoid.substring(0, setoid.indexOf("=")-1));
					System.out.println("-----get-----"+setoid.substring(setoid.indexOf("=")+1));
					vPDU.set(0, new VariableBinding(oid,
							new OctetString(config.getValueByOID(setoid.substring(0, setoid.indexOf("=")-1).trim()))));

					aEvent.getMessageDispatcher().returnResponsePdu(
							aEvent.getMessageProcessingModel(),

							aEvent.getSecurityModel(),
							aEvent.getSecurityName(),

							aEvent.getSecurityLevel(), vPDU,
							aEvent.getMaxSizeResponsePDU(), ref,

							statusInformation);
				} catch (org.snmp4j.MessageException vException) {
					System.out.println(vException);
				}
			}
		}
	}

	public static void main(String argv[]) {
		Handler h = new Handler();
		/** 初始化参数 * */
		h.configure();
		h.start();
		/** Do nothing loop * */
		while (true) {
			System.out.println("----------loop-------------");
			synchronized (OTAAgent.class) {
				try {
					OTAAgent.class.wait();
				} catch (Exception e) {
				}
			}
		}
	}
}

 

还有一个就是获取和保存mib信息的类:

 

package snmputil;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.Properties;

public class Config {
	Properties properties;
	Map map;

	public Config() {
		properties = new Properties();

		try {
			properties.load(new FileInputStream("mib.properties"));
		} catch (IOException e) {
			System.out.println("读取properties文件错误");
			e.printStackTrace();
		}
	}

	/**
	 * 根据oid获取value
	 * 
	 * @param oid
	 * @return
	 */
	public String getValueByOID(String oid) {

		return properties.getProperty(oid);

	}

	public void setValueByOID(String oid, String value) {
		
		properties.setProperty(oid, value);
		try {
			properties.store(new FileOutputStream("mib.properties"),"mib.properties");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	

	}

	//测试主函数
	   public static void main(String[] args) {
		   Config cfg=new Config();
		   String oid="1.3.6.1.2.1.1.8.0";
		   System.out.println("---------"+cfg.getValueByOID(oid));
		   
		   cfg.setValueByOID(oid, "test");
		
		   
		
		   System.out.println("---------"+cfg.getValueByOID(oid));
	   }
}

 

 

19
1
分享到:
评论
7 楼 agileclipse 2012-04-18  
代码还要细看下,有没有中文的api发下
6 楼 agileclipse 2012-04-18  
运行无错
5 楼 516456267 2011-06-27  
楼主不用自己模拟mib库,只要主机装了snmp服务,就可以用system组的mib
--system          .1.3.6.1.2.1.1
  --sysDescr      .1.3.6.1.2.1.1.1
  --sysObjectID   .1.3.6.1.2.1.1.2
  --sysUpTime     .1.3.6.1.2.1.1.3
  --sysContact    .1.3.6.1.2.1.1.4
  --sysName       .1.3.6.1.2.1.1.5
  --sysLocation   .1.3.6.1.2.1.1.6
  --sysServices   .1.3.6.1.2.1.1.7
这组mib都是可以取到值的

另外,我没太理解agent代理端代码,因为貌似只要运行SnmpUtil的代码,将上述的mib装入VariableBinding中就可以有返回值了。
4 楼 hanyexiaoxiao 2009-06-22  
你有没有实际项目里头的源码啊,能发份给我看看么?现在被snmp4j搞得头都大了...
3 楼 hanyexiaoxiao 2009-06-22  
老大,按照你写的,在服务端打印不出返回值,但也不报错,不知道啥原因
2 楼 longge 2009-02-12  
楼主是我的偶像啊
1 楼 mindxw 2008-07-25  
建议楼主从设计上讲一下。

相关推荐

    SNMP实例大全--snmp4j(get ,trap,set,取mib)

    通过阅读代码和运行示例,你可以深入理解SNMP协议和snmp4j的使用方法。 10. **安全性和认证** SNMPv3引入了安全模型,允许管理站和代理之间进行认证和加密。snmp4j库支持配置SNMPv3安全参数,如用户名、密码、加密...

    SNMP4J异步调用示例

    在本示例中,我们将深入探讨如何使用SNMP4J进行异步调用,以及在实际项目中应用这些技术。 首先,我们来看`SnmpSingleValueTest.java`文件。这个文件可能包含一个用于获取或设置单个SNMP变量值的测试用例。在SNMP4J...

    snmp4j.zip_java使用snmp4j_snmp4j_snmp4j java

    在提供的“snmp4j.pdf”文档中,你将找到更多关于如何使用SNMP4J的详细示例和教程,包括初始化设置、发送请求、处理响应、以及设置陷阱监听器等内容。这份文档将帮助你深入理解和应用SNMP4J库,以便在Java环境中有效...

    snmp4j实现snmp trap 发送与接收

    SNMP(Simple Network Management Protocol,简易网络管理协议)是一种广泛应用于网络管理的协议,SNMP4J 是一个基于 Java 的 SNMP 库,提供了完整的 SNMP 功能实现。本文将详细介绍使用 SNMP4J 实现 SNMP Trap 发送...

    snmp4j包来读取snmp协议数据

    在Java环境中,SNMP4J库为开发者提供了便利,可以用来读取和操作SNMP协议的数据。本文将深入探讨如何利用SNMP4j包来读取SNMP协议数据。 首先,理解SNMP4j的基本概念至关重要。SNMP4j是一个开源的Java库,完全实现了...

    snmp4j源码和API

    在提供的文件中,`snmp4j_all`可能是SNMP4J的完整库,包含了所有相关类和资源;`snmp4j-1.11.1-javadoc`是API文档,可以帮助开发者了解每个类和方法的用途及用法;`help_doc`可能包含额外的帮助文档,提供使用示例和...

    snmp4j api文档

    SNMP4J的API文档(如SNMP4J_API_en_s1.chm)包含了详细的类和方法描述,以及示例代码,是学习和使用SNMP4J的重要参考资料。开发者可以通过查阅文档,了解每个类的功能、方法的参数和返回值,以便更有效地使用SNMP4J...

    snmp4j-agent

    SNMP4J-Agentx 2.5.2版本的源码、示例和jar包包含在这个压缩包中,对于开发者来说是一个非常有价值的资源,可以帮助他们深入理解SNMP协议以及如何在Java环境中实现它。 SNMP(Simple Network Management Protocol)...

    snmp4j-1.9.3d.zip_snmp4j-1.9.3d_snmp管理工具

    标题中的"snmp4j-1.9.3d.zip_snmp4j-1.9.3d_snmp管理工具"表明这是一个版本为1.9.3d的SNMP4J库的压缩包,它包含了对SNMP协议的支持和一些管理功能。 SNMP,全称Simple Network Management Protocol,是一种应用层...

    snmp.zip_SNMP4J MIB_java mib_mib_mib snmp4j_snmp模拟

    在提供的压缩文件列表中,"www.pudn.com.txt"可能是一个包含更多关于SNMP4J使用示例或MIB模拟细节的文本文件,而"snmp"可能是一个实际的代码文件或目录,包含具体的SNMP4J示例代码。为了进一步学习和实践,你应该...

    java利用snmp4j包来读取snmp协议数据

    SNMP4j库为Java开发者提供了一个完整的SNMP解决方案,包括PDU(协议数据单元)的构建、编码、解码以及错误处理等功能。使用SNMP4j,你可以轻松地创建SNMPv1、SNMPv2c或SNMPv3的请求,并处理来自目标设备的响应。 ...

    用snmp4j获取本地所有oid

    Snmp4j提供了丰富的API来执行SNMP操作,以下是一个简单的示例代码: ```java import org.snmp4j.*; import org.snmp4j.mp.MPv1; import org.snmp4j.mp.MPv2c; import org.snmp4j.security.*; import org.snmp4j.smi...

    如何利用snmp4j-agent在PC端模拟snmp服务

    本文将深入探讨如何使用SNMP4J-Agent工具在个人计算机上模拟SNMP服务,以便进行测试和开发。 SNMP4J-Agent是SNMP4J项目的一部分,是一个开源的Java库,用于实现SNMP代理功能。它提供了丰富的API,可以方便地构建...

    SNMP4J远程获取设备信息案例

    SNMP4J是Java开发人员实现SNMP功能的首选工具,因为它提供了完整的SNMPv1、v2c和v3支持,包括Trap处理、Get、Set操作以及Walk机制。在实际应用中,我们可以通过以下步骤使用SNMP4J: 1. **导入SNMP4J库**:首先,在...

Global site tag (gtag.js) - Google Analytics