SNMP协议总结

说明:本文仅供学习交流,转载请标明出处,欢迎转载!

        SNMP(Simple Network Management Protocal),简单网络管理协议,其前身是SGMP协议(简单网关监控协议),该协议的作用是对网络上的设备进行监视管理,是一种应用层协议。

        基于TCP/IP的网络管理包括两个部分:网络管理器(也叫管理进程,manager)和被管设备(代理),被管设备对应的进程称为代理进程。管理器控制盒监视着一组代理,通常情况下,管理器是主机,代理是路由器或服务器。代理把相关性能信息存储在数据库中,管理器可以获取或修改该数据库的值。管理器和被管设备之间的通信主要包括以下是三个方面:

        1.管理器向代理请求获取某信息。

        2.管理器向代理请求设置代理数据库中的某些值,以便强迫代理完成某个任务。

        3.代理向管理器发送异常情况的警告。

        网络管理的三个重要组成部分:SMI,MIB,SNMP

        SMI:管理信息结构,主要作用是:(1)定义了对象命名的规则;(2)定义了类型规则;(3)定义了编码方法。

        MIB:管理信息库,主要作用是:定义了类型对象的实体。

        SNMP:定义了管理器与代理交互的分组格式。

        为了更好地理解这三个网络管理构件,我们将其与编程语言类比:SMI相当于语法,MIB相当于对象的申明与定义,SNMP相当于程序编码

      下面简单介绍下着几个构件.

       SMI 管理信息结构

       SMI使用了抽象语法标记1(由ISO指定的ASN.1)来定义数据类型。 

       对象命名规则:通过对象命名树来约定命名规则,SMI使用了对象标识符,所有被SNMP管理的对象都要赋予一个对象标识符,这个对象对于命名树中的iso.org.dod.internet.mgmt.mib-2,数字表示为1.3.6.1.2.1,对象标识符以1.3.6.1.2.1开始

        类型:包括简单数据类型相当于C内置类型)和结构化数据类型,而结构化数据类型包括sequence类型相当于C语言中struct定义的类型)和sequence of类型(相当于C语言中的数组)。

        编码方法:SMI采用了BER(Basic Encoding Rules,基本编码规则),BER指明数据可用一个三元组(标记、长度、值)表示,每一种数据类型对应一个唯一的标记和长度,如整形INTEGER对应的标记为0000 0010,其长度为4B,可用表示为0000 0100。

       MIB 管理信息库

       管理信息库定义了因特网上被管对象的集合,下面简单介绍下MIB2(版本2)。每个代理都有它自己的MIB2,包含了管理器能够管理的所有对象的集合。MIB2包括:sys(system,系统)、if(iterface,接口)、at(address translation,地址转换)、ip、icmp、tcp、udp和snmp。

       如何访问MIB变量呢? 以udp为例,来分析下简单变量的访问方式。首先我们必须知道变量和实例的区别,我们可以把变量看成一种命名规则,而实例就是一个对象,若当前的结点为叶子结点,则可以表示成一个变量,若为非叶子结点,则对应一个表。对于简单变量的访问(如udpInDatagrams)其id为1.3.6.1.2.1.7.1,则该变量的实例为id.0,即1.3.6.1.2.1.7.1.0,对于表的访问,如在我们的命名树中有这样的分支udpTable-->udpEntry--->(udpLocalAddress,udpLocalPort),先说下对应的数字,udp对应7,udpTable对应5,udpEntry对应1,udpLocalAddress对应1,udpLocalPort对应2,在任何时候,要访问表中的某个特定实例(行),我们应该访问id+索引,这里的索引是本地IP/本地端口号,例如对于套接字181.23.45.14.23, 

       获取其ip地址的方法是1.3.6.1.2.1.7.5.1.1.181.23.45.14.23, 

       获取其端口号的方法为1.3.6.1.2.1.7.5.1.2.181.23.45.14.23。

       重要的是,实例标识符(id+索引)是按照字典序排列的,对于表的排序,采用的“先列后行”的规则排列,也就是说在访问的时候,先按照列的顺序走。

       SNMP

       SNMP应用程序的主要作用是使得管理器和代理之间相互通信,以达到网络管理的功能。SNMPv3在之前的版本上添加了两个特性不同级别的安全和远程管理

       PDU:SNMPv3定义了8种类型的PDU,分别是GetRequestGetNextRequestGetBulkRequestSetRequestResponseTrapInformRequestReport

       GetRequest:管理器发给代理,用于读取一个变量或一组变量的值。

       GetNextRequest:管理器发给代理读取下一个变量值。

       GetBulkRequest:管理器发给代理,读取块请求。

       SetRequest:管理器发给代理,用于设置变量的值。

       Response:代理发给管理器,响应其请求。

       Trap:代理发给管理器,用来报告事件。

       InformRequest:管理器发给另一个远程管理器,获取某些变量的值。

       Report:管理器发给另一个远程管理器,报告其差错。

       SNMP使用的UDP端口

        代理(相当于服务器)使用的是161管理器(相当于代理)使用的是162

        注意:这两个端口号只在用于向对方主动发送报文时,在报文中设置目的端口号。而对于被动响应报文,则端口号使用主动请求方使用的临时端口号。

参考文献:

[1]《TCP/IP协议族 第四版 王海等译》

[2]《计算机网络 第5版》

[3]《TCP/IP详解 卷1:协议》

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以利用SNMP协议读取交换机的信息。SNMP(Simple Network Management Protocol)是一种用于网络管理的协议,它允许管理者通过网络获取设备的运行状态、配置信息等。 Python提供了多个库用于实现SNMP协议的读取,其中最常用的是PySNMP。PySNMP是一个强大且易于使用的Python库,可以用于通过SNMP获取交换机的信息。 使用PySNMP,我们可以通过以下步骤读取交换机的信息: 1. 安装PySNMP库:可以使用pip工具在命令行中执行"pip install pysnmp"来安装PySNMP库。 2. 导入必要的模块:在Python代码中,我们需要导入一些PySNMP相关的模块,如pysnmp.hlapi。 3. 配置SNMP连接:需要指定交换机的IP地址和SNMP团体名(community string)来建立SNMP连接。 4. 定义SNMP请求:可以使用getCmd或nextCmd函数来定义SNMP请求。getCmd用于获取单个对象的值,而nextCmd用于获取多个对象的值。 5. 处理SNMP响应:对于每个SNMP请求,我们需要处理返回的SNMP响应。可以使用for循环遍历每个响应,并提取所需的数据。 6. 打印或处理数据:根据需求,可以将获取到的交换机信息打印出来,或者进行其他的处理操作。 总结起来,Python利用SNMP协议读取交换机的步骤包括安装PySNMP库、导入模块、配置SNMP连接、定义SNMP请求、处理SNMP响应和打印/处理数据。通过这些步骤,我们可以方便地获取交换机的各种信息,如端口状态、MAC地址表、VLAN配置等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值