给所有关注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的实现和难点做一分析。仅以这些文章献给那些仍然执着追求的朋友们!

微信小程序图片预览保存发送给朋友previewImage

先看看手机上的效果 js实现的代码: wx.previewImage({ current: app.globalData.URL + res.data.data.ima...
  • a419419
  • a419419
  • 2018年01月18日 13:19
  • 84

微信获取所有关注者信息

前提是你所使用的微信公众号已经有获取用户信息的权限 using System; using System.Collections.Generic; using System.IO; using...
  • for12
  • for12
  • 2016年01月05日 17:53
  • 885

微信公众号添加关注后自动回复图文信息(素材)

公众号在被添加关注后其实不仅可以回复单纯的文字,还有一个效果更好的方式是直接回复图文,在图文信息中传达你的感谢和说明一些公众号的情况。那么微信公众号添加关注后怎么自动回复图文信息?下面小编就为大家介绍...
  • airtwq
  • airtwq
  • 2016年09月01日 11:05
  • 2129

小程序关注公众号的方法总结

因为很多小程序都想让小程序关注公众号,如何实现最优雅呢,作为一个搞技术的,经过我的研究,发现都是通过客服来显示的,小程序里,点客服,提示关注公众号,比如制作器里这个功能,能够自动引导关注公众号,图文体...
  • yaoohfox
  • yaoohfox
  • 2018年01月27日 21:17
  • 352

微信公众号添加关注后自动回复图文信息

登录到微信公众号的后台后,在左侧找到自动回复的按钮,并点击进入。如果只是想在公众号被关注后自动推送纯文字不含图片的的信息的话,直接在右侧被添加自动回复一项下面设置就可以了。如果希望回复的是图文信息,那...
  • wu121jia
  • wu121jia
  • 2015年10月12日 15:31
  • 5673

CSDN博客连接“关注博客”的方法

新版CSDN并没有直接添加博客的选项配置,经过网上参考,可以按照在博客栏目中添加HTML代码的方式添加博客关注项目。         具体步骤如下:         首先,进入博客设置,找到博客栏...
  • yumushui
  • yumushui
  • 2014年12月25日 10:58
  • 508

[BZOJ4712]洪水-树链剖分-动态规划-线段树

洪水Description小A走到一个山脚下,准备给自己造一个小屋。这时候,小A的朋友(op,又叫管理员)打开了创造模式,然后飞到山顶放了格水。于是小A面前出现了一个瀑布。作为平民的小A只好老实巴交地...
  • zlttttt
  • zlttttt
  • 2017年11月27日 00:44
  • 76

Laravel 用户之间关注

介绍 有关用户之间的相互关注这样的应用场景还是很常见的 每个平台都会有这样类似的需求 就比如Segmentfault和知乎 当然还有最熟悉的Github每个人可以有关注者和粉丝 建立...
  • fjnjxr
  • fjnjxr
  • 2017年09月20日 15:16
  • 127

使用微信api将内容分享给好友,或者发送到朋友圈

现在我们给应用添加一个功能,能在应用内将消息分享给微信好友,或者分享到朋友圈中。 我们首先来到微信开放平台官网,跟着组织走,官网指南: https://open.weixin.qq.com/cgi-b...
  • u012591761
  • u012591761
  • 2014年12月30日 10:43
  • 10243

致所有仍然关注BreezeMaphack的朋友

致所有仍然关注BreezeMaphack的朋友大家好, 我是breeze, 今天是2016年7月29日, 距离我大学毕业6年了, 我也27岁了, 而maphack只是我大学时期的一个作品, 早在20...
  • breeze356
  • breeze356
  • 2016年07月29日 10:45
  • 2709
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:给所有关注SNMP朋友的一点小文章
举报原因:
原因补充:

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