由于SNMP已成为网络管理的标准和主流,与之相关的SNMP开发包或实现版本也出现了百花齐放的局面,它们主要由当今流行的开发语言实现,包括C语言版本、C++版本、Java版本以及基于这些版本的衍生版或库。
1.C语言版本的Net-SNMP
这是本书的主题,是SNMP的开源实现之一,全部支持SNMP版本(v1、v2c、v3)。其前身是卡内基梅隆大学开发的UCD-SNMP,它具有悠久的历史和成熟的社区网站,其完善的开发工具和调试方法有助于用户快速实现需求和原型。由于现实世界中较大一部分网络管理设备都为嵌入式设备,诸如路由器、交换机、监控设备等,C语言版本的Net-SNMP在这些设备上具有天然的优势,无论是从功能、性能、资源利用、可靠性、可移植性等方面都是最优的选择。Net-SNMP功能强大,接口众多,也能方便与(嵌入式)Linux系统集成或其他上层管理软件集成以完成更强大的网络管理功能。同时Net-SNMP也提供了多样的开发模式和接口供开发者选择,支持Perl、Python和Java编程语言(Java的netsnmpj开源项目http://netsnmpj.sourceforge.net/),还有基于Net-SNMP库的Lua脚本语言的luaSNMP实现。
与很多支持SNMP的开发包不同,Net-SNMP除了为用户提供代理开发库之外,其本身就是一款软件,用户只需下载源码、配置、安装后就能实现最基本的SNMP功能。目前,Net-SNMP依然在发展和完善中,包括丰富其内容和部分开发接口的完善,如Perl接口。让我们拭目以待吧,同时也感谢那些为此做出贡献并具有极客精神的前辈们。总之,Net-SNMP是应用最为广泛的SNMP实现,也是Linux发行版中标准的SNMP的实现方案。
2.C++版本SNMP++
SNMP++是一套C++实现的开源库,源于HP公司,用于SNMP网络管理应用程序的开发。它为用户提供了简单易用的开发接口;在系统资源管理上,SNMP++提供了安全机制,可防止内存泄漏。开发者可以使用库中所提供的基础API开发自己的代理,它是一款具有高效、可移植、灵活、可扩展的面向对象的开发库。
3.Java版本
jSNMP Enterprises,简称jSNMP,是非开源软件(http://www.jsnmp.com/home.html)。它主要由Java SNMP SDK、Java SNMP API、SNMP Java库组成,支持SNMP v1、SNMP v2c、SNMP v3、trap/inform和协议安全机制,并对软件中网络流量消耗、效率进行了优化,官方称其速度与C/C++版本实现相当。其支持灵活的扩展、支持多个网络连接、拥有3层架构。其次,它还具有时间窗的缓存功能可以减少网络流量、易于管理和有效的Trap处理机制,并针对MIB提供了jMIBC的MIB编译器。
iReasoning公司提供了iReasoning Java SNMP API,它是一款工业界领先的SNMP库,具有高性能、跨平台、线程安全和多线程环境优化等特性,也是首款同时支持DES和128位AES加密算法的SNMP库,并提供了MIB解析器。
SNMP4J(http://www.snmp4j.org/)是一款基于Java管理者和代理实现的企业级的开源库,是Java 2SE 1.4及后续版本中最先进的开源库。其先进的面向对象的设计思想被SNMP++所采用,Java开发者可考虑使用该开源库。
AdventNet SNMP API也是一款工业级别的Java开发软件,可开发独立的、基于Web和分布式的跨平台的SNMP管理应用程序及工具。其可用于系统管理、应用程序管理、网络管理。其可视化的IDE和自动代码生成功能能有效地提高开发质量和效率,值得称赞的是它还为开发者提供了良好的参考文档。AdventNet销售多种管理软件,也提供C/C++版本的开发工具套件——AdventNet Agent Toolkit C Edition。该套件不仅支持SNMP还支持CLI、HTTP等其他协议(http://www.manageengine.com/)。
4.Python版
PySNMP是一款跨平台的,用python编写的SNMP实现引擎,开源免费。支持ipv4/ipv6协议及SNMP v1、SNMP v2c、SNMP v3三个版本,可应用于管理站端、代理端、委托代理端。PySNMP提供了非常简单的开发接口,直接使用这些接口就能实现很多应用场景的需求。它也有类似于Net-SNMP中的功能,如MIB转python代码的工具、snmpget、snmpset、snmpwalk等实用工具。不过Python需要依赖第三方Python库。
以上是对各种SNMP实现方案的介绍,希望能为读者提供更好的选择。