您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

Python网络编程实现自动化,简化Telnet网络配置工作

时间:2021-02-03 09:38:58  来源:  作者:

网络工程领域不断出现新的协议、技术、交付和运维模式。传统网络面临着云计算、人工智能等新连接需求的挑战。企业也在不断追求业务的敏捷、灵活和弹性。在这些背景下,网络自动化变得越来越重要。

网络编程与自动化旨在简化工程师网络配置、管理、监控和操作等相关工作,提高工程师部署和运维效率。本课程定位于指导网络工程师初步了解Python/ target=_blank class=infotextkey>Python编程实现网络自动化

背景:传统网络运维困境

传统的网络运维工作需要网络工程师手动登录网络设备,人工查看和执行配置命令,肉眼筛选配置结果。这种严重依赖“人”的工作方式操作流程长,效率低下,而且操作过程不易审计。

Python网络编程实现自动化,简化Telnet网络配置工作

 

经典运维场景

在工作中你是否遇到过这样的场景:

1.设备升级:现网有数千台网络设备,你需要周期性、批量性地对设备进行升级。

2.配置审计:企业年度需要对设备进行配置审计。例如要求所有设备开启sTe.NET功能,以太网交换机配置生成树安全功能。你需要快速地找出不符合要求的设备。

3.配置变更:因为网络安全要求,需要每三个月修改设备账号和密码。你需要在数千台网络设备上删除原有账号并新建账号。

网络自动化

网络自动化,通过工具实现网络自动化地部署、运行和运维,逐步减少对“人”的依赖。这能够很好地解决传统网络运维的问题。

业界有很多实现网络自动化的开源工具,例如Ansible、SaltStack、Puppet、Chef等。从网络工程能力构建的角度考虑,更推荐工程师具备代码编程能力。

Python网络编程实现自动化,简化Telnet网络配置工作

 

基于编程实现的网络自动化

近几年随着网络自动化技术的兴起,以Python为主的编程能力成为了网络工程师的新技能要求。

Python编写的自动化脚本能够很好的执行重复、耗时、有规则的操作。

Python网络编程实现自动化,简化Telnet网络配置工作

 

举例:Python实现设备自动化配置

网络自动化能做什么?最直观的一个网络自动化例子就是自动化配置设备。我们可以把这个过程分为两个步骤:编写配置文件和编写Python代码将配置文件推送到设备上。

首先用命令行方式写配置脚本,然后通过Telnet/SSH将它传到设备上运行。这种方式对于初学网络编程与自动化的网络工程师来说,比较容易理解。本章节主要介绍这种方式实现网络自动化。

编程语言

编程语言(Programming Language),是一种用于编写计算机程序的语言,用于控制计算机的行为。

按照语言在执行之前是否需要编译区分,可以将编程语言分为需要编译的编译型语言(Compiled Language),不需要编译的解释型语言(Interpreted Language) 。

Python网络编程实现自动化,简化Telnet网络配置工作

 

计算技术栈与程序执行过程

Python网络编程实现自动化,简化Telnet网络配置工作

 

高级编程语言 - 编译型语言

编译型语言:编译型语言的程序在执行之前有一个编译过程,把程序编译成为机器语言的文件。运行时不需要重新翻译,直接使用编译的结果。典型的如C/C++/Go语言,都属于编译型语言。

从源码到程序的过程:源码需要由编译器、汇编器翻译成机器指令,再通过链接器链接库函数生成机器语言程序。机器语言必须与CPU的指令集匹配,在运行时通过加载器加载到内存,由CPU执行指令。

Python网络编程实现自动化,简化Telnet网络配置工作

 

高级编程语言 - 解释型语言

解释型语言:解释型语言的程序不需要在运行前编译,在运行程序的时候才逐行翻译。典型的如JAVA/Python语言,都属于解释型语言。

从源码到程序的过程:解释型语言的源代码由编译器生成字节码,然后再由虚拟机(JVM/PVM)解释执行。虚拟机将不同CPU指令集的差异屏蔽,因此解释型语言的可移植性相对较好。

Python网络编程实现自动化,简化Telnet网络配置工作

 

什么是Python?

Python是一门完全开源的高级编程语言。它的作者是Guido Van Rossum。

Python的优点:

•Python拥有优雅的语法、动态类型具有解释性质。能够让学习者从语法细节的学习中抽离,专注于程序逻辑。

•Python同时支持面向过程和面向对象的编程。

•Python拥有丰富的第三方库。

Python可以调用其他语言所写的代码,又被称为胶水语言。

Python的缺点:

•运行速度慢。Python是解释型语言,不需要编译即可运行。代码在运行时会逐行地翻译成CPU能理解的机器码,这个翻译过程非常耗时。

由于Python具有非常丰富的第三方库,加上Python语言本身的优点,所以Python可以在非常多的领域内使用:人工智能、数据科学、App、自动化运维脚本等。

Python代码执行过程

Python网络编程实现自动化,简化Telnet网络配置工作

Python程序编译运行的过程Python程序编译运行的过程

操作过程:

1、在操作系统上安装Python和运行环境。

2、编写Python源码。

3、编译器运行Python源码,编译生成pyc文件(字节码)。

4、Python虚拟机将字节码转换为机器语言。

5、硬件执行机器语言。

初识Python代码 - 交互式运行

Python有两种运行方式,交互式运行和脚本式运行。

交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式编写代码。

Python网络编程实现自动化,简化Telnet网络配置工作

 

代码块:

C:UsersRichard>python
Python 3.7.4 (default, Aug  9 2019, 18:34:13) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print ("hello world")
hello world
>>> a = 1
>>> b = 2
>>> print ( a + b )
3
>>> 

初识Python代码 - 脚本式运行

脚本模式里的代码可以在各种Python编译器或者集成开发环境上运行。例如Python自带的IDLE、Atom、Visual Studio、Pycharm和Anaconda等。

Python网络编程实现自动化,简化Telnet网络配置工作

 

Python编码规范

编码规范是使用Python编写代码时应遵守的命名规则、代码缩进、代码和语句分割方式等。良好的编码规范有助于提高代码的可读性,便于代码的维护和修改。

例如分号、圆括号、空行和空格的使用规范建议如下:

Python网络编程实现自动化,简化Telnet网络配置工作

 

Python编码规范 - 标识符命名

Python标识符用于表示常量、变量、函数以及其他对象的名称。

标识符通常由字母、数字和下划线组成,但不能以数字开头。标识符大小写敏感,不允许重名。如果标识符不符合规则,编译器运行代码时会输出SyntaxError语法错误。

Python网络编程实现自动化,简化Telnet网络配置工作

 

备注:

•Python最基本的数据类型有布尔型(True/False)、整数、浮点型、字符串型。Python里的所有数据(布尔值、整数、浮点、字符串,甚至大型数据结构、函数以及程序)都是以对象(object)的形式存在的。这使得Python语言有很强的统一性。

•运行结果分别为10,20,Richard,2,SyntaxError(语法错误)。

•本文不对Python语法做针对介绍,更多Python语法请参考HCIP课程。

Python编码规范 - 代码缩进

在Python程序中,代码缩进代表代码块的作用域。如果一个代码块包含两个或更多的语句,则这些语句必须具有相同的缩进量。对于Python而言代码缩进是一种语法规则,它使用代码缩进和冒号来区分代码之间的层次。

编写代码时候,建议使用4个空格来生成缩进。如果程序代码中使用了错误的缩进,则会在运行中发出IndentationError错误信息。

Python网络编程实现自动化,简化Telnet网络配置工作

 

Python编码规范 - 使用注释

•注释就是在程序中添加解释说明,能够增强程序的可读性。在Python程序中,注释分为单行注释和多行注释。

•单行注释以 # 字符开始直到行尾结束。

•多行注释内容可以包含多行,这些内容包含在一对三引号内(’’’…’’’或者”””…”””)。

Python网络编程实现自动化,简化Telnet网络配置工作

 

Python编码规范 - 源码文件结构

一个完整的Python源码文件一般包含几个组成部分:解释器和编码格式声明、文档字符串、模块导入和运行代码。

如果会在程序中调用标准库或其他第三方库的类时,需要先使用import或from… import语句导入相关的模块。导入语句始终在文件的顶部。在模块注释或文档字符串(docstring)之后。

Python网络编程实现自动化,简化Telnet网络配置工作

 

Python的函数与模块

函数(Function)是组织好的、可重复使用的一段代码。它能够提高程序的模块化程度和代码利用率。函数使用关键字 def 定义。

模块(Module)是一个保存好的Python文件。模块可以由函数或者类组成。模块和常规Python程序之间的唯一区别是用途不同:模块用于被其他程序调用。因此,模块通常没有main函数。

Python网络编程实现自动化,简化Telnet网络配置工作

 

Python的类与方法

类(Class)是用来描述具有一类相同的属性和方法的集合。类的定义使用关键字 class。

被实例化的类的”函数”被称作方法(Method)。类定义方法时候必须携带 self 关键字,它表示类的实例本身。

Python网络编程实现自动化,简化Telnet网络配置工作

 

telnetlib介绍

telnetlib是Python标准库中的模块。它提供了实现Telnet功能的类telnetlib.Telnet。

这里通过调用telnetlib.Telnet类里的不同方法实现不同功能。

Python网络编程实现自动化,简化Telnet网络配置工作

 


Python网络编程实现自动化,简化Telnet网络配置工作

 

案例:使用telnetlib登陆设备

案例描述:

现有一台网络设备作为Telnet服务器,需要实现使用Python telnetlib作为Telnet客户端登录此设备。

Python网络编程实现自动化,简化Telnet网络配置工作

 

实现过程分为四个步骤:

1、配置设备Telnet服务。

2、手动验证和查看Telnet登录步骤,作为代码实现的参考。

3、编写和运行Python代码。

4、验证结果。

案例:使用telnetlib登陆设备

Python网络编程实现自动化,简化Telnet网络配置工作

 

配置设备接口地址:

[Huawei] interface GE 1/0/0
[Huawei -GE1/0/0] ip add 192.168.10.10 24
[Huawei -GE1/0/0] quit 

配置设备Telnet服务:

[Huawei] user-interface vty 0 4
[Huawei-ui-vty0-4] authentication-mode password
[Huawei-ui-vty0-4] set authentication password simple Huawei@123
[Huawei-ui-vty0-4] protocol inbound telnet
[Huawei-ui-vty0-4] user privilege level 15
[Huawei-ui-vty0-4] quit
[Huawei] telnet server enable 

案例:使用telnetlib登陆设备

Python网络编程实现自动化,简化Telnet网络配置工作

 


Python网络编程实现自动化,简化Telnet网络配置工作

 

案例:使用telnetlib登陆设备

Python网络编程实现自动化,简化Telnet网络配置工作

 


Python网络编程实现自动化,简化Telnet网络配置工作

 

案例:运行结果对比

Python网络编程实现自动化,简化Telnet网络配置工作

 

手动Telnet登录结果:

C:UsersRichard>telnet 192.168.10.10
Login authentication  
                                                                                                                                                                                                                          Password:                                                                       
Info: The max number of VTY users is 5, and the number of current VTY users on line is 1.                                              The current login time is 2020-01-15 21:12:57.                            
<Huawei>

Python代码运行结果:

#编译器运行Python代码
Info: The max number of VTY users is 5, and the number
      of current VTY users on line is 1.
      The current login time is 2020-01-15 22:12:57.
<Huawei>

总结:

网络自动化是通过工具实现网络自动化的部署、运行和运维,逐步减少对“人”的依赖。可以通过编程语言或者工具实现。

Python是一门完全开源的高级编程语言,语法简单,容易学习。拥有丰富的标准库和第三方库,适用于网络工程领域。

Python的telnetlib模块提供了实现Telnet功能的类telnetlib.Telnet。可以让您初窥网络编程与自动化世界!华为更多开放可编程内容请参考HCIP-Datacom!



Tags:网络编程   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
引言本期分享一个比较常见的网络问题--丢包。例如我们去ping一个网站,如果能ping通,且网站返回信息全面,则说明与网站服务器的通信是畅通的,如果ping不通,或者网站返回的信息不全...【详细内容】
2022-04-21  Tags: 网络编程  点击:(235)  评论:(0)  加入收藏
之前介绍了网络字节序。网络编程之网络字节序详解今天就来实现一下简单的网络程序。先看几个函数// 创建socket套接字int socket(int domain, int type, int protocol);//...【详细内容】
2022-03-17  Tags: 网络编程  点击:(90)  评论:(0)  加入收藏
IP地址和端口号1)IP地址用来标志网络中的一个通信实体的地址。通信实体可以是计算机,路由器等。2)IP地址分类IPV4:32位地址,以点分十进制表示,如192.168.0.1IPV6:128位(16个字节)写成...【详细内容】
2022-03-17  Tags: 网络编程  点击:(92)  评论:(0)  加入收藏
目录4、TCP网络传输的基本流程二、网络编程套接字(socket)5、cookie和session的用法6、基本实现http协议的代码四、传输层协议TCP和UDP4、TCP和UDP之间的对比六、数据链路层和...【详细内容】
2022-01-04  Tags: 网络编程  点击:(144)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  Tags: 网络编程  点击:(80)  评论:(0)  加入收藏
当初写第一个网络程序的时候,就是通过搜索,找各种实例把程序拼凑出来的,并没有进行深入的理解。这个东西用了这么多年,是该来沉淀一下了,也检验一下自己对这块知识的掌握程度。可...【详细内容】
2021-10-18  Tags: 网络编程  点击:(139)  评论:(0)  加入收藏
网络工程领域不断出现新的协议、技术、交付和运维模式。传统网络面临着云计算、人工智能等新连接需求的挑战。企业也在不断追求业务的敏捷、灵活和弹性。在这些背景下,网络自...【详细内容】
2021-02-03  Tags: 网络编程  点击:(280)  评论:(0)  加入收藏
计算机网络计算机网络是指由通信线路互相连接的许多独立自主工作的计算机构成的资源共享集合体。 计算机网络作用:资源共享。 计算机网络组成:许多独立自主工作的计算机。 计...【详细内容】
2020-12-01  Tags: 网络编程  点击:(146)  评论:(0)  加入收藏
Linux网络编程API函数初步剖析今天我们来分析一下前几篇博文中提到的网络编程中几个核心的API,探究一下当我们调用每个API时,内核中具体做了哪些准备和初始化工作。 1、socket...【详细内容】
2020-11-03  Tags: 网络编程  点击:(87)  评论:(0)  加入收藏
01.为何会有HttpsHttp的缺点通信使用明显通信使用明显意味着安全性大大降低,当通信过程被窃听后,无需花费额外的投入就可看到传输的数据。例如使用抓包工具,无需任何配置就可...【详细内容】
2020-09-26  Tags: 网络编程  点击:(82)  评论:(0)  加入收藏
▌简易百科推荐
近几年 Web3 被炒得火热,但是大部分人可能还不清楚什么是 Web3,今天就让w3cschool编程狮小师妹带你了解下 Web3 是什么?与我们熟知的 Web1 和 Web2 又有什么区别呢?web3.0什么是...【详细内容】
2022-07-15  编程狮W3Cschool    Tags:Web3.0   点击:(2)  评论:(0)  加入收藏
1、让我们一起来看下吧,直接上图。 第一眼看到是不是觉得很高逼格,暗黑画风,这很大佬。其实它就是------AidLearning。一个运行在安卓平台的linux系统,而且还包含了许多非常强大...【详细内容】
2022-07-15  IT智能化专栏    Tags:AidLearning   点击:(2)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心! 一、项目简介 今天说的这个软件是一款基于Python+vue的自动化运维、完全开源的云管理平台。二、实现功能 基于RBAC权限系统 录像回放 ...【详细内容】
2022-07-14  菜鸟程序猿    Tags:Python   点击:(3)  评论:(0)  加入收藏
前言今天笔者想和大家来聊聊python接口自动化的MySQL数据连接,废话不多说咱们直接进入主题吧。 一、什么是 PyMySQL?PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,P...【详细内容】
2022-07-11  测试架构师百里    Tags:python   点击:(19)  评论:(0)  加入收藏
aiohttp什么是 aiohttp?一个异步的 HTTP 客户端\服务端框架,基于 asyncio 的异步模块。可用于实现异步爬虫,更快于 requests 的同步爬虫。安装pip install aiohttpaiohttp 和 r...【详细内容】
2022-07-11  VT漫步    Tags:aiohttp   点击:(15)  评论:(0)  加入收藏
今天我们学习下 Queue 的进阶用法。生产者消费者模型在并发编程中,比如爬虫,有的线程负责爬取数据,有的线程负责对爬取到的数据做处理(清洗、分类和入库)。假如他们是直接交互的,...【详细内容】
2022-07-06  VT漫步    Tags:Python Queue   点击:(34)  评论:(0)  加入收藏
继承:是面向对象编程最重要的特性之一,例如,我们每个人都从祖辈和父母那里继承了一些体貌特征,但每个人却又不同于父母,有自己独有的一些特性。在面向对象中被继承的类是父类或基...【详细内容】
2022-07-06  至尊小狸子    Tags:python   点击:(25)  评论:(0)  加入收藏
点击上方头像关注我,每周上午 09:00准时推送,每月不定期赠送技术书籍。本文1553字,阅读约需4分钟 Hi,大家好,我是CoCo。在上一篇Python自动化测试系列文章:Python自动化测试之P...【详细内容】
2022-07-05  CoCo的软件测试小栈    Tags:Python   点击:(27)  评论:(0)  加入收藏
第一种方式:res = requests.get(url, params=data, headers = headers)第二种方式:res = requests.get(url, data=data, headers = headers)注意:1.url格式入参只支持第一种方...【详细内容】
2022-07-05  独钓寒江雪之IT    Tags:Python request   点击:(19)  评论:(0)  加入收藏
什么是python类的多态python的多态,可以为不同的类实例,或者说不同的数据处理方式,提供统一的接口。用比喻的方式理解python类的多态比如,同一个苹果(统一的接口)在孩子的眼里(类实...【详细内容】
2022-07-04  写小说的程序员    Tags:python类   点击:(28)  评论:(0)  加入收藏
站内最新
站内热门
站内头条