如何在以太网芯片W5200中实现SNMP

Home / 博客 / 如何在以太网芯片W5200中实现SNMP

今天给大家介绍W5200应用笔记之如何在W5200中实现SNMP。首先简单介绍下SNMP。简单网络管理协议(SNMP)是一个“管理IP网络上的设备的网络标准协议”,通常支持SNMP的设备包括路由器、交换机、服务器、工作站、打印机、调制解调器等等.

SNMP对于任何程序员来说都是容易理解的。简而言之可以使系统更加简化。网络设备以后台程序的形式运行SNMP代理,该后台程序响应来自网络的请求。代理提供大量的对象标识符 (Object Identifiers ,OIDs)。一个OID是唯一的键值对。代理填充这些值并且使它们有效。SNMP管理(客户端)能够查询代理的键值对的具体信息。从编程的角度来看这与引进一堆的全局变量没什么区别。SNMP OIDs能够被读或写。向一个SNMP设备写信息是相当罕见的,这是一些管理应用程序控制设备(如交换机的管理GUI)的常用方法。在SNMP中存在一个基本的认证方法,允许管理者发送一个通用名称(认为明文密码)去认证OIDs的读或写。大多数设备使用不安全的通用名称“public”。SNMP使用UDP端口161和162通信。

该应用笔记展示了w5200E01-M3中的<SNMP代理>与PC中的<SNMP管理>如何进行通信。

该笔记的所有代码和文件都可在中文网站进行下载: W5200

1. SNMP协议

SNMP消息格式指定在消息里包括哪些字段并按什么顺序。最终,该消息是由几层嵌套的字段组成。在最外面的一层,SNMP消息是Sequence类型的单独字段。完整的消息是一个序列的三个小的字段:SNMP Version(整型),SNMP Community String(8位字符串),和SNMP PDU(GetRequest,或SetRequest)。

SNMP Version和SNMP Community String是原始数据类型,他们不是从小的字段得到的(没有更多的层)。但是,PDU是一个复杂的数据类型,由一些小的字段组成(更多层次)。PDU由一个Request ID (整型)、Error (整型)、Error Index (整型)和一个Varbind List组成。Varbind或 Variable Binding是两个特定字段序列。第一个字段是一个OID,存放指定的参数。第二个字段包括该指定参数的值。在SetRequest中,参数值的数据类型必须与MIB中设置的参数类型一致。 在GetRequest中,参数值是空,长度是0x00。该空数据是Value数据的占位符,该Value数据是SNMP代理使用GetResponse PDU返回得到的。此外,顾名思义, Varbind List就是一个Varbinds Sequence。最后,当一个消息设置或获取一个单独的参数,Varbind List只允许有一个Varbind 。SNMP里每个字段的解释请看下表。

MIB树的SNMP相关分支在网络分支中,包括以下两种主要分支类型:

n 公共分支(mgmt=2),由互联网工程任务组(Internet Engineering Task Force ,IETF) RFCs定义,与所有的SNMP管理设备一样。

n 私有分支(private=4),由互联网号码分配局(IANA)分配,这些分支的分配由一些公司和组织定义。

下图展示了SNMP MIB树的结构。MIB树的深度和宽度没有限制。

MIB树的树根是国际标准化组织(iso),它的下面是组织(org)分支,再下面是国防部(dod),再下面是互联网(internet)。管理(mgmt),主要的公共分支,定义所有供应商设备通用的网络管理参数。在管理分支的下面是MIB-II (mib-2),在其下面是通用管理功能分支,如系统管理,打印机,主机资源和接口。

MIB的私有分支包括一些大的组织,这些组织在企业分支的下面。每个组织在该对象下面都有一个根分支节点。每个组织创建它自己的MIB分支和对象子网,这必须符合称为结构管理信息(SMI)的定义。SMI定义了MIB对象允许的数据类型。

2. SNMP Get/Set/Trap演示

[net-snmp version 5.7 package for windows]用来演示。可以从http://www.net-snmp.org/上下载该源码。

(Net-SNMP是一套使用和调度SNMP协议的软件。它包括一个通用的客户端程序库、一套命令行代码、一个高度可扩展的SNMP代理、perl模块和python模块)。

在用Microsoft Visual Studio建立工程后,可以获取所有的net-snmp示例可执行文件。在所有的net-snmp示例可执行文件中,使用snmpget.ex,snmpset.exe,snmpwalk.exe和snmptrapd.exe。

2.1 Trap 演示

首先,如下所示启动net-snmp包中的<snmptrapd.exe>。

重启[w5200E01-M3]模块。

然后,可以看见PC中的snmp trap数据包,如下所示。

2.2 Get Request演示(系统MIB)

2.3 Set Request演示(私有MIB), LED On/Off测试

 

如果发出以下命令,[w5200E01-M3]的LED将会熄灭。

snmpset -v 1 -c public 192.168.11.251 .1.3.6.1.4.1.0.2.0 i 0

如果发出以下命令,[w5200E01-M3]的LED将会点亮。

snmpset -v 1 -c public 192.168.11.251 .1.3.6.1.4.1.0.2.0 i 1

 

2.4 Walk演示

3. 使用SNMP Library示例