`
celul
  • 浏览: 3721 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

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

 
阅读更多

    想在PC端起一个snmp模拟器,在网上搜了一段时间,例子也不算少,但一般都有些问题,可能是自己某个地方出错了。

    索性直接从源码的example开始,看了几天snmp4j-agent源码后,虽然啥也没看懂,但还是被我找到了一些突破口。

    直接将org.snmp4j.agent.example下的例子复制出来,然后修改即可。这几天刚写好的例子,也懒得作修饰了。

1. 将源码中的SampleAgentConfig.properties(org.snmp4j.agent.example下)复制出来。

2. 建立如图的包层次结构


          

3. 代码明细

 

SysDate.java

package celul.snmpSeverTest.scalar;

import org.snmp4j.agent.mo.MOAccessImpl;
import org.snmp4j.agent.mo.MOScalar;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;

public class SysDate extends MOScalar<OctetString> {

	public SysDate() {
		super(new OID("1.3.6.1.4.1.12321.1.1.1.2.0"), MOAccessImpl.ACCESS_READ_ONLY,
	            new OctetString("com"));
	}

	@Override
	public OctetString getValue() {
		return new OctetString("com");
	}

}

 SysInitDevice.java

package celul.snmpSeverTest.scalar;

import org.snmp4j.agent.mo.MOAccessImpl;
import org.snmp4j.agent.mo.MOScalar;
import org.snmp4j.smi.Integer32;
import org.snmp4j.smi.OID;

public class SysInitDevice extends MOScalar<Integer32> {

	public SysInitDevice() {
		super(new OID("1.3.6.1.4.1.12321.1.1.1.3.0"), MOAccessImpl.ACCESS_READ_WRITE,
	            new Integer32(3));
	}

	@Override
	public Integer32 getValue() {
		return super.getValue();
	}

	@Override
	public int setValue(Integer32 value) {
		return super.setValue(value);
	}

}

 SysInitParams.java与SysTimeUp.java不再赘述。

 

 

MoTableUtil.java

 

package celul.snmpSeverTest.table;

import org.snmp4j.agent.MOAccess;
import org.snmp4j.agent.mo.DefaultMOMutableTableModel;
import org.snmp4j.agent.mo.DefaultMOTable;
import org.snmp4j.agent.mo.DefaultMOTableRow;
import org.snmp4j.agent.mo.MOAccessImpl;
import org.snmp4j.agent.mo.MOColumn;
import org.snmp4j.agent.mo.MOMutableColumn;
import org.snmp4j.agent.mo.MOTableIndex;
import org.snmp4j.agent.mo.MOTableSubIndex;
import org.snmp4j.agent.mo.snmp.RowStatus;
import org.snmp4j.smi.Integer32;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.SMIConstants;
import org.snmp4j.smi.Variable;

import celul.snmpSeverTest.Constant;



public class MoTableUtil{
	
	@SuppressWarnings("rawtypes")
	private static DefaultMOTable emuTable;
	private static final String emuTableEntryOid = "1.3.6.1.4.1.19547.1.6.1.1.1";
	private static final Object[][] columnEmuDefined = {
		{ 1, "1", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 2, "2", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 3, "3", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 4, "4", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 5, "5", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 6, "6", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 7, "7", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 8, "8", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 9, "9", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 10, Constant.ROWSTATUS, MOAccessImpl.ACCESS_READ_CREATE, SMIConstants.SYNTAX_INTEGER32 } };
	
	
	@SuppressWarnings("rawtypes")
	private static DefaultMOTable edfaTable;
	private static final String edfaTableEntryOid = "1.3.6.1.4.1.19547.1.6.1.2.1";
	private static final Object[][] columnEdfaDefined = {
		{ 1, "1", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 2, "2", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 3, "3", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 4, "4", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 5, "5", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 6, "6", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 7, "7", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 8, "8", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 9, "9", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 10, "10", MOAccessImpl.ACCESS_READ_ONLY, SMIConstants.SYNTAX_OCTET_STRING },
		{ 11, Constant.ROWSTATUS, MOAccessImpl.ACCESS_READ_CREATE, SMIConstants.SYNTAX_INTEGER32 } };
	
	//private static DefaultMOTable defaTable;
	
	@SuppressWarnings("rawtypes")
	public static DefaultMOTable getEmuTable(){
		if(emuTable == null){
			initEmuTable();
		}
		return emuTable;
	}
	
	@SuppressWarnings("rawtypes")
	public static DefaultMOTable getEdfaTable(){
		if(edfaTable == null){
			initEdfaTable();
		}
		return edfaTable;
	}
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	private static void initEmuTable(){
		int columnLength = columnEmuDefined.length;
		MOColumn[] edfaColumns = new MOColumn[columnLength];
		for( int i=0; i<columnLength; i++){
			Object[] acol = columnEmuDefined[i];
			int index = (Integer) acol[0];
			String name = (String) acol[1];
			MOAccess access = (MOAccess) acol[2];
			int operType = (Integer) acol[3];
			
			Variable valueDefault = new Integer32(1);
			
			if(name.startsWith(Constant.ROWSTATUS)){
				edfaColumns[i] = new RowStatus(index);
			}else{
				edfaColumns[i] = new MOMutableColumn<Variable>(index, operType, access, valueDefault, true);
			}
		}
		
		emuTable = new DefaultMOTable(
				new OID(emuTableEntryOid),

				new MOTableIndex(
						new MOTableSubIndex[] { 
						new MOTableSubIndex(
						new OID(emuTableEntryOid + ".1001"),
						SMIConstants.SYNTAX_OCTET_STRING, 1, 16) }, 
						true),

						edfaColumns,
				new DefaultMOMutableTableModel<DefaultMOTableRow>()
		);
	}
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	private static void initEdfaTable(){
		int columnLength = columnEdfaDefined.length;
		MOColumn[] edfaColumns = new MOColumn[columnLength];
		for( int i=0; i<columnLength; i++){
			Object[] acol = columnEdfaDefined[i];
			int index = (Integer) acol[0];
			String name = (String) acol[1];
			MOAccess access = (MOAccess) acol[2];
			int operType = (Integer) acol[3];
			
			Variable valueDefault = new Integer32(1);
			
			if(name.startsWith(Constant.ROWSTATUS)){
				edfaColumns[i] = new RowStatus(index);
			}else{
				edfaColumns[i] = new MOMutableColumn<Variable>(index, operType, access, valueDefault, true);
			}
		}
		
		edfaTable = new DefaultMOTable(
				new OID(edfaTableEntryOid),

				new MOTableIndex(
						new MOTableSubIndex[] { 
						new MOTableSubIndex(
						new OID(edfaTableEntryOid + ".1001"),
						SMIConstants.SYNTAX_OCTET_STRING, 1, 16) }, 
						true),

						edfaColumns,
				new DefaultMOMutableTableModel<DefaultMOTableRow>()
		);
	}
	
	@SuppressWarnings("unchecked")
	public static void fillDefaultDataIntoEmuTable(){
		for (int rowId = 1; rowId < 2; rowId++) {
			Variable[] values = new Variable[10];
			values[0] = new OctetString("a.0." + rowId);
			values[1] = new OctetString("b.0." + rowId);
			values[2] = new OctetString("c.0." + rowId);
			values[3] = new OctetString("d.0." + rowId);
			values[4] = new OctetString("e.0." + rowId);
			values[5] = new OctetString("f.0." + rowId);
			values[6] = new OctetString("g.0." + rowId);
			values[7] = new OctetString("h.0." + rowId);
			values[8] = new OctetString("i.0." + rowId);
			values[9] = new Integer32(rowId);
			emuTable.addRow(new DefaultMOTableRow(new OID("1.0." + rowId),
					values));
		}
	}
	
	@SuppressWarnings("unchecked")
	public static void fillDefaultDataIntoEdfaTable(){
		for (int rowId = 1; rowId < 5; rowId++) {
			Variable[] values = new Variable[11];
			values[0] = new OctetString("edfa.a.0." + rowId);
			values[1] = new OctetString("edfa.b.0." + rowId);
			values[2] = new OctetString("edfa.c.0." + rowId);
			values[3] = new OctetString("edfa.d.0." + rowId);
			values[4] = new OctetString("edfa.e.0." + rowId);
			values[5] = new OctetString("edfa.f.0." + rowId);
			values[6] = new OctetString("edfa.g.0." + rowId);
			values[7] = new OctetString("edfa.h.0." + rowId);
			values[8] = new OctetString("edfa.i.0." + rowId);
			values[9] = new OctetString("edfa.j.0." + rowId);
			values[10] = new Integer32(rowId);
			edfaTable.addRow(new DefaultMOTableRow(new OID("1.0." + rowId),
					values));
		}
	}
}

 

 

Constant.java

 

public class Constant {

	public static final String ROWSTATUS="rowStatus";
	
}

 

 

 

 主要入口snmp4jAgent.java

 

package celul.snmpSeverTest;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

import org.apache.log4j.BasicConfigurator;
import org.snmp4j.MessageDispatcher;
import org.snmp4j.MessageDispatcherImpl;
import org.snmp4j.TransportMapping;
import org.snmp4j.agent.AgentConfigManager;
import org.snmp4j.agent.DefaultMOContextScope;
import org.snmp4j.agent.DefaultMOServer;
import org.snmp4j.agent.DuplicateRegistrationException;
import org.snmp4j.agent.MOQuery;
import org.snmp4j.agent.MOQueryWithSource;
import org.snmp4j.agent.MOScope;
import org.snmp4j.agent.MOServer;
import org.snmp4j.agent.ManagedObject;
import org.snmp4j.agent.cfg.EngineBootsCounterFile;
import org.snmp4j.agent.io.DefaultMOPersistenceProvider;
import org.snmp4j.agent.io.MOInput;
import org.snmp4j.agent.io.MOInputFactory;
import org.snmp4j.agent.io.prop.PropertyMOInput;
import org.snmp4j.agent.mo.util.VariableProvider;
import org.snmp4j.agent.request.Request;
import org.snmp4j.agent.request.RequestStatus;
import org.snmp4j.agent.request.SubRequest;
import org.snmp4j.agent.request.SubRequestIterator;
import org.snmp4j.log.Log4jLogFactory;
import org.snmp4j.log.LogAdapter;
import org.snmp4j.log.LogFactory;
import org.snmp4j.log.LogLevel;
import org.snmp4j.mp.MPv3;
import org.snmp4j.security.SecurityProtocols;
import org.snmp4j.smi.Address;
import org.snmp4j.smi.GenericAddress;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.Variable;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.TransportMappings;
import org.snmp4j.util.ThreadPool;

import celul.snmpSeverTest.scalar.SysDate;
import celul.snmpSeverTest.scalar.SysInitDevice;
import celul.snmpSeverTest.scalar.SysInitParams;
import celul.snmpSeverTest.scalar.SysTimeUp;
import celul.snmpSeverTest.table.MoTableUtil;

public class SNMP4JAgent implements VariableProvider {

	static{
		LogFactory.setLogFactory(new Log4jLogFactory());
		BasicConfigurator.configure();
		LogFactory.getLogFactory().getRootLogger().setLogLevel(LogLevel.ALL);
	}
	
	private LogAdapter logger = LogFactory.getLogger(SNMP4JAgent.class);
	
	protected AgentConfigManager agent;
	protected MOServer server;
	private String configFile;
	private File bootCounterFile;
	
	public SNMP4JAgent(){
		configFile = "configFile.cfg";
		bootCounterFile = new File("bootCounterFile.bc");
		
		server = new DefaultMOServer();
		MOServer[] moServers = new MOServer[] { server };
		
		final Properties props = new Properties();
		try {
			props.load(SNMP4JAgent.class.getResourceAsStream("SampleAgentConfig.properties"));
		} catch (IOException ex) {
			ex.printStackTrace();
		}
		MOInputFactory configurationFactory = new MOInputFactory(){
			@Override
			public MOInput createMOInput() {
				return new PropertyMOInput(props, SNMP4JAgent.this);
			}
		};
		
		MessageDispatcher messageDispatcher = new MessageDispatcherImpl();
		List<String> list = new ArrayList<String>();
		list.add("udp:0.0.0.0/161");
		addListenAddresses(messageDispatcher,list);
		
		agent = new AgentConfigManager(
					new OctetString(MPv3.createLocalEngineID()), 
					messageDispatcher, 
					null, 
					moServers, 
					ThreadPool.create("snmp4JAgent", 3), 
					configurationFactory, 
					new DefaultMOPersistenceProvider(moServers, configFile), 
					new EngineBootsCounterFile(bootCounterFile)
				);
	}
	
	
	@Override
	public Variable getVariable(String name) {
		OID oid;
		OctetString context = null;
		int pos = name.indexOf(':');
		if (pos >= 0) {
			context = new OctetString(name.substring(0, pos));
			oid = new OID(name.substring(pos + 1, name.length()));
		} else {
			oid = new OID(name);
		}
		final DefaultMOContextScope scope = new DefaultMOContextScope(context,
				oid, true, oid, true);
		MOQuery query = new MOQueryWithSource(scope, false, this);
		ManagedObject mo = server.lookup(query);
		if (mo != null) {
			final VariableBinding vb = new VariableBinding(oid);
			final RequestStatus status = new RequestStatus();
			SubRequest req = new SubRequest() {
				private boolean completed;
				private MOQuery query;

				public boolean hasError() {
					return false;
				}

				public void setErrorStatus(int errorStatus) {
					status.setErrorStatus(errorStatus);
				}

				public int getErrorStatus() {
					return status.getErrorStatus();
				}

				public RequestStatus getStatus() {
					return status;
				}

				public MOScope getScope() {
					return scope;
				}

				public VariableBinding getVariableBinding() {
					return vb;
				}

				public Request getRequest() {
					return null;
				}

				public Object getUndoValue() {
					return null;
				}

				public void setUndoValue(Object undoInformation) {
				}

				public void completed() {
					completed = true;
				}

				public boolean isComplete() {
					return completed;
				}

				public void setTargetMO(ManagedObject managedObject) {
				}

				public ManagedObject getTargetMO() {
					return null;
				}

				public int getIndex() {
					return 0;
				}

				public void setQuery(MOQuery query) {
					this.query = query;
				}

				public MOQuery getQuery() {
					return query;
				}

				public SubRequestIterator repetitions() {
					return null;
				}

				public void updateNextRepetition() {
				}

				public Object getUserObject() {
					return null;
				}

				public void setUserObject(Object userObject) {
				}

			};
			mo.get(req);
			return vb.getVariable();
		}
		return null;
	}
	
	protected void addListenAddresses(MessageDispatcher md,
			List<String> addresses) {
		for (String addressString : addresses) {
			Address address = GenericAddress.parse(addressString);
			if (address == null) {
				logger.fatal("Could not parse address string '" + addressString
						+ "'");
				return;
			}
			@SuppressWarnings("rawtypes")
			TransportMapping tm = TransportMappings.getInstance().createTransportMapping(address);
			if (tm != null) {
				md.addTransportMapping(tm);
			} else {
				logger.warn("No transport mapping available for address '"
						+ address + "'.");
			}
		}
	}
	
	public void registerMIBs(){
		try {
			server.register(new SysTimeUp(), null);
			server.register(new SysDate(), null); 
			server.register(new SysInitDevice(), null);
			server.register(new SysInitParams(), null);
			
			server.register(MoTableUtil.getEmuTable(), null);
			server.register(MoTableUtil.getEdfaTable(), null);
			
			MoTableUtil.fillDefaultDataIntoEmuTable();
			MoTableUtil.fillDefaultDataIntoEdfaTable();
		} catch (DuplicateRegistrationException e) {
			e.printStackTrace();
		} 
		
	}
	
	public void run() {
		agent.initialize();
		registerMIBs();
		agent.setupProxyForwarder();
		agent.setTableSizeLimits(new Properties());
		agent.run();
	}
	
	public static void main(String[] args){
		SNMP4JAgent sa = new SNMP4JAgent();
		SecurityProtocols.getInstance().addDefaultProtocols();
		sa.run();
	}
}

 

 

运行snmp4jAgent.java,这样,我们的服务端就已经起来了。通过mibBrowser可以访问。

 

.1.3.6.1.4.1.19547.1.6.1.1.1.1.1.0.1	a.0.1
.1.3.6.1.4.1.19547.1.6.1.1.1.2.1.0.1	b.0.1
.1.3.6.1.4.1.19547.1.6.1.1.1.3.1.0.1	c.0.1
.1.3.6.1.4.1.19547.1.6.1.1.1.4.1.0.1	d.0.1
.1.3.6.1.4.1.19547.1.6.1.1.1.5.1.0.1	e.0.1
.1.3.6.1.4.1.19547.1.6.1.1.1.6.1.0.1	f.0.1
.1.3.6.1.4.1.19547.1.6.1.1.1.7.1.0.1	g.0.1
.1.3.6.1.4.1.19547.1.6.1.1.1.8.1.0.1	h.0.1
.1.3.6.1.4.1.19547.1.6.1.1.1.9.1.0.1	i.0.1
.1.3.6.1.4.1.19547.1.6.1.1.1.10.1.0.1	1

.1.3.6.1.4.1.19547.1.6.1.2.1.1.1.0.1	edfa.a.0.1
.1.3.6.1.4.1.19547.1.6.1.2.1.1.1.0.2	edfa.a.0.2
.1.3.6.1.4.1.19547.1.6.1.2.1.1.1.0.3	edfa.a.0.3
.1.3.6.1.4.1.19547.1.6.1.2.1.1.1.0.4	edfa.a.0.4
.1.3.6.1.4.1.19547.1.6.1.2.1.2.1.0.1	edfa.b.0.1
.1.3.6.1.4.1.19547.1.6.1.2.1.2.1.0.2	edfa.b.0.2
.1.3.6.1.4.1.19547.1.6.1.2.1.2.1.0.3	edfa.b.0.3
.1.3.6.1.4.1.19547.1.6.1.2.1.2.1.0.4	edfa.b.0.4
.1.3.6.1.4.1.19547.1.6.1.2.1.3.1.0.1	edfa.c.0.1
.1.3.6.1.4.1.19547.1.6.1.2.1.3.1.0.2	edfa.c.0.2
.1.3.6.1.4.1.19547.1.6.1.2.1.3.1.0.3	edfa.c.0.3
.1.3.6.1.4.1.19547.1.6.1.2.1.3.1.0.4	edfa.c.0.4
.1.3.6.1.4.1.19547.1.6.1.2.1.4.1.0.1	edfa.d.0.1
.1.3.6.1.4.1.19547.1.6.1.2.1.4.1.0.2	edfa.d.0.2
.1.3.6.1.4.1.19547.1.6.1.2.1.4.1.0.3	edfa.d.0.3
.1.3.6.1.4.1.19547.1.6.1.2.1.4.1.0.4	edfa.d.0.4
.1.3.6.1.4.1.19547.1.6.1.2.1.5.1.0.1	edfa.e.0.1
.1.3.6.1.4.1.19547.1.6.1.2.1.5.1.0.2	edfa.e.0.2
.1.3.6.1.4.1.19547.1.6.1.2.1.5.1.0.3	edfa.e.0.3
.1.3.6.1.4.1.19547.1.6.1.2.1.5.1.0.4	edfa.e.0.4
.1.3.6.1.4.1.19547.1.6.1.2.1.6.1.0.1	edfa.f.0.1
.1.3.6.1.4.1.19547.1.6.1.2.1.6.1.0.2	edfa.f.0.2
.1.3.6.1.4.1.19547.1.6.1.2.1.6.1.0.3	edfa.f.0.3
.1.3.6.1.4.1.19547.1.6.1.2.1.6.1.0.4	edfa.f.0.4
.1.3.6.1.4.1.19547.1.6.1.2.1.7.1.0.1	edfa.g.0.1
.1.3.6.1.4.1.19547.1.6.1.2.1.7.1.0.2	edfa.g.0.2
.1.3.6.1.4.1.19547.1.6.1.2.1.7.1.0.3	edfa.g.0.3
.1.3.6.1.4.1.19547.1.6.1.2.1.7.1.0.4	edfa.g.0.4
.1.3.6.1.4.1.19547.1.6.1.2.1.8.1.0.1	edfa.h.0.1
.1.3.6.1.4.1.19547.1.6.1.2.1.8.1.0.2	edfa.h.0.2
.1.3.6.1.4.1.19547.1.6.1.2.1.8.1.0.3	edfa.h.0.3
.1.3.6.1.4.1.19547.1.6.1.2.1.8.1.0.4	edfa.h.0.4

.1.3.6.1.4.1.12321.1.1.1.3.0	3
 

 

也可以通过snmp4j客户端程序访问该服务器资源。后续再跟踪。

 

  • 大小: 7.6 KB
分享到:
评论

相关推荐

    snmp4j-agent官方源码

    通过对SNMP4J-Agent源码的学习,开发者可以更好地理解和定制SNMP代理服务,为自己的应用添加网络管理功能,或者为现有网络设备开发自定义的管理解决方案。同时,源码阅读也是提升Java编程技巧和理解网络协议的好途径...

    SNMP4J-Agent-Guide

    SNMP4J-Agent由AgenPro代码生成工具负责生成代码,当使用SNMP4J-Agent代码生成模板时,AgenPro会利用这个模板中所携带的SNMP4J-Agent API领域的知识来生成代码。 文档还介绍了SNMP领域的域模型语言是SMI,并强调了...

    snmp4j-agent

    这个工具在SNMP4J项目下开发,是SNMP4J的一个扩展,提供了更丰富的功能和更方便的接口来创建和管理SNMP代理。SNMP4J-Agentx 2.5.2版本的源码、示例和jar包包含在这个压缩包中,对于开发者来说是一个非常有价值的资源...

    snmp4j-agent-2.0.6-distribution.zip[包含源码&API;]

    SNMP4J-Agent是SNMP4J项目的一部分,专注于提供SNMP代理服务,让设备能够响应SNMP管理站的请求。 源码部分提供了SNMP4J-Agent的核心实现,包括MIB对象的定义、PDU处理、陷阱发送等功能。通过阅读源码,开发者可以...

    snmp4j agent相关开发资源

    1.3.3-distribution.zip`和`snmp4j-agentx-2.1.0-distribution.zip`可能包含SNMP4J-Agent的扩展版本,支持更多高级特性,比如XMSNMP(Extended Management Service for SNMP)接口,这能提供更灵活的SNMP代理服务。...

    snmp4j-agent-2.0.5-distribution.zip_snmp4j agent

    2. **服务器管理**:在服务器环境中,可以利用SNMP4j-Agent监控系统资源如CPU、内存、磁盘空间等。 3. **应用程序集成**:开发人员可以将SNMP4j-Agent集成到自定义的应用程序中,实现远程管理和监控。 4. **自动化...

    snmp4j-agent-1.4.1.zip

    首先,SNMP4J-Agent是基于SNMP4J库的扩展,它允许开发人员在Java应用中实现SNMP代理功能,从而能够接收和响应来自SNMP管理站的请求。1.4.1版本是在前一版本基础上的优化和改进,增强了其稳定性和兼容性,同时也可能...

    SNMP4J-Agent中文版API.chm

    SNMP4J-Agent中文版API.chmSNMP4J-Agent中文版API.chmSNMP4J-Agent中文版API.chm

    SNMP4J-agent.jar

    SNMP4J-agent.jar,好不容易找到一个能用的,拿出来分享

    snmp4j中agent程序demo

    在“snmp-agent”这个压缩包中,可能包含了一个示例的SNMP代理程序。这个程序通常会包含以下部分: 1. **初始化**: 配置Snmp4j的TransportMapping,如UDPTransportMapping,用于接收SNMP报文。同时,需要设置一个...

    snmp4j-agentgen开发说明说

    - **AgenPro与SNMP4J-Agent API**:SNMP4J-Agent是一套针对SNMP命令响应领域的应用程序编程接口(API)。AgentGen使用特定的代码生成模板为这个API生成代码。 - **代码生成模板**:代码生成模板包含了关于SNMP4J-...

    snmp4j AGENT 开发必备

    进行snmp4J网管开发的基础东东 agent代理端例子: Java代码 import java.util.*; import org.snmp4j.*; import org.snmp4j.smi.*; //agent代理端例子: public class Test2 { public static class Handler...

    snmp4j-2.2.2-distribution.zip

    2. SNMP4J-Agent:这个模块提供了构建SNMP代理(或管理系统)所需的功能,允许服务器端接收和处理SNMP请求。 3. SNMP4J-Agent-Utils:包含了辅助工具,如MIB编译器,用于将管理信息结构(MIB)文件转换为Java代码。 ...

    SNMP4J-CLT

    SNMP4J-CLT是基于Java开发的一个强大的命令行工具,它允许用户与支持SNMP(简单网络管理协议)的设备进行交互。这个工具在任何支持Java的平台上都能运行,包括Windows、Linux、macOS等,这得益于Java的跨平台特性。...

    SnmpAgentSimulator:从一台 PC 模拟数千个 SNMP 网络节点-开源

    - 从一台计算机模拟数千个 SNMP 节点的免费工具。 - 易于安装、易于配置、易于使用 - 无需使用... - 在内部使用开源 SNMP4j - 在所有流行的 Linux 发行版上运行。 - 通过类似于 Apache httpd.conf 文件的文件更改设置

    snmp4j-2.2.5.jar

    snmp4j 2.2.5 版本的 snmp4j 2.2.5 版本的 snmp4j 2.2.5 版本的

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

    SNMP4J是Java语言开发的一个开放源代码的简单网络管理协议(SNMP)实现工具包,主要用于在Java环境中进行网络设备的管理和监控。标题中的"snmp4j-1.9.3d.zip_snmp4j-1.9.3d_snmp管理工具"表明这是一个版本为1.9.3d的...

    snmp4j-2.5.8-distribution.zip

    2. **SNMP4J-Agent.jar**: 提供了SNMP代理的功能,允许应用程序作为SNMP实体对外提供服务。 3. **SNMP4J-Config.jar**: 包含了配置工具和类,用于设置SNMP4J的配置参数,如安全模型、认证协议等。 4. **SNMP4J-...

    snmp4j-doc-1.9.3d

    5. **编程接口**:在SNMP4J中,开发者可以通过创建`Session`实例来建立到目标设备的连接,然后利用`PDU`对象构建SNMP请求。`Target`类定义了通信的目标,包括IP地址、端口、社区字符串(对于SNMPv1和v2c)或安全参数...

Global site tag (gtag.js) - Google Analytics