给所有关注SNMP朋友的一点小文章

原创 2005年04月26日 09:58:00

从我接触SNMP的过程中,我发现在我们这块领域内存在两个很大的缺陷,就是真正有用的文档太少了更别说中文的了,从最开始写Snmp管理端的时候,对动态加载MIB那一块就感觉资料非常少,不得以自己一行一行分析Mib文件,研究ASN.1,自己写了个Delphi版的mib Parser。到我们想去动手自己写snmp协议库的时候,资料更是少!这是其一!其二:目前大部分做这方面开发的朋友,都是在用SNMP++,NET-SNMP,它们的代码其实都让人感觉有点发怵,更有胜者,看看adventnet它的Agent Toolkit C Edition,它写的封装snmp协议库(C版本)的源代码,那更让人却步!


其实说到底SNMP Agent的实现机理和内部框架是比较清晰和容易掌握的。现把我在开发CSnmp的过程中的系统架构和实现难点总结出来于大家分享,希望能对那些不仅仅是用


已有的SNMP库开发网络应用管理程序的朋友有一点帮助。


   首先用非常一句话概括CSnmp的功能,它是一个实现了snmpV2csnmpV3标准,并打开705端口实现AgentXRFC 2741)大部分重要PDUAGENT,并提供开发支持AgentX


协议的SubAgent的开发API(目前只提供JAVA版本的,紧接着下一步立刻提供C版本的API)


CSnmp的架构如下:管理端<-――>MasterAgent<―――>SubAgent


1.       MasterAgent打开两个端口161, 705161负责接受从管理端来的请求(GetPDU, GetNextPDU, GetBulkPDU)705负责向每个subAgent发送AgentXGetPDU, AgentXGetNext, AgnetXGetBulk请求,当然这些请求是按照AgentX协议的标准来封装的(AgentX协议相对标准的SNMP来说较为简单),同时705端口还负责接受从SubAgent处来的请求,比如说agentx-Open-PDUagentx-Register-PDUagentx-Notify-PDU等。


2.       正因为打开了两个端口,那么就应该在软件实现中至少有一个HashMap(暂取名为Map1)负责存储从管理端来的request。这个HashMapIndex是向subAgent发送的请求包中的transactionID


    3.当subAgent接受到从MasterAgent来的请求后,解AgentXPDU包,看到底是做什么的,并进行与之相应的处理,把产生的结果按The agentx-Response-PDU的要求打包,发送给MasterAgent


    4MasterAgent705端口接受到,开始发出请求的相应,解开这个AgentX Response PDU包,从解包结果中把transactionID取出来,到刚才的Map1中根据transactionID去找到开始从Manager(管理端)进来的请求,并根据该请求把subAgent返回的值按SNMP协议打包,发还给Manager,从而完成了一次完整的交互过程。


 

下面,就大家非常关心的Mib问题,从实现层面上来做一分析。Mib信息分别在SubAgentMasterAgent中都要存储。Mib的存储由两种数据结构共同合作来实现,一个是HashMap(暂取名为mibMap),一个是Vector(暂取名为mibVector)。mibMap是为了快速搜索由subAgent注册的mib Subtree(“注册”:就是subAgent告诉MasterAgent说该mib 节点下的所有子节点你都可以到我这个subAgent去找)。而mibVector则是为了方便的实现getNext这一操作。有了这个mibVector,所有在MasterAgent中被subAgents注册的mib节点都是按照“字典“顺序排序的。其实,每个从Manager发给MasterAgent的请求,在解包后的第一步就是看该请求中的mib OID是不是在mibMap中,有的话接着进行下面的操作,没有的话直接返回管理端,并报以相应的错误。

 

今天就先写这么多了,等下个星期网站建好后,我会把V3的实现和难点做一分析。仅以这些文章献给那些仍然执着追求的朋友们!

iphone的一点入门文章

  • 2011年05月20日 09:21
  • 2.47MB
  • 下载

一篇介绍SNMP非常好的文章

转摘自:http://www.h3c.com.cn/Products___Technology/Technology/System_Management/Other_technology/Techno...

linux下安装snmp(修改转载文章,红色字体为修改部分)

一、安装snmp服务 1、检查系统是否已经安装snmp的rpm包  以下是安装snmp服务需要的rpm包: libsensors3-2.10.6-55.el5.i386.rpm lm_sens...

jquery.validate 验证控件的 一个 api 文档 ,希望对有用到的朋友 起到一点作用

名称  返回类型  描述   validate(options)  返回:Validator  验证所选的FORM   valid()  返回:Boolean  检查是否验证通过 ...
  • wmyasw
  • wmyasw
  • 2011年09月28日 11:58
  • 1581

技巧心得:给拥有Google AdSense 帐户 朋友的一点忠告

给拥有Google AdSense 帐户  朋友的一点忠告    首先在这里申明,我没有任何的污蔑,诽谤Google AdSense意思 ,有些言辞不当,请多多包涵!! 本人非常不幸,我的Goo...
  • gemgin
  • gemgin
  • 2013年06月13日 14:23
  • 295

Google对学生朋友的一点建议

对学生朋友的一点建议     发表者:Google(谷歌)中国工程研究院工程师方坤   自去年春天加入谷歌,我曾多次随公司校园招聘团队一起走访各地院校,帮助公司发掘人才。利用这样的出差机会到...

WCF 一步一步从入门到精通 建立一个简单入门的例子(适合一点不会的朋友阅读)

Windows Communication Foundation (WCF) 是一个统一框架,用于创建既安全可靠又可交互的分布式事务处理应用程序。在我学习一样新的技术的时候总喜欢一开始就知道他如何使用...

惠普JAVA工程师给想从事JAVA开发的朋友一点工作心得

工作已经有段时间了,突然想写点东西,大学的时候就有写日记的习惯,但是自从进入惠普工作,慢慢的也没有时间去写日记,希望通过这篇文章能让学弟学妹们看了有所帮助。   相信很多同学很我一样大四的时候都比较迷...

写给学生朋友的一点建议

写给学生朋友的一点建议-----面试腾讯有感(转) [复制链接]         前两天去试了一...

c/c++常见面试题,希望能给找工作的朋友一点帮助

1.指针和引用有什么分别;如果传引用比传指针安全,为什么?如果我使用常量指针难道不行吗?      (1) 引用在创建的同时必须初始化,即引用到一个有效的对象;而指针在定义的时候不必初始化,可以...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:给所有关注SNMP朋友的一点小文章
举报原因:
原因补充:

(最多只允许输入30个字)