时间:2024-05-04
孟开元,杨海超,曹庆年
(西安石油大学 计算机学院,陕西 西安 710065)
SNMP协议分析软件设计
孟开元,杨海超,曹庆年
(西安石油大学 计算机学院,陕西 西安 710065)
在探讨SNMP协议的体系结构、协议规范、协议ASN.1描述和BER编码的基础上,基于VC++平台设计并开发了SNMP协议分析软件。软件划分为3个功能模块:数据包捕获与过滤模块、SNMP数据包解析模块、SNMP PDU结构分解与显示模块。首先论述了利用Socket技术捕获数据包的方法,给出了数据包捕获与UDP数据包过滤的实现;然后在分析SNMP协议ASN.1描述和BER编码的基础上,实现了SNMP PDU字段类型的解析;最后,以合理的方式对协议字段组织结构进行了显示。经过测试,系统功能正确,运行良好。
SNMP;BER;协议分析
简单网络管理协议是基于TCP/IP协议族的网络管理标准,用来对通信线路进行管理,它由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资源对象[1],有3个版本,分别是SNMPv1、SNMPv2、SNMPv3。它的基本功能包括监视网络性能、检测分析网络差错和配置网络设备等[2]。
SNMP协议主要包括3个部分:SNMP、SMI及MIB。SNMP系统采用客户/服务器工作模式。图1为SNMP系统基本结构。
图1 SNMP系统基本结构
SNMP系统包括两个组成部分:SNMP管理器与SNMP代理。其中,SNMP管理器(SNMP Manager)是运行在网管工作站中的管理进程,它是大多数SNMP请求(不包括告警)的发起者;SNMP代理(SNMP Agent)是运行在网络设备中的管理进程,它是大多数SNMP请求(不包括告警)的响应者。每种SNMP请求对应一种具体的网络操作,实际上是对网络管理信息的读或者写操作,而管理信息都保存在代理的MIB中。
在网络正常工作时,SNMP可实现统计、配置和测试等功能。当网络出故障时,可实现各种差错检测和功能恢复。虽然SNMP是在TCP/IP基础上的网络管理协议,但也可应用于数字油田、电力系统等网络环境下。利用SNMP协议,一个管理工作站可以远程管理所有支持此协议的网络设备,包括监视网络状态、修改网络设备配置、接受网络事件警告等;利用SNMP可以实时网络监控,以便在不利条件下(如过载、故障)使网络的性能仍能达到最佳。虽然SNMP最初是面向基于IP的网络管理,但作为一个工业标准也被成功用于电话网络管理和各种控制系统[3]。
目前,大部分协议分析软件只对IP数据包和UDP数据的头部进行分析和解析,很少有软件能对SNMP的整个数据包分析和解析,这就使得大多数人对该协议的工作机制、协议数据单元的字段结构与组成并不是很了解。本文为学习SNMP PDU格式提供一种直观便利的方法,而且提供了解析SNMP协议的内容、编码格式以及消息的类型方法。
1.1 设计目标
本系统能对发往指定IP地址的SNMP消息进行捕获、解析和显示,主要完成3个功能,分别是:SNMP数据包的捕获、SNMP数据包解析、对解析后的SNMP数据进行合理的显示和配置测试环境并进行验证。系统功能模块图如图2所示。
1.2 系统开发与工作流程
按照各模块实现的先后顺序,本系统共划分三大模块:SNMP协议消息的捕获和过滤、SNMP协议消息的解析、SNMP协议消息的显示。开发流程如图3所示。
图2 SNMP协议分析软件功能模块
图3 开发流程
目前,比较常见的捕获数据包的方法有Winpcap和Socket技术[4],本系统采用Socket技术进行数据包捕获。SNMP数据包在网络层是以IP数据包的形式呈现的,IP数据包的格式如图4所示。根据IP数据包的头部信息定义一个用于存储IP数据包的结构体,这样可以方便获取源IP地址、目的IP地址、上层所使用的协议等字段。
Socket捕获数据包的使用流程为:①利用WSAStartup函数启动WSA(Windows Sockets Asynchronous,Windows异步套接字);②用socket函数创建一个套接字;③用bind()函数将IP地址与套接字绑定;④send()/recv()函数,用于发送和接收数据。
图4 IP数据包格式
由于SNMP数据包是UDP数据包,因此需要对捕获到的数据包进行过滤,通过判断UDP数据包报头的目的端口和源端口是否是161或162可以得到SNMP数据包。如果目的端口和源端口是161或162,则说明是SNMP消息,然后交给下面两个模块进行解析和显示,如果不是则丢掉。为了实现这个功能,只需写一个判断函数即可,其实现方法为:if(destport==161 || destport ==162 || sourport ==161 || sourport ==162)。
SNMP管理消息可分为两种:SNMP请求与SNMP响应[5]。其中,SNMP请求是SNMP管理器向代理发送的操作请求;SNMP响应是SNMP代理根据具体操作情况向SNMP管理器返回的消息。图5给出了SNMP请求与响应的关系。
图5 SNMP请求与响应关系
SNMPv消息可以分为两个部分:SNMP头部与SNMP PDU[6]。图6给出了SNMPv1消息的基本结构。对于普通SNMP消息与Trap消息,它们的SNMP头部相同,但是SNMP PDU的结构不同。SNMP头部包括3个字段:版本号、团体名和PDU类型。其中,版本(Version)表示SNMP消息使用的版本协议,SNMPv1、SNMPv2和SNMPv3对应的值分别为0、1和2;团体名(Community)用于设置对代理的访问权限,同一团体名的管理进程可以访问代理,它是一个用明文传输的字符串(public)。PDU类型表示具体的SNMP操作类型。
图6 SNMP消息的结构
SNMP消息使用ASN.1中的BER进行编码后在网络中传输,BER编码采用tpye-length-value(TLV:类型-长度-值)结构的方法,类型表示消息类型,长度表示数值的长度,数值表示消息的具体值,其结构如图7所示。每一个ASN.1值按TLV编码组成一个字节流。发送方将类型和值编码组成字节流,接收方将收到的字节流解析成相应的类型与值。
对SNMP消息(即UDP的数据部分)进行解析的具体步骤如下:
图7 TLV结构
(1)定义一个指针bppDisplayData使其指向SNMP消息的首地址:
struct UDPPacketHead *pUDPHead;
HdrLen = pIpHeader→header_len&0xf;
HdrLen *= 4;
BYTE *bPData;
bPData=((BYTE*)pUDPHead)+8;
BYTE *bppDisplayData;//用于存储数据地址
bppDisplayData = bPData
(2)跳过该消息的标签字段和长度字段
++bppDisplayData;
if((*bppDisplayData)>=128){
bppDisplayData+=((*bppDisplayData)&0x7f)+1;}
else { ++bppDisplayData;}
(3)跳过版本号的标签字段和长度字段,即 bppDisplayData+=2,根据版本号的内容域判断SNMP的版本。如果*bppDisplayData =0,则表示是SNMPv1,如果* bppDisplayData=1,则表示是SNMPv2,否则为SNMPv3。
(4)根据共同体名的长度字段解析共同体名。
(5)判断PDU类型和内容。
本系统共使用了MFC中的3类控件:按钮(Button),编辑框(Edit Box)和列表控制(List Control)。开启了一个消息捕获线程,当点击开始捕获按钮,该系统开始捕获SNMP数据包;点击停止捕获按钮,该系统关闭消息捕获线程,停止捕获SNMP数据包,在列表控制(List Control)中单击一行数据可以在右边的编辑框(Edit Box)中显示SNMP消息的版本号、团体名、PDU类型、请求标示符、错误状态、错误索引等信息。
为了捕获SNMP消息,必须开启两台主机的SNMP服务,在其中一台主机上安装SNMPB浏览器发送SNMP消息。SNMP数据包的捕获、解析和显示的效果如图8、图9所示。
从运行结果可以看出:SNMP的版本号是SNMPv1,团体名是public,PDU类型是GetnextRequest,请求标识符是17,错误状态和错误索引都为0,变量绑定的类型为48。
图8 解析数据包的界面
图9 解析数据信息界面
本文系统利用Socket技术完成了数据包的捕获,对UDP数据包进行了过滤,实现了SNMP PDU字段类型的解析,以较为合理的方式对协议字段组织结构进行了显示。经过测试,系统功能正确,运行良好,对SNMP协议的研究和学习具有借鉴意义。
[1] 彭一鸣. 基于SNMP的配置管理模块的设计与实现[D]. 武汉:华中科技大学,2011.
[2] 余鑫. SNMP协议在AGENT软件平台中的研究与实现[D]. 成都:电子科技大学,2008.
[3] 张航. SNMP协议的分析与探究[J]. 网络安全技术与应用, 2016(2):74-74.
[4] 郭凯. 基于WinPcap的数据包捕获系统的设计与实现[D]. 西安:西安电子科技大学,2013.
[5] 李泰国, 王志龙, 李文新,等. 基于SNMP的嵌入式终端状态管理系统的设计[J]. 计算机技术与发展, 2016, 26(8):19-24.
[6] 尚建贞, 逯晖. 简单网络管理协议SNMP浅析[J]. 计算机时代, 2011(7):1-3.
[7] 侯煜, 孙梯全, 施琴,等. 基于ASN.1的MAP码流的BER编解码的设计与实现[J]. 微计算机信息,2010,26(18):183-184.
(责任编辑:陈福时)
陕西省教育厅科研计划项目(15JK1580)
孟开元(1968-),男,江苏南通人,西安石油大学计算机学院副教授,研究方向为计算机网络与通信;杨海超(1990-),男,陕西汉中人,西安石油大学计算机学院硕士研究生,研究方向为计算机接口及控制技术;曹庆年(1963-),男,山东济南人,西安石油大学计算机学院教授,研究方向为计算机网络与通信。
10.11907/rjdk.162806
TP319
A
1672-7800(2017)003-0059-03
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!