文档库 最新最全的文档下载
当前位置:文档库 › snmp源码分析

snmp源码分析

snmp源码分析
snmp源码分析

#include

#include

#include

#if HAVE_STDLIB_H

#include

#endif

#if TIME_WITH_SYS_TIME

# ifdef WIN32

# include

# else

# include

# endif

# include

#else

# if HAVE_SYS_TIME_H

# include

# else

# include

# endif

#endif

#include "util_funcs.h"

包含自己的头文件

#include "Display_time.h"

#define EXAMPLE_STR_LEN 300

#define EXAMPLE_STR_DEFAULT "life the universe and everything"

int example_int = 42;

char example_str[EXAMPLE_STR_LEN];

void example_parse_config_exampleint(const char *token, char *cptr); void example_parse_config_examplestr(const char *token, char *cptr); void example_free_config_exampleint(void);

void example_free_config_examplestr(void);

这个数组的类型是struct variableN,其中N是这个数组中OID号的最长的数,即:结构体最后一个成员(这个成员是个数组)定义了MIB Tree OID的底层数字。

N定义了MIB Tree OID的底层的层数(也就是这个数组的长度)。

所有有效的N数字都定义在了文件中。

struct variableN类型成员的说明:

1):FoxmailINT:这个magic number是在自己的头文件Display_time.h中宏定义,

这个参数被用来传递给CallBack 例程,用来决定那个object 被查询。

2):ASN_INTEGER:这个参数说明了object的类型,所有有效的类型在snmp_impl.h文件中列表说明。

3):RONLY:这个参数说明了object是否能够被set。

4):var_foxmail:当有object被查询时,这个CallBack 例程被调用。

一般的情况下,同一个文件中的所有的object使用相同的allBack 例程。

5):1:MIB Tree OID的底层数字的层数。(这个数字决定了struct variableN 中的N)

6):{1}:MIB Tree OID的底层数字。

struct variable2 example_variables[] = {

{EXAMPLESTRING, ASN_OCTET_STR, RONLY, var_example, 1, {1}}, {EXAMPLEINTEGER, ASN_INTEGER, RWRITE, var_example, 2, {2, 1}}, {EXAMPLEOBJECTID, ASN_OBJECT_ID, RONLY, var_example, 2, {2, 2}}, {EXAMPLETIMETICKS, ASN_TIMETICKS, RONLY, var_example, 1, {3}}, {EXAMPLEIPADDRESS, ASN_IPADDRESS, RONLY, var_example, 1, {4}}, {EXAMPLECOUNTER, ASN_COUNTER, RONLY, var_example, 1, {5}}, {EXAMPLEGAUGE, ASN_GAUGE, RONLY, var_example, 1, {6}},

{EXAMPLETRIGGERTRAP, ASN_INTEGER, RWRITE, var_example, 1, {7}},

{EXAMPLETRIGGERTRAP2, ASN_INTEGER, RWRITE, var_example, 1, {8}}

};

下面这个数组定义了MIB Tree OID的顶层数字。

oid example_variables_oid[] = { 1, 3, 6, 1, 4, 1, 2021, 254 };

这个例程在Agent程序开始的时候被调用,用来初始化可能被查询的Object。void init_example(void)

{

注册我们自己的MIB Tree,以便Agent查询的时候能够处理。

参数:

1)descr: 描述这个MIB Tree

2)var: 变量结构体,类型struct variableN。

3)vartype: 类型struct variableN

4)theoid: MIB Tree的顶层数字

REGISTER_MIB("example", example_variables, variable2,

example_variables_oid);

把example_str变量设上默认字符串。example_int已经在上面初始化了。

strncpy(example_str, EXAMPLE_STR_DEFAULT, EXAMPLE_STR_LEN);

* Register config handlers for the two objects that can be set

* via configuration file directive

snmpd_register_config_handler("exampleint",

example_parse_config_exampleint,

example_free_config_exampleint,

"exampleint value");

snmpd_register_config_handler("examplestr",

example_parse_config_examplestr,

example_free_config_examplestr,

"examplestr value");

snmpd_register_config_handler("examplestring",

example_parse_config_examplestr,

example_free_config_examplestr,

"examplestring value");

我们经常需要读取内核中的数据,我们需要在这里进行一些必要的初始化。

以加快我们读取这些内核信息的速度,快速反应查询请求。

}

配置文件处理函数

void

example_parse_config_exampleint(const char *token, char *cptr)

{

example_int = atoi(cptr);

}

void

example_parse_config_examplestr(const char *token, char *cptr)

{

必须确保字符串长度小于分配的空间。

if (strlen(cptr) < EXAMPLE_STR_LEN)

strcpy(example_str, cptr);

else {

如果需要的话,截断这个字符串。

strncpy(example_str, cptr, EXAMPLE_STR_LEN - 4);

example_str[EXAMPLE_STR_LEN - 4] = 0;

strcat(example_str, "...");

example_str[EXAMPLE_STR_LEN - 1] = 0;

}

}

当关闭Agent时需要的清除工作。

void

example_free_config_exampleint(void)

{

}

void

example_free_config_examplestr(void)

{

}

当有请求访问这个MIB Tree的object时,就会调用这个处理函数。

参数:

1)vp 被请求访问的object的example_variables的入口地址

2)name 被请求访问的object的OID

3)length OID的长度

4)exact 指示这个request是“exact”(GET/SET)请求,还是“inexact”(GETNEXT/GETBULK)请求

四个参数被用来返回信息:

1)name 被请求访问的object的OID

2)length OID的长度

3)var_len 返回应答的长度

4)write_method 被请求访问的object的SET函数的指针

u_char *

var_example(struct variable *vp,

oid * name,

size_t * length,

int exact, size_t * var_len, WriteMethod ** write_method)

{

从这个函数返回的值必须是一个static data的指针,这样才能够从函数外来访问。

static char string[EXAMPLE_STR_LEN];

static oid oid_ret[8];

static long long_ret;

在进行应答请求之前,需要检查这个请求object OID是否是一个有效的OID。

header_generic()函数能够用来检查scalar objects。

header_simple_table()函数能够用来检查simple table。

这些函数也当检查正确时,设置默认的返回值。

* The name and length are set suitably for the current object,

* var_len assumes that the result is an integer of some form,

* and write_method assumes that the object cannot be set.

DEBUGMSGTL(("example", "var_example entered\n"));

if (header_generic(vp, name, length, exact, var_len, write_method) == MATCH_FAILED)

return NULL;

我们使用struct variableN结构体中的magic number来决定那个object 被请求。

switch (vp->magic) {

case EXAMPLESTRING:

sprintf(string, example_str);

在上面时假设返回值是integer,但是并不是,所以需要重新设置var_len。

*var_len = strlen(string);

return (u_char *) string;

case EXAMPLEINTEGER:

这种情况,上面的假设的长度是正确的,但是这个object是可以写的,所以需要设置write_method。

long_ret = example_int;

*write_method = write_exampleint;

return (u_char *) & long_ret;

case EXAMPLEOBJECTID:

oid_ret[0] = 1;

oid_ret[1] = 3;

oid_ret[2] = 6;

oid_ret[3] = 1;

oid_ret[4] = 4;

oid_ret[5] = oid_ret[6] = oid_ret[7] = 42;

这种情况,上面的假设的长度是错误的。

*var_len = 8 * sizeof(oid);

return (u_char *) oid_ret;

case EXAMPLETIMETICKS:

这种情况,上面的假设的长度是正确的,直接返回。

long_ret = 363136200;

return (u_char *) & long_ret;

case EXAMPLEIPADDRESS:

long_ret = ntohl(INADDR_LOOPBACK);

return (u_char *) & long_ret;

case EXAMPLECOUNTER:

long_ret = 42;

return (u_char *) & long_ret;

case EXAMPLEGAUGE:

long_ret = 42;

return (u_char *) & long_ret;

case EXAMPLETRIGGERTRAP:

这个object是只能够写的“write-only”。

它的作用是只能够产生一个“trap”,当读它的时候只能够返回0。

long_ret = 0;

*write_method = write_exampletrap;

return (u_char *) & long_ret;

case EXAMPLETRIGGERTRAP2:

这个object是只能够写的“write-only”。

它的作用是只能够产生一个SNMP v2版本的“trap”,当读它的时候只能够返回0。

long_ret = 0;

*write_method = write_exampletrap2;

return (u_char *) & long_ret;

default:

这种情况,报告一个错误,并把错误写入log。

DEBUGMSGTL(("snmpd", "unknown sub-id %d in examples/var_example\n",

vp->magic));

}

return NULL;

}

当某个object是可写的时候,需要设置SET处理例程。

int

write_exampleint(int action,

u_char * var_val,

u_char var_val_type,

size_t var_val_len,

u_char * statP, oid * name, size_t name_len)

{

定义一个允许访问的最大数值,它是任意的。

#define MAX_EXAMPLE_INT 100

static long intval;

static long old_intval;

switch (action) {

case RESERVE1:

检查要设置的值是否符合条件。

if (var_val_type != ASN_INTEGER) {

DEBUGMSGTL(("example", "%x not integer type", var_val_type));

return SNMP_ERR_WRONGTYPE;

}

if (var_val_len > sizeof(long)) {

DEBUGMSGTL(("example", "wrong length %x", var_val_len));

return SNMP_ERR_WRONGLENGTH;

}

intval = *((long *) var_val);

if (intval > MAX_EXAMPLE_INT) {

DEBUGMSGTL(("example", "wrong value %x", intval));

return SNMP_ERR_WRONGVALUE;

}

break;

case RESERVE2:

break;

case FREE:

break;

case ACTION:

按照请求设置数值,但是这个请求可能被撤销,所以需要保存原来的值。

old_intval = example_int;

example_int = intval;

break;

case UNDO:

撤销上一个请求,恢复原来的值。

example_int = old_intval;

break;

case COMMIT:

break;

}

return SNMP_ERR_NOERROR;

}

int

write_exampletrap(int action,

u_char * var_val,

u_char var_val_type,

size_t var_val_len,

u_char * statP, oid * name, size_t name_len)

{

long intval;

DEBUGMSGTL(("example", "write_exampletrap entered: action=%d\n", action));

switch (action) {

case RESERVE1:

if (var_val_type != ASN_INTEGER) {

DEBUGMSGTL(("example", "%x not integer type", var_val_type));

return SNMP_ERR_WRONGTYPE;

}

if (var_val_len > sizeof(long)) {

DEBUGMSGTL(("example", "wrong length %x", var_val_len));

return SNMP_ERR_WRONGLENGTH;

}

intval = *((long *) var_val);

if (intval != 1) {

DEBUGMSGTL(("example", "wrong value %x", intval));

return SNMP_ERR_WRONGVALUE;

}

break;

case RESERVE2:

break;

case FREE:

break;

case ACTION:

break;

case UNDO:

break;

case COMMIT:

产生一个“trap”

DEBUGMSGTL(("example", "write_exampletrap sending the trap\n", action));

send_easy_trap(SNMP_TRAP_ENTERPRISESPECIFIC, 99);

DEBUGMSGTL(("example", "write_exampletrap trap sent\n", action));

break;

}

return SNMP_ERR_NOERROR;

}

int

write_exampletrap2(int action,

u_char * var_val,

u_char var_val_type,

size_t var_val_len,

u_char * statP, oid * name, size_t name_len)

{

long intval;

oid objid_snmptrap[] = { 1, 3, 6, 1, 6, 3, 1, 1, 4, 1, 0 };

oid demo_trap[] = { 1, 3, 6, 1, 4, 1, 2021, 13, 990 };

oid example_string_oid[] =

{ 1, 3, 6, 1, 4, 1, 2021, 254, 1, 0 };

static netsnmp_variable_list var_trap;

static netsnmp_variable_list var_obj;

DEBUGMSGTL(("example", "write_exampletrap2 entered: action=%d\n", action));

switch (action) {

case RESERVE1:

if (var_val_type != ASN_INTEGER) {

DEBUGMSGTL(("example", "%x not integer type", var_val_type));

return SNMP_ERR_WRONGTYPE;

}

if (var_val_len > sizeof(long)) {

DEBUGMSGTL(("example", "wrong length %x", var_val_len));

return SNMP_ERR_WRONGLENGTH;

}

intval = *((long *) var_val);

if (intval != 1) {

DEBUGMSGTL(("example", "wrong value %x", intval));

return SNMP_ERR_WRONGVALUE;

}

break;

case RESERVE2:

break;

case FREE:

break;

case ACTION:

break;

case UNDO:

break;

case COMMIT:

产生一个SNMP v2版本的“trap”

var_trap.next_variable = &var_obj;

var_https://www.wendangku.net/doc/cc9770218.html, = objid_snmptrap;

var_https://www.wendangku.net/doc/cc9770218.html,_length = sizeof(objid_snmptrap) / sizeof(oid);

var_trap.type = ASN_OBJECT_ID;

var_trap.val.objid = demo_trap;

var_trap.val_len = sizeof(demo_trap);

var_obj.next_variable = NULL;

var_https://www.wendangku.net/doc/cc9770218.html, = example_string_oid;

var_https://www.wendangku.net/doc/cc9770218.html,_length = sizeof(example_string_oid) / sizeof(oid);

var_obj.type = ASN_OCTET_STR;

var_obj.val.string = example_str;

var_obj.val_len = strlen(example_str);

DEBUGMSGTL(("example", "write_exampletrap2 sending the v2 trap\n", action));

send_v2trap(&var_trap);

DEBUGMSGTL(("example", "write_exampletrap2 v2 trap sent\n",

action));

break;

}

return SNMP_ERR_NOERROR;

}

REGISTER_MIB()宏定义最终调用的是netsnmp_register_old_api函数。

里面用到了这个结构体。

typedef struct netsnmp_handler_registration_s {

char *handlerName;

char *contextName;

oid *rootoid;

size_t rootoid_len;

netsnmp_mib_handler *handler;

int modes;

int priority;

int range_subid;

oid range_ubound;

int timeout;

int global_cacheid;

void * my_reg_void;

} netsnmp_handler_registration;

在调用netsnmp_register_handler(reginfo)函数注册netsnmp_handler_registration 类型的reginfo变量。

netsnmp_register_handler()在agent/agent_handler.c文件中定义。

有调用netsnmp_register_mib()函数

这个函数构建一个netsnmp_subtree 类型的变量subtree进行注册。

typedef struct netsnmp_subtree_s {

oid *name_a;

u_char namelen;

oid *start_a;

u_char start_len;

oid *end_a;

u_char end_len;

struct variable *variables;

int variables_len;

int variables_width;

char *label_a;

netsnmp_session *session;

u_char flags;

u_char priority;

int timeout;

struct netsnmp_subtree_s *next;

struct netsnmp_subtree_s *prev;

struct netsnmp_subtree_s *children;

int range_subid;

oid range_ubound;

netsnmp_handler_registration *reginfo;

int cacheid;

int global_cacheid;

} netsnmp_subtree;

调用这个函数netsnmp_subtree_load()进行注册。

转自:https://www.wendangku.net/doc/cc9770218.html,/xiaohei9514/blog/item/637fb2138aac8e856438db22.html

分享

snmp协议的分析

竭诚为您提供优质文档/双击可除 snmp协议的分析 篇一:实验三snmp协议分析 实验三snmp协议分析 一、实验目的 (1)掌握嗅探工具ethereal协议分析软件的使用方法(2)利用ethereal软件工具截snmp数据包并完成报文分析 二、实验环境 局域网,windowsserver20xx,snmputil,ethereal,superscan 三、实验步骤(0、snmp的安装配置) 1、理解应用层snmp协议工作原理; 2、使用windows平台上的snmputil.exe程序实现snmp 交互; 3、利用协议分析和抓包工具ethereal抓取分析snmp 协议报文。 四、实验内容 内容一:

1.打开ethereal软件开始抓包, 输入命令: snmputilget[目标主机ip地址]团体 名.1.3.6.1.2.1.1.2.0停止抓包。对snmp包进行过滤。(给出抓包结果截图) 2.找出一对snmp协议请求包和相对应的应答包。给出抓包结果截图。 3.对上面这对请求和应答包进行分析,根据snmp协议数据包格式填值。 请求包报文分析 应答包报文分析 内容二: 1.通过snmptuil.exe与snmp交互: 输入snmputilwalk[目标主机ip地址]团体 名.1.3.6.1.2.1.1命令列出目标主机的系统信息。 2.打开ethereal软件开始抓包,再次输入上面命令后,停止抓包。对snmp包进行过滤。给出抓包结果截图。 3.找出一对snmp协议请求包和相对应的应答包。给出抓包结果截图。 4.对上面这对请求和应答包进行分析,根据snmp协议数据包格式填值。 请求包报文分析

实验二 SNMP协议工作原理验证与分析

实验二SNMP协议工作原理验证与分析 一、实验目的 本实验的主要目的是学习捕获SNMP报文,通过分析该报文理解SNMP协议的工作过程、SNMP的报文结构、MIB-2树的结构、理解管理信息结构SMI及其规定的ASN.1。 二、实验内容 1、分析并验证SNMP协议的工作过程; 2、分析并验证SNMP协议数据单元的格式; 3、分析MIB-2树的结构; 4、分析理解管理信息结构SMI及其规定的ASN.1。 三、实验工具 数据包捕获软件Iris或Wireshark、MIB浏览器AdventNet、或基于UNIX、LINUX/FreeBSD平台的SNMP命令行工具、MIB文件。 四、实验步骤 1、分别打开软件Iris和MIB浏览器; 2、首先设置Iris中捕获报文的过滤条件,将其设置为只捕获管理站和代理之间的SNMP报文。用鼠标单击左侧“Filters”控件,在打开的对话框中分别设置Layer2,3和IP address项。其中,Layer2,3选中DoD IP 和SNMP;IP address加入代理主机和管理站主机的IP地址。“确定”保存该设置;

3、点击Iris中工具栏的start capture,开始捕获SNMP报文; 4、用MIB浏览器MibBrowser访问MIB被管对象,然后观察Iris中右侧内容面板中显示的信息。单击任一信息,右下侧将显示详细的报文数据; 5、用鼠标单击右下侧的报文数据,在右侧会有相关的解析与之对应。 五、实验报告 1、设置iris过滤器,使其只监测管理工作站和代理之间的通信。获取ip 组的ipForwarding对象值,写出管理工作站和代理之间的SNMP通信情况,验证SNMP协议的工作过程。 (1)获取ip组的ipForwarding对象值

H3C配置SNMP协议

H3C配置SNMP协议 1.使用telnet登陆设备 System-view Snmp-agent Snmp-agent community read public Snmp-agent sys-infoversion all Dis cur Save 保存 配置完成。。 1.1 概述 SNMP是Simple Network Manger Protocol(简单网络管理协议)的缩写,在1988 年8月就成为一个网络管理标准RFC1157。到目前,因众多厂家对该协议的支持, SNMP已成为事实上的网管标准,适合于在多厂家系统的互连环境中使用。利用SNMP 协议,网络管理员可以对网络上的节点进行信息查询、网络配置、故障定位、容量规 划,网络监控和管理是SNMP的基本功能。 SNMP是一个应用层协议,为客户机/服务器模式,包括三个部分: ●SNMP网络管理器 ●SNMP代理 ●MIB管理信息库 SNMP网络管理器,是采用SNMP来对网络进行控制和监控的系统,也称为NMS (Network Management System)。常用的运行在NMS上的网管平台有HP OpenView 、CiscoView、CiscoWorks 2000,锐捷网络针对自己的网络设备,开发了 一套网管软件--Star View。这些常用的网管软件可以方便的对网络设备进行监控和 管理。 SNMP代理(SNMP Agent)是运行在被管理设备上的软件,负责接受、处理并且响 应来自NMS的监控和控制报文,也可以主动发送一些消息报文给NMS。 NMS和Agent的关系可以用如下的图来表示: 图1 网络管理站(NMS)与网管代理(Agent)的关系图

snmp报文分析

SNMP报文格式分析 报文格式 snmp简介 snmp工作原理 SNMP采用特殊的客户机/服务器模式,即代理/管理站模型。对网络的管理与维护是通过管理工作站与SNMP代理间的交互工作完成的。每个SNMP从代理负责回答SNMP管理工作站(主代理)关于MIB定义信息的各种查询。 管理站和代理端使用MIB进行接口统一,MIB定义了设备中的被管理对象。管理站和代理都实现相应的MIB对象,使得双方可以识别对方的数据,实现通信。 管理站向代理请求MIB中定义的数据,代理端识别后,将管理设备提供的相关状态或参数等数据转换成MIB定义的格式,最后将该信息返回给管理站,完成一次管理操作。 snmp报文类型 SNMP中定义了五种消息类型:Get-Request、Get-Response、 Get-Next-Request、Set-Request和Trap 。 1.Get-Request 、Get-Next-Request与Get-Response SNMP 管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。Get-Next- Request用于和 Get-Request组合起来查询特定的表对象中的列元素。 2.Set-Request SNMP管理站用Set-Request 可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。 3.Trap SNMP代理使用Trap向SNMP管理站发送非请求消息,一般用于描述某一事件的发生,如接口UP/DOWN,IP地址更改等。

上面五种消息中Get-Request、Get-Next-Request和Set-Request是由管理站发送到代理侧的161端口的;后面两种Get-Response和Trap 是由代理进程发给管理进程的,其中Trap消息被发送到管理进程的162端口,所有数据都是走UDP封装。 snmp报文格式图 SNMP报文的形式大致如下图所示。 snmp报文编码格式 SNMP(简单网络管理协议)是目前在计算机网络中用得最广泛的网络管理协议,它使用(Abstract Syntax Notation One抽象语法表示法.1)来定义SNMP报文格式和MIB(Management Information Base管理信息库)变量的名称。 是一种描述数据和数据特征的正式语言,它和数据的存储及编码无关。根据标准定义,数据类型分为: a.简单数据类型: boolean布尔值

SNMP协议

SNMP的前身是简单网管监控协议用来对通信线路进行管理对后人们对SGMP进行了很大的修改特别是加入了符合INTERNET定义的SMI和MIB;体系结构改进后的协议就是著名的SNMP。SNMP的目标是管理互联网INTERNET上众多厂商生产的软硬件平台,因此SNMP收到INTERNET标准网络管理框架的应先也很大。现在SNMP已经出到第三个版本的协议,其功能教以前已经大大地加强了和改进了。SNMP的体系结构是围绕一下四个概念和目标进行设计的保持管理代理(AGENT)的软件成本尽可能低;最大限度地保持远程管理功能,以便充分利用INTERNET的网络资源;体系结构必须有扩充的余地;保持SNMP的独立性,不依赖于具体计算、网管和网络传输协议。在最近的改进中,又加入了保证SNMP体系本身系统安全性的目标。 SNMP风险 接入INTERNET的网络面临许多风险,WEB服务器可能面临攻击,邮件服务器的安全也令人担忧。但除此之外,网络上可能还存在一些隐性的漏洞。大多数网络总有一些设备运行着SNMP服务,许多时候这些SNMP服务是不必要的,但却没有引起网络管理员的重视。 根据SANS协会的报告,对于接入INTERNET的主机,SNMP是威胁安全的十大首要因素之一;同时,SNMP还是INTERNET主机上最常见的服务之一。特别的,SNMP 服务通常在位于网络边缘的设备(防火墙保护权之前爱的设备)上运行,进一步加剧了SNMP带来的风险。这一切听起来出人意料但其实事情不应该是这样的。 一、背景知识 SNMP开发与九十年代早期,其目的是简化大型网络中设备的管理和数据的获取。许多与网络有关的软件包,如HP的OPENVIEW和NORTEL NETWORKS的OPTIVITY NETWORK MANAGEMENT SYSTEM,还有MULTI ROUTER TRAFFIC GRAPHER (MRTG)之类的免费软件,都用SNMP服务来简化网络管理和维护。 由于SNMP效果实在太好了,所以网络硬件厂商开始把SNMP加入到它们制造的每一台设备。今天,各种网络设备上都可以看到默认用的SNMP服务,从交换机到路由器,从防火墙到网络打印机,无一例外。 仅仅是分布广泛还不足以造成威胁,问题是许多厂商安装的SNMP都采用了默认的通信字符串(例如密码),这些通信字符串是程序获取设备信息和修改必不可少的。采用默认通信字符串的好处是网络上的软件可以直接访问设备,无需通过复杂的配置。 通信字符串主要包含两类命令:GET命令、SET命令。GET命令从设备读取数据,这些数据通常是操作参数,例如连接状态、接口名称等。SET命令允许设置设备某些参数。这类功能一般有限制,例如关闭某个网络接口、修改路由器参数等功能。但很显然,GET\SET命令都可能被利用与拒绝服务攻击和恶意修改网络参数。 SNMP2.0和SNMP1.0的安全机制比较脆弱,通信不加密,所有通信字符串和数据都以明文形式发送。攻击者一旦不活了网络通信,就可以利用各种嗅探工具直接获取通信字符串,即是哟过户改变了通信字符串默认值也无济于事。 近几年才出现的SNMP3.0解决了一部分问题,为保护通信字符串,SNMP3.0使用DES算法加密数据通信;另外,SNMP3.0还能够用MD5和SHA技术技术验证节点的标识符,从而防止攻击者冒充管理节点的身份操作网络 虽然SNMP3.0出现已经有一段时间了,但目前还没有广泛应用。如果设备是2、3年前的产品,很可能根本不支持SNMP3.0,甚至有些交心的设备也只有SNMP2.0或SNMP1.0。

snmp简单网络管理协议漏洞分析

snmp简单网络管理协议漏洞分析 字体: | 发表于: 2008-4-10 01:23 作者: menyuchun 来源: IXPUB技术博客 简单网络管理协议(SNMP)是一个 可以远程管理计算机和网络设备的协议. 有两种典型的远程监控模式. 他们可以粗略地分为"读"和"写"(或者是PUBLIC和PRIVATE). 如果攻击者能猜出一个PUBLIC团体串值, 那么他就可以从远程设备读取SNMP数据. 这个信息可能包括 系统时间,IP地址,接口,运行着的进程,etc等. 如果攻击者猜出一个PRIVATE团体串值 (写入或"完全控制", 他就有更改远程机器上信息的能力. 这会是一个极大的安全漏洞, 能让攻击者成功地破坏网络,运行的进程,ect. 其实,"完全控制"会给远程攻击者提供在主机上的完全管理权限. 更多信息请参见: ___________________________________________________________________ SNMP Agent responded as expected with community name: public CVE_ID : CAN-1999-0517, CAN-1999-0186, CAN-1999-0254, CAN-1999-0516

BUGTRAQ_ID : 11237, 10576, 177, 2112, 6825, 7081, 7212, 7317, 9681, 986 NESSUS_ID : 10264 Other references : IAVA:2001-B-0001 SNMP服务在UDP 161/162端口监听 用法:snmputil walk IP public [OID] [----------OID-----------------------含义-------] .1.3.6.1.2.1.25.4.2.1.2 获取系统进程 .1.3.6.1.4.1.77.1.2.25.1.1 获取用户列表 .1.3.6.1.4.1.77.1.4.1.0 获取域名 .1.3.6.1.2.1.25.6.3.1.2 获取安装的软件 .1.3.6.1.2.1.1 获取系统信息 -------------------------------------------------------------------- 扫描到的一个报告: . 端口"snmp (161/udp)"发现安全漏洞: Snmp口令: "public" . 端口"snmp (161/udp)"发现安全提示: sysDescr.0 = Draytek V3300 Advanced Router sysUpTime.0 = 3 Days, 1 Hours, 53 Minutes, 10 Seconds

snmp报文分析

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-Response

SNMP 管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。Get-Next- Request用于和Get-Request组合起来查询特定的表对象中的列元素。 2.Set-Request SNMP管理站用Set-Request 可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。 3.Trap SNMP代理使用Trap向SNMP管理站发送非请求消息,一般用于描述某一事件的发生,如接口UP/DOWN,IP地址更改等。 上面五种消息中Get-Request、Get-Next-Request和Set-Request是由管理站发送到代理侧的161端口的;后面两种Get-Response和Trap 是由代理进程发给管理进程的,其中Trap消息被发送到管理进程的162端口,所有数据都是走UDP封装。 1.1.3 snmp报文格式图 SNMP报文的形式大致如下图所示。

网络管理实验SNMP报文解析实验报告

网络管理实验————SNMP报文解析 2010-6-1 4.trap操作: Sniffer软件截获到的trap报文如下图所示:

30 2e SNMP报文是ASN.1的SEQUENCE 类型,报文长度是46个八位组。 02 01 00:版本号为integer类型,取值为0,表示snmpv1。 04 06 70 75 62 6c 69 63:团体名为octet string类型,值为“public” a4 21: 表示pdu类型为trap,长度为33个八位组。 06 0c 2b 06 01 04 01 82 37 01 01 03 01 02:制造商标识,类型为object identifier。 值为1.3.6.1.4.1.311.1.1.3.1.2。 40 04 c0 a8 01 3b:代理的IP地址,类型OCTECT STRING,值为192.168.1.59; 02 01 04:一般陷阱,类型为INTEGER,值为4,代表这是由“authentication Failure (身份验证失败)”引发的TRAP; 02 01 00:特殊陷阱,类型为INTEGER,值为0(当一般陷阱取值不是6时); 43 03 06 63 29:时间戳,类型为TIME TICKS,值为418601 (百分之一秒),即系 统在运行到大约第70分钟时,代理发出了此TRAP; 30 00变量绑定表为空。 5.SNMPv2 GetBulk操作: Sniffer软件截获到的getbulkrequest报文如下图所示:

对该报文的分析如下 : 30 27 SNMP 报文是ASN.1的SEQUENCE 类型,报文长度为46个八位组;

网络管理与维护课内实验报告3-SNMP报文分析

一. 实验目的 1.掌握BER基本编码规则; 2. 利用各种网络管理工具,完成相关SNMP操作,分析并掌握SNMP PDU结构,理解SNMP协议的工作原理。 二. 实验所需设备及材料 1.局域网环境中的计算机2台(1台代理,1台管理站),2台计算机已启动SNMP服务,作为管理站的计算机安装SNMPc软件和snmputil工具; 2.在某一台计算机安装网络嗅探软件。 三. 实验内容 参考实验指导书P324页5.5.2节。如图5-111所示,首先将代理一方的只读团体名、读/写团体名、trap 团体名全部修改为你的8位学号(如何添加团体名,请参考第一次实验的内容)。然后完成以下实验: 1.完成get操作,抓取get 请求报文和其响应报文(注意两个报文“request-id”一致),截图(需要截取哪些信息?请参考P327图5-114),然后对应截图分别完成两个报文的BER编码分析。 2.完成getnext操作,抓取getnext请求报文和其响应报文(注意两个报文“request-id”一致),截图,然后对应截图完成两个报文的BER编码分析。 3.完成set操作,抓取set 请求报文和其响应报文(注意两个报文“request-id”一致),截图,然后对应截图完成两个报文的BER编码分析。 4.构造一个trap,抓取trap报文,截图,然后对应截图完成该报文的BER编码分析。 5.完成SNMPv2 GetBulk操作,抓取GetBulk请求报文和响应报文(注意两个报文“request-id”一致),截图,然后对应截图完成两个报文的BER编码分析。

四.实验过程 1. get操作分析 ●说明如何产生Get操作? 答:管理站检索管理对象的管理信息库中标量对象的值,就产生一个Get操作。 ●Get请求报文抓包截图与BER分析 30 36 ;报文是SEQUENCE类型,长度是54个8位组 02 01 00 ;SNMP版本号,类型为Integer,值为版本号-1 04 08 30 34 31 33 32 30 32 31 ;团体名,类型为OETCTString值为”04132021” A0 27 ;A0表示为GET操作,其后PDU长39个8位组 02 01 01 ;request-id,类型为Integer,值为1 02 01 00 ;错误状态,类型为Integer,值为0 02 01 00 ;错误索引,类型为Integer,值为0 30 1C ;变量绑定表,类型为SEQUENCEOF,长度为28 30 0C ;第一个变量绑定,类型为SEQUENCE,长度为12 06 08 2B 06 01 02 01 01 03 00 ;变量为OID类型,值为.1.3.6.1.2.1.1.3.0 05 00 ;变量值为NULL 30 0C ;第二个变量绑定,类型为SEQUENCE,长度为12 06 08 2B 06 01 02 01 02 01 00 ;变量为OID类型,值为.1.3.6.1.2.1.2.1.0 05 00 ;变量值为NULL

SNMP协议详解

SNMP协议详解 简单网络管理协议(SNMP:Simple Network Management Protocol)是由互联网工程任务组(IETF:Internet Engineering T ask Force )定义的一套网络管理协议。该协议基于简单网关监视协议(SGMP:Simple Gateway Monitor Protocol)。利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。虽然SNMP开始是面向基于IP的网络管理,但作为一个工业标准也被成功用于电话网络管理。 1. SNMP基本原理 SNMP采用了Client/Server模型的特殊形式:代理/管理站模型。对网络的管理与维护是通过管理工作站与SNMP 代理间的交互工作完成的。每个SNMP从代理负责回答SNMP管理工作站(主代理)关于MIB定义信息的各种查询。下图10是NMS公司网络产品中SNMP协议的实现模型。 SNMP代理和管理站通过SNMP协议中的标准消息进行通信,每个消息都是一个单独的数据报。SNMP使用UDP (用户数据报协议)作为第四层协议(传输协议),进行无连接操作。SNMP消息报文包含两个部分:SNMP报头和协议数据单元PDU。数据报结构如下图 版本识别符(version identifier):确保SNMP代理使用相同的协议,每个SNMP代理都直接抛弃与自己协议版本不同的数据报。 团体名(Community Name):用于SNMP从代理对SNMP管理站进行认证;如果网络配置成要求验证时,SNMP 从代理将对团体名和管理站的IP地址进行认证,如果失败,SNMP从代理将向管理站发送一个认证失败的Trap消息协议数据单元(PDU):其中PDU指明了SNMP的消息类型及其相关参数。 2. 管理信息库MIB IETF规定的管理信息库MIB(由中定义了可访问的网络设备及其属性,由对象识别符(OID:Object Identifier)唯一指定。MIB是一个树形结构,SNMP协议消息通过遍历MIB树形目录中的节点来访问网络中的设备。 下图给出了NMS系统中SNMP可访问网络设备的对象识别树(OID:Object Identifier)结构。

SNMP报文分析

SNMP报文分析 一、配置SNMP协议的使用环境 1、主机Windows10的配置 ●安装SNMP协议 ●配置并打开SNMP Service服务

2、目标机Windows XP的配置 ●配置过程和Windows10下类似,此处不再赘述 ●目标机的ip地址为192.168.72.129

目标机的计算机名为 二、利用Wireshark抓取SNMP协议包 1、下载安装snmputil.exe和wireshack 2、利用snmputil工具发送snmp数据包 snmputil命令规则: [get|getnext|walk]为消息类型,我们此次进行的操作是get agent指Snmp代理即你想进行操作的网络设备的ip或名称,即192.168.10.191 community:分区域,即密码,默认是public oid:想要操作的MIB数据对象号

示例: snmputil walk 对方ip public .1.3.6.1.2.1.1.5.0列出计算机名snmputil walk 对方ip public .1.3.6.1.2.1.25.4.2.1.2 列出系统进程snmputil walk 对方ip public .1.3.6.1.4.1.77.1.2.25.1.1 列系统用户列表snmputil get 对方ip public .1.3.6.1.4.1.77.1.4.1.0 列出域名 snmputil walk 对方ip public .1.3.6.1.2.1.25.6.3.1.2 列出安装的软件snmputil walk 对方ip public .1.3.6.1.2.1.1 列出系统信息 3、同时在wireshack中抓包

snmp报文分析

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-Response SNMP 管理站用Get-Request消息从拥有SNMP代理得网络设备中检索信息,而SNMP代理则用Get—Response消息响应。Get-Next- Request用于与Get—Request组合起来查询特定得表对象中得列元素. 2。Set-Request SNMP管理站用Set-Request可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。 3.Trap SNMP代理使用Trap向SNMP管理站发送非请求消息,一般用于描述某一事件得发生,如接口UP/DOWN,IP地址更改等.

SNMP协议分析

SNMP协议分析 摘要:当今由路由器、交换机、服务器组成的复杂的网络,确保所有的设备正常运行且处于最佳状态确实是一件困难的事情。为了解决这个问题在1988年正式推出了简单网络管理协议(SNMP)。利用SNMP只需一些“简单”的操作便可实现对网络设备的远程管理。但同时SNMP是威胁安全的十大首要因素之一。 目录: 1SNMP简介 (2) 1.1SNMP版本 (2) 1.2管理端和agent (2) 1.3SNMP 和UDP (2) 2管理对象 (3) 2.1SMI和MIB (3) 2.2OID命名 (3) 2.3管理信息结构 (4) 3SNMP 操作 (5) 4SNMP V3 (5) 4.1SNMPv3的变化 (6) 4.2SNMPv3引擎 (6) 4.3SNMPv3 应用程序 (6) 4.4SNMPv3 安全机制 (6) 5SNMP受到的安全威胁 (7) 5.1拒绝服务攻击DOS (7) 5.2流量分析攻击 (8) 5.3认证机制漏洞 (8)

1SNMP简介 SNMP可以用于管理很多类型的设备,其核心是帮助网络管理员简化对一些 支持SNMP设备设置的操作(也包括这些信息的收集)。例如,使用SNMP可以关闭路由器的一个端口,也可以查看以太网端口的工作速率。SNMP还可以监控交换机的温度,在出现过高现象进行报警。 1.1SNMP版本 IETF负责定义互联网流量监管的标准,这里面包括SNMP。IETF发行的RFCs,对IP领域中的众多协议进行了详细的阐述。下面列举了一些当前的SNMP版本。1)SNMP V1是SNMP协议的最初版本,不过依然是众多厂家实现SNMP基本方式。2)SNMP V2通常被指是基于community的SNMP V2。Community实质上就是密码。3)SNMPv3 是最新版本的SNMP。它对网络管理最大的贡献在于其安全性。增加了对认证和密文传输的支持。 1.2管理端和agent SNMP有2个主体:管理端和agent。 管理端指的是运行了可以执行网络管理任务软件的服务器,通常被称作为网络管理工作站(NMS),NMS负责采样网络中agent的信息,并接受agent的trap。 Agent是运行在可网络设备上的软件。可以是一个独立的程序(在Unix中叫守护进程),也可以是已经整合到操作系统中(比如:锐捷路由器的RGNOS,或者UPS中的底层操作系统)。 NMS和Agent工作示意图 1.3SNMP 和UDP SNMP采用UDP协议在管理端和agent之间传输信息。 SNMP采用UDP 161 端口接收和发送请求,162端口接收trap,执行SNMP的设备缺省都必须采用这些端口。

SNMP报文抓取及分析

SNMP报文获取与分析 班级:网络工程12-1班 学号:08123536 姓名:赵怀庆

SNMP报文抓取及分析 关于本次SNMP报文抓取及分析工作,我大致上分为三个步骤进行:准备工作;报文抓取及报文分析。 一.准备工作 1.SNMP协议的安装 以WINDOW7系统为例: 点击确认进行协议安装。 2.启动SNMP服务:

在计算机关服务界面中,选择SNMP Service进行开启服务,双击进行配置,如下: 在安全选项卡中做如上配置。 3.下载并安装snmputil工具 安装路径为C盘下Windows下System32文件夹。关于snmputil的使用请见(附件)。4.关于SNMP数据包的接收,我用了虚拟机中WINDOW 2000操作系统,SNMP协议的安 装及服务的开启与上述WINDOW 7系统类似。查看虚拟机IP地址:

二.报文抓取 1.准备工作就绪以后,就可以进行SNMP报文的抓取了,在WINDOW 7中cmd使用snmputil 工具进行发包: 2.同时在Wireshark中进行抓包:

三.报文分析 目的MAC:00 0c 29 2f fc e3 源MAC:00 50 56 c0 00 08 协议类型:08 00 ,为IP数据报 IP报头:45 00 00 44 02 09 00 00 40 11 bc cb c0 a8 9d 01 c0 a8 9d 82 45 IP协议版本4,报头长度20 bytes 00 00 44 总长度68(0x44) 02 09 确认号:512 00 00 标记字段0x00 无偏移字段 40 存活时间64 11 报文协议UPD aa 26 报头确认号43558 b4 7c 0a 79 源IP地址180 124 10 121 c0 a8 11 81 目标IP地址192 168 17 129 UDP报头:c9 6b 00 a1 00 30 43 6f C9 6b 源端口161 00 a1 目标端口161

snmp报文分析

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-Response SNMP 管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。Get-Next- Request用于与 Get-Request组合起来查询特定的表对象中的列元素。 2.Set-Request SNMP管理站用Set-Request 可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。 3.Trap SNMP代理使用Trap向SNMP管理站发送非请求消息,一般用于描述某一事件的发生,如接口UP/DOWN,IP地址更改等。

用SNMP协议实现系统监控

用SNMP协议实现系统监控 作者王基立系统监测的基本概念及分类: a.系统监测的概述: 如何对现有IT架构的整体以及细节运行情况进行科学、系统和高效地监测是目前各企业运维和管理部门一项非常重要的工作内容。随着当前企业IT环境中服务器、应用数量和类型的不断地增加,运维部门需要通过科学和高效的手段尽可能详细、实时和准确地获取整个架构中具体到每个服务器、每个系统甚至每个应用程序工作的细节,并且会对所获取到的原始数据进行分析、绘图和统计,以便为后续的性能调优、建构调整以及各类型排错建立参考依据。 常见的监测对象基本上涵盖了IT运行环境的方方面面,包括机房环境、硬件、网络等,而每一个方面所涉及的监测项目则种类繁多。例如对硬件环境的监测中,所涵盖内容就会包括服务器的工作温度、风扇转速等指标;针对系统环境的监测,将包括基本的操作系统运行环境,如CPU、内存、I/O、存储空间使用状况、网络吞吐量、进程数量和状态等情况;针对具体的应用情况,涉及监测的内容可能会更多,而且也会有很多专门针对应用的指标。 除了监测的内容需要尽量全面之外,同时我们还希望所使用的监测解决方案能够灵活和具备更多扩展功能。例如有效地支持IT架构的变化和扩展,在监测量增加的情况下能够尽可能少地占用资源,拥有强大的事件通知机制等等。 今天本文所涉及的内容,主要是针对操作系统以及软件环境的监测,而且尤其是针对Linux操作系统的运行情况监测。尽管目前有很多的商用软件以及解决方案来实现相关的功能,但是实际上我们也有很多开源的解决方案可以起到相同的作用,而且效果也非常不错。下面的内容中,我们将会对这些解决方案的实现方法进行详细描述。 b.基于Linux上系统监测的基本原理以及种类: 在Linux系统上的系统监测所采用的方式基本上有两种: 第一种,通过SNMP协议结合数据采集软件来实现: 这种方法所涉及的架构一般包括两部分,其中一部分是被监测服务器,另外一部分则是网管工作站。至于实现方法具体来说就是在Linux服务器上启动 SNMP简

SNMP功能详解

SNMP功能详解 一、什么是SNMP SNMP:“简单网络管理协议”,用于网络管理的协议。SNMP用于网络设备的管理。SNMP的工作方式:管理员需要向设备获取数据,所以SNMP提供了“读”操作;管理员需要向设备执行设置操作,所以SNMP提供了“写”操作;设备需要在重要状况改变的时候,向管理员通报事件的发生,所以SNMP提供了“Trap”操作。 二、SNMP背景 SNMP 的基本思想:为不同种类的设备、不同厂家生产的设备、不同型号的设备,定义为一个统一的接口和协议,使得管理员可以是使用统一的外观面对这些需要管理的网络设备进行管理。通过网络,管理员可以管理位于不同物理空间的设备,从而大大提高网络管理的效率,简化网络管理员的工作。 三、SNMP结构概述 SNMP 被设计为工作在TCP/IP协议族上。SNMP基于TCP/IP协议工作,对网络中支持SNMP协议的设备进行管理。所有支持SNMP协议的设备都提供SNMP这个统一界面,使得管理员可以使用统一的操作进行管理,而不必理会设备是什么类型、是哪个厂家生产的。如下图,

四、SNMP支持的网管操作 对于网络管理,我们面对的数据是设备的配置、参数、状态等信息,面对的操作是读取和设置;同时,因为网络设备众多,为了能及时得到设备的重要状态,还要求设备能主动地汇报重要状态,这就是报警功能。如下图,

?Get:读取网络设备的状态信息。 ?Set:远程配置设备参数。 ?Trap:管理站及时获取设备的重要信息。 五、SNMP的实现结构 在具体实现上,SNMP为管理员提供了一个网管平台(NMS),又称为管理站,负责网管命令的发出、数据存储、及数据分析。被监管的设备上运行一个SNMP 代理(Agent)),代理实现设备与管理站的SNMP通信。如下图,

snmp报文字段分析

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类型

要了解MIB及OID得从SNMP协议说起

要了解MIB及OID得从SNMP协议说起 SNMP协议详解 简单网络管理协议(SNMP:Simple Network Management Protocol)是由互联网工程任务组(IETF:Internet Engineering Task Force )定义的一套网络管理协议。该协议基于简单网关监视协议(SGMP:Simple Gateway Monitor Protocol)。利用SNMP,一个管理工作站可以远程管理所有支持这种协议的网络设备,包括监视网络状态、修改网络设备配置、接收网络事件警告等。虽然SNMP开始是面向基于IP的网络管理,但作为一个工业标准也被 成功用于电话网络管理。 1. SNMP基本原理 SNMP采用了Client/Server模型的特殊形式:代理/管理站模型。对网络的管理与维护是通过管理工作站与SNMP代理间的交互工作完成的。每个SNMP从代理负责回答SNMP管理工作站(主代理)关于MIB定义信息的各种查询。下图10是NMS公司网络产品中SNMP协议的实 现模型。 SNMP代理和管理站通过SNMP协议中的标准消息进行通信,每个消息都是一个单独的数据报。SNMP使用UDP(用户数据报协议)作为第四层协议(传输协议),进行无连接操作。SNMP 消息报文包含两个部分:SNMP报头和协议数据单元PDU。数据报结构如下图 版本识别符(version identifier):确保SNMP代理使用相同的协议,每个SNMP代理都直 接抛弃与自己协议版本不同的数据报。 团体名(Community Name):用于SNMP从代理对SNMP管理站进行认证;如果网络配置成要求验证时,SNMP从代理将对团体名和管理站的IP地址进行认证,如果失败,SNMP从代理将 向管理站发送一个认证失败的Trap消息 协议数据单元(PDU):其中PDU指明了SNMP的消息类型及其相关参数。 2. 管理信息库MIB

实验四SNMP协议工作原理验证与分析

编号:_______________本资料为word版本,可以直接编辑和打印,感谢您的下载 实验四SNMP协议工作原理验证与分析 甲方:___________________ 乙方:___________________ 日期:___________________

一、实验目的 本实验的主要目的是学习捕获SNMP报文,通过分析该报文理 解SNMP协议的工作过程、SNMP的报文结构、MIB-2树的结构、理解管理信息结构SMI及其规定的ASN.1。 二、实验内容 1、分析并验证SNMP协议的工作过程; 2、分析并验证SNMP协议数据单元的格式; 三、实验工具 数据包捕获软件Sniffer、MG — SOFT MIB浏览器。 四、实验步骤 1、从天空教室—网络协议分析的课程资源下载Sniffer学习手册。阅 读Sniffer学习手册,掌握设置过滤器和捕获数据包的基本方法。 2、分别运行软件Sniffer和MIB浏览器; 3、首先设置Sniffer中捕获报文的过滤条件,将其设置为只捕获管理 站和代理之间的SNMP报文。 4、点击Sniffer中工具栏的start capture开始捕获SNMP报文; 5、用MIB浏览器MibBrowser访问另一台计算机(非本机)或路由器的MIB被管对象。 6、单击“Stop and Display按钮,停止抓包,单击窗口左下角“Decode”

选项,观察并分析所捕获的数据。 五、实验报告 在捕获的报文中找出一对 Snmp 请求和响应报文,如 Get request 和 Get response GetNext request 和 Get response^ Set request 和 Get response 1、提交Get 报文截图和Get response^艮文截图,截图内容包括IP 首 部、UDP 首 部、SNMP 首部和BER 编码格式的SNMP 报文结构。如 下图所示 \E >P ?1 DKrfe ANHitK A HoS Ts:4e RMgd E. *汨侦CC / Fw ptejj Fl. ]23 saECfijcI K .-''hapx 17 (CEDP} B7 3D 《L ] ? [1^2 16B 0.1] Damtian * [ 1^2 ISH. D. Z] Ha options 0£F: --■—— VHP ScMir? poi t ,■ 11H DHitinaUaii part - 1G1.[甜NF.I Le>ii ?,Q Oheck-suB ? *Et ■ (1.3.?. 1.2.1.1 .S.0>} (W M B * 0) “Is ? FULL SNMP 首部 BER 编码格式的 SNMP 报文 Ji

相关文档