SMI in SNMP

SNMP中,数据类型并不多。这里我们就讨论这些数据类型,而不关心这些数据类型在实际中是如何编码的。
INTEGER
一个变量虽然定义为整型,但也有多种形式。有些整型变量没有范围限制,有些整型变量定义为特定的数值(例如,IP的转发标志就只有允许转发时的或者不允许转发时的这两种),有些整型变量定义一个特定的范围(例如,UDP和TCP的端口号就从0到65535)。
OCTERSTRING
0或多个8bit字节,每个字节值在0~255之间。对于这种数据类型和下一种数据类型的BER编码,字符串的字节个数要超过字符串本身的长度。这些字符串不是以NULL结尾的字符串。
DisplayString
0或多个8bit字节,但是每个字节必须是ASCII码。在MIB-II中,所有该类型的变量不能超过255个字符(0个字符是可以的)。
OBJECTIDENTIFIER
NULL
代表相关的变量没有值。例如,在get或get-next操作中,变量的值就是NULL,因为这些值还有待到代理进程处去取。
IpAddress
4字节长度的OCTERSTRING,以网络序表示的IP地址。每个字节代表IP地址的一个字段。
PhysAddress
OCTERSTRING类型,代表物理地址(例如以太网物理地址为6个字节长度)。
Counter
非负的整数,可从0递增到232—1(4294976295)。达到最大值后归0。
Gauge
非负的整数,取值范围为从0到4294976295(或增或减)。达到最大值后锁定直到复位。例如,MIB中的tcpCurrEstab就是这种类型的变量的一个例子,它代表目前在ESTABLISHED或CLOSE_WAIT状态的TCP连接数。
TimeTicks
时间计数器,以0.01秒为单位递增,但是不同的变量可以有不同的递增幅度。所以在定义这种类型的变量的时候,必须指定递增幅度。例如,MIB中的sysUpTime变量就是这种类型的变量,代表代理进程从启动开始的时间长度,以多少个百分之一秒的数目来表示。
SEQUENCE
这一数据类型与C程序设计语言中的“structure”类似。一个SEQUENCE包括0个或多个元素,每一个元素又是另一个ASN.1数据类型。例如,MIB中的UdpEntry就是这种类型的变量。它代表在代理进程侧目前“激活”的UDP数量(“激活”表示目前被应用程序所用)。在这个变量中包含两个元素:
IpAddress类型中的udpLocalAddress,表示IP地址。
INTEGER类型中的udpLocalPort,从0到65535,表示端口号。
SEQUENDEOF
这是一个向量的定义,其所有元素具有相同的类型。如果每一个元素都具有简单的数据类型,例如是整数类型,那么我们就得到一个简单的向量(一个一维向量)。但是我们将看到,SNMP在使用这个数据类型时,其向量中的每一个元素是一个SEQUENCE(结构)。因而可以将它看成为一个二维数组或表。

### SNMP协议的工作原理概述 SNMP(简单网络管理协议,Simple Network Management Protocol)是一种用于管理和监控网络设备的标准协议[^2]。它允许网络管理员通过单一工作站实现对计算机、路由器以及其他网络设备的远程管理和监视功能[^3]。 #### 协议组成 SNMP 的核心组成部分包括三个部分: - **SNMP 管理实体**:通常运行在网络管理工作站上,提供一种界面供网络管理员操作并发送请求给被管理设备[^5]。 - **SNMP 被管理实体**:指代的是各种网络设备上的 SNMP 代理程序 (Agent),它们负责响应来自管理实体的查询,并报告本地的状态数据[^1]。 - **网络管理协议**:这是管理实体与被管理设备之间交互的具体规范,其中包括 MIB(管理信息库)、SMI(结构化管理信息)以及 SNMP 自身的消息格式和操作机制。 #### 工作流程描述 SNMP 主要依赖于两种基本的操作模式来执行其职责——轮询模型和事件驱动模型: 1. **轮询方式**: 在这种情况下, 网络管理系统定期向各个受控节点发出询问命令以获取最新状况的数据包丢失率或者 CPU 使用情况等等指标值。 这种方法虽然可靠但可能带来较大的带宽消耗特别是在大规模复杂环境中。 2. **陷阱消息(Trap)**: 另一方面当某些特定条件满足时比如接口失效或温度过高,则目标装置会主动通知管理中心这就是所谓的 “trap” 技术 。 它减少了不必要的通讯量同时也提高了实时性反应速度. 另外值得注意的是随着版本迭代发展至 v3 版本之后引入了更高级别的安全性特性如认证加密等功能从而增强了整个系统的健壮性和保密程度[^4]. ```python # 示例 Python 实现简单的 SNMP GET 请求 from pysnmp.hlapi import * errorIndication, errorStatus, errorIndex, varBinds = next( getCmd(SnmpEngine(), CommunityData('public'), UdpTransportTarget(('demo.snmplabs.com', 161)), ContextData(), ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0))) if errorIndication: print(errorIndication) else: for varBind in varBinds: print(' = '.join([x.prettyPrint() for x in varBind])) ``` 上述脚本展示了如何利用 PySNMP 库发起一次基础的读取系统描述符的信息调用过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值