首页>参考读物>计算机科学与技术>软件与程序设计

Python网络编程(原书第2版)
作者 : [美] 埃里克·周(Eric Chou) 著
译者 : 熊安萍 邹洋 张璞 李鸿健 等译
丛书名 : 华章程序员书库
出版日期 : 2019-07-04
ISBN : 978-7-111-63033-3
定价 : 109.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 324
开本 : 16
原书名 : Mastering Python Networking, Second Edition
原出版社: Packt Publishing Ltd.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书从使用者的角度出发编写,学习难度由简到难。首先简单回顾了TCP/IP协议和Python基础知识,然后探讨了如何使用Python管理网络设备,尤其是如何与传统的路由器和交换机进行通信。之后介绍了如何使用Python自动化框架Ansibel来实现批量系统配置、批量程序部署、批量运行命令等功能。介绍如何采用Python工具实现基础的网络安全管理,并介绍了如何使用Python进行网络监控、搭建Web服务,也介绍了其它的网络运维管理相关技术基础,如:git代码仓库的使用、Jenkins持续集成和网络的测试驱动开发等。本书包含的内容涉及到许多基础工具的使用,每个知识点都有示例代码,读者可以一边学习,一边实践。

图书特色

00

图书前言

正如查尔斯·狄更斯在《双城记》中写道:“这是最好的时代,也是最坏的时代;这是智慧的时代,也是愚蠢的时代。”这看似矛盾的话完美地描述了改变和过渡时期的混乱。无疑网络工程领域正在经历着类似的快速改变。当软件开发在网络各方面更集成化时,传统的命令行接口和垂直集成的网络栈方法不再是管理当今网络的最佳方式。对于网络工程师来说,这种变化充满了兴奋和机遇,但也充满挑战,特别是对于那些需要适应和快速跟上变化的人。本书介绍了如何从传统平台发展为基于软件驱动实践的平台,以帮助网络专业人员适应这一过渡时期。
在本书中,我们选用Python作为掌握网络工程任务的编程语言。Python是一种易学习的高级编程语言,可以有效地激发网络工程师的创造力并提高他们解决问题的技能,以简化日常操作。Python正在成为许多大型网络的组成部分。
自第1版出版以来,我已经与本书的许多读者进行了有趣而有意义的对话。我谦卑地、发自内心地接受读者对本书第1版的反馈意见,在第2版中,我试图让示例和技术更具相关性。特别是,传统的OpenFlow SDN章节被一些网络DevOps工具所取代。我真诚地希望新添加的内容对你有所帮助。
时代的变革为技术进步提供了巨大的机会。本书中的概念和工具在我的职业生涯中给了我很大的帮助,我希望它们对你也同样有用。
本书读者对象
本书适合管理网络设备组的IT专业人员、运营工程师以及希望使用Python和其他工具来迎接网络挑战的人。
本书涵盖的内容
第1章从OSI和客户端–服务器模型到TCP、UDP和IP协议簇,回顾当今组成互联网通信的基础技术。该章将回顾Python语言的基础知识,例如类型、操作符、循环、函数和包。
第2章使用实际示例来阐述怎样在一台网络设备上使用Python执行命令,还将讨论在自动化中使用单CLI接口的挑战。该章使用Pexpect和Paramiko库作为示例。
第3章讨论支持应用程序编程接口(API)和其他高级交互方法的新的网络设备,也举例说明了允许低级任务的抽象工具,同时关注网络工程师的意图。该章将使用Cisco NX-API、Juniper PyEZ和Arista Pyeapi作为示例。
第4章讨论Ansible基础,Ansible是一个开源的、基于Python的自动化框架。Ansible比API更进了一步,专注声明性的任务意图。该章将介绍使用Ansible及其高级架构的优势,我们还将看到在Cisco、Juniper和Arista设备上的一些Ansible实际示例。
第5章建立在前一章知识的基础上,涵盖了更高级的Ansible主题,包括条件、循环、模板、变量、Ansible Vault和角色。此外,还将介绍编写自定义模块的基础知识。
第6章介绍几种Python工具来帮助你保护网络,将讨论使用Scapy进行安全性测试、使用Ansible快速实现访问列表,以及使用Python进行网络取证分析。
第7章介绍使用不同的工具监控网络。该章包含一些使用SNMP和PySNMP来查询以获取设备信息的示例。Matplotlib和Pygal示例用绘制结果进行展示,该章以使用Python脚本作为输入源的Cacti示例收尾。
第8章介绍更多的网络监控工具。该章将首先使用Graphviz从LLDP信息中绘制网络图。我们使用NetFlow和其他技术实现基于推送机制的网络监控示例,使用Python来解码流数据包并使用ntop来可视化结果,还将介绍Elasticsearch及其怎样用于网络监控。
第9章展示如何使用Python Flask Web框架为网络自动化创建自己的API。网络API提供的好处包括从网络详细信息中抽象出请求者、整合和自定义操作,以及通过限制可用操作来提供更好的安全性。
第10章展示如何使用AWS构建功能强大且具有弹性的虚拟网络。我们将介绍虚拟私有云技术,如CloudFormation、VPC路由表、访问列表、弹性IP、NAT网关、直连等。
第11章说明怎样充分利用Git进行协作和代码版本控制。该章将给出使用Git进行网络操作的实际示例。
第12章使用Jenkins自动创建操作管道,以节省时间并提高可靠性。
第13章解释如何使用Python的unittest和PyTest创建简单的测试来验证代码。我们将看到为测试网络编写的示例,以验证可达性、网络延迟、安全性和网络事务。我们还将看到怎样在持续集成工具(例如Jenkins)中集成测试。
充分利用本书
为了充分利用本书,读者应具备一些基本的网络操作知识和Python基础知识。大多数章节可以按任意顺序阅读。第4章和第5章应按顺序阅读。除了本书开头介绍的基本软件和硬件工具外,也介绍了与每章相关的新工具。
强烈建议读者动手实践本书中的示例。
下载示例代码和彩色图片
本书的示例代码及所有截图和样图,可以从http://www.packtpub.com通过个人账号下载,也可以访问华章图书官网http://www.hzbook.com,通过注册并登录个人账号下载。
约定
本书使用了许多排版约定。
代码文本(CodeInText):表示文本中的代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、用户输入和Twitter句柄。下面是一个示例:“auto-config还为Telnet和SSH生成了vty访问。”
代码块如下:
# This is a comment
print(

上架指导

计算机\程序设计

封底文字

基础设施中的网络为我们部署、维护和服务应用程序奠定了基础。Python是一种易学习的高级编程语言,可以有效地激发网络工程师的创造力并提高他们解决问题的技能。本书将带你踏上基于Python的网络管理之旅,帮助你从传统网络工程师转变成为下一代网络做好准备的网络开发人员。
本书首先回顾Python的基础知识,并讲解Python怎样与遗留的和支持API的网络设备交互。之后,你将学会利用高级Python包和框架来执行自动化、监控、管理和增强其安全性等网络工程任务。接着,你将使用Jenkins进行持续的网络集成,并用测试工具来验证网络。最后,你将能够轻松地使用Python执行所有网络任务。

通过阅读本书,你将学到:
用Python库来与网络交互。
使用Python集成Ansible 2.5来控制Cisco、Juniper和Arista eAPI网络设备。
利用现有的框架来构建高级API。
学会如何在AWS 云中构建虚拟网络。
理解如何使用Jenkins自动部署网络中的变化。
使用PyTest和Unittest进行测试驱动的网络开发。

作者简介

[美] 埃里克·周(Eric Chou) 著:埃里克·周(Eric Chou)

资深技术专家,在网络工程领域有超过18年的从业经验。曾就职于亚马逊AWS和微软Azure等公司,参与并管理了一些业内的大型网络。Eric致力于网络自动化、Python以及帮助企业建立更好的安全机制。他是关于Python和网络安全领域的几本书籍和在线课程的作者,还是两项IP电话专利的荣誉发明者。他通过图书、网络课程和博客分享其对技术的浓厚兴趣,并且对一些受欢迎的Python开源项目做出了贡献。

译者序

在当今的互联网时代,云计算中心和大数据中心得到广泛部署和应用。谷歌、亚马逊、微软、阿里巴巴、腾讯等公司都已经开展了云计算和大数据中心战略,其中涉及大量的网络设备和服务器管理。管理包含众多设备的网络将是一项艰巨的任务。本书介绍了如何使用Python来实现网络管理。
本书从使用者的角度出发,学习难度逐渐增加。首先简单回顾了TCP/IP和Python基础知识,然后探讨了如何使用Python管理网络设备,尤其是如何与传统的路由器和交换机进行通信。之后介绍了如何使用Python自动化框架Ansible来实现批量系统配置、批量程序部署、批量运行命令等功能,如何采用Python工具实现基础的网络安全管理,如何使用Python进行网络监控、搭建Web服务,还介绍了其他的网络运维管理相关技术,如Git代码仓库的使用、Jenkins持续集成和网络的测试驱动开发等。本书包含的内容涉及许多基础工具的使用,每个知识点都有示例代码,读者可以一边学习,一边实践。
本书是一本实用型的基础技术实践工具书,技术性较强,如果你想快速了解计算机网络管理、网络安全、自动化运维、Python Web搭建、网络测试相关的知识,本书很适合你。本书涵盖的知识点主要是网络运维相关技术,在学习完所有的章节之后,读者能对网络的管理有初步的了解。每个章节的后面部分都是有一定难度的扩展资源,循序渐进,帮助读者提升网络运维能力。
感谢机械工业出版社的编辑不辞辛苦地与译者沟通相关细节内容。
本书由710翻译团队翻译,除封面署名外,710翻译团队还包括实验室苏贞老师以及申勇、代明月、游涯、明欢欢、胡译文、朱红倩、秦铭远等研究生,他们参与了部分章节的翻译工作。由于译者的时间和水平有限,翻译中的疏漏和错误在所难免,请读者和同行不吝指正。

710翻译团队
2019年于重庆邮电大学

图书目录

译者序
前言
关于作者
关于审稿人
第1章 回顾TCP/IP协议簇和Python 1
1.1 互联网概述 2
1.1.1 服务器、主机和网络组件 2
1.1.2 数据中心的兴起 3
1.2 OSI模型 5
1.3 客户端–服务器模型 6
1.4 网络协议簇 7
1.4.1 传输控制协议 7
1.4.2 用户数据报协议 8
1.4.3 互联网协议 9
1.5 Python语言概述 10
1.5.1 Python版本 11
1.5.2 操作系统 12
1.5.3 运行一个Python程序 12
1.5.4 Python内置类型 13
1.5.5 Python操作符 17
1.5.6 Python控制流工具 18
1.5.7 Python函数 19
1.5.8 Python类 19
1.5.9 Python模块和包 20
1.6 小结 21
第2章 低级网络设备交互 22
2.1 CLI面临的挑战 23
2.2 搭建虚拟实验 24
2.2.1 Cisco VIRL 25
2.2.2 Cisco DevNet和Cisco dCloud 28
2.2.3 GNS329
2.3 Python Pexpect 库30
2.3.1 Pexpect安装31
2.3.2 Pexpect概述31
2.3.3 第一个Pexpect程序35
2.3.4 Pexpect的更多功能36
2.3.5 Pexpect和SSH37
2.3.6 将Pexpect的所有内容都放到脚本中37
2.4 Python Paramiko库38
2.4.1 Paramiko安装39
2.4.2 Paramiko概述39
2.4.3 第一个Paramiko程序42
2.4.4 Paramiko的更多功能42
2.4.5 Paramiko可重用性44
2.5 展望45
2.6 小结46
第3章 API和意图驱动网络47
3.1 基础设施作为代码48
3.1.1 意图驱动网络48
3.1.2 屏幕抓取与API结构化输出49
3.1.3 基础设施的数据建模作为代码51
3.2 Cisco API和Cisco ACI52
3.2.1 Cisco NX-API 53
3.2.2 Cisco和YANG模型58
3.2.3 Cisco ACI58
3.3 Juniper网络的Python API60
3.3.1 Juniper和NETCONF61
3.3.2 开发者的Juniper PyEZ64
3.4 Arista Python API68
3.4.1 Arista eAPI管理68
3.4.2 Arista Pyeapi库72
3.5 厂商中立的库76
3.6 小结76
第4章 Python自动化框架—Ansible基础知识77
4.1 一个更具声明性的框架78
4.2 Ansible示例79
4.2.1 控制节点安装79
4.2.2 运行不同版本的Ansible源代码80
4.2.3 实验建立81
4.2.4 第一个Ansible playbook示例81
4.3 Ansible的优点85
4.3.1 无代理85
4.3.2 幂等性85
4.3.3 简单且可扩展86
4.3.4 网络供应商支持86
4.4 Ansible架构87
4.4.1 YAML88
4.4.2 清单89
4.4.3 变量90
4.4.4 使用Jinja2的模板93
4.5 Ansible网络模块93
4.5.1 本地连接和facts93
4.5.2 provider参数94
4.6 Ansible Cisco示例95
4.7 Ansible Juniper示例99
4.8 Ansible Arista示例101
4.9 小结102
第5章 Python自动化框架—进阶知识103
5.1 Ansible条件语句104
5.1.1 when子句104
5.1.2 Ansible网络facts106
5.1.3 网络模块的条件化108
5.2 Ansible循环109
5.2.1 标准循环109
5.2.2 循环字典110
5.3 模板112
5.3.1 Jinja2模板113
5.3.2 Jinja2循环114
5.3.3 Jinja2的条件化114
5.4 组变量和主机变量116
5.4.1 组变量117
5.4.2 主机变量118
5.5 Ansible Vault119
5.6 Ansible的include和角色120
5.6.1 Ansible的include语句120
5.6.2 Ansible的角色121
5.7 编写自定义Ansible模块124
5.7.1 第一个自定义模块125
5.7.2 第二个自定义模块127
5.8 小结128
第6章 Python下的网络安全129
6.1 搭建实验环境129
6.2 Python Scapy132
6.2.1 安装Scapy133
6.2.2 交互示例133
6.2.3 嗅探135
6.2.4 TCP端口扫描136
6.2.5 ping集合138
6.2.6 常见攻击139
6.2.7 Scapy资源140
6.3 访问列表140
6.3.1 使用Ansible实现访问列表141
6.3.2 MAC访问列表143
6.4 Syslog搜索144
6.5 其他工具147
6.5.1 专用VLAN147
6.5.2 使用Python的UFW147
6.5.3 延伸阅读148
6.6 小结148
第7章 Python下的网络监控—第一部分150
7.1 实验准备151
7.2 SNMP151
7.2.1 准备152
7.2.2 PySNMP154
7.3 用于数据可视化的Python159
7.3.1 Matplotlib 159
7.3.2 Pygal 165
7.4 用于Cacti的Python169
7.4.1 安装169
7.4.2 作为输入源的Python脚本170
7.5 小结172
第8章 Python下的网络监控—第二部分173
8.1 Graphviz174
8.1.1 实验准备174
8.1.2 安装176
8.1.3 Graphviz示例176
8.1.4 Python Graphviz示例178
8.1.5 LLDP邻居绘图178
8.2 基于流程的监控185
8.2.1 Python下的NetFlow解析185
8.2.2 ntop流量监视189
8.2.3 sFlow194
8.3 Elasticsearch(ELK堆栈)198
8.3.1 设置托管ELK服务198
8.3.2 Logstash格式199
8.3.3 Logstash格式的Python助手脚本200
8.4 小结202
第9章 使用Python构建网络Web服务203
9.1 Python Web相关框架比较204
9.2 Flask和实验设置206
9.3 Flask的相关介绍207
9.3.1 HTTPie客户端208
9.3.2 URL路由209
9.3.3 URL变量210
9.3.4 URL的生成211
9.3.5 jsonify返回值211
9.4 网络资源API212
9.4.1 Flask-SQLAlchemy212
9.4.2 网络内容API214
9.4.3 API设备216
9.4.4 API的设备ID218
9.5 网络动态操作218
9.6 安全223
9.7 其他资源225
9.8 小结226
第10章 AWS云网络227
10.1 AWS准备工作228
10.2 AWS网络概述231
10.3 虚拟私有云234
10.3.1 路由表和路由目标238
10.3.2 使用CloudFormation实现自动化239
10.3.3 安全组和网络ACL242
10.3.4 弹性IP244
10.3.5 NAT网关244
10.4 直连和VPN246
10.4.1 VPN网关246
10.4.2 直连247
10.5 网络扩展服务247
10.5.1 弹性负载平衡248
10.5.2 Route53 DNS服务248
10.5.3 CloudFront CDN服务249
10.6 其他AWS网络服务249
10.7 小结249
第11章 Git的使用251
11.1 Git简介252
11.1.1 Git的好处252
11.1.2 Git术语253
11.1.3 Git和GitHub254
11.2 设置Git254
11.3 Git用法示例255
11.4 在Python中使用Git267
11.4.1 GitPython267
11.4.2 PyGitHub268
11.5 自动配置备份269
11.6 与Git协作271
11.7 小结272
第12章 使用Jenkins持续集成273
12.1 传统的变更管理流程273
12.2 持续集成简介274
12.3 安装Jenkins275
12.4 Jenkins示例277
12.4.1 Python脚本的第一个作业278
12.4.2 Jenkins插件282
12.4.3 网络持续集成示例284
12.5 使用Python-Jenkins290
12.6 网络的持续集成292
12.7 小结292
第13章 网络的测试驱动开发293
13.1 测试驱动开发概述294
13.2 拓扑作为代码295
13.3 更多关于Python测试的信息301
13.4 编写网络测试304
13.4.1 测试可达性304
13.4.2 测试网络延迟305
13.4.3 测试安全性306
13.4.4 测试事务306
13.4.5 测试网络配置307
13.4.6 测试Ansible307
13.5 在Jenkins中使用pytest307
13.6 小结311

教学资源推荐
作者: 骆斌 主编 邵栋 任桐炜 编著
作者: 郑阿奇 主编 顾韵华 等编著
作者: 苏小红 蒋远 单丽莉 李东 编著
参考读物推荐
作者: Eric Brechner
作者: (美)Venkat Subramaniam 著
作者: [美] 托马兹·卓巴斯(Tomasz Drabas) 丹尼·李(Denny Lee) 著
作者: 黎跃春 韩小东 付金亮 编著