用SNMP4J 写个SNMP模拟器

SNMP4J的样例代码里已经有了一个写好的模拟器,把 SNMP4J-Agent 的代码下来后, org\snmp4j\agent\example  目录下的SampleAgent.jav a就是一个模拟器,带上参数: udp:127.0.0.1/161 运行它,会在处理tls-version的地方出现空指针,反正我们也不要什么TLS来进行安全通讯,直接注释掉它就行了。用MIB Browser直接连本机的161端口就可以看到内容了。
这个模拟器的数据是从SampleAgentConfig.properties里读出来的。这个文件的格式可以到  http://www.snmp4j.org/agent/doc/index.html上看PropertyMOInput类的注释,非常详尽。不过这是SNMP4J Agent自己的格式,跟MIB Browser walk出来的内容有很大区别。这些内容通过MOServerPersistence.loadData解析出来 (具体的解析步骤在PropertyMOInputreadSequence中),然后保存在DefaultMOServer中。详细步骤是
1. 通过 DefaultMOServer的register函数把有定义的MIB 对象注册进去。可以是标量,或者表格。
2.在 MOServerPersistence.loadData里从DefaultMOServer里吧所有注册过的对象取取来,放到一个LinkedHashMap<OID, SerializableManagedObject>里。
3. 关键代码在 MOServerPersistence的readData函数里,首先调用 PropertyMOInput的readSequence读取 SampleAgentConfig.properties 里的所有的OID。这些OID包含了所有的标量和所有的表格(不包含表格里的每行定义)。
4.对每个oid,调用 PropertyMOInput的readManagedObject来获取这个OID对应的MIB定义。接着从已经定义好的MIB对象列表中根据OID取出对应的对象,然后调用MIB对象的load函数 从配置文件中把值取出来,放到MIB对象里。需要注意的是readSequence会被不停调用,但是我们每次都通过 readManagedObject修改了当前OID的值,所以 readSequence的每次调用处理的都是 SampleAgentConfig.properties  里不同的行。

为了能解析MIB Browser walk出来的结果,我们需要作的是:
1. 把我们自己的MIB对象通过注册到DefaultMOServer中。
2. 自己实现一下MOInput这个接口。所以只需要修改SampleAgent构造函数里的这一段:
 MOInputFactory configurationFactory = new MOInputFactory() {
      public MOInput createMOInput() {
        return new PropertyMOInput(props, SampleAgent.this);
      }
    };

返回我们自定义的*** MOInput 即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值