网络自动化运维教程 课件 项目1、2 Python编程基础、使用telnetlib下发网络配置_第1页
网络自动化运维教程 课件 项目1、2 Python编程基础、使用telnetlib下发网络配置_第2页
网络自动化运维教程 课件 项目1、2 Python编程基础、使用telnetlib下发网络配置_第3页
网络自动化运维教程 课件 项目1、2 Python编程基础、使用telnetlib下发网络配置_第4页
网络自动化运维教程 课件 项目1、2 Python编程基础、使用telnetlib下发网络配置_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

项目1Python编程基础Python编程基础1.5文件处理1.1Python简介1.2Python编程基础1.3函数1.4异常处理1.6网络模块1.7任务实施1.1Python简介Python是一种高级编程语言,由荷兰人GuidovanRossum于1989年圣诞节期间发明并首次发布。Python官网:Python的特点是易于学习、易于阅读、易于维护,并且具有良好的跨平台特性,能够在多个操作系统上运行,如

Windows、Linux、MacOS

等。它拥有丰富的标准库和第三方库,覆盖了广泛的领域需求。目前,Python的主要应用领域如下:1Python简介1.1Python简介2Python应用领域⑤自动化运维selenium⑥WEB开发Web框架如Django,web2py等⑦科学计算NumPy,SciPy,Matplotlib⑧常规软件开发软件开发、脚本编写、网络编程①人工智能机器学习、神经网络、深度学习②云计算开源云计算解决方案OpenStack③大数据数据分析、数据可视化、数据挖掘④网络爬虫主流爬虫设计语言,Scrapy框架Python应用场合Python编程基础1.5文件处理1.1Python简介1.2Python编程基础1.3函数1.4异常处理1.6网络模块1.7任务实施1.3Python函数所谓标识符就是变量、常量、函数、类等对象使用的名字。变量命名规则:名称第一字符为英文字母或者下划线名称第一字符后可以使用英文字母、下划线和数字名称不能使用python的关键字或保留字符名称区分大小写,单词与单词之间使用下划线连接1标识符1.2Python编程基础Python关键字,也叫保留字,是Python语言官方确定的用作语法功能的专用标识符,标识符不能与Python的关键字和内置函数的名字相同。关键字只包含小写字母。Python的标准库提供了一个keyword模块。2

关键字1.2Python编程基础在Python中,以符号”#“为单行注释的开始,从它往后到本行末尾的内容,都是注释。如果想注释多行语句,只能在每行的开头加上符号”#“。很多时候,在一些Python脚本文件的开头都能看到以“#“开头的两行代码,它们不是注释,而是一些设定。这两行代码的特点是位置在文件的顶行、顶左,没有空格和空行。3注释#!/usr/bin/python#-*-coding:UTF-8-*-第一行用于指定运行脚本的Python解释器,为Linux专用,Windows中不需要。第二行用于指定代码的编码方式。Python3全面支持Unicode,默认采用UTF-8编码,本行可以不需要。但在Python2中,通常都需要这一行。1.2Python编程基础Python最具特色的语法格式就是使用缩进来表示代码块,不像其他编程语言使用花括号或其他符号。相同层次的语句具有相同的缩进。Python缩进规则是指在定义类、函数、流程控制语句、异常处理语句等时,行尾的冒号和下一行的缩进表示下一个代码块的开始,而缩进的结束则表示代码块的结束。Python官方的代码规范PEP8建议使用4个空格作为缩进。如果缩进的空格数不一致,会抛出名为"IndentationError"的异常。4语句缩进1.2Python编程基础Python中通常一行就是一条语句,一条语句通常也不会超过一行。但Python并没有从语法层面完全禁止在一行中使用多条语句,可以使用分号实现多条语句在一行。若一条语句实在太长,也是可以占用多行的,可以使用反斜线来实现多行语句。如下面的字符串:4多行语句>>>importos;s="NetworkAutomatic";print(s)string="Thisbookispythonfornetworkengineers"\+"toworkfornetworkautomatic."1.2Python编程基础Python是一门弱类型语言,变量使用前无须声明,变量名可以看作对象的引用。Python中有许多内置的基本数据类型,分为数字(number)、字符串(string)、列表(list)、元组(tuple)、字典(dict)、集合(set)以及一些不太常用的数据类型,如字节串(byte)等。这些数据类型可以分成以下几种类型。(1)可变类型:列表(list)、字典(dict)和集合(set)。(2)不可变类型:数字(number)、字符串(string)和元组(tuple)。(3)序列类型:字符串(string)、列表(list)、元组(tuple)和字典(dict)。(4)非序列类型:集合(det)。5数据类型1.2Python编程基础Python是一门弱类型语言,流程控制指的是代码运行逻辑、分支走向、循环控制,是体现程序执行顺序的操作。流程控制结构一般分为顺序结构、选择结构和循环结构。

(1)顺序结构是程序逐行执行,所有语句都按照它们在文件中写入的顺序执行。

(2)选择结构也称分支结构,是指程序有选择地执行代码,可以跳过没用的代码,只执行有用的代码。通常有如下两种选择结构。条件判断:if/elif/else。异常处理:try/except

(3)循环结构是指程序不断地重复执行同一段代码。通常有如下两种循环结构:for循环。while循环5流程控制1.3Python函数Python是一门弱类型语言,流程控制指的是代码运行逻辑、分支走向、循环控制,是体现程序执行顺序的操作。流程控制结构一般分为顺序结构、选择结构和循环结构。

(1)顺序结构是程序逐行执行,所有语句都按照它们在文件中写入的顺序执行。

(2)选择结构也称分支结构,是指程序有选择地执行代码,可以跳过没用的代码,只执行有用的代码。通常有如下两种选择结构。条件判断:if/elif/else。异常处理:try/except

(3)循环结构是指程序不断地重复执行同一段代码。通常有如下两种循环结构:for循环。while循环6流程控制Python编程基础1.5文件处理1.1Python简介1.2Python编程基础1.3函数1.4异常处理1.6网络模块1.7任务实施1.3Python函数定义函数使用保关键def,def后跟函数名和圆括号,在圆括号内定义函数接收的参数,也可以不定义参数。圆括号后是冒号,函数体(函数的代码块)以冒号开始,并且统一缩进。使用return语句结束函数,默认返回None。return语句依然在函数体内部,不能回退缩进。直到函数的所有代码写完,才回退缩进,表示函数结束。函数定义语法如下:1函数定义def函数名(参数):#内部代码

return表达式1.3Python函数2函数调用函数只有在被调用时才会被执行。要调用函数,必须使用函数名后跟圆括号的方式。调用时要根据函数的定义,提供相应个数和类型的参数,每个参数之间用逗号分隔。在Python中,用def语句创建函数时,可以用return语句指定函数返回的值,返回值可以是任意类型的。需要注意的是,return语句在同一个函数中可以有多条,但只要有一条得到执行,就会直接结束函数。>>>defconfigure_intf(intf_name,ip,mask): config=f'interface{intf_name}\nipaddress{ip}{mask}' returnconfig>>>ret=configure_intf('Fa0/0','','')>>>print(ret)interfaceFa0/0ipaddressPython编程基础1.5文件处理1.1Python简介1.2Python编程基础1.3函数1.4异常处理2.6网络模块1.7任务实施1.4异常处理1

异常处理一个程序发生异常,代表该程序在执行时出现了非正常的情况,无法再执行下去。默认情况下,程序是要终止的。如果要避免程序退出,可以使用捕获异常的方式获取异常的名称,再通过其他的逻辑代码让程序继续运行,这种根据异常做出的逻辑处理称为异常处理。Python定义了3种异常处理结构:try/except结构;try/except/else结构;try/except/finally结构。1.4异常处理2try/except结构try/except结构的执行流程如下:首先执行try中的代码块,如果程序执行过程中出现异常,系统会自动生成一个异常类型,并将该异常提交给Python解释器,此过程被称为捕获异常。当Python解释器收到异常时,会寻找能处理该异常的except块,如果找到合适的except块,就把该异常交给该except块处理,此过程被称为处理异常。如果Python解释器找不到能处理异常的except块,则程序终止运行,Python解释器也将退出。try:

a=input("Enterfirstnumber:")

b=input("Entersecondnumber:")

print("Result:",int(a)/int(b))

exceptValueError:

print("Pleaseenteronlynumbers")

exceptZeroDivisionError:

print("Youcan'tdividebyzero")1.4异常处理3try/except/else结构try/except/else结构的执行流程如下:在try/except结构的基础上,Python

异常处理机制还提供了增加一个else块的结构,即try/except/else结构。当try块没有捕获到任何异常时,才会执行使用else包裹的代码。如果try块捕获到异常,只会执行except块中的代码处理异常,不会执行else包裹的代码。try:

a=input("Enterfirstnumber:")

b=input("Entersecondnumber:")

result=int(a)/int(b)

except(ValueError,ZeroDivisionError):

print("Somethingwentwrong...")

else:

print("Resultissquared:",result)1.4异常处理4try/except/finally结构try/except/finally结构的执行流程如下:Python

异常处理机制还提供了增加一个finally块的结构,即try/except/finally结构。在整个异常处理过程中,无论try块是否捕获到异常,最终都要进入finally块,并执行其中的代码。try:

a=input("Enterfirstnumber:")

b=input("Entersecondnumber:")

result=int(a)/int(b)

except(ValueError,ZeroDivisionError):

print("Somethingwentwrong...")

else:

print("Resultissquared:",result)

finally:

print("Andtheylivedhappilyeverafter.")Python编程基础1.5文件处理1.1Python简介1.2Python编程基础1.3函数1.4异常处理1.6网络模块1.7任务实施1.5文件处理Python

提供了内置的文件对象,以及用于对文件、目录进行操作的内置模块,通过这些可以很方便地将数据保存到文件中。在Windows上,书写路径时使用反斜””线作为路径分隔符,但在OSX和Linux上,使用正斜””线作为路径分隔符。r/R表示原始字符串。所有的字符串都是直接按照字面的意思来使用的,没有转义特殊或不能打印的字符。1文件路径>>>print("D:\python\\test\n")#字符串前不加r或RD:\python\test

>>>print(r"D:\python\test\n")#字符串前加r或R。输出的是原始字符串D:\python\test\n1.5文件处理Python

中文件操作有很多种,常见的操作是对文件进行读取和写入。文件必须在打开之后才能进行操作,在操作结束之后,还应该将其关闭。因此文件操作可以分为以下3步,每一步都需要借助对应的函数实现。打开文件:使用内置的open()函数,该函数会返回一个文件对象。对已打开的文件进行读/写操作:读取文件内容可使用read()、readline()以及readlines()函数;向文件中写入内容,可以使用write()函数。关闭文件:完成对文件的读/写操作之后,需要关闭文件,可以使用close()函数。2文件操作1.5文件处理在Python中,要操作文件,首先需要创建或者打开指定的文件,并创建文件对象,而这些工作可以通过内置的open()函数完成。3打开文件file=open('file_name.txt','r')模式作用说明r以只读模式打开文件

文件必须存在rb以二进制格式、只读模式打开文件,一般用于非文本文件,如图片文件、音频文件等w以只写模式打开文件,若该文件存在,打开时会清空文件中原有的内容文件存在,会清空;不存在,则创建文件wb以二进制格式、只写模式打开文件,一般用于非文本文件a以追加模式打开文件,如果文件已经存在,新写入内容会追加到已有内容之后;否则会创建新文件

a+以二进制格式打开文件,并采用追加模式,如果文件已存在,新写入内容会追加到已有内容之后;否则创建新文件。

1.5文件处理Python

提供了如下3种函数来实现读取文件中数据的操作。read()函数:逐个字节或者字符读取文件中的内容。readline()函数:逐行读取文件中的内容。readlines()函数:一次性读取文件中多行内容4文件读取>>>f=open('R1.txt','r')>>>f.readlines()#将文件中的每一行作为列表的一个元素['!\n','servicetimestampsdebugdatetimemseclocaltimeshow-timezoneyear\n','servicetimestampslogdatetimemseclocaltimeshow-timezoneyear\n','servicepassword-encryption\n','servicesequence-numbers\n','!\n','noipdomainlookup\n','!\n','ipsshversion2\n','!']>>>f.close()1.5文件处理写入文件时,指定正确的文件打开模式非常重要,以免误删。w打开文件进行写入。如果文件存在,则删除其内容。a打开文件以添加数据。数据添加到文件末尾。如果文件不存在,在两种模式下都会创建一个文件。以下函数用于写入文件。write():将一行内容写入文件writelines():允许将字符串列表作为参数发送5文件写入>>>f=open("R2.txt","w")#以w模式打开文件>>>cfg_lines_as_string='\n'.join(cfg_lines)#将列表用“\n”连接成字符串>>>f.write(cfg_lines_as_string)#将字符串写入文件231>>>f.close()>>>os.listdir()#列出文件列表['.idea','R1.txt','R2.txt']>>>

1.5文件处理文件操作时,一直强调打开的文件最后一定要关闭,否则会给程序的运行造成意想不到的隐患。但是,即便使用close()函数,如果在打开文件或文件操作过程中抛出了异常,还是无法及时关闭文件。为了更好地避免此类问题,Python提供了withas语句用来操作上下文管理器(contextmanager),它能够帮助我们自动分配并且释放资源,保证文件自动关闭。6关闭写入>>>withopen('R1.txt','r')asf:

forlineinf:

print(line)Python编程基础1.5文件处理1.1Python简介1.2Python编程基础1.3函数1.4异常处理1.6网络模块1.7任务实施1.6网络模块1ipaddress模块ipaddress模块包括IPv4和IPv6地址的类,可以用来生成、验证、查找IP地址。从Python3.3开始,ipaddress模块正式成为Python标准库中的模块之一,不需要安装,可直接使用。ipaddress模块中有IPv4Address

类和IPv6Address类可分别用来处理IPv4和IPv6地址。由于IPv4Address和IPv6Address对象共享许多共同属性,后面的案例将只处理IPv4地址,可以以类似的方式处理IPv6地址1.6网络模块1ipaddress模块ipaddress.ip_address()

函数会根据传入的字符串自动创建IPv4/IPv6Address对象使用ipaddress.ip_network()函数创建IPv4/IPv6Address对象>>>importipaddress>>>ipv4=ipaddress.ip_address("")>>>print(ipv4)>>>subnet1=ipaddress.ip_network("/24")#给定网段>>>subnet1.broadcast_address#获取网段的广播地址IPv4Address('55')>>>subnet1.with_netmask'/'#获取网段加子网掩码>>>subnet1.with_hostmask#获取网段加主机掩码'/55'>>>subnet1.prefixlen#获取掩码长度241.6网络模块1ipaddress模块使用ipaddress.ip_address()

创建IPv4Address对象有很多IPv4地址的属性:>>>ipv4.pressedipv4.is_loopbackipv4.is_unspecifiedipv4.versionipv4.explodedipv4.is_multicastipv4.max_prefixlenipv4.is_globalipv4.is_privateipv4.packedipv4.is_link_localipv4.is_reservedipv4.reverse_pointer1.6网络模块2netaddr模块netaddr模块是Python处理IP地址和MAC地址的开源第三方库,是用于对网络地址段进行定义和操作的一个工具。netaddr模块不是Python的标准模块,使用前需要安装.IPAddress对象表示单个IP地址,可以接收一个IPv4或IPv6地址字符串地址>>>fromnetaddrimportIPAddress#导入IPAddress类>>>ip=IPAddress("")#IPAddress类的对象>>>ipIPAddress('')>>>type(ip)#获取对象的类型<class'netaddr.ip.IPAddress'>>>>ip.version#查看ip对象是IPv4还是IPv64>>>ip.bits()#转成点分二进制'11000000.10101000.00000001.00000001'>>>ip.bin#将IP地址转成二进制的值'0b11000000101010000000000100000001'>>>ip.words#获取IP地址的4部分的值(192,168,1,1)1.6网络模块2netaddr模块IPNetwork()是处理IP网段的方法,同样可以接收一个IPv4或IPv6地址字符串>>>fromnetaddrimportIPNetwork>>>ip=IPNetwork("/24")>>>ipIPNetwork('/24')>>>ip.cidrIPNetwork('/24')>>>ip.hostmaskIPAddress('55')>>>workIPAddress('')>>>maskIPAddress('')>>>

1.6网络模块3tabulate模块通过tabulate模块可以精美地显示数据。tabulate模块不是Python的标准模块,使用前需要安装tabulate模块支持列表、字典等表格数据类型。模块中tabulate()函数用于制表。>>>fromtabulateimporttabulate#导入tabulate模块,并定义列表dis_ip_int_br>>>dis_ip_int_br=[("FastEthernet0/0","","up","up"),("FastEthernet0/1","","up","up"),("FastEthernet0/2","","up","up"),("Loopback0","","up","up"),("Loopback100","","up","up")]>>>

>>>print(tabulate(dis_ip_int_br))#使用tabulate()使输出相对整齐---------------------------FastEthernet0/0upupFastEthernet0/1upupFastEthernet0/2upupLoopback0upupLoopback100

upup---------------------------1.6网络模块3tabulate模块tabulate()函数还可以使用headers参数指定列名>>>columns=['Interface','IP','Status','Protocol']#定义列名>>>print(tabulate(dis_ip_int_br,headers=columns))#加上headers参数InterfaceIPStatusProtocol------------------------------------------FastEthernet0/0upupFastEthernet0/1upupFastEthernet0/2upupLoopback0

upupLoopback100

upup>>>

1.6网络模块3tabulate模块使用参数tablefmt输出网格>>>print(tabulate(dis_ip_int_br,headers=columns,tablefmt="grid"))+-----------------+-----------+----------+------------+|Interface|IP|Status|Protocol|+=================+===========+==========+|FastEthernet0/0||up|up|+-----------------+-----------+----------+------------+|FastEthernet0/1||up|up|+-----------------+-----------+----------+------------+|FastEthernet0/2||up|up|+-----------------+-----------+----------+------------+|Loopback0||up|up|+-----------------+-----------+----------+------------+|Loopback100||up|up|+-----------------+-----------+----------+------------+Python编程基础1.5文件处理1.1Python简介1.2Python编程基础1.3函数1.4异常处理1.6网络模块1.7任务实施1.7任务实施ping命令是运维工程师检查网络连通性的常用命令,作为运维工程师,基本上每天都会用到,它可以很好地帮助运维工程师分析和判定网络故障。但是ping命令每次只能ping一个IP地址,对于公司A中大量的网络设备,显然不能一个一个地ping。为此公司安排运维工程师小李使用Python编写一个批量ping的网络检查工具,该工具需要具备如下功能:可以批量pingIP地址;可以处理ping一段IP地址,如00-00,00-200;可以读取包含IP的TXT文件;打印出可以ping通和ping不通的IP地址1.7任务实施ping命令是运维工程师检查网络连通性的常用命令,作为运维工程师,基本上每天都会用到,它可以很好地帮助运维工程师分析和判定网络故障。但是ping命令每次只能ping一个IP地址,对于公司A中大量的网络设备,显然不能一个一个地ping。为此公司安排运维工程师小李使用Python编写一个批量ping的网络检查工具,该工具需要具备如下功能:可以批量pingIP地址;可以处理ping一段IP地址,如00-00,00-200;可以读取包含IP的TXT文件;打印出可以ping通和ping不通的IP地址项目2使用telnetlib下发网络配置项目2使用telnetlib下发网络配置2.1telnetlib模块对象与方法2.2telnetlib登录设备

2.3任务实施2.1telnetlib模块对象与方法telnetlib是Python标准库中的内置模块,无需额外安装。它提供了实现Telnet功能的类telnetlib.Telnet。telnetlib.Telnet类里的不同方法实现不同功能。Telnet

表示到Telnet服务器的连接.实例初始化后默认不连接;必须使用

open()

方法来建立连接。或者,可选参数host和port也可以传递给构造函数,在这种情况下,到服务器的连接将在构造函数返回前建立。可选参数

timeout

为阻塞操作(如连接尝试)指定一个以秒为单位的超时时间(如果没有指定,将使用全局默认设置)。1telnetlib模块介绍class

telnetlib.Telnet(host=None,

port=0[,

timeout])

1.1telnetlib模块对象与方法Telnet

实例有以下几种常用方法:2Telnet类对象及方法方法功能Telnet.read_until(expected,timeout=None)读取直到给定的字符串expected或超时秒数。Telnet.read_all()读取所有数据直到EOF(EndOfFile)。阻塞直到连接关闭。Telnet.read_very_eager()读取从上次IO阻断到现在所有的内容,返回字节串。连接关闭或者没有数据时触发EOFError异常。Telnet.write(buffer)写入数据。在套接字(Socket)上写一个字节串,加倍任何IAC(InterpretAsCommand)字符。Telnet.close()关闭连接。Telnet.open(host,

port=0[,

timeout])连接主机。第二个可选参数是端口号,默认为标准Telnet端口(23)Telnet.write(buffer)向套接字写入一个字节字符串Teract()交互函数,模拟一个命令行Telnet客户端。Telnet.expect(list,

timeout=None)一直读取,直到匹配列表中的某个正则表达式。项目2使用telnetlib下发网络配置2.1telnetlib模块对象与方法2.2telnetlib登录设备

2.3任务实施2.2telnetlib登录设备

现有一台网络设备S5700交换机作为Telnet服务器,需要实现使用Pythontelnetlib作为Telnet客户端登录此设备。在eNSP中搭建以下拓扑:通过Cloud1连接本地主机和S5700,安装华为eNSP模拟器后会自动在本地主机(Windows)上产生一个虚拟网卡:Cloud1的作用就是将本地主机通过这个虚拟网卡连接到交换机S5700。1telnetlib登录设备VirtualBoxHost-OnlyNetwork-IP:,即本地主机上的IP地址为:。2.2telnetlib登录设备

2telnetlib登录设备Cloud1的设置:2.2telnetlib登录设备

3telnetlib登录设备使用telnetlib登录S5700可为四个步骤:配置设备Telnet服务,使用密码方式。手动验证和查看Telnet登录步骤,作为代码实现的参考。编写和运行Python代码。验证结果。2.2telnetlib登录设备

4telnetlib登录设备:配置交换机[Huawei]user-interfacevty04[Huawei-ui-vty0-4]authentication-modepassword[Huawei-ui-vty0-4]setauthenticationpasswordsimpleHuawei@123[Huawei-ui-vty0-4]protocolinboundtelnet[Huawei-ui-vty0-4]userprivilegelevel15[Huawei-ui-vty0-4]quit[Huawei]telnetserverenable[Huawei]intfacevlanif1[Huawei-Vlanif1]ipaddress0024[Huawei-Vlanif1]quit[Huawei]interfaceGE0/0/1[Huawei-GE1/0/0]

温馨提示

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

评论

0/150

提交评论