Snmp学习笔记

Snmp学习笔记

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

相关链接:
Snmp学习笔记
使用snmp4j实现Snmp功能(一)
使用snmp4j实现Snmp功能(二)
使用snmp4j实现Snmp功能(三)

SNMP是英文“Simple Network Management Protocol”的缩写,中文意思是“简单网络管理协议”。SNMP是眼下最经常使用的环境管理协议。SNMP被设计成与协议无关,所以它能够在IP,IPX,AppleTalk,OSI以及其它用到的传输协议上被使用。SNMP是一系列协议组和规范,它们提供了一种从网络上的设备中收集网络管理信息的方法。SNMP也为设备向网络管理工作站报告问题和错误提供了一种方法。
    眼下,差点儿全部的网络设备生产厂家都实现了对SNMP的支持。领导潮流的SNMP是一个从网络上的设备收集管理信息的公用通信协议。设备的管理者收集这些信息并记录在管理信息库(MIB)中。这些信息报告设备的特性、数据吞吐量、通信超载和错误等。MIB有公共的格式,所以来自多个厂商的SNMP管理工具能够收集MIB信息,在管理控制台上呈现给系统管理员。
    SNMP提供了一种统一的、跨平台的设备管理办法。

概念太抽象,先来看一个样例。
我们来做一个最简单的Snmp操作:获取一台机器的机器名,如果其IP是192.168.1.1。
    首先要给192.168.1.1安装Snmp环境。Window组件的管理监视工具里包括Snmp,仅仅须要安装一下就能够了。Snmp默认的通信port是161/162,有的系统须要手动设置,这个能够通过创建筛选器列表来实现,详细怎么设置网上非常多,大家能够去搜索一下。另外须要关闭192.168.1.1的防火墙。

接下来须要一个可以进行Snmp通信的工具,比較简单的有snmputil,大家可以去网上下载。
snmputil的命令规则是:
snmputil [get|getnext|walk] agent community oid [oid …]
[get|getnext|walk]为消息类型,我们此次进行的操作是get
agent指Snmp代理即你想进行操作的网络设备的ip或名称,即192.168.1.1
community:分区域,即password,默认是public
oid:想要操作的MIB数据对象号,设备名称相应的MIB对象号是.1.3.6.1.2.1.1.5.0

打开命令行窗体,进入snmputil所在路径,键入
snmputil get 192.168.1.1 public .1.3.6.1.2.1.1.5.0
假设參数都正确,控制台就会显示出192.168.1.1的机器名。

不知道如今大家对snmp有没有一个感性的认识,通过get、set这种操作,我们就能够读取、控制网络设备了。

接下来学习一下和Snmp有关的基本概念吧

代理和管理站的模型

Snmp分2种角色:SNMP管理站(manager,我们的本机127.0.0.1)和SNMP代理(agent,我们操作的机器,比方192.168.1.1)。代理是实际网络设备中用来实现SNMP功能的部分。代理在UDP的161port接收NMS的读写请求消息,管理站在UDP的162port接收代理的事件通告消息。所以,一旦获取设备的訪问权限(community,默觉得public),就能够訪问设备信息、改写和配置设备參数。因为採用UDP协议,不须要在代理和管理站之间保持连接。

SNMP的操作命令

SNMP协议之所以易于使用,这是由于它对外提供了三种用于控制MIB对象的基本操作命令。它们是:Get、Set 和 Trap。

Get:管理站读代替理者处对象的值。它是SNMP协议中使用率最高的一个命令,由于该命令是从网络设备中获得管理信息的基本方式。

Set:管理站设置代理者处对象的值。它是一个特权命令,由于能够通过它来修改设备的配置或控制设备的运转状态。它能够设置设备的名称,关掉一个port或清除一个地址解析表中的项等。

Trap:代理者主动向管理站通报重要事件。它的功能就是在网络管理系统没有明白要求的前提下,由管理代理通知网络管理系统有一些特别的情况或问题发生了。假设发生意外情况,客户会向server的162port发送一个消息,告知server指定的变量值发生了变化。通常由server请求而获得的数据由server的161port接收。Trap 消息能够用来通知管理站线路的故障、连接的终端和恢复、认证失败等消息。管理站可对应的作出处理。

SNMP的命令和报文

SNMP协议定义了数据包的格式,及网络管理员和管理代理之间的信息交换,它还控制着管理代理的MIB数据对象。因此,可用于处理管理代理定义的各种任务。
    一条SNMP报文由三个部分组成:版本号域(version field),分区域(community field)和SNMP协议数据单元域(SNMP protocol data unit field),数据包的长度不是固定的。
    版本号域:这个域用于说明如今使用的是哪个版本号的SNMP协议。眼下,version 1是使用最广泛的SNMP协议。
    分区域:分区(community)是主要的安全机制,用于实现SNMP网络管理员訪问SNMP管理代理时的身份验证。相似于password,默认值为public。分区名(Community name)是管理代理的口令,管理员被同意訪问数据对象的前提就是网络管理员知道网络代理的口令。假设把配置管理代理成能够运行Trap命令,当网络管理员用一个错误的分区名查询管理代理时,系统就发送一个autenticationFailure trap报文。

PDU  : 协议数据单元。是SNMP消息中的数据区, 即Snmp通信时报文数据的载体。

MIB  : 管理信息库

管理信息数据库(MIB)是一个信息存储库,它包括了管理代理中的有关配置和性能的数据,有一个组织体系和公共结构,当中包括分属不同组的很多个数据对象。
    MIB数据对象以一种树状分层结构进行组织,这个树状结构中的每一个分枝都有一个专用的名字和一个数字形式的标识符。结构树的分枝实际表示的是数据对象的逻辑分组。而树叶,有时候也叫节点(node),代表了各个数据对象。在结构树中使用子树表示添加�的中间分枝和添加�的树叶。
    使用这个树状分层结构,MIB浏览器能够以一种方便并且简洁的方式訪问整个MIB数据库。MIB浏览器是这样一种工具,它能够遍历整棵MIB结构树,通常以图形显示的形式来表示各个分枝和树叶对象。能够通过其数字标识符来查找MIB中的数据对象,这个数字标识符号从结构树的顶部(或根部)開始,直到各个叶子节点(即数据对象)为止。这样的訪问方式和文件系统的组织方式一致。两者的主要差别在于文件系统中的路径名能够以绝对也能够以相对方式表示,而MIB数据对象仅仅能以绝对方式表示,不能使用相对方式。
    每一个节点都有一个对象标识符(OID)来唯一的标识,每一个节点用数字和字符两种方式显示,当中对象标识符OID是由句点隔开的一组整数,也就是从根节点通向它的路径。一个带标号节点能够拥有包括其他带标号节点为它的子树,假设没有子树它就是叶子节点,它包括一个值并被称为对象。比方网络设备名的oid是.1.3.6.1.2.1.1.5.0,其值为设备名称的字符串。
    网络资源被抽象为对象进行管理。但SNMP中的对象是表示被管资源某一方面的数据变量。对象被标准化为跨系统的类,对象的集合被组织为管理信息库(MIB)。MIB作为设在代理者处的管理站訪问点的集合,管理站通过读取MIB中对象的值来进行网络监控。管理站能够在代理者处产生动作,也能够通过改动变量值改变代理者处的配置。

以上就是一些Snmp最基本概念了,更深入的应用下次讲!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118839.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mybatis xml 格式化时间查询

    mybatis xml 格式化时间查询格式化到时分秒也可以到天<iftest=”beginTime!=null”>andDATE_FORMAT(send_time,’%Y-%m-%d%H:%M:%S’)&gt;=DATE_FORMAT(#{beginTime},’%Y-%m-%d%H:%M:%S’)</if><iftest=”endTime!=null”&g…

    2022年7月16日
    75
  • react路由权限设置

    react路由权限设置说明在react项目中有时我们的一些页面需要权限才能访问,这里以需要登录才能访问进行的设置在这里可以看到权限页面和关于页面是需要登录才能访问的importReact,{Component,useState,useEffect,useRef}from’react’;import{HashRouterasRouter,Route,NavLink,Redirect,Switch,useHistory}from”react-router-dom”;classAPP

    2022年5月6日
    175
  • PDF工具_PDF editor

    PDF工具_PDF editor《Linux多线程服务端编程——使用muduoC++网络库》这本书是我自己用LaTeX排版的,在排版过程中也积累了一些小工具,今天把其中几个发布出来。这几个工具都直接基于开源的iText库,可从 http://itextpdf.com/ 下载。下载Groovy版本位于 https://github.com/chenshuo/typeset/tree/master/tools

    2025年8月28日
    6
  • java的二维数组讲解_javalambda表达式语法

    java的二维数组讲解_javalambda表达式语法1、二维数组概述1、二维数组其实就是一个特殊的一维数组,一维数组中每个元素就是一个一维数组2、三维数组又是一个特殊的二维数组2、二维数组的定义int[][]a=newint[10][10];String[][]b=newString[10][10];3、初始化二维数组//静态初始化int[][]a={{1,2,3,4},{4,5,6,7},{8,9,10,11}};//动态初始化

    2025年7月25日
    4
  • MySQL timestampdiff()函数返回两个时间之间的差值「建议收藏」

    MySQL timestampdiff()函数返回两个时间之间的差值「建议收藏」TIMESTAMPDIFF(unit,begin,end);TIMESTAMPDIFF函数返回begin-end的结果,其中begin和end是DATE或DATETIME表达式。TIMESTAMPDIFF函数允许其参数具有混合类型,例如,begin是DATE值,end可以是DATETIME值。如果使用DATE值,则TIMESTAMPDIFF函数将其视为时间部分为“00:00:00”的DATETIME值。unit参数是确定(end-begin)的结果的单位,表示为整数。以下是有效单位:MI

    2022年5月6日
    217
  • 使用VS GDB扩充套件在VS上远端侦错Linux上的C/C++程序

    在Linux上开发C/C++程序,或许你会直接(本机或远端)登入Linux,打开编辑器写完代码后,就用gcc/g++来编译,遇到要除错(debug)的时候,则会选择使用gdb来进行除

    2021年12月21日
    146

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号