前言
身为一名网络工程师,你有没有在工作中遇到过类似这样的3个需求?
需求1:某大型企业的生产网络里有5 000台思科交换机,最近公司更换了TACACS服务器,将思科的ACS替换成了ISE,因为ISE的IP地址和ACS的不同,你需要在这5 000台交换机上为ISE做相关的AAA配置,并移除原有的ACS的AAA配置。
需求2:公司的网络安全部门提醒你这5 000台思科交换机现有的IOS(Internetwork Operating System,互联网操作系统)版本有很多安全漏洞,需要尽快升级它们的IOS版本。
需求3:公司聘请的技术审计人员在随机抽样检查了一些现有的交换机配置后,发现还有很多交换机的配置需要做安全加固和优化,比如部分交换机在Line VTY的配置下依然允许通过Telnet协议远程访问,部分交换机没有按要求配置DHCP Snooping和Spanning Tree Portfast等,你的上司让你在最短的时间内从这5 000台交换机里找出哪些需要做安全加固和优化,给出它们的Hostname和IP地址,以及详细说明它们各自需要加固和优化哪些配置。
时间回到2013年,刚刚考取CCIE的我第一次听说软件定义网络(Software Defined Network,SDN)。当时我在国外某技术论坛读到一篇关于SDN的帖子,作者把SDN写得神乎其神,中心思想就是:完全依靠传统网络工程师手动配置和手动排错,效率低下的传统网络运维迟早会迎来“寿终正寝”的一天,取而代之的就是能带来“革命性改变”的SDN。读完该文后,作为传统网络工程师的我感觉到一股强烈的危机感,当时自己花了很长时间去学习和研究Mininet这个以OpenFlow为主、轻量级的SDN模拟器。在研究了一段时间的Mininet后,除了对OpenFlow有一些了解,我并没有感觉到 SDN(OpenFlow)为自己从事的网络运维工作带来什么实质性的帮助和改变。公司里思科路由器和交换机的配置依然需要一台一台登录去改,IOS操作系统的升级依然需要一台一台地手动去做;当对设备的配置、硬件类型和序列号做审计检查时,依然需要一台一台登录设备去执行各种show命令,对输出结果用肉眼去筛选和检查。这些完全依靠网络工程师人工的传统运维工作方式不仅效率低下,而且容易出现人为失误,造成不必要的麻烦。自己一度对SDN嗤之以鼻,认为该技术的应用场景太过局限,传统企业网接入层的运维依然离不开网络工程师的手动管理。
2016年,在新加坡工作将近7年后,我有幸受聘于沙特阿卜杜拉国王科技大学(KAUST),从东到西跨越整个亚洲来到这个对很多人来说既熟悉又陌生的国度,在这里担任高级网络工程师一职。面对KAUST近万台思科设备的庞大网络,看着网络运维组的同事依然日复一日地用手动的方式一台一台通过SSH登录设备去完成开篇提到的3个需求及其他重复、单调、费时的日常工作,我认为需要做些改变来打破传统,提升工作效率,因为你无法想象每隔半年就需要通过人工手动给超过5 000台思科交换机升级IOS是一项多么庞大并且费时的工程。以此为契机,在工作之余,我花了近半年的时间从零开始自学了Python,并在KAUST的生产网络里进行了实践,写了大大小小几十个网络运维自动化的脚本,最终成功通过Python语言实现了全面的网络运维自动化,极大地提高了KAUST网络运维组的工作效率和准确率,让同事有更多的时间和精力学习其他与计算机网络相关的专业技能,帮助他们从传统网络工程师向NetDevOps工程师转型。
众所周知,Python这门编程语言的应用场景十分广泛,人工智能、数据分析、爬虫、Web开发、游戏制作等领域都能看到Python的身影,随着近几年Python的大热,与上述Python应用场景相关的书籍、视频、网站等教学资源随处可见,而Python的基础入门教程更是多如牛毛。遗憾的是,在如此丰富的Python教学资源中,为网络工程师量身打造的计算机网络运维方面的教学书籍却相当匮乏。市面上有部分以NetDevOps为主题、讲解网络运维自动化技术的书籍,这类书籍会走马观花地把Linux、Bash、XML/JSON/YANG、NETCONFIG、Jinja、StackStorm等技术都讲一遍,虽然其中有关于Python的篇幅,但是内容有限,讲解不够深入,没有系统地以网络运维工作中的实战代码深入浅出地讲解Python在大型网络运维中的实际应用。很多想学Python的网络工程师在读完这类书籍后依然一头雾水,不知道怎样将Python运用到工作中。还有一类系统讲解Python的基础入门教材,则把Python讲得过于详细,其中有很多知识点在网络运维中很少用到,甚至根本用不到,导致读者学习周期过长,学习效果也不够理想。另外,这类教材的作者都是专业程序员出身,术业有专攻,他们对网络技术、网络运维的了解不如专业网络工程师透彻,自然也就不可能量体裁衣地写一本适合网络工程师学习的Python教程。
有鉴于此,作为网络工程师出身、已经从事网络运维10年的我决定结合自己在学习Python和在工作中使用Python时积累的心得和经验,写一本为网络工程师量身打造的Python教程,以帮助所有希望转型或正准备转型的传统网络工程师,让大家在学习网络运维自动化技术的道路上少走一些弯路。
另外,Python核心团队已经宣布从2020年1月1日起不再对Python 2提供维护和社区支持,由于Python 3不兼容Python 2,因此本书所有内容将基于截稿前最新的Python 3.8.2做演示。鉴于部分读者具有一定Python 2的基础,本书也会对Python 2和Python 3有明显差异的技术点做讲解和演示。
本书内容简介
本书共6章,分别介绍如下内容。
第1章 Python的安装和使用
工欲善其事,必先利其器。本章将详细介绍Python在Windows和Linux操作系统上的安装和使用方法。
第2章 Python基本语法
为网络工程师量身打造的Python编程基础知识的详细讲解是本书的重点内容,分为基本语法(本章)和进阶语法(第3章)两部分。本章主要介绍Python的变量、方法与函数、数据类型等基础内容。
第3章 Python进阶语法
承接第2章的内容,本章将讲解Python中的条件(判断)语句、循环语句、文本文件的读/写、自定义函数、模块、正则表达式及异常处理等网络工程师必须掌握的Python进阶知识点。
第4章 Python网络运维实验(GNS3模拟器)
第4章和第5章将分别以实验和实战的形式讲解Python在网络运维中的具体应用。本章共分为4个实验,实验难度循序渐进,所有实验都将在GNS3模拟器上演示,实验代码难度由浅入深,配合详细的讲解,帮助读者学习和理解。
第5章 Python网络运维实战(真机)
本章提供3个在生产网络里的设备上实战运行的Python代码进行讲解和演示。每个Python脚本都将提供详细的分段讲解,并且提供脚本运行前、脚本运行中、脚本运行后的截图,帮助读者清晰、直观地了解Python是如何把繁杂、单调、耗时的传统网络运维工作实现自动化的。
第6章 Python第三方模块详解
在第4、5章的基础上,本章举例介绍更多实用的基于Netmiko的Python第三方模块在网络运维中的应用,如TextFSM、ntc-template、Napalm、pyntc、netdev等,讲解它们如何帮助没有API的老旧网络设备实现更多网络运维自动化的功能,如何通过单线程异步及多线程的方式提高Python脚本的运行效率。
读者对象
本书适用于熟练掌握了计算机网络技术基础知识,并且希望学习以Python为代表的网络运维自动化技术的网络工程师、网络安全工程师、网络顾问、网络架构师,以及计算机网络专业的在校学生。本书也适合已经具备一定Python编程基础,并且对网络运维自动化技术感兴趣的Linux/Windows系统工程师和系统架构师。
本书特色
本书是为网络工程师量身打造的Python学习教程,本身就是网络工程师的作者提炼和精选了一些适合网络工程师学习的Python知识点来讲解,帮助对包括Python在内任何编程语言都是零基础的传统网络工程师快速学习和上手Python。本书并不是一本全方位的Python教程,毕竟术业有专攻,网络工程师不等于全职软件开发人员。
另外,本书会给出Python各种专业术语对应的英文词汇,比如字符串(String)、代码缩进(Indentation)、异常处理(Exception Handling)等,方便读者在延伸学习和查询与Python相关的英文资料时能快速适应。
最后,本书所有代码都将在Linux(CentOS)操作系统上执行,并在思科设备上进行演示。
读者服务
微信扫码回复:39806
• 获取作者提供的各种共享文档、线上直播、技术分享等免费资源
• 加入本书读者交流群,与作者互动
• 获取博文视点学院在线课程、电子书20元代金券