基于W5500+STM32的SNMP协议应用

概述

工具:
PC  W5500EVB Net-SNMP软件包

编译环境:Keil4 &IAR

功能:通过网络管理协议SNMP及基本的控制命令实现简单的LED控制

一、W5500简介

韩国WIZnet公司生产的以太网控制芯片W5500整合了五层结构中的前四层,即物理层、数据链路层、网络层和传输层,并在内部利用硬件实现了TCP/IP协议栈。开发者无需专业的网络知识,使用W5500如同控制外部存储器一样简单,为用户提供了最简单的网络接入方法。全硬件TCP/IP协议栈完全独立于主控芯片,可以降低主芯片负载且无需移植繁琐的TCP/IP协议栈,便于产品实现网络化更新。以太网控制芯片W5500具有以下特点:

1、W5500支持硬件TCP/IP协议,包括TCP、UDP、ICMP、IPv4、ARP、IGMP、PPPoE和以太网的PHY和MAC层,TCP/IP协议的硬件实现

2、支持8个独立的SOCKET同时工作,可同时工作在不同的工作模式;

3、支持高速SPI接口(SPI MODE 0,3),SPI的时钟最高可达到80MHz,极大地提高了网络通信的数据传输速率;

4、内部集成32KB存储器用于发送/接收缓存;

5、内嵌10BaseT/100BaseTX以太网物理层(PHY);

6、支持自动协商(10/100-Based全双工/半双工);

7、工作电压为3.3V,但I/O信号口可承受5V电压;

二、SNMP协议简介

SNMP:“简单网络管理协议”,用于网络管理的协议。

SNMP定义在IP协议上,使用无连接的UDP进行通信,SNMP支持5个基本的操作,分别是:GetRequest、GetNextRequest、SetRequest、GetResponse和Trap,这 5个操作来自各自的PDU结构。SNMP采用的是一个请求—应答的通信方式,Trap除外,Trap不需要应答。

在具体实现上,SNMP为管理员提供了一个网管平台(NMS),又称为管理站,负责网管命令的发出、数据存储、及数据分析。被监管的设备上运行一个SNMP代理(Agent),代理实现设备与管理站的SNMP通信。管理站与代理端通过MIB进行接口统一,MIB定义了设备中的被管理对象。管理站和代理都实现了相应的MIB对象,使得双方可以识别对方的数据,实现通信。管理站向代理申请MIB中定义的数据,代理识别后,将管理设备提供的相关状态或参数等数据转换为MIB定义的格式,应答给管理站,完成一次管理操作。Agent在161端口监听传来的GetRequest、GetNextRequest和SetRequest命令,NMS在162端口监听传来的Trap。SNMP操作请求被封装成一个简单的UDP分组,接收端处理完请求后应答一个UDP的SNMP消息报文;一个请求对应一个应答就完成了一次操作。

SNMP的工作方式:管理员需要向设备获取数据,所以SNMP提供了读操作;管理员需要向设备执行设置操作,所以SNMP提供了写操作;设备需要在重要状况改变的时候,向管理员通报事件的发生,所以SNMP提供了Trap操作。对于网络管理,我们面对的数据是设备的配置、参数、状态等信息,面对的操作是读取和设置;同时,因为网络设备众多,为了能及时得到设备的重要状态,还要求设备能主动地汇报重要状态,这就是报警功能。

Get:读取网络设备的状态信息。

Set:远程配置设备参数。

Trap:管理站及时获取设备的重要信息。

下面是管理信息库的对象标识

对象命名树的顶级对象有三个,即ISO、ITU-T和这两个组织的联合体。Internet(标号是1)在ISO 下的被标识组织的dod下,其标识符为{1.3.6.1}。Internet结点下面的第二个结点是mgmt(管理),标号是2。其标识为{1.3.6.1.2.1}或{Internet(1).2.1}。这种标识为对象标识符,即ObjectID ,简称OID。这里要提一下MIB中的对象{1.3.6.1.4.1},即enterprises(企业),其所属结点数已超过3000。例如IBM为{1.3.6.1.4.1.2},Cisco为{1.3.6.1.4.1.9},Novell为{1.3.6.1.4.1.23}等。世界上任何一个公司、学校只要用电子邮件发往[email protected]进行申请即可获得一个结点名。这样各厂家就可以定义自己的产品的被管理对象名,使它能用SNMP进行管理。

三、Net-SNMP软件包

目前,开发SNMP的软件包有许多可以选择如SNMP++、AGENT++、NET-SNMP等。这里我们选用的是NET-SNMP。首先它是一个开源软件,其次基于C语言开发,便于移植。

net-snmp早先是在Unix平台下开发的。现可以移植到 Linux 、 Windows等多个平台。Net-snmp是一个代理端软件,但也提供管理端的查询工具。安装有两种方式:一是直接安装的二进制包,二是需要编译的源代码。我们在windows平台上安装的二进制包,在windows上的二进制包的安装就非常简单了,只需按提示就可完成。源代码和二进制包可从www.net-snmp.org网站下载,本文中所用的是net-snmp5.2.1.2的版本。之所以要先安装一个可运行的net-snmp系统,是因为我们开发程序运行环境的配置文件,是按照默认安装路径内部设定搜索的;另外,还可以利用其提供的配置工具来生成配置文件,利用提供的查询工具来测试程序。运行net-snmp之前先要进行环境设置,否则无法查询到结果。

四、系统设计

1.
硬件设计

下图是控制板实物图和LED内部接线图。MCU选用Cotex M3系列STM32F103芯片,以太网控制芯片选用WIZnet的W5500。程序以控制D3为例详细介绍SNMP协议的应用。D3和MCU的PA3相连,低电平有效。

 
 

2.程序设计

在分析细节代码之前,我们还是先来看一下主函数。在这里完成了对W5500EVB的初始化,并在主函数中加入简单的LED灯闪烁提示,同时也为SNMP协议启动做好准备,之后便进入SNMP协议操作进程。SNMP协议操作程序主要是snmplib和snmpdemo两个子函数。以下是系统基本的工作流程。

在snmplib程序中详细介绍了SNMP协议的工作流程。以下主要对报警报文的发送进行简单地分析。NMS网管平台在UDP模式下打开162端口监听传来的Trap,成功得到Trap后关闭SOCK_SNMP。

int32 SnmpXTrapSend(… …)

{

………………

// Send Packet

{

uint8 svr_addr[6];

//UDPOpen(SOCK_SNMP, 162);

socket(SOCK_SNMP,Sn_MR_UDP,162,0);

ipToByteArray(managerIP, svr_addr);

sendto(SOCK_SNMP, packet_trap, packet_index, svr_addr, 162);

close(SOCK_SNMP);

return 0;

}

}

Agent工作在UDP模式下,在SOCK_SNMP中打开161端口监听传来的GetRequest、GetNextRequest和SetRequest命令。成功打开端口以后,首先通过读取空闲接收缓存寄存器来判断是否接收到数据。如果接收到数据,就通过recvfrom()从具体的端口和地址把数据读出来。之后判断数据是否正确,若果不正确就返回再次读取,如果数据正确,就发送到网络端执行命令。。最后关闭SOCK_SNMP,执行下一次操作。

int32 SnmpXDaemon()

{

int32 snmpfd = 0;

int32 fromlen = 0;

int32 retStatus = 0;

int32 len = 0;

uint8 loopsnmpd = 1;

uint8 svr_addr[6];

uint16  svr_port;

UNUSED(snmpfd);

UNUSED(fromlen);

UNUSED(retStatus);

//        UDPOpen(SOCK_SNMP, 161);

socket(SOCK_SNMP,Sn_MR_UDP,161,0);

WDEBUG(“Start SNMP Daemon(Agent) “);

while(loopsnmpd)

{

if ( (len = getSn_RX_RSR(SOCK_SNMP))>0 )

{

request_msg.len= recvfrom(SOCK_SNMP, (uint8 *)&request_msg.buffer[0], len, svr_addr, &svr_port);

}

else

{

request_msg.len = 0;

continue;

}

if (request_msg.len > 0)

{

dumpCode(“\r\n[Request]\r\n”,”\r\n”,request_msg.buffer,request_msg.len);

request_msg.index = 0;

response_msg.index = 0;

errorStatus = errorIndex = 0;

if (parseSNMPMessage() != -1)

{

sendto(SOCK_SNMP, response_msg.buffer, response_msg.index, svr_addr, svr_port);

}   dumpCode(“\r\n[Response]\r\n”,”\r\n”,response_msg.buffer,response_msg.index);

}

}

close(SOCK_SNMP);

return(0);

}

在snmpdemo子函数下有两个函数,第一个定义了一个大的数组,将MIB的不同对象都放在其中,这样我们就可在具体的位置得到需要的信息。

本次实验中控制LED动作的MIB对象分别定义为:

{8, {0x2b, 6, 1, 4, 1, 0, 2, 0},SNMPDTYPE_INTEGER, 4, {“”},        NULL, setWIZnetLed}

其中8为OID长度,0x2b是ASN.1中“1.3”的缩写,即:1*40+3=0x2b。整个OID其实为1.3.6.1.4.1.0.2.0。setfuction函数为setWIZnetLed:

void setWIZnetLed(int32 val)

{

wiznetLedStatus = val;

if ( wiznetLedStatus==0 )

GPIO_SetBits(GPIOA, LED3); // LED in the W5500-EVB

else

GPIO_ResetBits(GPIOA, LED3);

}

此为函数名,同样也为函数的指针,在解析SET函数过程中有一句代码:snmpData[id].setfunction(snmpData[id].u.intval);

就是执行了该函数,其中snmpData[id].u.intval 为从set Request当中解析到的绑定变量值。下面为查询LED状态的MIB对象:

{8, {0x2b, 6, 1, 4, 1, 0, 1, 0}, SNMPDTYPE_OCTET_STRING, 30, {“”},getWIZnetLed, NULL}

其中getWIZnetLed定义为:

void getWIZnetLed(void *ptr, uint8 *len)

{

if ( wiznetLedStatus==0 )

*len = sprintf((int8 *)ptr, “LED Off”);

else

*len = sprintf((int8 *)ptr, “LED On”);

}

五、测试效果及注意问题

1.
测试效果

首先打开网络连接,点击本地连接选择属性,设置PC为静态IP(与W5500在同一网段),完成后点击确定。用网线把PC和W5500EVB连接,打开串口软件,选择正确的COM口并打开串口,以获取调试信息。点击复位可以看到LED2在闪烁,之后进入SNMP Agent模式,以下是正常进入系统后串口的打印信息。

然后打开运行–>“CMD”
, 输入 “cd \usr\bin”, 之后输入 SNMP命令。

上图输入“snmpget
-v 1 -c public 192.168.1.111 .1.3.6.1.4.1.0.2.0”回车,通过Get命令得到此变量为1。

输入“snmpget -v 1 -c public 192.168.1.111 .1.3.6.1.4.1.0.1.0”回车,如上图所示,得到LED状态为“LED ON”。

输入“snmpset -v 1 -c public 192.168.1.111 .1.3.6.1.4.1.0.2.0 i 0”回车,如上图所示,设置变量为0。

输入“snmpget -v 1 -c public 192.168.1.111 .1.3.6.1.4.1.0.2.0”回车,如图所示,得到该变量为0。

输入“snmpget -v 1 -c public 192.168.1.111 .1.3.6.1.4.1.0..0”回车,如上图所示,得到LED状态为“LED OFF”。

通过以上5步可以清楚地发现,通过snmpset命令可以方便快速设置LED的状态;在不清楚LED状态的情况下,也可以通过snmpget命令得到,从而实现快速有效的控制。

我们通过串口助手可得下图Request 和Response 包

2.注意问题

1.最基本的要注意保持程序和串口工具波特率一致,否则无法正常观察操作信息,以免引起误导

2.切记如果是EVB和电脑通过网线直接,需修改电脑IP为静态IP且和W5500EVB设置IP在同一个网段,否则不能实现测试效果,如果是通过路由器测试则不需修改

3.如果大家需要在自己的调试板测试,需要将所有LED灯修改为和自己的调试版对应,以免产生错误

4.输入测试指令时要注意不同指令之间的空格以及点,Public后面的IP地址正是你在程序中给调试板设置IP地址;后面的OID信息跟snmpdemo子函数下定义的数组中信息对应,对照看也可以帮助大家理解

5.Net-SNMP软件一定要安装,安装哪个盘不限制,但是安装在C盘最好,更方便SNMP协议启动

代码请登录阿莫电子论坛下载:http://www.amobbs.com/thread-5607833-1-1.html

时间: 2024-10-01 01:45:01

基于W5500+STM32的SNMP协议应用的相关文章

基于W5500的嵌入式SNMP代理端实现

 一 实验背景 最近一个做焊接设备的朋友想在焊机上添加监控的新功能,实时获取焊机的温度.功耗等参数,还可简单控制,实现对集群焊接设备的网络化管理.而这个朋友不想在开发管理系统上花太多精力,想找一个开源的管理软件来实现他的需求.这让我想到了简单邮件管理协议SNMP,它生来就是为搞网络管理服务的.能广泛兼容各网络设备,一经推出就得到了广泛的应用和支持,几乎所有的网络设备生产厂家都实现了对SNMP的支持,大多数网络管理系统和平台也都是基于SNMP的.事实上,目前SNMP已成为网络管理领域中的工业标

zabbix基于SNMP 协议监控路由器

zabbix基于SNMP 协议监控路由器 步骤 步骤超级方便. 1. 路由器上开启snmp 2. 确保外网能访问到 3. 用snmpwalk测试 4. 添加zabbix主机,SNMP interfaces中添加ip,去掉默认的zabbix agent,模块选择Template SNMP Interfaces snmpwalk测试命令 [[email protected] init.d]# snmpwalk -v 2c -c public 192.168.1.253 1.3.6.1.2.1.2.2

基于snmp协议监控华为s5720交换机

我遇到的问题: 最近在用cacti监控一台华为s5720交换机,监控模块是低版本的模板,监控高版本的交换机就不能获取数据. 根据原理找原因: 因为采用的是基于SNMP协议监控,用snmp获取数据必须获取OID(对象描述符).获取OID最精确的是联系设备厂商.s5720的OID是我联系厂商获得的,供大家参考. 类别 节点信息 对应节点的OID 备注 设备状态监控 CPU利用率 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5 盒式设备获取CPU利用率和内存利用率的大小还可以使用

Zabbix(五):高级应用-web方案、被动监控、基于snmp协议被动监控、proxy配置测试实例

1.web方案 web scenario:web监控方案,web场景: web scenarios指的是监控指定的web站点的资源下载及页面响应时间等数据指标: (1)创建web监控需要先定义一个web scenario(方案): 一个web方案包括一个或多个HTTP请求或步骤(steps) 每次监控都是按照预先定义的步骤的顺序执行: (2)通过web监控方案可以获取到下列信息: 整个web方案中所有步骤的速度和响应时间,以及平均下载速度和平均响应时间: 失败的步骤号 失败的报错信息 (3)在设

涨知识-VI 基于TCP/UDP的应用层协议

基于TCP/UDP的应用层协议: 基于TCP: Telnet(Teletype over the Network, 网络电传),通过一个终端(terminal)登陆到网络 FTP(File Transfer Protocol 文件传输协议) SMTP(Simple Mail Transfer Protocol 简单邮件传输协议),用来发送电子邮件 POP3(Post Office Protocol 3)邮件读取协议,协议通常被用来接受电子邮件 HTTP HTTPS 基于UDP: NFS(net

Android实现snmp协议(一)

2015年一月初.接到华为一位老师的电话,让我帮忙做一款他们在北京展会上要用到的App,该App能够展示华为的网络设备运行状态并可以设置一些简单的参数,包括AP.LSW.AP.AR等. 华为老师跟我说他们是使用snmp协议v2c的版本进行管理的,这意味着我也得在Android设备实现该协议,并与他们的网络设备交互. 回去认真研究了一下并请教了一些对这块比较熟悉的小伙伴,总算对snmp有了一些粗浅的认识. snmp是指简单网络设备管理协议,顾名思义就是对网络设备进行管理的通用标准协议,属于TCP/

SNMP协议开发概念理解-1

SNMP协议入门 1.引言 基于TCP/IP的网络管理包含3个组成部分: 1) 一个管理信息库MIB(Management Information Base).管理信息库包含所有代理进程的所有可被查询和修改的参数.RFC1213[McCloghrie and Rose 1991]定义了第二版的MIB,叫做MIB-II. 2)  关于MIB的一套公用的结构和表示符号.叫做管理信息结构SMI(Structure of Management Information).这个在RFC 1155 [Rose

SNMP协议总结

说明:本文仅供学习交流,转载请标明出处,欢迎转载! SNMP(Simple Network Management Protocal),简单网络管理协议,其前身是SGMP协议(简单网关监控协议),该协议的作用是对网络上的设备进行监视管理,是一种应用层协议. 基于TCP/IP的网络管理包括两个部分:网络管理器(也叫管理进程,manager)和被管设备(代理),被管设备对应的进程称为代理进程.管理器控制盒监视着一组代理,通常情况下,管理器是主机,代理是路由器或服务器.代理把相关性能信息存储在数据库中,

SNMP协议以及著名的MIB详解

SNMP协议介绍  简单网络管理协议(SNMP:Simple Network Management Protocol)是由互联网工程任务组(IETF:Internet Engineering Task Force )定义的一套网络管理协议.该协议基于简单网关监视协议(SGMP:Simple Gateway Monitor Protocol).利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态.修改网络设备配置.接收网络事件警告等.虽然SNMP开始是面向基于IP的