关于我们
![]() ![]() |
精通Python网络编程(第三版)
本书首先从Python的基本概述开始,介绍如何与遗留设备以及支持API的网络设备交互。了解如何利用高级Python包和框架来实现网络自动化任务、监控、管理和增强的网络安全性,然后介绍Azure和AWS云网络。最后,使用Jenkins实现持续集成,并使用测试工具验证网络。
前言
正如查尔斯·狄更斯在《双城记》中所写:“这是最好的时代,这是最坏的时代;这是智慧的时代,这是愚昧的时代”。这些看似矛盾的语句完美地描述了变革与转型时期的混乱和情绪。毫无疑问,随着网络工程领域的快速变化,我们正经历着类似的时期。随着软件开发日益集成到网络的各个方面,传统的命令行界面和垂直集成的网络栈方法不再是管理当今网络的最佳方法。对网络工程师来说,我们看到的变化充满了兴奋和机遇,但也充满挑战,尤其是对于那些需要快速适应并跟上变化的人。写这本书的目的是要提供一个实用指南,介绍如何从一个传统平台发展为基于软件驱动实践构建的平台,帮助网络专业人员更轻松地适应这种转型。 在这本书中,我们选择使用Python作为掌握和处理网络工程任务的编程语言。Python是一个易于学习的高级编程语言,可以有效地激发网络工程师的创造力,并提供他们解决问题的能力,以优化日常操作。Python正在成为很多大型网络不可少的组成部分,我希望能够通过这本书与你分享我的一些经验教训。 自这本书第1版和第2版出版以来,我与本书的很多读者进行了有趣而有意义的对话。 前两版的成功让我受宠若惊,并把收到的反馈铭记于心。在第3版中,我努力加入了很多更新的库,使用最新的软件和更新的硬件平台来更新现有的例子,另外还增加了我认为对当今网络工程师很重要的两章。 变革的时代为技术进步提供了巨大机遇。这本书中的概念和工具对我的职业生涯有很大帮助,希望对你也能有同样的帮助。 本书面向对象 这本书非常适合IT专业人员和运维工程师,他们已经在管理网络设备组,希望扩展他们的知识使用Python和其他工具来迎接网络挑战。学习这本书建议具备基本的网络和Python知识。 本书内容 第1章 TCP/IP协议簇和Python回顾回顾了当今互联网通信的基础技术,从OSI和客户-服务器模型谈到TCP、UDP和IP协议簇。这一章还回顾了Python语言的基础知识,例如类型、操作符、循环、函数和包。 第2章 低层网络设备交互使用实际示例来说明如何在一个网络设备上使用Python执行命令,还将讨论自动化中只使用CLI接口面对的挑战。这一章将使用Pexpect、Paramiko、Netmiko和Nornir库给出一些例子。 第3章 API和意图驱动网络讨论支持应用编程接口(API)和其他高层交互方法的更新的网络设备。这里还介绍了支持低层任务抽象同时关注网络工程师意图的工具。这一章对CiscoNX-API、Meraki、JuniperPyEZ、AristaPyeapi和VyattaVyOS做了讨论并给出了相关示例。 第4章 Python自动化框架:Ansible基础讨论了Ansible基础知识,这是一个开源的、基于Python的自动化框架。Ansible比API更进了一步,重点关注声明性的任务意图。这一章中,我们将介绍使用Ansible及其高层架构的优势,还会看到在Cisco、Juniper和Arista设备上使用Ansible的一些实际例子。 第5章 Python自动化框架:进阶建立在前一章知识的基础上,涵盖了更高级的Ansible主题,包括条件、循环、模板、变量、AnsibleVault和角色。此外,还会介绍编写自定义模块的基础知识。 第6章 使用Python实现网络安全将介绍几个帮助保护网络安全的Python工具,这里将讨论使用Scapy完成安全性测试、使用Ansible快速实现访问列表,以及使用Python进行网络取证分析。 第7章 使用Python实现网络监控:第1部分将介绍使用不同的工具监控网络。这一章包含使用SNMP和PySNMP来查询以获得设备信息的一些例子。另外会给出Matplotlib和Pygal示例,绘图显示结果,这一章最后会给出一个使用Python脚本作为输入源的Cacti示例。 第8章 使用Python实现网络监控:第2部分将介绍更多网络监控工具。这一章首先介绍使用Graphviz由LLDP信息绘制网络图。接下来使用NetFlow和其他技术实现基于推送机制的网络监控示例。我们将使用Python解码流数据包并使用ntop可视化结果,还将对Elasticsearch做一个概述,并介绍这个工具如何用于网络监控。 第9章 使用Python构建网络Web服务将介绍如何使用PythonFlaskWeb框架创建你自己的网络自动化API。网络API有很多好处,如从网络详细信息抽象请求者、整合和定制操作,以及通过限制可用操作来提供更好的安全性。 第10章 AWS云网络将展示如何使用AWS构建一个功能强大而且有弹性的虚拟网络。我们将介绍一些虚拟私有云技术,如CloudFormation、VPC路由表、访问列表、弹性IP、NAT网关、DirectConnect以及其他一些相关主题。 第11章 Azure云网络将介绍Azure提供的网络服务以及如何由此构建网络服务。我们将讨论AzureVNet、ExpressRoute和VPN、Azure网络负载均衡器以及其他一些相关的网络服务。 第12章 使用ElasticStack完成网络数据分析会展示如何使用ElasticStack作为一组紧密集成的工具来帮助我们分析和监控网络。我们将介绍从安装、配置、用Logstash和Beats导入数据,以及使用Elasticsearch搜索数据,直到用Kibana进行可视化的各个方面。 第13章 使用Git将介绍怎样充分利用Git进行协作和代码版本控制。这一章将给出使用Git完成网络操作的实际示例。 第14章 使用Jenkins持续集成将介绍使用Jenkins自动创建操作流水线,从而节省时间并提高可靠性。 第15章 网络测试驱动开发将解释如何使用Python的unittest和pytest创建简单的测试来验证代码。我们还会看到为验证可达性、网络延迟、安全性和网络事务编写网络测试的例子。另外会介绍如何在持续集成工具(例如Jenkins)中集成测试。
目录
序一 序二 前言 第1章 TCP/IP协议簇和Python回顾 1 1.1 互联网概述 2 1.1.1 服务器、主机和网络组件 3 1.1.2 数据中心的兴起 3 1.2 OSI模型 6 1.3 客户-服务器模型 8 1.4 网络协议簇 8 1.4.1 传输控制协议 9 1.4.2 用户数据报协议 10 1.4.3 Internet协议 11 1.5 Python语言概述 13 1.5.1 Python版本 14 1.5.2 操作系统 15 1.5.3 运行Python程序 15 1.5.4 Python内置类型 16 1.5.5 Python操作符 22 1.5.6 Python控制流工具 23 1.5.7 Python函数 25 1.5.8 Python类 26 1.5.9 Python模块和包 26 1.6 小结 28 第2章 低层网络设备交互 29 2.1 CLI的挑战 30 2.2 构建虚拟实验室 31 2.2.1 物理设备 31 2.2.2 虚拟设备 31 2.2.3 CiscoVIRL 32 2.2.4 CiscoDevNe和dCloud 36 2.2.5 GNS3 37 2.3 PythonPexpect库 39 2.3.1 Python虚拟环境 39 2.3.2 Pexpect安装 40 2.3.3 Pexpect概述 41 2.3.4 第一个Pexpect程序 46 2.3.5 更多Pexpect特性 47 2.3.6 Pexpect和SSH 48 2.3.7 Pexpect示例集成 49 2.4 PythonParamiko库 51 2.4.1 Paramiko安装 51 2.4.2 Paramiko概述 52 2.4.3 第一个Paramiko程序 55 2.4.4 更多Paramiko特性 56 2.4.5 Paramiko示例集成 57 2.5 Netmiko库 59 2.6 Nornir框架 61 2.7 小结 64 第3章 API和意图驱动网络 65 3.1 基础设施即代码 66 3.1.1 意图驱动网络 66 3.1.2 屏幕抓取与API结构化输出 67 3.1.3 基础设施即代码的数据建模 70 3.1.4 YANG和NETCONF 71 3.2 CiscoAPI和ACI 72 3.2.1 CiscoNX-API 72 3.2.2 CiscoYANG模型 78 3.2.3 CiscoACI和APIC-EM 80 3.3 CiscoMeraki控制器 82 3.4 JuniperNetworks的PythonAPI 84 3.4.1 Juniper和NETCONF 84 3.4.2 面向开发人员的JuniperPyEZ 89 3.5 AristaPythonAPI 93 3.5.1 AristaeAPI管理 94 3.5.2 AristaPyeapi库 98 3.6 VyOS示例 103 3.7 其他库 104 3.8 小结 105 第4章 Python自动化框架:Ansible基础 106 4.1 Ansible:更具声明性的框架 107 4.2 一个简单的Ansible示例 108 4.2.1 控制节点安装 109 4.2.2 从源代码运行不同版本的Ansible 110 4.2.3 实验室设置 111 4.2.4 第一个Ansibleplaybook 111 4.3 Ansible的优点 115 4.3.1 无代理 116 4.3.2 幂等性 116 4.3.3 简单而且可扩展 116 4.3.4 网络供应商支持 117 4.4 Ansible架构 118 4.4.1 YAML 119 4.4.2 清单文件 120 4.4.3 变量 121 4.4.4 使用Jinja2模板 126 4.5 Ansible网络模块 126 4.5.1 本地连接和fact 126 4.5.2 provider参数 127 4.6 AnsibleCisco示例 129 4.7 Ansible2.8playbook示例 132 4.8 AnsibleJuniper示例 136 4.9 AnsibleArista示例 137 4.10 小结 138 第5章 Python自动化框架:进阶 140 5.1 实验室准备 140 5.2 Ansible条件 141 5.2.1 when子句 141 5.2.2 Ansible网络fact 144 5.2.3 网络模块条件 147 5.3 Ansible循环 149 5.3.1 标准循环 149 5.3.2 基于字典的循环 151 5.4 模板 154 5.4.1 Jinja2模板变量 156 5.4.2 Jinja2循环 157 5.4.3 Jinja2条件 157 5.5 组和主机变量 160 5.5.1 组变量 161 5.5.2 主机变量 162 5.6 AnsibleVault 163 5.7 Ansibleinclude和角色 165 5.7.1 Ansibleinclude语句 165 5.7.2 Ansible角色 167 5.8 编写你自己的自定义模块 171 5.8.1 第一个自定义模块 171 5.8.2 第二个自定义模块 174 5.9 小结 175 第6章 使用Python实现网络安全 176 6.1 实验室设置 176 6.2 PythonScapy 180 6.2.1 安装Scapy 181 6.2.2 交互式示例 182 6.2.3 使用Scapy捕获数据包 185 6.2.4 TCP端口扫描 186 6.2.5 ping收集 191 6.2.6 常见攻击 192 6.2.7 Scapy资源 193 6.3 访问列表 193 6.3.1 用Ansible实现访问列表 194 6.3.2 MAC访问列表 197 6.4 syslog搜索 199 6.5 其他工具 202 6.5.1 私有VLAN 202 6.5.2 用Python使用UFW 203 6.6 延伸阅读 204 6.7 小结 204 第7章 使用Python实现网络监控:第1部分 206 7.1 实验室设置 207 7.2 SNMP 207 7.2.1 设置 208 7.2.2 PySNMP 210 7.3 Python实现数据可视化 216 7.3.1 Matplotlib 217 7.3.2 Pygal 223 7.4 Python用于Cacti 227 7.4.1 安装 228 7.4.2 Python脚本作为输入源 229 7.5 小结 232 第8章 使用Python实现网络监控:第2部分 233 8.1 Graphviz 234 8.1.1 实验室设置 234 8.1.2 安装 236 8.1.3 Graphviz示例 236 8.1.4 PythonGraphviz示例 237 8.1.5 LLDP邻居绘图 238 8.2 基于流的监控 248 8.3 ntop流量监控 254 8.3.1 ntop的Python扩展 256 8.3.2 sFlow 260 8.4 小结 265 第9章 使用Python构建网络 Web服务 266 9.1 比较PythonWeb框架 267 9.2 Flask和实验室设置 269 9.3 Flask介绍 270 9.3.1 HTTPie客户 271 9.3.2 URL路由 273 9.3.3 URL变 量 274 9.3.4 URL生成 275 9.3.5 Jsonify返回 277 9.4 网络资源API 278 9.4.1 Flask-SQLAlchemy 278 9.4.2 网络内容API 280 9.4.3 设备API 283 9.4.4 设备IDAPI 286 9.5 网络动态操作 286 9.6 认证和授权 292 9.7 在容器中运行Flask 295 9.8 小结 298 第10章 AWS云网络 300 10.1 AWS设置 301 10.2 AWS网络概述 305 10.3 虚拟私有云 311 10.3.1 路由表和路由目标 315 10.3.2 用CloudFormation实现动画 317 10.3.3 安全组和网络ACL 321 10.3.4 弹性IP 323 10.3.5 NAT网关 325 10.4 DirectConnect和VPN 326 10.4.1 VPN网关 326 10.4.2 DirectConnect 326 10.5 网络伸缩服务 328 10.5.1 弹性负载均衡 328 10.5.2 Route53DNS服务 329 10.5.3 CloudFrontCDN服务 329 10.6 其他AWS网络服务 330 10.7 小结 330 第11章 Azure云网络 332 11.1 Azure和AWS网络服务比较 333 11.2 Azure设置 334 11.3 Azure管理和API 336 11.3.1 Azure服务原则 339 11.3.2 Python与PowerShell 341 11.4 Azure全球基础设施 341 11.5 Azure虚拟网络 343 11.5.1 互联网访问 344 11.5.2 网络资源创建 348 11.5.3 VNet服务端点 349 11.5.4 VNet对等连接 350 11.6 VNet路由 353 11.7 AzureVPN 360 11.8 AzureExpressRoute 363 11.9 Azure网络负载均衡器 364 11.10 其他Azure网络服务 365 11.11 小结 366 第12章 使用ElasticStack完成网络数据分析 367 12.1 ElasticStack是什么? 367 12.2 实验室拓扑 369 12.3 ElasticStack作为服务 373 12.4 第一个端到端示例 375 12.5 Elasticsearch与Python客户端交互 379 12.6 使用Logstash实现数据摄取 381 12.7 使用Beats实现数据摄取 383 12.8 使用Elasticsearch实现搜索 389 12.9 使用Kibana实现数据可视化 394 12.10 小结 398 第13章 使用Git 399 13.1 内容管理问题和Git 399 13.2 Git介绍 400 13.2.1 Git的好处 401 13.2.2 Git术语 402 13.2.3 Git和GitHub 402 13.3 设置Git 403 13.4 Git使用示例 405 13.5 Git分支 410 13.6 使用Python操作Git 420 13.6.1 GitPython 420 13.6.2 PyGitHub 421 13.7 自动化配置备份 423 13.8 使用Git协作 425 13.9 小结 426 第14章 使用Jenkins持续集成 427 14.1 传统变更管理过程 427 14.2 持续集成介绍 429 14.3 安装Jenkins 429 14.4 Jenkins示例 432 14.4.1 执行Python脚本的第一个作业 432 14.4.2 Jenkins插件 437 14.4.3 网络持续集成示例 439 14.5 使用Python操作Jenkins 446 14.6 网络的持续集成 448 14.7 小结 448 第15章 网络测试驱动开发 449 15.1 测试驱动开发概述 449 15.2 拓扑作为代码 451 15.2.1 Python的unittest模块 456 15.2.2 关于Python测试 460 15.2.3 pytest示例 461 15.3 编写网络测试 464 15.3.1 测试可达性 464 15.3.2 测试网络延迟 466 15.3.3 测试安全性 467 15.3.4 测试事务 467 15.3.5 测试网络配置 468 15.3.6 测试Ansible 468 15.4 pytest与Jenkins集成 469 15.5 pyATS和Genie 473 15.6 小结 477
你还可能感兴趣
我要评论
|