snmp报文分析
- 格式:doc
- 大小:159.50 KB
- 文档页数:14
计算机网络管理课程设计1.引言简单网络管理协议(SNMP)首先是由Internet工程任务组织(Internet Engineering Task Force)(IETF)的研究小组为了解决Internet上的路由器管理问题而提出的。
SNMP被设计成与协议无关,所以它可以在IP,IPX,AppleTalk,OSI以及其他用到的传输协议上被使用。
它具有简单性,易于扩展性的特点。
SNMP是一系列协议组和规范(见下表),它们提供了一种从网络上的设备中收集网络管理信息的方法。
SNMP也为设备向网络管理工作站报告问题和错误提供了一种方法。
名字说明MIB 管理信息库SMI 管理信息的结构和标识SNMP 简单网络管理协议从被管理设备中收集数据有两种方法:一种是只轮询(polling-only)的方法,另一种是基于中断(interrupt-based)的方法。
Snmp发展到现在共有三个版本,本课程设计是基于snmpv1版本。
2.设计任务及思想2.1任务:设计一个Manager。
Manager可以向华为网络设备发送get和set报文,并获得有效操作结果,实现版本为SNMPv1.开发工具:VC++(Win32)内容: Socket网络通信、 BER编码、BER解码、SNMP报文构造、SNMP报文解析、用户输入/输出。
2.2思想:根据snmp协议,分析抓包软件抓出的结果。
Manager在进行操作时,先对要发送的报文进行构造,然后对要发送的报文各数据类型依据asn.1进行编码再发送。
agent接收到报文后,进行报文解析,再解码。
看manager的要求是什么,然后回应一个报文,即response 报文,manager即对回应的报文进行解析解码,整个过程由socket通信完成,snmp报文封装在udp中发送。
3设计过程2.1 BER编码和解码Ber编码是整个设计过程中的极为重要的部分,一个报文有很多段组成,每段的数据类型都不尽相同。
snmp报文类型和特点
SNMP报文类型主要包括以下几种:
1. GET:用于获取一条管理信息。
2. GETNEXT:用于反复获取管理信息的序列。
3. SET:用于给一个被管理的子系统设置一个变化。
4. TRAP:用于报告一个关于被管理子系统的警告或其他异步事件。
5. 其他PDU在SNMP第二版中加入,包括GETBULK REQUEST、INFORM等。
SNMP报文的特点包括:
1. SNMP报文在OSI模型的应用层(第七层)运作。
2. SNMPv1是SNMP协议的最初版本,提供最小限度的网络管理功能。
3. SNMP报文的发送者是网络设备上的守护进程,它能够响应来自网络的各种请求信息。
4. SNMP报文的接收者可以是管理工具或代理进程,代理进程在发送get-response报文时也要返回此请求标识符。
5. SNMP报文具有差错状态和差错索引,用于标识和处理报文传输过程中的错误。
6. SNMP报文的Trap部分包含企业(enterprise)、trap类型和特定代码等信息,用于标识网络设备和事件类型。
以上内容仅供参考,如需更多信息,建议查阅相关文献或咨询专业人士。
SNMP五种协议数据单元SNMP规定了5种协议数据单元PDU(也就是SNMP报文),用来在管理进程和代理之间的交换。
∙get-request操作:从代理进程处提取一个或多个参数值(网管系统发送)∙get-next-request操作:从代理进程处提取紧跟当前参数值的下一个参数值(网管系统发送)∙set-request操作:设置代理进程的一个或多个参数值(网管系统发送)∙get-response操作:返回的一个或多个参数值。
这个操作是由代理进程发出的,它是前面三种操作的响应操作(代理发送)∙trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生(代理发送)前面的3种操作是由管理进程向代理进程发出的,后面的2个操作是代理进程发给管理进程的,为了简化起见,前面3个操作叫做get、get-next和set操作。
下图描述了SNMP的这5种报文操作。
请注意,在代理进程端是用熟知端口161俩接收get或set报文,而在管理进程端是用熟知端口162来接收trap报文。
SNMP的5种报文操作SNMP协议数据单元格式解析下图封装成UDP数据报的5种操作的SNMP报文格式。
可见一个SNMP报文共有三个部分组成,即公共SNMP首部、get/set首部trap首部、变量绑定。
SNMP报文格式1. 公共SNMP首部1.1 版本写入版本字段的是版本号减1,对于SNMP(即SNMPV1)则应写入0。
1.2 公共体共同体就是一个字符串,作为管理进程和代理进程之间的明文口令,常用的是6个字符“public”。
1.3 PDU类型根据PDU的类型,填入0~4中的一个数字,其对应关系下表所示意图。
表1 PDU类型2. get/set首部2.1 请求标识符(request ID)这是由管理进程设置的一个整数值。
代理进程在发送get-response报文时也要返回此请求标识符。
管理进程可同时向许多代理发出get报文,这些报文都使用UDP传送,先发送的有可能后到达。
实验十四 SNMP协议与网络管理【实验目的】1、理解SNMP协议的工作原理;2、理解SNMP协议的工作过程;3、了解SNMP的报文格式;4、了解MIB的基本概念。
【实验学时】2学时【实验环境】本实验中需要有一台安装网络管理系统的主机和一台被管设备。
使用锐捷RG-S3750-24交换机作为被管设备,在捕获端的主机上事先安装网络管理系统,作为SNMP管理设备(本实验中使用第三方的网络管理软件SolarWinds,版本为Solarwinds Engineer’s Toolset v9.1.0,)。
实验拓扑图如图5- 55所示:图5- 55 实验拓扑图【实验内容】1、通过捕获和仿真SNMP数据包,学习SNMP协议的格式;2、通过捕获SNMP数据包,学习SNMP的工作过程;3、学习如何使用协议分析仪的SNMP连接工具;4、学习SNMP协议的工作原理;5、了解SNMP与UDP的关系;6、学习在交换机上启用SNMP。
153【实验流程】Step2Step1:N Step6:SNMPStep3Step4Step5图5- 56 实验流程图【实验原理】SNMP 是Simple Network Manger Protocol (简单网络管理协议)的缩写,最早由Internet 工程任务组织(Internet Engineering Task Force ,IETF )的研究小组为了解决Internet 上的路由器管理问题而提出。
到目前,因众多厂家对该协议的支持,SNMP 已成为事实上的网管标准,适合于在多厂家系统的互连环境中使用。
利用SNMP 协议,网络管理员可以对网络上的节点进行信息查询、网络配置、故障定位、容量规划,网络监控和管理是SNMP 的基本功能。
SNMP 是一个应用层协议,为客户机/服务器模式,它事实上指一系列网络管理规范的集合,包括协议本身,数据结构的定义和一些相关概念等。
SNMP 的工作体系包括三个部分:z SNMP 网络管理器z SNMP 代理z MIB 管理信息库154SNMP网络管理器,是采用SNMP来对网络进行控制和监控的系统,也称为NMS (Network Management System)。
SNMPTRAP报⽂解析转载地址: https:///eric_sunah/article/details/19557683SNMP的报⽂格式SNMP代理和管理站通过SNMP协议中的标准消息进⾏通信,每个消息都是⼀个单独的数据报。
SNMP使⽤UDP(⽤户数据报协议)作为第四层协议(传输协议),进⾏⽆连接操作。
SNMP消息报⽂包含两个部分:SNMP报头和协议数据单元PDU。
在实际⽹络传输环境下,SNMP报⽂的长度取决于其所采⽤的编码⽅式。
SNMP统⼀采⽤BER(Basic Encoding Rule)的编码规则,同时在正式SNMP规范中使⽤的是ASN.1语法,AbastractSyntax Notation v1,即抽象语法描述语⾔。
这两个概念在后⾯实践环节再做进⼀步介绍,这⾥只要稍微了解⼀下即可,不妨碍我们对协议本⾝的分析。
这⾥我们简单解释⼀下BER编码规则:BER作为ANS.1的基本编码规则,描述具体的ANS.1对象如何编码为⽐特流在⽹络上进⾏传输。
BER编码规则由三部分组成:SNMP中定义了⼏种基本的数据类型,其中v1和v2版有些改动,具体参见相应的RFC⽂档。
这⾥我们只介绍⼏种最常见的类型:l INTEGER:⼀个整数l OCTER STRING: 0或多个8bit字节,每个字节在0~255之间取值l DisplayString:0或多个8bit字节,每个字节必须是ASCII码。
在MIB-II中,所有该类型变量不能超过255个字符(0个字符可以)l NULL:代表相关的变量没有值l IpAddress:4字节长的OCTER STRING,以⽹络字节序表⽰IP地址l PhyAddress:6字节长的OCTER STRING,代表物理地址l Counter:⾮负整数,可以从0递增到232-1()。
达到最⼤值后归0l TimeTicks:时间计数器,以0.01秒为单位递增,不同的变量可以有不同的递增幅度。
简单网络管理协议(SNMP:Simple Network Management Protocol)是由互联网工程任务组(IETF:Internet Engineering Task Force )定义的一套网络管理协议。
该协议基于简单网关监视协议(SGMP:Simple Gateway Monitor Protocol)。
利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。
虽然SNMP开始是面向基于IP的网络管理,但作为一个工业标准也被成功用于电话网络管理。
1.网络管理基于TCP/IP的网络管理包含两个部分:网络管理站(也叫管理进程,manager Station)和被管的网络单元(也叫被管设备Network Element)。
被管设备种类繁多,例如:路由器、X 终端、终端服务器和打印机等。
这些被管设备的共同点就是都运行TCP/IP协议。
被管设备端和管理相关的软件叫做代理程序( agent )或代理进程。
管理站一般都是带有彩色监视器的工作站,可以显示所有被管设备的状态(例如连接是否掉线、各种连接上的流量状况等)。
管理进程和代理进程之间的通信可以有两种方式。
一种是管理进程向代理进程发出请求,询问一个具体的参数值(例如:你产生了多少个不可达的ICMP端口)。
另外一种方式是代理进程主动向管理进程报告有某些重要的事件发生(例如:一个连接口掉线了)。
当然,管理进程除了可以向代理进程询问某些参数值以外,它还可以按要求改变代理进程的参数值(例如:把默认的IP TTL值改为6 4)。
基于T C P/IP的网络管理包含3个组成部分:1)管理信息库MIB(Management Information Base)。
管理信息库包含所有代理进程的所有可被查询和修改的参数。
RFC 1213 [McCloghrie and Rose 1991]定义了第二版的MIB,叫做MIB-II;2)管理信息结构SMI(Structure of Management Information)它是关于MIB的一套公用的结构和表示符号,这个在RFC 1155 [Rose and McCloghrie 1990] 中定义。
SNMP协议详解简单⽹络管理协议(SNMP)是TCP/IP协议簇的⼀个应⽤层协议。
在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为⼀个短期的⽹络管理解决⽅案;由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能。
现在,已经有了SNMPv3版本。
⼀套完整的SNMP系统主要包括管理信息库(MIB)、管理信息结构(SMI)及SNMP报⽂协议。
(1)管理信息库MIB:任何⼀个被管理的资源都表⽰成⼀个对象,称为被管理的对象。
MIB是被管理对象的集合。
它定义了被管理对象的⼀系列属性:对象的名称、对象的访问权限和对象的数据类型等。
每个SNMP设备(Agent)都有⾃⼰的MIB。
MIB也可以看作是NMS(⽹管系统)和Agent之间的沟通桥梁。
它们之间的关系如图1所⽰。
图1 NMS Agent和MIB的关系MIB⽂件中的变量使⽤的名字取⾃ISO和ITU管理的对象标识符(object identifier)名字空间。
它是⼀种分级树的结构。
如图2所⽰,第⼀级有三个节点:ccitt、iso、iso-ccitt。
低级的对象ID分别由相关组织分配。
⼀个特定对象的标识符可通过由根到该对象的路径获得。
⼀般⽹络设备取iso节点下的对象内容。
如名字空间ip结点下⼀个名字为ipInReceives的MIB变量被指派数字值3,因⽽该变量的名字为:.dod.internet.mgmt.mib.ip.ipInReceives相应的数字表⽰(对象标识符OID,唯⼀标识⼀个MIB对象)为:1.3.6.1.2.1.4.3 图2 MIB树结构当⽹络管理协议在报⽂中使⽤MIB变量时,每个变量名后还要加⼀个后缀,以作为该变量的⼀个实例。
如ipInReceives的实例数字表⽰为:1.3.6.1.2.1.4.3.0.需要注意的是,MIB中的管理对象的OID有些需要动态确定,如IP路由表,为了指明地址202.120.86.71的下⼀站路由(next hop),我们可以引⽤这样的实例:.dod.internet.mgmt.mib.ip. ipRouteTable.ipRouteEntry.ipRouteNextHop.202.120.86.71, 相应的数字表⽰为:1.3.6.1.2.1.4.21.1.7.202.120.86.71对于这种动态对象标识的实例,由于⽆法转换为预先指定的Readkey名称,与飞邻的产品架构冲突(需要动态⽣成可变Readkey),暂不考虑⽀持。
SNMP报文格式分析1.SNMP报文格式1.1 snmp简介1.1.1 snmp工作原理SNMP采用特殊的客户机/服务器模式,即代理/管理站模型。
对网络的管理与维护是通过管理工作站与SNMP代理间的交互工作完成的。
每个SNMP从代理负责回答SNMP管理工作站(主代理)关于MIB定义信息的各种查询。
管理站和代理端使用MIB进行接口统一,MIB定义了设备中的被管理对象。
管理站和代理都实现相应的MIB对象,使得双方可以识别对方的数据,实现通信。
管理站向代理请求MIB中定义的数据,代理端识别后,将管理设备提供的相关状态或参数等数据转换成MIB定义的格式,最后将该信息返回给管理站,完成一次管理操作。
1.1.2 snmp报文类型SNMP中定义了五种消息类型:Get-Request、Get-Response、Get-Next-Request、Set-Request和Trap 。
1.Get-Request 、Get-Next-Request与Get-ResponseSNMP 管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。
Get-Next- Request用于和Get-Request组合起来查询特定的表对象中的列元素。
2.Set-RequestSNMP管理站用Set-Request 可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。
3.TrapSNMP代理使用Trap向SNMP管理站发送非请求消息,一般用于描述某一事件的发生,如接口UP/DOWN,IP地址更改等。
上面五种消息中Get-Request、Get-Next-Request和Set-Request是由管理站发送到代理侧的161端口的;后面两种Get-Response和Trap 是由代理进程发给管理进程的,其中Trap消息被发送到管理进程的162端口,所有数据都是走UDP封装。
1.1.3 snmp报文格式图SNMP报文的形式大致如下图所示。
1.2 snmp报文编码格式SNMP(简单网络管理协议)是目前在计算机网络中用得最广泛的网络管理协议,它使用ASN.1(Abstract Syntax Notation One抽象语法表示法.1)来定义SNMP 报文格式和MIB(Management Information Base管理信息库)变量的名称。
1.2.1 ASN.1ASN.1是一种描述数据和数据特征的正式语言,它和数据的存储及编码无关。
根据ASN.1标准定义,数据类型分为:a.简单数据类型:boolean布尔值null空integer整型real实数octerstring八进制字符串object identifier对象标识ipaddressIP地址time ticks时刻值等。
b.构造数据类型:sequence序列sequence of setset ofchoice等。
构造数据类型提供一种或多种简单数据类型进行复合的方法。
1.2.2基本编码规则BER在具体系统中,我们需要用具体的编码规则将ASN.1语法表示的抽象数据转换成具体的比特流。
SNMP使用的编码方法是BER(Basic Encoding Rule)。
BER的数据都由三个域构成:标识域(tag) + 长度域(length) + 值域(value)。
1.标识域Tag表示:2.长度域length表示长度域用于指示后续的值域value的字节数。
但是这个长度域自身多长怎么确定呢?SNMP使用的是变长表示法,这有点类似与UTF8的编码方式。
具体表示方法如下:(1)如果值域的长度在0到127字节之间,那么就是一个字节来表示,即第一个最高位为0的时候,其值就代表了值域的长度。
(2)如果值域的长度在127字节以上,那么第一个字节的第一个bit位(为1)就用于指示值域的长度在127字节以上,后7个bit位(实际值)以及后续用于表示值域长度的字节数。
因为绝大部分情况下,值域的长度都在【0,127】区间内,所有这种表示方法最节约。
1.3 snmp报文介绍1.3.2 SNMP版本表示1.3.3 Community共同体表示共同体部分这里一共占了8个字节。
如:x04,0x06,0x70,0x75,0x62,0x6c,0x69,0x630x04是标识域,表示值域类型为(OCTSTR)0x06是长度域,表示值域的长度为6个字节70 75 62 6c 69 63是值域的内容,是群体名public的assic码值1.3.4 PUD表示这个部分内容比较多,但都是基于BER形式编码出来的。
内容举例如下:a2 23 02 04 22 70 8b d4 02 01 00 02 01 00 30 15 30 13 06 0e 2b 06 01 04 01 8c a6 5e 01 01 01 01 01 00 02 01 2b1.PDU类型2.PUD长度域0xa2后一个字节是这个PUD的长度域,0x23表示后面的值域是35个字节。
3.get/set表示SNMP应该说是有三种操作,get/set/trap,又可细分为上面表格中的5中PDU类型。
其中get和set有共同之处,这里先以get的来做说明。
(1)请求标识符Request ID这是由管理进程设置的一个整数值。
代理进程在发送get-response报文时也要返回此请求标识符。
管理进程可同时向许多代理发出get报文,这些报文都使用UDP传送,先发送的有可能后到达。
设置了请求标识符可使管理进程能够识别返回的响应报文对于哪一个请求报文。
举例:02 04 22 70 8b d40x02是标识域,表示值域为整型数据0x04是长度域,表示值域长度为4个字节0x22 70 8b d4是值域,就是一个整数而已。
(577801172)(2)错误状态error-state错误状态是用于告知管理进程,代理进程对其发出的请求的处理结果的状态的。
举例:02 01 000x02是标识域,表示值域为整型数据(3)错误索引error-index当出现noSuchName、badValue或readOnly的差错时(见上表),由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。
举例:02 01 000x02是标识域,表示值域为整型数据0x01是长度域,表示值域长度为1个字节0x00是值域,因为没有出错,所以这里为01.3.5 变量绑定变量绑定就是跟在错误索引后面的一系列变量。
这些变量同样也采取BER 形式的编码规则。
在get或get-next报文中,变量的值应忽略。
1.3.6 trap(notification)PUD的类型如果不是上面的所述的get/set那就应该是trap(notification)类型1.OID:第一个部分是指trap报文对应的网络设备的对象标识符。
此对象标识符肯定是在enterprise结点{1.3.6.1.4.1}下面的一棵子树上。
2.trap类型3.当使用上述类型2、3、5时,在报文后面变量绑定部分的第一个变量应标识响应的接口。
4. 特定代码(specific-code)指明代理自定义的时间(若trap类型为6),否则为0。
时间戳(timestamp)指明自代理进程初始化到产生trap报告的事件发生所经历的时间,例如时间戳为1230表明在代理初始化后1230ms发生了该时间。
6.变量绑定(variable-bindings)指明一个或多个变量的名和对应的值。
也是采用的BER编码规则。
1.4 数据类型的编码表示下面介绍一些变量类型的编码表示方法。
1.4.1 Integer整型编码表示整型数据的标识域编码是0x02,长度域不定,一般是1/2/4字节等。
整型数据的值域是带符号类型,最高位是符号位,采取补码的表示形式。
要注意的是,其是大端表示法(高地址存低位)。
1.4.2 OID对象标识符编码表示SNMP服务器维护的所有管理信息库(MIB)对象采用ObjectID表示,如,1.3.6.1.2.1.1.1表示MIB库中的设备描述SysDesc变量,其编码规则如下:标识域编码为0x06,长度域根据情况而定,值域的编码比较复杂,如下所示。
1.首两个ID被合并为一个字节X * 40+Y。
例如:1.3合并为1x40+3 =43=0x2B2.后续的ID,如果在区间[1,127],直接编码表示,如果大于127,那么按照下面(3)所述方法编码。
3.如果ID大于127,那么使用多个字节来表示。
a.这多个字节中除最后一个字节外,前面的字节最高位为1b.这多个字节的最后一个字节的最高位为0c.这里每个字节剩下的7个比特位用来表示实际的数值例如201566这个数,用十六进制表示是0x03 13 5e,那么用二进制表示是000 1100010 0110101 1110。
注意上面是以7个比特位为单位进行分划的,现在我们来填充最高位。
将前面的最高位填1,最后一个最高位填0即可得到1000 11001010 01100101 1110用十六进制表示为0x8c a6 5e1.4.3 sequence组合类型sequence表示其由多个数据组合而成,每一个数据也都还是采用的BER编码方法。
例如我们这里分析的数据包中就要一个sequence类型的数据,其值域又是有一个OID类型的数据和一个Integer类型的数据组合而成的。
见2.1实例。
2.分析报文2.1 get-next-request报文示例分析(a.hex)先使用hexdump来查看一下获取到的报文内容。
(hexdump是一个很好用的十六进制分析工具)oo-pc:~/snmpPUD$ hexdump -C a.hex00000000 30 2c 02 01 01 04 06 70 75 62 6c 69 63 a1 1f 02 |0,.....public...|00000010 04 22 70 8b d4 02 01 00 02 01 00 30 11 30 0f 06 |."p........0.0..|00000020 0b 2b 06 01 04 01 8c a6 5e 01 01 01 05 00 |.+......^.....|0000002e2.2 get-response报文示例分析(b.hex)报文内容:oo-pc:~/snmpPUD$ hexdump -C b.hex00000000 30 30 02 01 01 04 06 70 75 62 6c 69 63 a2 23 02 |00.....public.#.| 00000010 04 22 70 8b d4 02 01 00 02 01 00 30 15 30 13 06 |."p........0.0..| 00000020 0e 2b 06 01 04 01 8c a6 5e 01 01 01 01 01 00 02 |.+......^.......|00000030 01 2b |.+| 00000032。