snmp4j获取数据agent实例(三)

agent代理端例子:

 

import java.util.*;

import org.snmp4j.*;
import org.snmp4j.smi.*;
//agent代理端例子:
public class Test2 {
	
	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 = "test";
		}

		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();
			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;
				}
				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);
					vPDU.set(0, new VariableBinding(vPDU.get(0).getOid(),
							new OctetString("Test")));

					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) {
			synchronized (Test2.class) {
				try {
					Test2.class.wait();
				} catch (Exception e) {
				}
			}
		}
	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SNMP4J-Agent是一个Java实现的简单网络管理协议(Simple Network Management Protocol, SNMP)代理。它允许Java应用程序作为SNMP管理器或代理,参与到SNMP网络管理系统中。以下是使用SNMP4J-Agent的基本概念和操作: 1. **创建代理**: 在SNMP4J中,你需要创建一个`DefaultUdpTransportMapping`实例来设置网络监听地址[^4]。例如: ```java TransportMapping transport = new DefaultUdpTransportMapping(); transport.setDatagramSocketFactory(new UdpSocketFactoryImpl()); transport.listen(); ``` 2. **配置MIBs**: 为了处理特定的SNMP对象定义,你需要加载MIBs (Management Information Base)。这通常通过`MibBuilder`和`MibTree`完成[^5]: ```java MibBuilder mibBuilder = new MibBuilder(); mibBuilder.addRepository(new File("path/to/mibs")); MibTree mibTree = mibBuilder.getMibTree(); ``` 3. **设置社区字符串**: SNMP通信中使用社区字符串进行身份验证。你可以创建一个`CommunityTarget`来指定目标主机和社区字符串[^6]: ```java CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString("public")); target.setAddress(new InetAddress("localhost")); // 目标IP ``` 4. **执行GET/SET操作**: 使用`SnmpEngine`和`PDU`类执行SNMP GET或SET请求[^7]: ```java SnmpEngine snmpEngine = new SnmpEngine(); PDU request = new GetRequest(); request.addVarbind(new Varbind(new OID("1.3.6.1.2.1.1.1.0"))); // 操作对象ID PDU response = null; try { response = snmpEngine.send(request, target); } catch (SnmpException e) { // 处理异常 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值