SNMP协议
概念
SNMP(简单网络管理协议)是目前在计算机网络中用的最广泛的网络管理协议,该协议是基于TCP/IP的网管标准,它包括协议本身、数据库的定义和相关概念。可管理对象包括主句、打印机、交换机等。
SNMP此协议管理被管理设备和服务之间的通信,它被设计成一个轮询协议,使用一组简单的命令,设置和检索管理信息库(MIB)中的对象值。管理器发送的SNMP信息保存在UDP(无连接协议)数据报中,并且通过IP路由,因而,使得该代理和管理器驻留在不同的子网上,彼此之间也能通信。
SNMP安装和配置(win 10 为例)
1、安装组件
1)在本地主机上启动SNMP服务并配置共同体:开始(右击)—》控制面板—》程序—》启动或关闭windows 功能
2)查看SNMP组件是否安装成功:开始(右击)—》控制面板—》系统与安全—》管理工具—》服务,服务列表中会出现“SNMP Service”服务
2、配置SNMP服务
1)设置SNMP Service属性
打开“服务”,选择“SNMP Service”,查看“属性”页面,选择“安全”标签页,添加“public”只读团体,并且选择“接收来自任何主机的SNMP数据包”。
2)重新启动SNMP服务
3、查看端口是否开启
选择“开始”——“运行”——输入“netstat -a -n”,按下回车
出现结果,UDP 161 snmp UDP 162 snmptrap 两个snmp端口等,注意SNMP使用的是UDP 协议
SNMP报文
Snmp定义了5种数据协议单元(PDU,也就是5种报文):
1)get - request操作:从代理进程处提取一个或多个参数值。
2)get - next - request 操作:从代理进程处提取一个或多个参数的下一个参数值。
3)Set-request 操作:设置代理进程的一个或多个参数值。
4)Get - response 操作:由代理进程发出的一个或多个参数值。
5)Trap操作:代理进程主动发出的报文,通知管理进程有事情发生。
前面三种是偶管理进程想代理进程发出的,后两个是代理进程发给管理进程的。SNMP报文共有三个部分组成,即公共SNMP首部,get/set首部、trap首部,变量绑定
(1)SNMP 报文的长度取决域变量的类型和值。
(2) 版本字段为0 ,表示为SNMP V1 。
(3) PDU 为协议数据单元,即分组。
(4)
public 。
(5) 对于get 、get-next 和set 操作,请求标识由管理进程设置,然后由代理进程在
get-response 中返回。这个字段的作用是使客户进程(目前是管理进程)能够将服务器进程(即代理进程)发出的响应和客户进程发出的查询进行匹配。这个字段允许管理进程对一个或多个代理进程发出多个请求,并且从返回的应答中分类。
(6)
(7)在get 、get-next 和set 的请求数据报中,包含变量名称和变量值的表,对于get 和get-next 操作,变量值部分被忽略。
SNMP团体名
SNMP提供了一个基本级别的安全性,验证SNMP管理器和SNMP代理之间的发送消息,为每个被发送的SNMP消息添加一个组标识符,就可以进行这种验证。这个标识符就是所谓的SNMP团体名称,所有的SNMP消息必须包含一个团体名称,标准的团体名称是public。
对象标识符(OID)
每台SNMP主机(计算机或网络设备)都有一个或多个MIB,含有该主机上被管理对象的信息。MIB中的每个对象都有一个唯一的标签标识,即所谓的对象标识符(Object Identifier,OID)。
SNMP陷阱
当主机上发生预定的事件时,SNMP代理可以产生一则被称作陷阱(trap)的消息。当代理收到一条含有他没有定义的团体名称的消息时,它将向SNMP管理器发送一条验证陷阱(authentication trap)消息,通知管理器,该主机出现消息验证故障。
SNMP编程
1、SNMP数据类型
数据类型共分为三大类,即:
(1)通用类型(Universal)
该类型通常被称为非聚合类型,在SNMP协议中有4种通用数据类型:
1)INTEGER: 整型,是-2,147,483,648~2,147,483,647的有符号整数;
2)OCTET STRING: 字符串;
3)OBJECT IDENTIFIER: 对象标识符;
4)NULL: 空值。
(2)通用结构类型(Universal-constructed)
结构类型指列表和表格,常被称作聚合类型。在SNMP协议中主要使用两种结构类型:
1)SEQUENCE 用于列表。这一数据类型与大多数程序设计语言中的“structure”类似。一个SEQUENCE包括0个或更多元素,每一个元素又是另一个ASN.1数据类型。
2)SEQUENCE OF type 用于表格。这一数据类型与大多数程序设计语言中的“array”类似。一个表格包括0个或更多元素,每一个元素又是另一个ASN.1数据类型。
(3)应用类型(application)
应用数据类型采用隐式定义,是引用SNMP的简单数据类型来定义的。主要有6种:
1)IpAddress: 以网络序表示的IP地址。因为它是一个32位的值,所以定义为4个字节;
2)network address:网络地址,表示从一个特定协议族中选定的网络地址,SNMPv1仅支持32位IP地址;所以与IpAddress等效;
3)counter:计数器是一个非负的整数,它递增至最大值,而后归零。SNMPv1中定义的计数器是32位的,即最大值为4,294,967,295;
4)Gauge :也是一个非负整数,它可以递增或递减,但达到最大值时保持在最大值,最大值为2^32-1;
5)time ticks:是一个时间单位,表示以0.01秒为单位计算的时间;
6)opaque:表示用于传递任意信息串的任意编码格式,它与SMI使用的严格数据输入格式不同。
2、开源工具
开源包:snmpget使用SNMP4J框架,snmpwalk使用Java Package开源包,下载地址分别为:/html/download.html
/people/sevy/snmp/
3、信息获取方式
在获取到被管理设备的团体名(community)和IP后,输入相应的对象标识符(OID)获取到被管理设备相关的信息,通过snmpwalk函数进行对被管理设备进行获取或设置信息,snmpwalk具体格式如下:
snmpwalk -v 1或2c(代表SNMP版本) -c community IP地址OID(对象标示符)
Java相关代码详见:/davebobo/article/details/51308601
SNMP刺探信息工具
1、Snmpwalk
snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。通过snmpwalk也可以查看支持SNMP 协议(可网管)的设备的一些其他信息,比如cisco交换机或路由器IP地址、内存使用率等,也可用来协助开发SNMP功能。
Windows下安装net-snmp
进入net-snmp官网/download.html 下载net-snmp-5.6.1.1-1.x86.exe工具进行安装