`
kofsky
  • 浏览: 201583 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论
阅读更多

SNMP目的:提供了统一的、跨平台的设备管理;
SNMP管理的设备包括:主机,路由器、交换机、打印机、HUB等

基于TCP/IP的网络管理包含3个组成部分:
SNMP协议: manager和管理代理之间的通信协议、大多采用UDP
MIB:即管理信息库,就是所有代理进程包含的、并且能够被管理进程进行查询和设置的信息的集合。
SMI:即管理信息结构,对MIB进行规范的标准,比如定义MIB中的变量类型、格式等;功能和作用:给对象命名;定义可在对象中存储的数据类型;给出如何对在网络上传输的数据进行编码的方法

 

1.SNMP协议
SNMP的五种消息类型
SNMPv1中定义了五种消息类型:Get-Request、Get-Response、Get-Next-Request、Set-Request、Trap。
1) get-request操作:从代理进程处提取一个或多个参数值。
2) get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值;
3) set-request操作:设置代理进程的一个或多个参数值。
4) get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的。它是前面3中操作的响应操作。
5) trap 操作:代理进程主动发出的报文,通知管理进程有某些事情发生。


SNMPv2增加了报文格式:
1).GETBULK REQUEST - a faster iterator used to retrieve sequences of management information.
2).INFORM - similar to a TRAP but the receiver must respond with an acknowledgement RESPONSE message.
3).REPORT - definable by an administrative framework.

SNMP管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。Get-Next-Request用于和Get-Request组合起来查询特定的表对象中的列元素。SNMP管理站用Set-Request 可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。SNMP代理使用Trap向SNMP管理站主要发送报告消息,一般用于描述某一事件的发生,比如接口故障(网线断开),重启动等。

 SNMPv2报文格式如下:


2.MIB
包含管理设备及其管理对象的树型结构的信息库。每个SNMP agent都有自己的MIB;管理站有一个全局MIB。MIB对象被划分为若干个组,如,system,interface,address、address translation,IP,ICMP,TCP,UDP,EGP 等。

当对MIB变量进行操作,如查询和设置变量的值时,必须对M I B的每个变量进行标识。每个被管对象都必须有一个全局对象标识符;所有对象标识符在全局上构成一棵对象标识符树;所有SNMP被管对象的标识符以1.3.6.1.2.1开始,即iso.org.dod.internet.mgmt.mib。如下实例:

注:只有叶子结点是可操作的


3.SMI
SMI使用了ASN.1的基本定义,并且新增了几个ASN.1中没有的类型。SMI包括两个简单与结构两种数据类型,其中,简单数据类型7种(前3种为ANS.1定义,后4种为新增),结构数据类型2种。简单数据类型有整形,串,IP地址,计数类型,等;结构化类型是简单类型的组合,一种以类似struct形式的不同简单类型组合,称为sequence;一类是sequence of,类似array形式,相同类型组合。编码的时候采用BER编码法:  每一个数据块被编码成三元组(标记、长度、值)。


1993年发布了SNMPv2,扩充:
1) 在SNMPv2中定义了一个新的分组类型get-bulk-request,它高效率地从代理进程读取大块数据。
2) 另的一个新的分组类型是inform-request,它使一个管理进程可以向另一个管理进程发送信息。
3) 定义了两个新的MIB,它们是:SNMPv2 MIB和SNMPv2-M2M MIB(管理进程到管理进程的MIB)。
4) SNMPv2的安全性比SNMPv1大有提高。在SNMPv1中,从管理进程到代理进程的共同体名称是以明文方式传送的。而SNMPv2可以提供鉴别和加密。


RFC 2271定义的SNMPv3体系结构,体现了模块化的设计思想,可以简单地实现功能的增加和修改。其特点:
1) 适应性强:适用于多种操作环境,既可以管理最简单的网络,实现基本的管理功能,又能够提供强大的网络管理功能,满足复杂网络的管理需求
2) 扩充性好:可以根据需要增加模块
3) 安全性好:具有多种安全处理模块
与SNMPv1和SNMPv2相比,SNMPv3增加了三个新的安全机制:身份验证,加密和访问控制。

 

除SNMP外,OSI还定义了一种网络管理协议CMIP。其命运与OSI模型一样。

 

http://www.anheng.com.cn/news/2926.html
http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol
http://www.cnpaf.net/class/SNMP/
http://net-snmp.cn/


写完了浏览了一下四年前(严格来说是三年半)写的超简单的SNMP报文封装与解析程序,发现自己在c语言功底还是不错,竟然到处都在用指针,许多地方还用了位运算,有点意外。而印象中那时候对指针的认识并非特别的深刻,而且还存在许多误区。现在觉得自己对c语言认识还比较深刻,也许,再过段时间,又会发现现在的认识是比较肤浅的了。希望这样子~~是个好事情,说明认识在上升,自己在进步。

感觉以前的这些代码有几个地方做的非常不好:

1.抽象:完全没有抽象的;像通过标记,长度和数据值生成网络传输的数据项时,其过程都是一致的,可以放到一个函数里面去,而我写了多个极为类似的函数来完成;造成重复代码与重复流程;

2.可读性:有一些注意了,但还不是很好;

3.代码风格:感觉有点乱;而且一个函数写的很长;

4.出错处理:啊。。好像没看到出错处理;

  1. char *oid_construct(char *buffer,int length,int *value)
  2. {
  3.     char *curptr=(char *)buffer;
  4.     (*curptr)=(char)OBJECTIDENTIFIER;
  5.     curptr++;
  6.     (*curptr)=(char)length;
  7.     curptr++;
  8.     for(int i=0;i<length;i++)
  9.         (*(curptr+i))=(char)*(value+i);
  10.     return curptr;
  11. }
  12. void decode_PDU(char *pdu)
  13. {
  14.     char *curptr=pdu;
  15.     int pdu_len;
  16.     curptr++;//第一字节:sequence,略过
  17.     if((*curptr&0x80)!=0) //length
  18.     {
  19.         //长度超过一个字节,目前暂无法处理
  20.         printf("Infomation:Now cannot deal with the PDU that length field over 1 Byte.\n\n");
  21.         exit(0);
  22.     }
  23.     else 
  24.         pdu_len=*curptr; 
  25.     printf("PDU Length:%d.\n",pdu_len);
  26.     curptr+=2;
  27.     int ver=*curptr;
  28.     printf("Version:%d\n",ver);     //version information
  29.     curptr+=3;  
  30.      
  31.     int community_len=*curptr++;  
  32.     printf("Community:");
  33.     for(int i=0;i<community_len;i++)
  34.             printf("%c",*curptr++);  //community
  35.     
  36.     char pdu_type=*curptr;
  37.     printf("\nPDU Type:SNMP Response packet.\n");
  38.     curptr+=2;  //ignore the length after the type information
  39.     curptr++;
  40.     
  41.     int id_len=*curptr++;
  42.     printf("ID:");
  43.     for(int j=0;j<id_len;j++)
  44.             printf("%x",*curptr++);  //id
  45.     curptr++;
  46.     int error_status_len=*curptr++;
  47.     printf("\nError status:");
  48.     for(int k=0;k<error_status_len;k++)
  49.             printf("%x",*curptr++);  //error status
  50.     curptr++;
  51.     int error_index_len=*curptr++;
  52.     printf("\nError index:");
  53.     for(int l=0;l<error_index_len;l++)
  54.             printf("%x",*curptr++);  //error index
  55.     curptr++;
  56.     
  57.     int var_bindings_len=*curptr++;  //variable bindings headers
  58.     curptr++;                        //variable bindings length
  59.     curptr+=2;
  60.     
  61.     int name_len=*curptr++;        //name length
  62.     printf("\nName:1.3");          //name :oid
  63.     curptr++;
  64.     for(int m=1;m<name_len;m++)
  65.     {
  66.         printf(".%x",*curptr++);   
  67.     }
  68.     curptr++;
  69.     int value_len=*curptr++;      //value length
  70.     printf("\nValue:");
  71.     for(int n=0;n<value_len;n++)
  72.     {
  73.         printf("%c",*curptr++);
  74.     }
  75.     printf("\nPacket has been parsed completely."); 
  76. }

 

 

分享到:
评论
1 楼 Share_word 2012-02-17  
                      

相关推荐

    SnmpWalk.zip_SNMP_snmp WALK_snmpwalk _snmpwalk实现

    SNMP(简单网络管理协议)是一种广泛用于网络设备管理的标准协议,它允许网络管理员远程监控和配置网络设备。`snmpwalk`是SNMP工具箱中的一个重要命令行工具,用于遍历网络设备上的MIB(Management Information Base...

    qt-snmp.zip_linux snmp_qt snmp_snmp QT_snmp++_snmp++ qt

    QT SNMP库是一个用于在Qt应用程序中实现简单网络管理协议(SNMP)功能的开源库。SNMP是一种广泛使用的网络管理协议,它允许管理员监控和管理网络设备,如路由器、交换机、服务器等。QT SNMP库使得开发人员能够在...

    SNMP测试工具,snmp tester

    SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备管理的标准协议,它允许网络管理员远程监控和管理网络设备,如路由器、交换机、服务器等。SNMP测试工具,如Paessler SNMP ...

    snmp_Java进行SNMP通信_SNMP协议_snmp配置_常用OID_snmp.jar_snmp4j_.jar

    这是我学习SNMP从零开始的学习资料,因为这方面的资料网上比较少,现拿出来和大家分享! 目录: docs_1.4.1 jar/jpcap.jar jar/SNMP4J.jar jar/snmp4jclt-1.2.1.zip jar/snmp.jar 基于java的Oid获取软件.rar Java...

    snmp4j.rar_SNMP_SNMP4J.jar_snmp4j的jar包_网络设备监控

    SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备监控的标准协议,它允许网络管理员远程管理和监控网络设备的状态,如路由器、交换机、服务器等。SNMP4J是一个Java实现的SNMP...

    net-snmp,snmpwalk(windows最新版本)

    该工具是运行于windows平台的exe可执行文件,跟linux平台的snmpwalk功能类似,使用方法:cmd→cd到该exe文件的目录→snmpwalk.exe + option(通过snmpwalk.exe -h可以获得相关参数及运用方法,包括version、...

    snmp5.7.2安装部署

    SNMP 5.7.2 安装部署详解 SNMP(Simple Network Management Protocol,简单网络管理协议)是一种应用层协议,用于管理互联网上众多厂家生产的软硬件平台。SNMP 的目标是管理互联网上的网络设备,监测连接到网络上的...

    SNMP Tester 5.2.1(SNMP协议测试软件)

    SNMP (Simple Network Management Protocol) 是一种广泛应用于网络设备管理的标准协议,允许网络管理员远程监控和配置网络设备。SNMP Tester 5.2.1 是一个专门用于测试SNMP协议功能的工具,它能帮助用户确保SNMP协议...

    基于SNMP4J的SNMP操作实现代码

    SNMP(Simple Network Management Protocol)是一种广泛用于网络设备管理的标准协议,它允许网络管理员远程监控和配置网络设备。SNMP4J是一个Java库,为SNMP协议提供了全面的支持,包括v1、v2c和v3这三个版本。本文...

    snmp4j实现snmp trap 发送与接收

    SNMP4J 实现 SNMP Trap 发送与接收 SNMP(Simple Network Management Protocol,简易网络管理协议)是一种广泛应用于网络管理的协议,SNMP4J 是一个基于 Java 的 SNMP 库,提供了完整的 SNMP 功能实现。本文将详细...

    net-snmp-5.9.4

    SNMP(简单网络管理协议)是Internet上广泛使用的网络管理协议,它为网络设备提供了标准化的管理和监控方式。net-snmp项目是SNMP协议的一个开源实现,版本5.9.4则是该项目的一个稳定版本,具有强大的功能和广泛的...

    snmptest测试工具

    SNMP测试工具,如“snmptest”,是用于验证SNMP功能是否正常运作的软件,帮助网络管理员检查设备的SNMP配置、性能和故障排查。 snmptest工具通常是命令行界面的,它提供了一系列的功能来交互地与SNMP兼容的设备通信...

    C语言实现的snmp服务源码

    在IT领域,SNMP(简单网络管理协议)是一种广泛用于管理网络设备的标准协议。它允许网络管理员监控和配置网络设备,如路由器、交换机、服务器等。C语言是编程领域中的基础语言,其效率高、灵活性强,因此常被用来...

    net-snmp使用说明

    snmpd 是一个 SNMP 代理进程,能够响应 SNMP 请求并提供相关信息。 Net-SNMP 提供的查询工具有很多,以下将介绍常用的几个。基本的查询命令格式为:snmpwalk [APPLICATION OPTIONS] [COMMON OPTIONS] [OID] ...。...

    SNMP_WALK获取SNMP协议oid的非常好用的工具

    SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备监控和管理的协议。它允许网络管理员远程收集和配置网络设备的信息,如路由器、交换机、服务器等。"SNMP_WALK"是利用SNMP...

    snmp4j包来读取snmp协议数据

    SNMP(Simple Network Management Protocol,简单网络管理协议)是一种广泛应用于网络设备管理的协议,它允许网络管理员远程监控和管理网络设备。在Java环境中,SNMP4J库为开发者提供了便利,可以用来读取和操作SNMP...

    SNMP实例大全--snmp4j(get ,trap,set,取mib)

    SNMP(Simple Network Management Protocol)是一种广泛用于网络设备管理的协议,它允许网络管理员远程监控和配置网络设备。本文将详细介绍SNMP实例,特别是通过Java库snmp4j实现的GET、GETNEXT、SET操作以及TRAP...

    snmp.rar_SNMP_linux snmp_linux snmp++_snmp精简

    SNMP(简单网络管理协议)是网络管理员用来监控和管理网络设备的标准协议,它允许远程收集和配置网络设备的信息。在Linux系统中,SNMP的使用可以帮助我们有效地管理和监控服务器、路由器、交换机等网络设备。这个...

    Paessler SNMP Tester 中文版

    **SNMP(简单网络管理协议)** SNMP(Simple Network Management Protocol)是一种广泛应用于网络设备管理的协议,它允许管理员远程监控和管理网络设备,如路由器、交换机、服务器和其他支持SNMP的设备。SNMP协议...

    windows10/11-snmp离线安装包文件-离线安装snmp方案

    SNMP(Simple Network Management Protocol)是一种广泛用于网络设备管理的标准协议,它允许管理员远程监控和配置网络设备,如路由器、交换机、服务器等。在Windows 10或11操作系统中,SNMP服务可以用来管理和监控...

Global site tag (gtag.js) - Google Analytics