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

网络工程师的Python之路:网络运维自动化实战百度网盘pdf下载

作者:
简介:本篇主要提供网络工程师的Python之路:网络运维自动化实战pdf下载
出版社:电子工业出版社
出版时间:2020-11
pdf下载价格:9.00¥


预览


内容介绍

产品特色

编辑推荐

适读人群 :本书适用于网络工程师、网络安全工程师、网络顾问、网络架构师和计算机网络专业的学生,以及对网络运维自动化技术感兴趣的Linux/Windows系统工程师和系统架构师。

★ 资深网络老兵、知乎专栏“网路行者”作者全力打造

★ 全部内容均为网络工程师量体裁衣

★ 零基础网工自学Python的Go-To Book

★ 基于截稿前的Python 3.8

★ 由浅入深讲解网络运维和Python的完美结合

★ 4大基础知识点,7大进阶知识点,助力传统网工轻松转型

★ 4个GNS3模拟器实验,3个真机实验,实用性强,讲解细致

★ 6大Python第三方网络运维相关模块,举例介绍更多实用工具

★ 手把手教学,让网络运维自动化学习道路更顺畅


内容简介

众所周知,Python这门编程语言的应用场景十分广泛,人工智能、数据分析、爬虫、Web开发、游戏制作等领域都能看到Python的身影,随着近几年Python的大热,和上述Python应用场景相关的书籍、视频、网站等教学资源随处可见,而市面上Python的基础入门教程更是多如牛毛。遗憾的是,在如此丰富的Python教学资源中,为网络工程师量身打造的计算机网络运维方面的教学书籍却相当匮乏。

本书内容基于思科设备和技术,从网络工程师的角度出发,以截稿前的Python 3.8为主,从Python的安装到基础和进阶知识,再到Python在网络运维中的实战应用和网络工程师必须掌握的Python第三方模块,所有内容均为网络工程师量体裁衣,让完全零基础的网络工程师能够快速上手并掌握Python这门编程语言,将网络运维自动化技术运用在日常工作中,在提高工作效率的同时,提升职场竞争力。

本书所有内容均由作者精选,只讲解对网络工程师有用的Python知识,让读者在网络运维自动化技术学习的道路上少走一些弯路。


作者简介

王印,知乎专栏“网路行者”作家,知乎Id:弈心,沙特阿卜杜拉国王科技大学高级网络工程师,11年海外从业经验,CCIE#40245。2009年起在新加坡先后任职于美国电信运营商AT&T、美国数据中心公司Equinix、新加坡陆路交通管理局(LTA)、新加坡石林IT咨询公司(SFIT)、美国苹果公司、苏格兰皇家银行(RBS),对大型园区、金融行业网络的设计与运维具有丰富的实战经验。


内页插图

精彩书评

身为一名在网络安全行业从业的工程师,经常面临客户和现有安全产品整合的编排或者大批量群编辑之类的需求,手动配置耗时费力还容易出错,该书由浅入深地让我这样一个Python新手对脚本自动化编排有了快速上手和实战中调用的经验,非常实用,极力推荐!

—刁文杰,新加坡派拓网络(Palo Alto)亚太区客户体验架构师

计算机网络的自动化和可编程化是未来的发展趋势。王印先生在网络和编程的融合上有着非常丰富的经验。相信本书可以很好地帮助网络工程师们开启网络自动化和可编程化的大门。

—董海宇,新加坡新传媒(Mediacorp)首席网络工程师

第一次认识王印兄弟是基于智慧校园的合作项目,就中国的数字化技术走向国际市场进行了探讨。王印在网络领域的专业性毋庸置疑,又能孜孜不倦地分享知识,值得点赞。本书系统地讲述了Python编程知识,是普惠大众的好书,不论是在校大学生还是职场人士,都能够通过此书获取编程技能,强力推荐!

—樊宪政,阿里巴巴旗下浩鲸科技华南区原总经理、腾讯云(南中国区)原战略合作总监

如今的IT从业者正处在一个最好的时代,一个技术相互链接的时代。传统的网络工程师可以通过学习编程来扩展传统网络技术,自动执行重复而烦琐的工作任务,简化人力的投入和规避误操作的风险。程序员也可以通过学习网络技术来更加深入地了解数据包的传递方式和协议之间的优劣,从而写出更加优质而适用于真实环境的代码。本书作者从网络工程师的角度出发,将程序员编程的思维带入了网络领域。不仅如此,大量真实案例的引用将引起你思维的共鸣与对额外设想可能性的思考。更让我惊讶的是,本书使用类似笔记的形式通过通俗易懂的文字详述了每一个实用案例的完整配置步骤,这将是非常适合网络工程师的Python入门教程。

—李小沛,思科认证讲师、AWS认证讲师、日本电话电报公司(NTT)资深技术顾问

新形势下,虚拟网络发展、SDN兴起、云计算复杂环境及海量操作,对传统网络工程师来说更是不可承受之痛。且在网络工程领域,多受限于网络工程师的技术栈,如何科学有效提高DevOps能力,仍存在不少挑战。本书是市面上唯一一本作者有深厚功底及丰富项目实操经验,且以网络工程师的视角和思路,指出了一条网络自动化从0到1切实可行的转型道路的书。尤其对于没有任何编程能力的网络工程师满足企业网络可视化、自动化、智能化的运维,本书将是不*之选。

—李耀,百度原网络工程师

这是一本以Python语言作为工具,从网络工程师的视角,讲解如何利用Python来实现网络运维自动化的工程实践书籍。全书以操作实践为基础,系统地梳理了Python语言的基础知识,并在此基础上将其运用于网络运维的实战,是一本为网络工程师量身打造的网络运维自动化实践之书,值得一读。

—茹炳晟,腾讯TEG基础架构部资深技术专家、腾讯云*具价值专家

印兄于我,亦师亦友,为人诚恳谦和,技术扎实过硬,每次难题探讨,十分忙碌之中,依然第一时间抽身排忧解难。寒门出贵子,十年磨一剑,透过网络平台,印兄倾囊分享其细腻的技术细节、励志的人生经历、前沿的技术精华和一般人不外传的职场秘诀,他是华人网络工程师领域众人的福音、闪闪的明灯。

—王昊颖Henry Wang,摩根大通(新加坡)ECN网络经理

2009年谷歌在搜索引擎大会上正式提出云计算后,接踵而至的就是把DevOps、SysOps推到了台前。通过云平台越来越成熟的技术,DevOps和SysOps就越来越凸显出了其强大的一面—自动化。而今NetOps作为其中的一个分支,也慢慢走到台前。本书作者是非常有先见之明的,从2013年就开始开发并实践自己的网络自动化脚本,而且从中获得了很大的成效。一个上千台网络设备的架构中,按照传统人为操作更新,可能需要一个星期多人合作,而作者通过网络自动化进行多线程并行操作,大大缩减了对人力资源的需求。在此我还要替本书电子版的读者小田感谢作者。通过两个星期学习搭建环境和体验作者的书内实例,他获得法国巴黎银行的青睐,加入了其日常网络运维团队。由此可见,NetOps已经成为未来网络工程师的一个趋势。本书将会成为你从一个普通网络工程师转型为自动化网络工程师很好的启蒙教材。

—王渊浩,香港电讯盈科(PCCW)资深系统工程师

本书作者是网络行业新人老兵,也是我见过英文能力最突出的网络工程师。说新人是因为他年纪确实不大,说老兵是因为他的工作经历以及参与项目的规模和质量是这个年龄的人无法想象的。本书就是他十多年海外工作经验的最好总结,具有很强的实操性。相信能够为下一代奋斗的网络工程师提供不可估量的精神和业务食粮。

—温健,澳大利亚蒙纳士大学苏州校区首席运营官、总经理

对于很多跨专业的读者而言,一般IT编程语言类书籍往往难以入手并持续阅读。其很大一部分原因在于读者背景的广泛性造就了对于基本概念了解的参差不齐。在此基础上,阅读与学习的效果往往大打折扣。而本书名为《网络工程师的Python之路》,则有针对性地解决了这个问题。王兄从一个传统网络工程师的角度入手,指导学习Python编程语言,并利用其实现网络自动化任务。该书运用了网络工程师最熟悉的路由器、交换机来配合展示Python语言的特性,并适当结合生产环境中常常出现的自动化需求,让拥有基本网络背景的工程师们,可以迅速掌握Python的精髓,理解网络自动化的优势,并且轻松展开模拟练习。在网络自动化的大趋势下,王兄的力作不仅启发、激励我去给网络自动化进程添一份绵力,更值得推广给所有有志于此的同行们。未来,期待王兄的更多力作。

—吴茱萸 Conor Wu,爱尔兰爱彼迎(Airbnb)全球网络工程师

我和王印相识于新加坡,他是个网络红人,亲身参与了很多网络运维环境和方案设计:有国际知名投行,有政府部门,也有企业巨头。更可贵地是,他乐于分享网络实战经验和方案,并且热心给网络同行很多帮助和启发。随着互联网的高速发展,在维护和管理成百上千的网络设备时,传统网络工程师面临着很多挑战和局限,SDN的兴起也要求网络工程师具有编程能力。传统网络工程师往往不懂编程,而编程人员又往往不了解网络运维和方案。在这个跨界的年代,懂网络又懂Python会让作为网络工程师的你变得更有竞争力,同时得到猎头公司的青睐。市面上很难找出一本专门针对网络工程师来学习Python的书,而本书由浅入深,并在后期以实验的方式讲解Python在网络运维中的应用,可以让你更快理解Python如何让网络运维实现自动化,强烈推荐!

—熊希仁Ryan Xiong,华为(新加坡)原网络方案经理、梭子鱼网络(Barracuda Networks)售前工程师

看过很多教Python编程的,不是逻辑混乱就是非干货,本书作者王印是资深网络老兵,从新加坡开始先后任职于美国AT&T、苹果、苏格兰皇家银行、沙特KAUST等世界一流公司和大学,从行业经验看,少有人能匹敌。整本书逻辑清晰,由浅入深,连配图的标记都很用心,是一本很难得的实用型编程工具书,有料有颜值,值得拥有。

—杨雯莉,深圳申鲲科技有限公司CBO、中国移动互联网产品原品牌管理师

随着科技和商业的快速发展、第四次工业革命(4IR)的到来,网络技术的演变日新月异。

在今天的网络技术领域里,如何能够满足大规模网络灵活高效、高质稳定运维的极致需求,是所有IT管理者都应该深入思考的问题,我相信网络基础设施建设和运维管理的标准化、自动化、数据可视化、智能化必然是大势所趋。本书作者结合丰富的实际案列,通过分享亲身经历及其转型经验,由浅入深地讲解了网络运维与Python的完美结合,实现其异曲同工之妙,并附有广阔的国际视野。本书干货满满,不仅能够带你走上新一代网络工程师快速转型之路,还能助你在未来国际化网络技术的舞台上蓬勃发展。

此外,作者本人不但是有着10多年经验的资深网络工程师,还为许多IT从业人带来了鼓舞和启示,此书是所有网络从业人员的“Go-To Book”,值得学习推荐。

—叶龙Leon Ye,阿里巴巴亚太区IT经理

认识王印是在深圳城市数字化转型委员会的一次活动上。这位辗转了多个国家的IT精英,现在应该已成为沙特阿拉伯现代化转型的栋梁之材。我虽与他交流不多,但有幸看到他的书稿还是十分高兴。回想20世纪80年代中期我在国内大学教企业管理信息化,至今还对Fortran、ALGOL、COBOL、BASIC等应用程序记忆犹新。我虽未接触过Python,但看王印的书,感觉思维逻辑和表述层次非常清晰,相信本书会帮到以中文为母语的编程人士。

—易全,深圳市信息化与工业化融合研究院执行院长、深圳市科技金融促进会创会会长、城市数字化转型委员会高级顾问


目录

第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


精彩书摘

5.1 实验1 大规模批量修改交换机Qos的配置

在第4章的实验2中提到了,要使用Python来批量连接管理IP地址不连续的网络设备,可以把设备的管理IP地址预先写入一个文本文件,然后在代码中使用for循环配合open()函数和readlines()函数逐行读取该文本文件里的管理IP地址,达到循环批量登录多台网络设备的目的。

在成功登录交换机后,我们可以配合command.send()来对网络设备“发号施令”,但在前面的例子中我们都是将要输入的命令预先写在脚本里,比如command.send("conf t\n")、command.send("router eigrp 1\n")和command.send("end\n")等。这种将配置命令预先写在脚本里的方法便于初学者理解和学习,在只有几台设备的实验环境中常用。但是在有成千上万台网络设备需要管理的生产环境中,这种方法显得很笨拙,缺乏灵活性。举例来说,假设生产环境中有不同型号、不同操作系统、不同命令格式的设备各1 000台,比如思科的3750和3850交换机,前者运行的是IOS,后者运行的是IOS-XE。

最近你接到任务,需要分别给这两种交换机批量修改QoS的配置,因为两者的命令格式差异巨大(一个是MLS QoS,一个是MQC QoS),必须反复修改command.send()部分的代码,如果只是简单数条命令还好办,一旦遇到大规模的配置,那么这种方法的效率会很低。

解决这个问题的思路是分别创建两个文本文件,一个用来存放配置3750交换机要用的命令集,另一个用来存放配置3850交换机要用到的命令集,然后在Python脚本里同样通过for循环加open()函数来读取两个文件里的内容,达到分别给所有3750和3850交换机做QoS配置的目的,这样做的好处是无须修改command.send()部分的代码,因为所有的命令行已经在文本文件里预先设置好了。

但是新的问题又来了,每次配备不同型号的设备,都必须手动修改open()函数所打开的配置文本文件及IP地址文件,比如在给3750交换机做配置时,需要open('command_ 3750.txt')和open('ip_3750.txt'), 给3850交换机做配置时,又需要open('command_3850.txt')和open('ip_3850.txt'),这样一来二去修改配置脚本的做法大大缺乏灵活性。如果只有两种不同型号、不同命令格式的设备还能应付,那么当生产环境中同时使用3750(IOS)、3850(IOS-XE)、Nexus 3k/5k/7k/9k(NX-OS)、CRS3/ASR9K(IOS-XR),甚至其他厂商的设备,而又要对所有这些设备同时修改某个共有的配置。比如网络新添加了某台TACACS服务器,要统一给所有设备修改它们的AAA配置;又或者网络新添加了某台NMS系统,要统一给所有设备修改SNMP配置。因为不同OS的设备的配置命令完全不同,这时就能体会到痛苦了。此时我们可以用下面实验中的sys.argv来解决这个问题。

5.1.1 实验背景

本实验将在真机下完成。

假设现在手边有3台管理IP地址在192.168.100.x /24网段的3750交换机和3台管理IP地址在172.16.100.x/24网段的3850交换机,它们的hostname和管理IP地址分别如下。

3750_1: 192.168.100.11
3750_2: 192.168.100.22
3750_3: 192.168.100.33

3850_1: 172.16.100.11
3850_2: 172.16.100.22
3850_3: 172.16.100.33


前言/序言

身为一名网络工程师,你有没有在工作中遇到过类似这样的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.

最后感谢所有致力于在计算机网络这一行默默传授知识和分享经验的每一个人,你们改变了整个世界!