网络工程师的Python之路:网络运维自动化实战
  • 推荐0
  • 收藏2
  • 浏览665

网络工程师的Python之路:网络运维自动化实战

王印 (作者) 

  • 书  号:978-7-121-39806-3
  • 出版日期:2020-11-06
  • 页  数:300
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:李秀梅
电子书 ¥55.30
购买电子书
纸质版 ¥79.00
众所周知,Python这门编程语言的应用场景十分广泛,人工智能、数据分析、爬虫、Web开发、游戏制作等领域都能看到Python的身影,随着近几年Python的大热,和上述Python应用场景相关的书籍、视频、网站等教学资源随处可见,而市面上Python的基础入门教程更是多如牛毛。遗憾的是,在如此丰富的Python教学资源中,为网络工程师量身打造的计算机网络运维方面的教学书籍却相当匮乏。
本书内容基于思科设备和技术,从网络工程师的角度出发,以截稿前的Python 3.8为主,从Python的安装到基础和进阶知识,再到Python在网络运维中的实战应用和网络工程师必须掌握的Python第三方模块,所有内容均为网络工程师量体裁衣,让完全零基础的网络工程师能够快速上手并掌握Python这门编程语言,将网络运维自动化技术运用在日常工作中,在提高工作效率的同时,提升职场竞争力。
本书所有内容均由作者精选,只讲解对网络工程师有用的Python知识,让读者在网络运维自动化技术学习的道路上少走一些弯路。
Python零基础网工自学入门图书/基于Python 3.8/资深网络老兵、知乎专栏“网路行者”作者全力打造/从基础知识到实战应用手把手教学/实战案例源于日常工作
前言

身为一名网络工程师,你有没有在工作中遇到过类似这样的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登录设备去完成开篇提到的三个需求及其他重复、单调、费时的日常工作,我认为需要做些改变来打破传统,提升工作效率,因为你无法想象每隔半年就需要通过人工手动给超过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)操作系统上执行,并在思科设备上进行演示。


致谢
首先感谢我的亲人,感谢你们对我学业、事业的支持,一步一步陪伴我走到今天。感谢你们长期以来默默地在生活及其他方面对我的照顾和关怀,让我能够专心完成此书。感谢刚满三岁的儿子弈仁,你的笑容化解了我生活中的一切烦恼。
感谢在新加坡12年的学习、生活、工作中给予过我无私帮助的同学、朋友、同事们。感谢王渊浩和Lawrence Lee,感谢你们在大学四年同窗及毕业后的生活中给予我方方面面的鼓励和帮助,让独自远离家乡出国留学的我并不感到孤独。感谢Newmedia Express的老板马来西亚人Alan Woo和Shirley Lee,毕业后的半年时间里求职四处碰壁的那段日子是我人生中最灰暗的一段回忆,感恩你们在我人生最低谷时给了我一份证明我自己的工作机会,它改变了我的人生轨迹。感谢Wired-Media公司的新加坡前辈杨绍鹏(Kenneth Yeo),感谢你当年每晚不辞辛劳地绕路驾车送上晚班的我回家,给了我这个刚刚踏入社会、远离家乡在狮城打拼的小职员很多温暖。感谢来自马来西亚的挚友卢忠声,相识十年来,与你在工作和生活中一起努力、相互勉励、相持而笑的日子是我一生中最珍贵的回忆。感谢新加坡同事Darry Tan,感谢你在我任职于苹果公司的那段时间里对我在工作和技术上无私的指导和帮助,感谢你毫无保留地同我分享了你备考JNCIE、CCDE的所有笔记和资料,以前辈的身份同我分享了许多宝贵的人生经验,感恩自己有幸能遇到像你这样真正以德服人、充满正能量的导师和贵人。
感谢我在KAUST的领导Gary Corbett、 Khalid Mustafa及Kevin Sale,没有你们在工作中及工作外给予我充分的支持、关心和信任,我将无法从一名传统网络工程师转型成为NetDevOps工程师,自然也就没有本书的诞生。
I would like to express my sincere gratitude by dedicating this book to Khalid Mustafa,Kevin Sale, Gary Corbett and whoever works with me at King Abdullah University of Science and Technology, without your selfless and continuous support, guidance and encouragement, this book won't be born.
最后感谢所有致力于在计算机网络这一行默默传授知识和分享经验的每一个人,你们改变了整个世界!

目录

第1章 Python的安装和使用 1
1.1 安装Python 1
1.1.1 在Windows下安装Python 3.8.2 2
1.1.2 在Linux下安装Python 3.8.2 5
1.2 在Windows下使用Python 3.8.2 8
1.2.1 交互模式 8
1.2.2 脚本模式 10
1.2.3 运行Python脚本 14
1.3 在Linux下使用Python 3.8.2 18
1.3.1 交互模式 19
1.3.2 脚本模式 19
1.3.3 运行Python脚本 22
1.3.4 Shebang符号 22
第2章 Python基本语法 24
2.1 变量 24
2.2 注释 27
2.3 方法和函数 28
2.4 数据类型 30
2.4.1 字符串 30
2.4.2 整数和浮点数 41
2.4.3 列表 45
2.4.4 字典 50
2.4.5 布尔类型 55
2.4.6 集合、元组、空值 57
第3章 Python进阶语法 62
3.1 条件(判断)语句 62
3.1.1 通过比较运算符做判断 63
3.1.2 通过字符串方法+逻辑运算符做判断 64
3.1.3 通过成员运算符做判断 67
3.2 循环语句 69
3.2.1 while语句 69
3.2.2 for语句 72
3.3 文本文件的读/写 75
3.3.1 open()函数及其模式 75
3.3.2 文件读取 76
3.3.3 文件写入 84
3.3.4 with语句 88
3.4 自定义函数 89
3.4.1 函数的创建和调用 90
3.4.2 函数值的返回 91
3.4.3 嵌套函数 93
3.5 模块 93
3.5.1 不带自定义函数的模块 94
3.5.2 带自定义函数的模块 95
3.5.3 Python内建模块和第三方模块 95
3.5.4 from ... import ... 99
3.5.5 if __name__ == '__main__': 99
3.6 正则表达式 100
3.6.1 什么是正则表达式 101
3.6.2 正则表达式的验证 102
3.6.3 正则表达式的规则 103
3.6.4 正则表达式在Python中的应用 110
3.7 异常处理 116
第4章 Python网络运维实验(GNS3模拟器) 122
4.1 实验运行环境 122
4.2 Python中的Telnet和SSH模块 124
4.2.1 Telnetlib 124
4.2.2 Paramiko和Netmiko 131
4.3 实验1 input()函数和getpass模块 143
4.3.1 实验目的 143
4.3.2 实验准备 143
4.3.3 实验代码 145
4.3.4 代码分段讲解 146
4.3.5 验证 148
4.4 实验2 批量登录不同网段的交换机 152
4.4.1 实验目的 152
4.4.2 实验准备 153
4.4.3 实验代码 154
4.4.4 代码分段讲解 155
4.4.5 验证 156
4.5 实验3 异常处理的应用 157
4.5.1 实验目的 159
4.5.2 实验准备 159
4.5.3 实验代码 160
4.5.4 代码分段讲解 162
4.5.5 验证 164
4.6 实验4 Python实现网络设备的配置备份 166
4.6.1 实验目的 166
4.6.2 实验准备 166
4.6.3 实验代码 170
4.6.4 代码分段讲解 171
4.6.5 验证 173
第5章 Python网络运维实战(真机) 176
5.1 实验1 大规模批量修改交换机QoS的配置 176
5.1.1 实验背景 178
5.1.2 实验目的 178
5.1.3 实验准备 178
5.1.4 实验代码 180
5.1.5 代码分段讲解 181
5.1.6 验证 182
5.2 实验2 pythonping的使用方法 185
5.2.1 实验背景 187
5.2.2 实验目的 187
5.2.3 实验思路 187
5.2.4 实验准备 - 脚本1 188
5.2.5 实验代码 - 脚本1 189
5.2.6 脚本1代码分段讲解 190
5.2.7 脚本1验证 192
5.2.8 实验准备 - 脚本2 193
5.2.9 实验代码 - 脚本2 194
5.2.10 脚本2代码分段讲解 196
5.2.11 脚本2验证 200
5.3 实验3 利用Python脚本检查交换机的配置 201
5.3.1 实验背景 201
5.3.2 实验目的 202
5.3.3 实验思路 202
5.3.4 实验准备 - 脚本1 203
5.3.5 实验代码 - 脚本1 204
5.3.6 脚本1代码分段讲解 206
5.3.7 脚本1验证 211
5.3.8 实验准备 - 脚本2 212
5.3.9 实验代码 - 脚本2 213
5.3.10 脚本2代码分段讲解 215
5.3.11 脚本2验证 217
第6章 Python第三方模块详解 218
6.1 JSON 219
6.1.1 JSON基础知识 220
6.1.2 JSON在Python中的使用 221
6.2 正则表达式的痛点 222
6.3 TextFSM和ntc-templates 224
6.3.1 TextFSM的安装 226
6.3.2 TextFSM模板的创建和应用 227
6.3.3 ntc-templates 231
6.4 NAPALM 237
6.4.1 什么是NAPALM 237
6.4.2 NAPALM的优点 238
6.4.3 NAPALM的缺点 240
6.4.4 NAPALM的安装 241
6.4.5 NAPALM的应用 242
6.5 pyntc 248
6.5.1 pyntc和NAPALM的比较 248
6.5.2 pyntc的安装 249
6.5.3 pyntc的应用 250
6.6 netdev(异步并行) 257
6.6.1 同步与异步 258
6.6.2 异步在Python中的应用 258
6.6.3 netdev的安装和应用 262
6.7 Netmiko(多线程) 267
6.7.1 单线程与多线程 268
6.7.2 多线程在Python中的应用 268
6.7.3 多线程在Netmiko中的应用 273

读者评论

电子书版本

  • Epub