谈谈个人对SnmpSharpNet的实践经验

本文的目的

鉴于网上没有使用该开发包的详尽说明,我在这里就讲述一下自己的经验之谈。说明一下,我发现有些人很喜欢纠结于一些不太有意义的事而不花时间去钻研那些很难很有深度的问题。在这里我先声明我只谈论本人关于SnmpSharpNet开发包的实践经验。开发包的下载地址:http://sourceforge.net/projects/snmpsharpnet/;开发包的详细说明文档:http://www.docs.snmpsharpnet.com/current/index.html

SnmpSharpNet中的阻塞模式和非阻塞模式

由于我做的是网管监控,所以实时性十分必要,一开始我毫不犹豫地采用了非阻塞模式来实现。可是在实验中我发现在短期内大量发包的情况下会收到比发送包更多的包。这个问题我百思不得其解,而网上也没有答案,又考虑到回调函数的不确定性,我经过很多次尝试以后放弃了使用该方法,而是采用多线程的方法来实现“非阻塞”。本来我建议大家都不要采用SnmpSharpNet提供的非阻塞模式的,可今天我重新看了一遍以前的压力测试报告,发现当时我的测试还是有很多问题的,首先没有实地测试,只能用两个设备模拟测试几百个设备,收到更多的包很可能是由于设备的MIB库读取速度慢或者是别的原因。以后有时条件了我会做一下这个测试,到时再将结果发出来供大家讨论。

目前我所做的是阻塞模式的实现,在这里我想说明一下SnmpSharpNet开发包在阻塞模式下有一些异常没有捕获,需要大家自己捕获并分析。废话不多说,超时是产生SnmpExceptin,而Oid配置错误产生非SnmpException。下面是我监测部分的代码示例:

SnmpPacket result;
            try
            {
                result = target.Request(pdu, param);
            }
            catch (SnmpException)
            {
                JudgeLevelSendMessage("访问超时");
            }
            catch
            {
                throw new ValidationExcpetion("请检查Oid项配置信息!");
            }

别的情况可能会有人需要,但那肯定是少数,这里我就不说了。这样判断设备不在线其实是有一点小问题的,我试验时更改了一个设备的属性,发现该设备的Mib库在一段时间内(大约是5s)无法读取到,而ping是可以ping通的。猜测是设备的Mib库暂时自行关闭以保存新信息或调节设备所用。

具体的SnmpsharpNet的四种方法的编码实现,参见http://www.snmpsharpnet.com/node/19http://apps.hi.baidu.com/share/detail/1560256。Set的只要在Pdu的VbList里面添加值项就可以了。

ok,SnmpSharpNet其实就这么简单,多看看这个包的开发文档就好了。有什么问题欢迎提出,毕竟这是我第一次实践网管方面的东西。


版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者s5279551 和本文原始地址:
http://www.cnblogs.com/s5279551/archive/2010/09/19/1831261.html

posted on 2010-09-19 19:13  teof  阅读(2061)  评论(4编辑  收藏  举报

导航