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

网络工程师的Python之路:网络运维自动化实战(第2版)

王印 , 朱嘉盛 (作者)  李秀梅 (责任编辑)

  • 书  号:9787121450273
  • 出版日期:2023-03-01
  • 页  数:592
  • 开  本:16(240*190)
  • 出版状态:上市销售
  • 维护人:博文小编
《网络工程师的Python之路:网络运维自动化实战(第2版)》第1版于2020年11月出版发行后大获成功,Python及NetDevOps技术在国内计算机网络圈子里迅速走红,国内与NetDevOps相关的技术文章在网络上如雨后春笋般大量涌现,行业里也出现了很多要求掌握NetDevOps技术的网络工程师职位,并且需求越来越多,NetDevOps是“下一代网络工程师”必须掌握的技能已经成为既定且不可逆的事实。
以Python为主的NetDevOps技术知识更迭很快,第2版将在第1版的基础上添加TextFSM详解、Netmiko详解、Nornir详解、NETCONF详解及RESTCONF详解等5章内容,并去掉pyping、pyntc、netdev等一些不再流行或者作者已经公开宣布不再维护的模块内容。
另外,第2版将在思科设备的基础上添加华为设备的内容,由朱嘉盛老师执笔,相信能对主要使用国产设备的国内网络工程师更加有益。
Python零基础网工自学入门,基于Python 3.10/资深网络老兵、知乎专栏“网路行者”联合“网工手艺”全新打造/新增TextFSM、Netmiko、Nornir、NETCONF、RESTCONF内容,可作为教学用书/以思科、华为设备编排,可适配其他国产设备/持续提供增值服务,为网工营造“自学自驱”学习氛围
王印,知乎专栏“网路行者”作家,知乎ID:弈心,沙特阿卜杜拉国王科技大学(King Abdullah University of Science and Technology,KAUST)高级网络工程师,14年海外从业经验,CCIE#40245。2009年起在新加坡先后任职于美国电信运营商AT&T、美国数据中心公司Equinix、新加坡陆路交通管理局(LTA)、新加坡石林IT咨询公司(SFIT)、美国苹果公司、苏格兰皇家银行(RBS),对大型园区、金融行业的网络设计与运维具有丰富的实战经验。

朱嘉盛,知乎专栏“网工手艺”作者,2010年毕业于华南理工大学,网络工程师13载,长期扎根网络运维第一线。通信网从2G到5G,互联网从几乎空白建设运维到百万级用户规模,在这些领域均具备丰富的大网络实战经验。工作之余,热爱阅读与写作,善于梳理知识,乐于分享和帮助新手。近年来深耕Python网络自动化领域。在本书第1版发行后,将其中的思科设备实验适配成华为设备实验,并加入大量自己的理解与思考,同时在相关读者群中坚持答疑和提供支撑服务,引领众多读者成功将技术应用到其他国产设备。
前言
再版前言



光阴似箭,岁月如梭。转眼之间,距离本书最早的电子书出版已经过去了三年之久。承蒙广大读者的厚爱,电子书和第1版纸质书的发行量远远地超出了我的预期。这也使我感到有必要更新内容,再版此书,以飨读者。
IT技术日新月异,Python和NetDevOps领域也不例外。第2版基于截稿前最稳定的Python 3.10.6,对基于Python 3.8.6的第1版里的每一章内容都作了修改、更新、补充或删减,去掉了一些已经不再流行或作者已经公开宣布不再维护的模块,如pyping、pyntc、netdev等,在第1版总共6章内容的基础上新加入了TextFSM详解、Netmiko详解、Nornir详解、NETCONF详解及RESTCONF详解5章内容,让第2版的内容及书的厚度相较于第1版完全翻倍。
本书第1版发行后,Python及NetDevOps技术在国内计算机网络圈子里迅速走红,国内与NetDevOps相关的技术文章在网络上如雨后春笋般大量涌现。鉴于笔者工作环境的限制,第1版所有实验部分的内容是完全基于思科的设备创作的,很多第1版的读者针对本书的内容以华为、H3C等国产设备做了相应的补充,其中最引人注目的是读者朱嘉盛老师,在本书第1版发行两年来,笔耕不辍的他在知乎个人专栏里将笔者第1版几乎所有的内容都用华为设备“重写”了一遍,加入了很多他个人的理解和心得,并在读者群里耐心解答新人们的各类提问。有鉴于此,第2版特意邀请了朱嘉盛老师作为联合作者,朱嘉盛老师将在本书实验篇章里加入华为设备的使用说明,第7章TextFSM详解也完全由他执笔。另外,也非常感谢电子工业出版社李秀梅老师对本书出版的热情支持与多方面的协助,和这样能力卓著、认真负责的编辑共事是一个作者的幸运。
人类社会在发展,科学技术在进步,虽然国内NetDevOps技术起步较晚,总体落后国外先进国家,但是中国地大物博、人才济济,本书第1版发行两年来,这一领域已经涌现出一大批深入钻研、乐于分享的国内读者。中国已经逐步从2019年之前的NetDevOps学“荒漠”成长为NetDevOps学“大国”。然而要从一个NetDevOps学“大国”成长为一个NetDevOps学“强国”,尚需国内同仁的勇于探索、广泛交流、求真务实,杜绝急功近利,摒弃浮躁之风。若能如此,我们的目标不但能够实现,且将为期不远。希望本书能为我们实现这一目标起到抛砖引玉、添砖加瓦的作用,为国内广大年轻的网络工程专业学子和职业人士提供一个比较准确、系统并富有理念的NetDevOps学读本,不求包罗万象,旨在言简意赅、提纲挈领。这是第1版的宗旨,也是第2版的指南。

王 印
2022年8月23日于沙特阿拉伯
致谢(王印)

首先感谢我的亲人,感谢你们对我学业、事业的支持,一步一步陪伴我走到今天。感谢你们长期以来默默地在生活及其他方面对我的照顾和关怀,让我能够专心完成此书。感谢刚满六岁的儿子弈仁,你的笑容化解了我生活中的一切烦恼。
感谢在新加坡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版时,还不忘多买一本送给我阅读,让我钻研入戏。感谢长期与我并肩作战的网络运维同伴们。感谢长期与我有网络业务对接的上下游伙伴们。
感谢王印老师在NetDevOps领域不断引领与布道。他持续支持我创作,并直接帮我引流,帮我推广,还让我从读者变成了联合作者。感谢编辑李秀梅老师,她最早向王印老师建议把我写的内容纳入本书,并在文稿拟写过程中对我做了细致指导。
感谢愿意与我一起自学自驱、同向而行、相互勉励的读者们。他们有何平、林绍岳、丘兆杰、罗晨曦、李波、李习磊、沈卡、冉茂林、岳国宾、谭振波、曹文欣、杨林森、高磊、裴飞、马天宇、何丹、袁丹鹏、袁泽海、罗升华、瞿祖强、孟令沛、梁勇、宫琦、农雨衡、刘旭光、胡谦、刘学坤、李兵、刘金丰、胡元新、谭永明、刘元成、高华伟、胡玉少、杜鹏飞、岳飞宇、刘崇杰、万质鑫、唐志强、杨华……(排名不分先后)。我们身处不同地域,分属不同行业,从事不同工作,但都围绕着NetDevOps努力实践,以文会友,互为读者,交流切磋,相互鼓励,共同为这一领域做出自己的一点贡献。他们同样是本书的联合作者,我仅因幸运,成为代表!
最后,一起感谢我们对接世界的开放心态、分享知识的开源行动!我们在努力缩小国内国外在本领域的差距,并在试图追赶超越的过程中,同时成就了自己!

目录

第1章 Python的安装和使用 1
1.1 安装Python 1
1.1.1 在Windows下安装Python 3.10.6 1
1.1.2 在Linux下安装Python 3.10.6 5
1.2 在Windows下使用Python 3.10.6 8
1.2.1 交互模式 8
1.2.2 脚本模式 10
1.2.3 运行Python脚本 13
1.3 在Linux下使用Python 3.10.6 16
1.3.1 交互模式 16
1.3.2 脚本模式 17
1.3.3 运行Python脚本 19
1.3.4 Shebang符号 19
第2章 Python基本语法 21
2.1 变量 21
2.2 注释 24
2.3 方法和函数 25
2.4 数据类型 26
2.4.1 字符串 27
2.4.2 整数和浮点数 36
2.4.3 列表 39
2.4.4 字典 44
2.4.5 布尔类型 48
2.4.6 集合、元组、空值 51
第3章 Python进阶语法 54
3.1 条件(判断)语句 54
3.1.1 通过比较运算符作判断 54
3.1.2 通过字符串方法+逻辑运算符作判断 56
3.1.3 通过成员运算符作判断 58
3.2 循环语句 60
3.2.1 while语句 60
3.2.2 for语句 63
3.3 文本文件的读/写 65
3.3.1 open()函数及其模式 65
3.3.2 文件读取 66
3.3.3 文件写入 74
3.3.4 with语句 77
3.4 自定义函数 78
3.4.1 函数的创建和调用 78
3.4.2 函数值的返回 80
3.4.3 嵌套函数 81
3.5 模块 82
3.5.1 不带自定义函数的模块 82
3.5.2 带自定义函数的模块 83
3.5.3 Python内建模块和第三方模块 84
3.5.4 from…import… 87
3.5.5 if __name__ == '__main__': 87
3.6 正则表达式 88
3.6.1 什么是正则表达式 89
3.6.2 正则表达式的验证 89
3.6.3 正则表达式的规则 90
3.6.4 正则表达式在Python中的应用 97
3.7 异常处理 102
3.8 类 106
3.8.1 怎么创建类 107
3.8.2 方法 109
3.8.3 继承 110
第4章 Python网络运维实验(网络模拟器) 112
4.1 实验运行环境 112
4.1.1 实验操作系统 112
4.1.2 思科实验网络拓扑 113
4.1.3 华为实验网络拓扑 114
4.2 Python中的Telnet和SSH模块 114
4.2.1 Telnetlib 115
4.2.2 Paramiko和Netmiko 121
4.3 实验1 input()函数和getpass模块(思科设备) 135
4.3.1 实验目的 136
4.3.2 实验准备 136
4.3.3 实验代码 137
4.3.4 代码分段讲解 138
4.3.5 验证 139
4.4 实验1 input()函数和getpass模块(华为设备) 145
4.5 实验2 批量登录地址不连续的交换机(思科设备) 147
4.5.1 实验目的 147
4.5.2 实验准备 147
4.5.3 实验代码 148
4.5.4 代码分段讲解 149
4.5.5 验证 150
4.6 实验2 批量登录地址不连续的交换机(华为设备) 152
4.7 实验3 异常处理的应用(思科设备) 155
4.7.1 实验目的 156
4.7.2 实验准备 156
4.7.3 实验代码 157
4.7.4 代码分段讲解 159
4.7.5 验证 160
4.8 实验3 异常处理的应用(华为设备) 162
4.9 实验4 用Python实现网络设备的配置备份(思科设备) 164
4.9.1 实验目的 164
4.9.2 实验准备 164
4.9.3 实验代码 167
4.9.4 代码分段讲解 168
4.9.5 验证 170
4.10 实验4 用Python实现网络设备的配置备份(华为设备) 172
第5章 Python网络运维实战(真机) 175
5.1 实验1 大规模批量修改交换机QoS的配置(思科设备) 175
5.1.1 实验背景 176
5.1.2 实验目的 177
5.1.3 实验准备 177
5.1.4 实验代码 178
5.1.5 代码分段讲解 179
5.1.6 验证 181
5.2 实验2 pythonping的使用方法(思科设备) 184
5.2.1 实验背景 185
5.2.2 实验目的 185
5.2.3 实验思路 185
5.2.4 实验准备——脚本1 186
5.2.5 实验代码——脚本1 187
5.2.6 脚本1代码分段讲解 187
5.2.7 脚本1验证 190
5.2.8 实验准备——脚本2 190
5.2.9 实验代码——脚本2 191
5.2.10 脚本2代码分段讲解 193
5.2.11 脚本2验证 196
5.3 实验3 利用Python脚本检查交换机的配置(思科设备) 197
5.3.1 实验背景 197
5.3.2 实验目的 198
5.3.3 实验思路 198
5.3.4 实验准备——脚本1 199
5.3.5 实验代码——脚本1 199
5.3.6 脚本1代码分段讲解 201
5.3.7 脚本1验证 206
5.3.8 实验准备——脚本2 206
5.3.9 实验代码——脚本2 207
5.3.10 脚本2代码分段讲解 208
5.3.11 脚本2验证 210
5.4 实验4 现网超长命令回显处理(华为设备) 211
5.4.1 实验背景 211
5.4.2 实验目的 212
5.4.3 实验思路 212
5.4.4 实验准备——脚本1 213
5.4.5 脚本1验证 214
5.4.6 实验准备——脚本2 214
5.4.7 脚本2验证 216
5.5 实验5 自定义ping工具及exe打包(华为设备) 216
5.5.1 实验背景 216
5.5.2 实验目的 217
5.5.3 实验思路 217
5.5.4 实验准备——脚本 218
5.5.5 脚本验证 219
5.5.6 脚本打包 220
5.5.7 打包验证 220
第6章 Python内置模块与第三方模块详解 222
6.1 JSON 223
6.1.1 JSON基础知识 223
6.1.2 JSON在Python中的使用 224
6.2 正则表达式的痛点问题 226
6.3 TextFSM和ntc-templates 227
6.3.1 TextFSM的安装 228
6.3.2 TextFSM模板的创建和应用 230
6.3.3 ntc-templates 234
6.4 NAPALM 238
6.4.1 什么是NAPALM 239
6.4.2 NAPALM的优点 239
6.4.3 NAPALM的缺点 241
6.4.4 NAPALM的安装 242
6.4.5 NAPALM的应用 242
6.5 asyncio 248
6.5.1 同步与异步 248
6.5.2 异步在Python中的应用 249
6.6 多线程 252
6.6.1 单线程与多线程 252
6.6.2 多线程在Python中的应用 253
6.6.3 多线程在Netmiko中的应用 257
6.7 CSV和Jinja2 260
6.7.1 CSV配置文件及csv模块在Python中的使用 260
6.7.2 Jinja2配置模板 262
6.7.3 Jinja2在Python中的使用 264
6.7.4 将生成的配置命令上传到交换机并执行 267
第7章 TextFSM详解 273
7.1 TextFSM的安装及引例 274
7.1.1 TextFSM的安装 274
7.1.2 TextFSM引例类比 275
7.1.3 TextFSM引例详解 276
7.2 实验1 单行回显单行rule 280
7.2.1 安装tabulate模块 280
7.2.2 创建实验文件夹 281
7.2.3 准备output.txt 282
7.2.4 准备template.txt 282
7.2.5 准备Python脚本 283
7.2.6 执行Python脚本 286
7.2.7 模板匹配过程 286
7.2.8 实验小结 286
7.3 实验2 多行回显单行rule 286
7.3.1 准备output.txt 287
7.3.2 准备template.txt 288
7.3.3 准备Python脚本 289
7.3.4 执行Python脚本 289
7.3.5 模板匹配过程 290
7.3.6 实验小结 291
7.4 实验3 多行回显多行rule,初识关键字 291
7.4.1 准备output.txt 291
7.4.2 准备template.txt 292
7.4.3 准备Python脚本 293
7.4.4 实验调试 294
7.4.5 模板匹配过程 298
7.4.6 实验小结 299
7.5 实验4 关键字List和动作Continue.Record 299
7.5.1 准备output.txt 299
7.5.2 准备template.txt 300
7.5.3 准备Python脚本 300
7.5.4 实验调测 301
7.5.5 模板匹配过程 308
7.5.6 实验小结 308
7.6 TextFSM场景梳理及拓展 309
第8章 Netmiko详解 310
8.1 实验1 通过Netmiko登录一台交换机(思科设备) 311
8.2 实验1 通过Netmiko登录一台交换机(华为设备) 314
8.3 实验2 通过Netmiko向设备做配置(思科设备) 315
8.4 实验2 通过Netmiko向设备做配置(华为设备) 319
8.5 实验3 用Netmiko配合TextFSM或Genie将回显格式化(思科设备) 321
8.6 实验3 用Netmiko配合TextFSM或Genie将回显格式化(华为设备) 327
8.7 实验4 通过Netmiko连接多台交换机(思科设备) 330
8.8 实验4 通过Netmiko连接多台交换机(华为设备) 335
8.9 实验5 Netmiko配合Jinja2配置模板为设备做配置(思科设备) 336
8.10 实验5 Netmiko配合Jinja2配置模板为设备做配置(华为设备) 340
8.11 实验6 在Netmiko中使用enable密码进入设备特权模式(思科设备) 342
8.12 实验6 在Netmiko中使用enable密码进入设备特权模式(华为设备) 346
8.13 实验7 使用Netmiko向设备传送文件(思科设备) 348
8.14 实验7 使用Netmiko向设备传送文件(华为设备) 351
8.15 实验8 使用Netmiko处理设备提示命令(思科设备) 354
8.16 实验8 使用Netmiko处理设备提示命令(华为设备) 357
8.17 实验9 使用Netmiko获取设备主机名(思科设备) 358
8.18 实验9 使用Netmiko获取设备主机名(华为设备) 360
8.19 Netmiko 4的新功能介绍 361
第9章 Nornir详解 368
9.1 Nornir实验准备(思科设备,CentOS系统) 370
9.2 Nornir实验准备(华为设备,Windows系统) 374
9.3 实验1 调用nornir_napalm获取设备的facts和interfaces信息(思科设备) 378
9.4 实验1 调用nornir_napalm获取设备的facts和interfaces信息(华为设备) 381
9.5 实验2 调用nornir_netmiko来获取设备信息(思科设备) 383
9.6 实验2 调用nornir_netmiko获取设备信息(华为设备) 385
9.7 实验3 使用filter()配合F()做高级过滤(思科设备) 386
9.8 实验3 使用filter()配合F()做高级过滤(华为设备) 391
9.9 实验4 使用filter()做简单过滤(思科设备) 393
9.10 实验4 使用filter()做简单过滤(华为设备) 399
9.11 实验5 在filter()中使用lambda过滤单个或多个设备(思科设备) 400
9.12 实验5 在filter()中使用lambda过滤单个或多个设备(华为设备) 403
9.13 实验6 用Nornir为设备做配置(思科设备) 405
9.14 实验6 用Nornir为设备做配置(华为设备) 407
9.15 实验7 用Nornir保存、备份设备配置(思科设备) 408
9.16 实验7 用Nornir保存设备配置(华为设备) 411
9.17 实验8 用Nornir配合Jinja2为设备做配置(思科设备) 412
9.18 实验8 用Nornir配合Jinja2给设备做配置(华为设备) 420
9.19 实验9 Nornir 3 + Scrapli(思科设备) 423
9.20 实验9 Nornir 3 + Scrapli(华为设备) 432
9.21 实验10 Nornir 3 + TextFSM(思科设备) 434
9.22 实验10 Nornir 3 + TextFSM(华为设备) 437
9.23 实验11 Nornir 3 + ipdb(思科设备) 438
9.24 实验11 Nornir 3 + ipdb(华为设备) 444
9.25 实验12 Nornir的Inventory(思科设备) 447
9.26 实验12 Nornir的Inventory(华为设备) 451
9.27 实验13 Nornir的Task(思科设备) 455
9.28 实验13 Nornir的Task(华为设备) 461
9.29 实验14 使用Nornir按需批量修改交换机配置(思科设备) 463
9.30 实验14 使用Nornir按需批量修改交换机配置(华为设备) 467
第10章 NETCONF详解 474
10.1 NETCONF的理论部分 475
10.2 YANG的理论部分 476
10.2.1 什么是数据模型 476
10.2.2 YANG模型 477
10.2.3 YANG模块 478
10.2.4 从GitHub下载YANG模块 478
10.2.5 pyang模块 481
10.3 NETCONF的实验部分 482
10.3.1 实验拓扑和实验环境 482
10.3.2 实验步骤 483
10.4 ncclient 490
10.4.1 ncclient简介 491
10.4.2 ncclient实战应用(get_config) 492
10.4.3 ncclient实战应用(edit_config) 503
10.5 NETCONF实验(华为设备) 510
10.5.1 实验拓扑 510
10.5.2 实验目的 511
10.5.3 启动NETCONF 511
10.5.4 联动ncclient 515
第11章 RESTCONF详解 519
11.1 RESTCONF简介 519
11.1.1 HTTP方法和CRUD的对应关系 520
11.1.2 Postman 520
11.2 RESTCONF实验(Postman) 520
11.2.1 实验环境 520
11.2.2 交换机初始配置 521
11.2.3 Postman初始配置 522
11.2.4 通过GET方法获取交换机配置 525
11.2.5 通过PATCH方法更改交换机配置 529
11.2.6 通过PUT方法替换交换机配置 532
11.2.7 通过DELETE方法来删除设备配置 536
11.3 RESTCONF实验(Requests) 538
11.3.1 Requests模块简介 538
11.3.2 HTTP基础知识回顾 538
11.3.3 Requests实验环境 542
11.3.4 通过GET方法获取交换机配置 543
11.3.5 使用?depth=修改深度 547
11.3.6 通过PATCH方法更改交换机配置 549
11.3.7 通过PUT方法替换交换机配置 552
11.3.8 通过POST方法添加交换机配置 556
11.3.9 通过DELETE方法删除交换机配置 559
11.4 RESTCONF实验(华为设备) 561
11.4.1 实验拓扑 561
11.4.2 实验目的 561
11.4.3 启动RESTCONF 562
11.4.4 联动Postman 564

读者评论