网络自动化运维教程 课件 项目5、6 使用PySNMP获取网络数据、使用NETCONF协议配置网络_第1页
网络自动化运维教程 课件 项目5、6 使用PySNMP获取网络数据、使用NETCONF协议配置网络_第2页
网络自动化运维教程 课件 项目5、6 使用PySNMP获取网络数据、使用NETCONF协议配置网络_第3页
网络自动化运维教程 课件 项目5、6 使用PySNMP获取网络数据、使用NETCONF协议配置网络_第4页
网络自动化运维教程 课件 项目5、6 使用PySNMP获取网络数据、使用NETCONF协议配置网络_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目5使用PySNMP获取网络数据项目5使用PySNMP获取网络数据5.1SNMP介绍5.2PySNMP的方法5.3任务实施5.1SNMP介绍随着网络规模越来越庞大,网络中不同种类、不同厂家、不同型号设备共存,网络管理繁琐低效。为解决这个问题,SNMP(SimpleNetworkManagementProtocol,简单网络管理协议)应运而生,规范了网络管理的接口和协议,实现对网络中所有设备的统一管理。为应对网络中复杂多变的运维需求,工程师有必要具备代码编程能力以提高运维效率。Python中的PySNMP模块可以实现SNMP功能,是工程师提升运维能力的有力工具。1SNMP概述5.1SNMP介绍互联网工程任务组(IETF,InternetEngineeringTaskForce)定义了SNMP(简单网络管理协议),以此实现设备统一管理。所有支持SNMP协议的网络设备,都可将其统一纳入管理。2SNMP概述5.1SNMP介绍SNMP的发展经历了SNMPv1,SNMPv2c,SNMPv3,这是一个不断完善改进的过程。3SNMP概述SNMPv1协议SNMP的最初版本,容易实现且成本低。缺少大量读取数据的能力,没有足够的安全机制。适合规模较小,设备较少,安全性要求不高或本身就比较安全的网络,如校园网,小型企业网。SNMPv2扩充了SNMPv1的功能,增加GetBulk和inform操作。没有足够的安全机制。适合规模较大,设备较多,安全性要求不高或本身就比较安全,但业务比较繁忙,有可能发生流量拥塞的网络。SNMPv3增加了身份验证和加密处理。新的SNMP体系结构,适应性强、方便管理、扩展性好。适合各种规模,尤其是对安全性要求较高,只有合法的管理员才能对设备进行管理的网络。5.1SNMP介绍NMS(NetworkManagementSystem):采用SNMP协议对网络设备进行管理的系统。Agent:被管理设备中的一个代理进程,与NMS进行交互。MIB(Managementinformationbase):被管理设备所维护的变量(能够被Agent查询和设置的信息)构成的数据库。Managementobject:被管理对象,如设备中的某个硬件(如接口板),也可以是在硬件或软件上配置的参数集合。Device:被管理设备。4SNMP原理5.1SNMP介绍MIB是一个数据库,指明了被管理设备所维护的变量(即能够被Agent查询和设置的信息)。MIB在数据库中定义了被管理设备的一系列属性:对象标识符(ObjectIDentifier,OID)对象的状态对象的访问权限对象的数据类型等MIB给出了一个数据结构,包含了网络中所有可能的被管理对象的集合。因为数据结构与树相似,MIB又被称为对象命名树。5SNMP原理-MIB5.1SNMP介绍NMS通过SNMPv3向被管理设备下发查询和设置操作指令,并接收操作响应信息,同时监听被管理设备发送的告警信息。6SNMP原理–基本操作5.1SNMP介绍SNMP在执行Get、Set等基本操作时面临安全威胁,SNMPv3版本较v1,v2c在安全性方面做了提升。SNMPv1\v2c使用团体名进行安全认证。存在以下安全风险:大多数网络产品出厂时设定只读团体名缺省值为“Public”,读写操作团体名缺省值为“Private”。许多网络管理人员从未修改过该默认值。团体名在网络中明文传输,易泄露。SNMPv3安全性增强:7SNMP原理–安全性基本概念:用户组(Group):拥有特定安全级别属性的一个用户集合。安全级别:1级:privacy(鉴权且加密)2级:authentication(只鉴权)3级:noauthentication(不鉴权不加密)视图(View):允许用户访问的mib节点集合。用户安全模块USM(User-basedSecurityModel):身份验证:Agent或NMS接到信息时首先必须确认信息是否来自有权限的NMS或Agent,并且信息在传输过程中未被改变。数据加密:通过对称密钥系统,NMS和Agent共享同一密钥对数据进行加密和解密。基于视图的访问控制模块VACM:对用户组实现基于视图的访问控制5.1SNMP介绍如下拓扑,配置路由器AR18SNMP原理–被管理设备配置<Huawei>system-viewEntersystemview,returnuserviewwithCtrl+Z.[Huawei]sysnameR1[R1]intg0/0/1[R1-GigabitEthernet0/0/1]ipaddress0024[R1-GigabitEthernet0/0/1]quit接口配置5.1SNMP介绍配置路由器SNMP9SNMP原理–被管理设备配置#使能SNMP功能,配置版本为v3[R1]snmp-agent[R1]snmp-agentsys-infoversionv3#配置SNMPv3组名为test,加密认证方式为privacy[R1]snmp-agentgroupv3testprivacy#创建SNMPv3用户,名为R1同时配置认证和加密密码为Huawei12#$[R1]snmp-agentusm-userv3R1testauthentication-modemd5Huawei12#$privacy-modeaes128Huawei12#$#创建名为param的Trap参数信息,securityname为sec[R1]snmp-agenttarget-hosttrap-paramsnameparamv3securitynamesecprivacy#设置SNMP告警主机地址为00[R1]snmp-agenttarget-hosttrap-hostnamenmsaddress00trap-paramsnameparam#打开告警开关,设置发送告警的源接口为GE0/0/1,最后的命令是打开设备的所有告警开关[R1]snmp-agenttrapsourceGigabitEthernet0/0/1[R1]snmp-agenttrapenable项目5使用PySNMP获取网络数据5.1SNMP介绍5.2PySNMP的方法5.3任务实施5.2PySNMP方法PySNMP是python的第三方模块,实现了SNMP

v1/v2c/v3的所有功能,最新版本为v4.4.12。使用者可以使用python语言,利用该模块实现SNMP的所有操作。PySNMP提供了简单易用的高层封装接口,用来简化工程师的编码过程,提高其效率。PIP国内源安装PySNMP:查看PySNMP版本,当前版本为4.4.121PySNMP模块C:\Users\Administrator>pipinstallpysnmp-i/pypi/simple/--trusted-hostC:\Users\Administrator>pythonPython3.9.6(tags/v3.9.6:db3ff76,Jun282021,15:26:21)[MSCv.192964bit(AMD64)]onwin32Type"help","copyright","credits"or"license"formoreinformation.>>>importpysnmp>>>pysnmp.__version__'4.4.12'5.2PySNMP方法PySNMP高层接口实现SNMPv3基本操作涉及的类有SnmpEngine类,UsmUserData类,UdpTransportTarget类,ContextData类,ObjectIdentity类,ObjectType类;涉及的方法有getCmd,setCmd,nextCmd,bulkCmd,sendNotification。2PySNMP模块类和方法5.2PySNMP方法SnmpEngine类:PySNMP模块中的一个核心对象,PySNMP实现所有SNMP操作都涉及SnmpEngine类实例。使用方法:UsmUserData类:PySNMP模块对SNMPv3用户安全模块USM的实现。可以利用该类创建SNMPv3用户及其对应的认证与加密算法。使用方法:3PySNMP模块类和方法5.2PySNMP方法UdpTransportTarget类:包含被管理设备IP地址和端口号的类。使用方法:ContextData类:表示SNMP上下文信息的类。使用方法:ObjectIdentity类:表示MIB节点OID的类。使用方法:ObjectType类:表示MIB节点的类,使用ObjectIdentity对象进行初始化。使用方法:4PySNMP模块类和方法5.2PySNMP方法getCmd方法:实现SNMPGet操作类型的方法,返回值是一个生成器。方法声明:getCmd(snmpEngine,authData,transportTarget,contextData,*varBinds)。使用方法:5PySNMP模块类和方法项目5使用PySNMP获取网络数据5.1SNMP介绍5.2PySNMP的方法5.3任务实施5.3任务实施按照公司的整体网络规划,运维工程师将通过PySNMP获取路由器SZ1和SZ2数据,包括每台路由器的sysname、接口数目、接口类型、接口IP地址和掩码、路由目标、路由下一跳。需要完成的任务如下。

(1)配置SNMPv3。

(2)通过MIB管理工具获取OID。

(3)编写Python脚本。

(4)运行Python脚本。项目6使用NETCONF协议配置网络项目6使用NETCONF协议配置网6.1NETCONF协议6.2NETCONF配置6.3Pythonncclient模块6.4数据模型YANG6.5任务实施6.1NETCONF协议2003年5月,IETF成立NETCONF工作组,提出了基于XML的网络配置协议。

最新的NETCONF标准是2011年6月发布的RFC6241和RFC6242。在NETCONF定义中使用了三种传输协议,分别是SOAP、BEEP和SSH。RFC6242更新了基于SSH的传输模式。目前使用最为广泛的也是SSH协议,其使用TCP端口830作为其默认的通信端口。由于XML可以表达复杂的、模块化的管理对象以及具有内在的逻辑关系等特点,NETCONF协议完全基于XML来表示配置数据和协议消息内容。对于NETCONF中XML的数据结构的定义,RFC6242使用了新的数据模型语言YANG1NETCONF协议-发展历程6.1NETCONF协议NETCONF(NetworkConfigurationProtocol)网络配置协议,提供一套管理网络设备的机制。用户可以使用这套机制增加、修改、删除网络设备的配置,获取网络设备的配置和状态信息。NETCONF有三个对象:2NETCONF协议-协议对象NETCONF客户端NETCONF服务器NETCONF消息6.1NETCONF协议能力协商是Client和Server在会话建立阶段,通过发送消息给对方来通告自己支持的能力。当NETCONF会话打开,每一端(包括Client和Server)必须发送一个包含自身能力列表的<hello>消息。双方至少要发送NETCONF基本能力"urn:ietf:params:netconf:base:1.0"或"urn:ietf:params:netconf:base:1.1"。除了基本功能,NETCONF协议还允许客户端发现服务器端支持的其它能力列表。在交换过Hello消息后,Server等待Client发送<rpc>请求。Server为每个<rpc>请求回应<rpc-reply>。实现过程如图所示。3NETCONF协议-能力协商6.1NETCONF协议NETCONF现在已经广泛地被网络设备厂家所支持。NETCONF协议采用了分层的设计结构,和OSI网络模型类似,下层为上层提供服务,每一层是对某一个功能的分装。NETCONF协议在概念上可以划分为4层:安全传输层、消息层、操作层、内容层。4NETCONF协议-协议框架内容层操作层消息层安全传输层为客户端和服务器之间交互提供通讯路径。当前华为使用SSH协议作为NETCONF协议的承载协议。提供一种简单的不依赖传输协议层的RPC请求和回应机制。定义一组基本的操作,作为RPC的调用方法,这些操作组成了NETCONF基本能力。如get、get_config、edit_config、copy_config等操作。描述了网络管理所涉及的配置数据,而这些数据依赖于各制造商设备。目前主流的数据模型有Schema模型,YANG模型等。6.2NETCONF协议5NETCONF协议-一个完整的NETCONF报文<?xmlversion="1.0"encoding="UTF-8"?><rpcxmlns="urn:ietf:params:xml:ns:netconf:base:1.0"message-id="801"><edit-config><target><running/></target><default-operation>merge</default-operation><error-option>rollback-on-error</error-option><configxmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0"><vlanxmlns="/netconf/vrp/huawei-vlan"><vlans><vlan><vlanId>10</vlanId><protocolVlans><protocolVlanxc:operation="merge"><protocolIndex>0</protocolIndex></protocolVlan></protocolVlans></vlan></vlans>

</edit-config></rpc>一个完整的NETCONF报文是基于SSH安全传输之上,包含消息层、操作层和内容层信息。NETCONF报文使用XML编码。NETCONF报文消息(Message)NETCONF操作(Operations)NETCONF内容(Content)6.1NETCONF协议6NETCONF协议-XML编码XML作为NETCONF协议的编码格式,用文本表示复杂的层次化数据,既支持使用传统的文本编译工具,也支持使用XML专用的编辑工具读取、保存和操作配置数据。基于XML网络管理的主要思想是利用XML强大的数据表示能力,使用XML来描述被管理数据和管理操作,使管理信息成为计算机可以理解的数据库,提高计算机对网络管理数据的处理能力,从而提高网络管理能力。基于XML的网络管理的主要优点:具有强大的数据表示能力。方便高效安全的进行大量数据传输。很好的适应网络配置管理的需求。6.1NETCONF协议7NETCONF协议-传输层和消息层NETCONF使用SSH实现安全传输,使用RPC(RemoteProcedureCall)远程调用的机制实现客户端和服务端的通信。NETCONF协议使用RPC通信模式。RPC的框架与传输层独立,采用XML编码的<rpc>和<rpc-reply>元素提供独立于传输层协议的请求和回应消息框架:<rpc>用于封装从客户端到服务端的NETCONF请求。头部定义message-id标示序列。<rpc-reply>用户服务端回复<rpc>的response消息。头部message-id保持一致。<rpc-error>在<rpc-reply>中被发送。一个<rpc-reply>可以包含多个<rpc-error>。<ok>在<rpc-reply>中被发送,表示没有错误和没有数据返回。6.1NETCONF协议8NETCONF协议-操作层NETCONF定义了一系列操作:场景分类操作功能描述查询数据<get-config>查询配置数据<get>查询设备当前运行的配置和状态数据编辑数据<edit-config>修改,创建,删除配置数据备份/恢复<copy-config>导出配置,或用一套配置数据整体替换另一套配置数据<delete-config>删除配置数据集,清空startup锁定/解锁<lock>加锁,独占配置数据集的修改权<unlock>解锁,放弃对配置数据集修改权的独占事务操作<commit>提交<candidate>数据集中的配置数据成为当前运行的配置数据<cancel-commit>放弃配置提交试运行<discard-changes>放弃<candidate>中还未提交的配置数据<validate>检查指定配置数据的语法语义是否正确会话操作<close-session>正常的结束本NETCONF会话<kill-session>强制结束其他的NETCONF会话,需管理员权限6.1NETCONF协议9NETCONF协议-内容层NETCONF内容层为设备配置数据。配置数据需要有建模语言,各厂家,没有统一。NETCONF1.0对模型语言没有要求。NETCONF1.1明确了与YANG结合,开始规范NETCONF内容格式。当前华为设备支持的内容层有:

NETCONF当前有两种建模语言,Schema和YANG:Schema是为了描述XML文档而定义的一套规则。Schema文件中定义了设备所有管理对象,以及管理对象的层次关系、读写属性和约束条件。YANG是专门为NETCONF协议设计的数据建模语言,用来为NETCONF协议设计可操作的配置数据、状态数据模型、远程调用(RPCs)模型和通知机制等。Huawei-YANG、NETCONFSchema、IETF-YANG、OpenConfig-YANG项目6使用NETCONF协议配置网6.1NETCONF协议6.2NETCONF配置6.3Pythonncclient模块6.4数据模型YANG6.5任务实施6.2NETCONFSchema案例1NETCONF配置–会话基础Schema是华为基于W3Cxml标准,又扩展了私有语法的一种语言,在NETCONF标准没有确定和YANG模型绑定前,VRPV8已经实现了Schema。Schema文件中定义了设备所有管理对象,以及管理对象的层次关系、读写属性和约束条件。设备通过Schema文件向客户端提供配置和管理设备的接口。NETCONF种传输协议,目前使用最为广泛的也是SSH协议,默认使用TCP端口830。6.2NETCONFSchema案例2NETCONF配置–会话流程NETCONF会话建立和关闭的基本流程如下:1、客户端触发NETCONF会话建立,完成SSH连接建立,并进行认证与授权。2、客户端和服务器完成NETCONF会话建立和能力协商。详情请参考能力集交互。3、客户端发送一个或多个请求给服务器,进行RPC交互(鉴权)。例如:4.客户端关闭NETCONF会话。5.SSH连接关闭。修改并提交配置。查询配置数据或状态。对设备进行维护操作。6.2NETCONFSchema案例3NETCONF配置–配置NETCONF1、进入NETCONF视图2、配置NETCONF服务端口号3、使能NETCONF功能[CE1]netconf

#进入NETCONF视图[CE1-netconf]protocolinboundsshport830#配置NETCOF都按口号Info:Succeededinstartingthesshport830service.[CE1-netconf]quit[CE1]snetconfserverenable

#使能NETCONF功能Info:SucceededinstartingtheSNETCONFserveronSSHport22.[CE1]snetconfserverenable和protocolinboundsshport830都可以使能NETCONF功能。如果这两个命令都配置,表示客户端可以使用22端口号或830端口号与服务器建立NETCONF连接。NETCONF使用SSH作为承载协议。在使用前必须配置SSH,建议用户level为15。项目6使用NETCONF协议配置网6.1NETCONF协议6.2NETCONF配置6.3Pythonncclient模块6.4数据模型YANG6.5任务实施6.3NETCONFSchema案例1Pythonncclient模块ncclient是一个专门用于NETCONF客户端的Python库。它提供直观的API,将NETCONF的XML编码特性映射到Python构造和习语,并使编写网络管理脚本更容易。安装ncclient模块查看ncclient,当前使用的ncclient版本是0.6.12。C:\Users\Administrator>pipinstallncclient-i/pypi/simple/--trusted-hostC:\Users\Administrator>pythonPython3.9.6(tags/v3.9.6:db3ff76,Jun282021,15:26:21)[MSCv.192964bit(AMD64)]onwin32Type"help","copyright","credits"or"license"formoreinformation.>>>importncclient>>>ncclient.__version__'0.6.12'>>>exit()C:\Users\Administrator>6.3Pythonncclient模块2Pythonncclient模块ncclient中最重要的对象是manager,manager.connect()函数用来通过NETCONF协议连接设备。上面参数中,device_params对于华为设备有两个选择。可以配置为huawei或者huaweiyang,分别对应IETFYANG和华为的YANG模型。manager.connect(host=host,port=port,username=user,password=password,hostkey_verify=False,device_params={'name':"huawei"},allow_agent=False,

look_for_keys=False)6.3Pythonncclient模块3Pythonncclient模块manager中支持的操作,通过通过manager.OPERATIONS查看。6.3Pythonncclient模块4Pythonncclient模块

-常用方法get()方法get_config(source,filter=None)检索运行配置和设备状态信息。查询的是设备当前运行的状态数据,即只能从配置数据库中获取数据。不需要使用source参数指定配置数据库。操作成功,Server回复的元素中含有参数,中封装了获取的结果数据。否则在消息中返回。检索指定配置的全部或部分。source:指定需要查询的数据库名称。有running

(正在运行的数据库),startup

(下次设备启动配置数据库),

candidate

(两阶段运行数据库,需要commit提交生效)Filter参数不常用6.3Pythonncclient模块5Pythonncclient模块-常用方法edit_config(target,config,default_operation=None,test_option=None,error_option=None):copy_config(source,target)将指定配置的全部或部分加载到目标配置数据存储中。target:指定要配置的数据库。config:必须放在元素中,它可以指定为字符串或Elementdefault_operation:如果指定,必须是{“merge”,“replace”,or“none”}其中之一。test_option:{“test_then_set”,“set”}之一。error_option:{“stop-on-error”,“continue-on-error”,“rollback-on-error”}之一。The“rollback-on-error”error_option:rollback-on-errorcapability.源配置数据库替换目标配置数据库。如果目标配置数据库没有创建,则直接创建配置数据库,否则用源配置数据库直接覆盖目标配置数据库。source:是配置数据存储的名称,用作包含要复制的配置子树的复制操作或配置元素的源。target:是要用作复制操作目标的配置数据存储的名称。6.3Pythonncclient模块6Pythonncclient模块-常用方法delete_config(target):close_session():kill_session(session_id):删除配置数据库。target:target指定要删除的配置数据存储的名称或URL请求优雅地终止NETCONF会话,并关闭传输层会话。强制去终止一个NETCONF会话。session_id:要终止会话的NETCONF会话标识符。项目6使用NETCONF协议配置网6.1NETCONF协议6.2NETCONF配置6.3Pythonncclient模块6.4数据模型YANG6.5任务实施6.4数据模型YANG1数据模型YANG当今,NETCONF协议的传输层,RPC层和操作层已经有标准来定义,但内容层尚未有标准的数据建模语言和相关的数据模型。没有标准的数据模型NETCONF协议实际上并不能真正地普及到网络管理当中。为了使NETCONF协议成为一个互操作性强的协议,所建立的数据模型必须是独立于各种厂商的。因此,需要建立一个专门为NETCONF协议建立模型的解决方法,在这样的背景下,YANG就是专门为NETCONF服务的数据建模语言。YANG起源于NETCONF,但不仅用于NETCONF。虽然统一了YANG建模语言,但是YANG文件没有统一。YANG文件可以简单分为三类:厂家私有YANG文件,IETF标准YANG和OpenConfigYANG。6.4数据模型YANG2数据模型YANGYANG模型定义了数据的层次化结构,可用于基于NETCONF的操作。建模对象包括配置、状态数据、远程过程调用和通知。它可以对NETCONF客户端和服务器端之间发送的所有数据进行一个完整的描述。Yang有以下特点:基于层次化的树状结构建模。数据模型以模块和子模块呈现。可以和基于XML的语法的YIN(YANGIndepentNotation)模型无损转换。定义内置的数据类型和允许可扩展类型。6.4数据模型YANG3数据模型YANG–模块和子模块一个YANG文件通常可以定义为一个模块(module)或者子模块(submodule)。一个模块包含三种类型的语句:模块头(moduleheader)语句,“修订”(revision)语句和定义(definition)语句。模块头部语句描述模块并提供关于模块本身的信息,“修订”语句提供关于模块历史的信息,定义语句是定义数据模型的模块的主体。服务器可以实现多个模块,允许相同数据的多个视图或服务器数据的不相交子部分的多个视图。或者,服务器可以只实现一个定义所有可用数据的模块。基于模块设计者的需求,模块可以将其部分定义分成子模块。无论子模块的存在或大小如何,外部视图都是单个模块的外观。6.4数据模型YANG4数据模型YANG–数据节点YANG定义了数据建模的四种主要类型的数据节点。叶节点(LeafNodes)叶列表节点(Leaf-ListNodes)容器节点(ContainerNodes)列表节点(ListNodes)6.4数据模型YANG5数据模型YANG–数据节点–叶节点叶子实例包含简单的数据,如整数或字符串。它只有一个特定类型的值,没有子节点。YANG叶节点示例XML编码示例leafhost-name{typestring;description"Hostnameforthissystem.";}<host-name></host-name>6.4数据模型YANG6数据模型YANG–数据节点–叶列表节点叶列表定义了特定类型的值序列。YANG叶节点示例XML编码示例leaf-listdomain-search{typestring;description"Listof

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论