搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
出版时间 :
网络工程师的Python之路:网络运维自动化实战(博文视点出品)
0.00     定价 ¥ 79.00
浙江图书馆
  • ISBN:
    9787121398063
  • 作      者:
    王印
  • 出 版 社 :
    电子工业出版社
  • 出版日期:
    2020-11-01
收藏
编辑推荐

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

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

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

★ 基于截稿前的Python 3.8

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

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

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

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

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


展开
作者简介

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


展开
内容介绍

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

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

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

 


展开
精彩书评

身为一名在网络安全行业从业的工程师,经常面临客户和现有安全产品整合的编排或者大批量群编辑之类的需求,手动配置耗时费力还容易出错,该书由浅入深地让我这样一个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,但看王印的书,感觉思维逻辑和表述层次非常清晰,相信本书会帮到以中文为母语的编程人士。 

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


展开
精彩书摘

 

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


展开
目录

第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

 


展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

温馨提示:请使用浙江图书馆的读者帐号和密码进行登录

点击获取验证码
登录