tag 标签: snmp

相关博文
  • 热度 6
    2023-11-1 17:28
    1731 次阅读|
    0 个评论
    使用Skydel API构建测试方案 凭借其现代、强大且直观的API,德思特Safran GNSS模拟引擎Skydel免费提供了Python、C#、C++和Labview的开源客户端库,它具有600多条命令,并且有完善的文档与记录。 随着Skydel软件更新添加新功能,API得到改进与软件的发展相同步。了解API的功能不需要具备编程技能,但具有编码经验的高级用户将能够简单的使用API命令并做深度开发,以创建自动化测试和GNSS模拟场景 使用Skydel构建SNMP代理 有一个例子可以很好的说明API的灵活性——通过使用外部OID命令,使用SNMP网络协议来远程驱动您的设备,定制您的系统。可以使用带有特定德思特Safran Skydel API命令的Python脚本构建SNMP子代理,该子代理将成为在系统(Linux或Windows操作系统)上运行的SNMP守护程序的网关,允许SNMP管理功能。 ● SNMP: SNMP,即简单网络管理协议(Simple Network Management Protocol),是一种广泛使用的应用层协议,用于管理和监控网络元素。它由互联网架构委员会根据RFC-1157规范文档定义,用于在网络设备之间交换管理信息,并且是TCP/IP协议的一部分。使用此协议的设备需要启用并配置SNMP代理,以便它们可以与网络管理系统(NMS)进行通信。SNMP代理还负责控制管理信息库(MIB)中定义的控制变量的数据库。 ● OID: OID,即对象标识符(Object Identifier),是一种用于唯一标识网络管理信息的标识符,它类似于一个树状结构,用于表示不同类型的管理信息,例如网络设备的参数、性能统计和配置数据。SNMP使用OID来定位和获取这些管理信息。 如果你想通过使用外部OID命令来远程驱动你的设备,你需要了解目标设备支持的OID,然后使用SNMP协议发送相应的请求,以获取或设置相关信息。OID通常以一种类似于点分割的数字串的形式表示,例如1.3.6.1.2.1.1.1表示系统的描述信息。 要使用SNMP协议来远程管理设备,你需要具备一定的SNMP知识,并使用合适的工具或编程语言来发送SNMP请求,以实现设备的定制和管理。 在此配置中,任何Skydel API命令都可以成为SNMP子代理的新OID(对象标识符)。这将使得任何NMS都能将Skydel命令“转换”为SNMP集,并通过网络获取请求来驱动您的Skydel系统。 如何使用德思特Safran GSG-7/8构建SNMP代理 在此配置中,工程师将能够通过SNMP监控Skydel引擎 ,该测试场景旨在能够通过SNMP检查Skydel引擎是否正常运行,通过独特的OID使用设置命令来启动和停止引擎。 德思特Safran提供了一个基本的SNMP入门套件(Skydel SNMP Stater套件),允许用户集成并通过SNMP管理其Skydel引擎。该套件可以通过添加多个新的API命令进行定制,这些命令将转换为新的SNMP OID,以增强监管能力。使用Skydel SNMP Stater套件远程连接到由Skydel软件驱动的外部笔记本电脑上运行的MIB浏览器。 Skydel SNMP Stater套件包含: skydel_snmp.py 发挥SNMP子代理角色(Skydel API命令和SNMP OID之间的桥梁)的Python脚本,可以由用户定制以添加功能。 snmp_pass.py 仅用于全局SNMP设置的Python脚本。对于简单的情况,添加新的OID不需要进行任何更改。 Install.sh 每次出于自定义目的更改Python脚本时都必须执行的“Makefile”命令。 snmpd.conf 附加到snmpd守护程序的配置文件。 SKYDEL-MIB.txt MIB文件示例基于Skydel标准架构构建,可用于与Python脚本中创建的新OID链接进行自定义。此MIB文件还可用于提供NMS或MIB浏览器来测试您的系统。 如果需要进一步了解德思特Safran Skydel的SNMP代理或需要下载相关文档,请联系德思特技术工程师。
  • 热度 29
    2015-4-1 15:30
    1596 次阅读|
    0 个评论
    一   实验背景 最近一个做焊接设备的朋友想在焊机上添加监控的新功能,实时获取焊机的温度、功耗等参数,还可简单控制,实现对集群焊接设备的网络化管理。 而这个朋友不想在开发管理系统上花太多精力,想找一个开源的管理软件来实现他的需求。这让我想到了简单邮件管理协议 SNMP ,它生来就是为搞网络管理服务的。能广泛兼容各网络设备,一经推出就得到了广泛的应用和支持,几乎所有的网络设备生产厂家都实现了对 SNMP 的支持,大多数网络管理系统和平台也都是基于 SNMP 的。事实上,目前 SNMP 已成为网络管理领域中的工业标准,我国国家广电总局就要求通信领域的标准网络设备都必须支持 SNMP 协议。 SNMP 代理端实际占用系统资源少,在单片机上运行是没有问题的。于是我想到用手头的 WIZnet-W5500 评估板实现了 SNMP 代理端,给他提供一个参考。 二   SNMP 基础普及 在实现 SNMP 代理端之前,我们先了解一下 SNMP 的基本知识。管理系统中就要有管理者和被管理者,网管协议定义它为管理站和代理端,它们通过管理信息库 MIB 进行接口统一,实现数据的通信。 MIB 可以认为是一个被管理对象的集合,每个对象规定了能够被管理进程查询和设置的信息,同时都有自己的名字我们称之为对象标识符,简称 OID ,它的命名方法跟 DNS 树形结构命名类似,通过 OID 就能知道这个设备所属的领域和厂家,如 MIB 中有一个节点 {1.3.6.1.4.1} ,即 enterprises ,代表企业,它以下的节点都为企业型的。如 IBM 为 {1.3.6.1.4.1.2} , Cisco 为 {1.3.6.1.4.1.9} 等。任何一个公司、 学校只要用电子邮件 发往iana-mib@isi.edu 进行申请即可获得一个结点名。这样就可以定义自己的产品的 OID ,使它能用 SNMP 进行管理。 为了操作管理数据库 MIB ,如图 1 所示: SNMP 规定了 5 种协议 SNMP 报文,用来在管理进程和代理之间的交换。 1 get-request ; 2 get-next-request ; 3 set-request ; 4 get-response ; 5 trap 。前面的 3 种操作是由管理进程向代理进程发出的 get/set 操作,双方都使用 UDP161 端口。第 4 个是对前三种操作的回应,用 UDP161 端口,第 5 个代理进程主动发出的报文,通知管理进程有某些事情发生,使用 UDP162 端口。 图 1 SNMP 的 5 种报文操作 图 2 是封装成 UDP 数据报的 5 种操作的 SNMP 报文格式。可见一个 SNMP 报文共有三个部分组成,即公共 SNMP 首部、 get/set 首部或 trap 首部、变量绑定。 图 2 SNMP 报文格式 三   SNMP 嵌入式系统实现方法 了解了 SNMP 协议之后,下面就让我们通过 WIZnet W5500EVB 做一个嵌入式 SNMP 代理端的简单实验。 1. 实验目的:建立一个 SNMP 代理端 2. 硬件环境 单片机: STM32F103RC , 256K 字节 Flash , 48K 字节 SRAM 以太网控制器: W5500 , SPI 接口与单片机相连 电源: USB 供电 硬件外设 :板载 LED 3. 开发工具 : IAR V5.14 (版本不一样,需要稍加改动) 4. 测试软件:串口调试助手, Net-SNMP (可从网络下载) 软件部分是实现简单网络管理协议 SNMP 的关键,下面就以程序流程图的形式看看我们是如何实现的。 图 3 为主程序流程图,我们可以看出程序首先进行单片机系统软硬件初始化,然后初始化 W5500 ,配置了 IP 地址、 MAC 地址、和网关。 图 3 主程序流程图 配置完毕后就是代理端主动发送 SNMP Trap 报文了,发送 SNMP Trap 报文的过程比较简单,主要就是安装 Trap 报文格式对发送数据进行打包即可,需要注意的是数据包要根据 ASN.1 中的 BER 编码方式(格式类型 / 长度 / 值)进行编码。打包完毕后,开启 UDP Socket ,本地端口为 162 ,然后向管理的 162 端口发送 Trap 包。接下来就进入一个循环,等待解析 SNMP 管理站发来 Request 数据包,边解析,边准备要回复的数据包,下图为代理端解析管理站发来的 GET/SET 请求,并准备 Response 数据包的流程图。 图 4 代理端解析 Request 程序流程图 通过图 4 流程图我们可以看到,整个过程是严格按照 SNMP 协议一步步进行解析判断的。需要说明的是,也是先根据 SNMP 编码方式进行解码,再进行比较和判断。我们知道 SNMP 中 MIB 联系管理站和代理端的关键,解析程序到最后查询的便是 MIB 中的对象,在此我们给出定义 MIB 对象的结构体: typedef struct {     uint8 oidlen;     uint8 oid ;     uint8 dataType;     uint8 dataLen;     union {        uint8octetstring ;        uint32 intval;     } u;     void(*getfunction)(void *, uint8 *);     void(*setfunction)(int32); } dataEntryType; 通过该结构体的定义我们可以知道 MIB 对象的几个部分 :OID , 数据类型 , 数据长度 , 数据 ,get 函数, set 函数,本方案 MIB 中定义的一个控制 LED 动作的一个对象: {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 。该对象的 set 函数为 setWIZnetLed : void setWIZnetLed(int32 val){     wiznetLedStatus =val;// W5500-EVB     if (wiznetLedStatus==0 )GPIO_SetBits(GPIOA, LED3); // STM32     elseGPIO_ResetBits(GPIOA, LED3); } 此为函数名,同样也为函数的指针,在解析 SET 函数过程中有一句代码: snmpData .setfunction(snmpData .u.intval) ;就是执行了该函数,其中 snmpData .u.intval 为从 set Request 当中解析到的绑定变量值。 整个 MIB 就是由上述格式的对象组成,让可以自己定义对象的 OID 变量及对象的函数,当管理站向该对象发送请求时,就可以执行相应函数,从而完成你所需要让 SNMP 完成的管理和控制。 完整源程序下载: http://pan.baidu.com/s/1qWmHpTE 四 测试 SNMP 代理端 下面以 PC 机为 SNMP 管理站,讲述如何测试我们实现的 SNMP 代理端。继续阅读:http://bbs.ednchina.com/BLOG_ARTICLE_3028531.HTM      
  • 热度 22
    2015-4-1 15:22
    1820 次阅读|
    0 个评论
    一   实验背景 而这个朋友不想在开发管理系统上花太多精力,想找一个开源的管理软件来实现他的需求。这让我想到了简单邮件管理协议 SNMP ,它生来就是为搞网络管理服务的。能广泛兼容各网络设备,一经推出就得到了广泛的应用和支持,几乎所有的网络设备生产厂家都实现了对 SNMP 的支持,大多数网络管理系统和平台也都是基于 SNMP 的。事实上,目前 SNMP 已成为网络管理领域中的工业标准,我国国家广电总局就要求通信领域的标准网络设备都必须支持 SNMP 协议。 SNMP 代理端实际占用系统资源少,在单片机上运行是没有问题的。于是我想到用手头的 WIZnet-W5500 评估板实现了 SNMP 代理端,给他提供一个参考。 二   SNMP 基础普及 在实现 SNMP 代理端之前,我们先了解一下 SNMP 的基本知识。管理系统中就要有管理者和被管理者,网管协议定义它为管理站和代理端,它们通过管理信息库 MIB 进行接口统一,实现数据的通信。 MIB 可以认为是一个被管理对象的集合,每个对象规定了能够被管理进程查询和设置的信息,同时都有自己的名字我们称之为对象标识符,简称 OID ,它的命名方法跟 DNS 树形结构命名类似,通过 OID 就能知道这个设备所属的领域和厂家,如 MIB 中有一个节点 {1.3.6.1.4.1} ,即 enterprises ,代表企业,它以下的节点都为企业型的。如 IBM 为 {1.3.6.1.4.1.2} , Cisco 为 {1.3.6.1.4.1.9} 等。任何一个公司、 学校只要用电子邮件 发往iana-mib@isi.edu 进行申请即可获得一个结点名。这样就可以定义自己的产品的 OID ,使它能用 SNMP 进行管理。 为了操作管理数据库 MIB ,如图 1 所示: SNMP 规定了 5 种协议 SNMP 报文,用来在管理进程和代理之间的交换。 1 get-request ; 2 get-next-request ; 3 set-request ; 4 get-response ; 5 trap 。前面的 3 种操作是由管理进程向代理进程发出的 get/set 操作,双方都使用 UDP161 端口。第 4 个是对前三种操作的回应,用 UDP161 端口,第 5 个代理进程主动发出的报文,通知管理进程有某些事情发生,使用 UDP162 端口。    图 1 SNMP 的 5 种报文操作 图 2 是封装成 UDP 数据报的 5 种操作的 SNMP 报文格式。可见一个 SNMP 报文共有三个部分组成,即公共 SNMP 首部、 get/set 首部或 trap 首部、变量绑定。 图 2 SNMP 报文格式 三   SNMP 嵌入式系统实现方法 了解了 SNMP 协议之后,下面就让我们通过 WIZnet W5500EVB 做一个嵌入式 SNMP 代理端的简单实验。 1. 实验目的:建立一个 SNMP 代理端 2. 硬件环境 单片机: STM32F103RC , 256K 字节 Flash , 48K 字节 SRAM 以太网控制器: W5500 , SPI 接口与单片机相连 电源: USB 供电 硬件外设 :板载 LED 3. 开发工具 : IAR V5.14 (版本不一样,需要稍加改动) 4. 测试软件:串口调试助手, Net-SNMP (可从网络下载)   软件部分是实现简单网络管理协议 SNMP 的关键,下面就以程序流程图的形式看看我们是如何实现的。 图 3 为主程序流程图,我们可以看出程序首先进行单片机系统软硬件初始化,然后初始化 W5500 ,配置了 IP 地址、 MAC 地址、和网关。 图 3 主程序流程图 配置完毕后就是代理端主动发送 SNMP Trap 报文了,发送 SNMP Trap 报文的过程比较简单,主要就是安装 Trap 报文格式对发送数据进行打包即可,需要注意的是数据包要根据 ASN.1 中的 BER 编码方式(格式类型 / 长度 / 值)进行编码。打包完毕后,开启 UDP Socket ,本地端口为 162 ,然后向管理的 162 端口发送 Trap 包。接下来就进入一个循环,等待解析 SNMP 管理站发来 Request 数据包,边解析,边准备要回复的数据包,下图为代理端解析管理站发来的 GET/SET 请求,并准备 Response 数据包的流程图。 图 4 代理端解析 Request 程序流程图 通过图 4 流程图我们可以看到,整个过程是严格按照 SNMP 协议一步步进行解析判断的。需要说明的是,也是先根据 SNMP 编码方式进行解码,再进行比较和判断。我们知道 SNMP 中 MIB 联系管理站和代理端的关键,解析程序到最后查询的便是 MIB 中的对象,在此我们给出定义 MIB 对象的结构体: typedef struct {     uint8 oidlen;     uint8 oid ;     uint8 dataType;     uint8 dataLen;     union {        uint8octetstring ;        uint32 intval;     } u;     void(*getfunction)(void *, uint8 *);     void(*setfunction)(int32); } dataEntryType; 通过该结构体的定义我们可以知道 MIB 对象的几个部分 :OID , 数据类型 , 数据长度 , 数据 ,get 函数, set 函数,本方案 MIB 中定义的一个控制 LED 动作的一个对象: {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 。该对象的 set 函数为 setWIZnetLed : void setWIZnetLed(int32 val){     wiznetLedStatus =val;// W5500-EVB     if (wiznetLedStatus==0 )GPIO_SetBits(GPIOA, LED3); // STM32     elseGPIO_ResetBits(GPIOA, LED3); } 此为函数名,同样也为函数的指针,在解析 SET 函数过程中有一句代码: snmpData .setfunction(snmpData .u.intval) ;就是执行了该函数,其中 snmpData .u.intval 为从 set Request 当中解析到的绑定变量值。 整个 MIB 就是由上述格式的对象组成,让可以自己定义对象的 OID 变量及对象的函数,当管理站向该对象发送请求时,就可以执行相应函数,从而完成你所需要让 SNMP 完成的管理和控制。 完整源程序下载: http://pan.baidu.com/s/1qWmHpTE 四 测试 SNMP 代理端 下面以 PC 机为 SNMP 管理站,讲述如何测试我们实现的 SNMP 代理端。 1. 在电脑中安装 Net-SNMP 软件。 Net-SNMP 是一个免费的、开放源码的 SNMP 实现方式。按默认选型安装软件后,点击 Windows 开始—— 运行 输入“ CMD ” , 点击确认,进入 DC 命令环境,输入“ cd \usr\bin ” , 此路径即安装的 Net — SNMP 默认路径,在此路径下可执行 SNMP 命令。 2. 修改 PC 本地连接 IP 地址。控制面板—— 网络和 Internet —— 网络连接,点击本地连接选择属性,设置 PC 为静态 IP (与 W5500 在同一网段),设置完成后点击确定,本例中我们设定 PC 机 ip 为 192.168.1.110 , SNMP 代理端 IP 为 192.168.1.111 ,默认网关都为 192.168.1.1 。 3. 接着用网线把 PC 和 W5500EVB 连接,打开串口软件,选择正确的 COM 口并打开串口,以获取调试信息。 4. 下载编译好的代码并复位 W5500EVB ,我们发现板子上有一排 LED ,最右边这个 LED 就是我们要查询并且控制的。如图 5 所示,现在这个 LED 是亮的。 图 5 最右边 LED 亮 5. 在刚才打开的 Net — SNMP 默认路径下可以输入指令,如图所示输入“ snmpget -v 1 -cpublic 192.168.1.111 .1.3.6.1.4.1.0.1.0 ”回车,查询到“ LED On ”,符合板子现在亮的情况。 6. 再输入“ snmpset -v 1 -cpublic 192.168.1.111 .1.3.6.1.4.1.0.2.0 i 0 ”回车,结合这个 OID 对象的 set 函数分析可知,该条命令是置 STM32 的 LED3 对应引脚为高,即关闭 LED 。如图 6 观察板子上的 LED3 ,可见已灭。 图 6 最右边 LED 灭 7. 如图 7 再次输入第 5 步的 snmpget 指令,可以查询到状态为“ LED Off ”。 图 7 Net-SNMP 工具测试 SNMP 协议 通过以上步骤可以看出 SNMP Agent 已经运行,当然要实现一个复杂的网络管理功能还需要 Net — SNMP 中很多其他指令在此不一一列举。 五 总结 本文给出了基于 W5500 的嵌入式系统 SNMP 的设计与实现方案,并展示了如何用 Net-SNMP 调试工具进行简单控制的方法。 随着物联网事业的发展,越来越多的嵌入式设备都将拥有联网功能,相信 SNMP 协议的作用将越来越重要。 除了智能家居,在当下物联网时代,想必还有其他应用也会遇到类似问题,希望本文能对做网络设备开发的朋友有所帮助。
  • 热度 16
    2015-1-7 17:37
    1767 次阅读|
    0 个评论
    概述 工具: 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}等。世界上任何一个公司、学校只要用电子邮件发往iana-mib@isi.edu进行申请即可获得一个结点名。这样各厂家就可以定义自己的产品的被管理对象名,使它能用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 ; //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 ; 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 , len, svr_addr, svr_port); } else { request_msg.len = 0; continue; } if (request_msg.len 0) { dumpCode(“\r\n \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 \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 .setfunction(snmpData .u.intval); 就是执行了该函数,其中snmpData .u.intval 为从set Request当中解析到的绑定变量值。下面为查询LED状态的MIB对象 继续阅读:http://www.iwiznet.cn/blog/?p=6750
  • 热度 25
    2012-10-18 15:27
    1859 次阅读|
    0 个评论
    今天给大家介绍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管理如何进行通信。 该笔记的所有代码和文件都可在中文网站进行下载。   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中,参数值是空,长度是0×00。该空数据是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是一套使用和调度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。   重启 模块。   然后,可以看见PC中的snmp trap数据包,如下所示。   2.2 Get Request演示(系统MIB)   2.3 Set Request演示(私有MIB), LED On/Off测试 如果发出以下命令, 的LED将会熄灭。 snmpset -v 1 -c public 192.168.11.251 .1.3.6.1.4.1.0.2.0 i 0 如果发出以下命令, 的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示例    
相关资源