第一篇 概念篇 2
第1章 NetDevOps理念与要义 2
1.1从SDN开始说起 2
1.1.1OpenFlow打开了新的一扇窗 3
1.1.2简单聊聊SDN控制器 4
1.1.3NFV 5
1.1.4云和SDN 6
1.1.5SD-WAN 8
1.2NetDevOps,你需要知道的事 8
1.2.1什么是NetDevOps 8
1.2.2NetDevOps适用环境 9
1.2.3为什么我们需要NetDevOps 10
1.2.4NetDevOps需要什么样的人 10
1.3小结 11
第2章 如何开始NetDevOps 12
2.1文档内容与版本管理 12
2.1.1版本管理的重要性 13
2.1.2需要管理哪些文档 13
2.1.3如何实施版本管理 14
2.1.4版本管理的工具 16
2.2编程语言的选择 17
2.2.1程序语言的选择 17
2.2.2数据描述语言的选择 18
2.3自动化工具的选择 22
2.3.1Ansible 22
2.3.2Puppet 23
2.3.3Chef 23
2.3.4SaltStack 24
2.3.5如何选择 24
2.4网络设备的编程接口 25
2.4.1网络设备接口的分类 25
2.4.2网络设备编程接口的特征 27
2.5小结 29
第二篇 基础篇 32
第3章 认识命令行工具 32
3.1用screen实现终端的会话管理 33
3.1.1安装screen 34
3.1.2screen基本语法 34
3.1.3screen基本操作 35
3.1.4定制你的screen 36
3.1.5用screen连接串口 36
3.1.6管理screen的日志 38
3.1.7多人共享一个会话 38
3.2用Telnet和SSH管理设备 39
3.2.1Telnet 39
3.2.2SSH介绍 40
3.2.3SSH的基本使用 40
3.2.4利用SSH远程执行命令 42
3.2.5SSH客户端常用配置 44
3.2.6使用密钥登录设备 45
3.2.7使用scp进行文件传输 47
3.2.8利用SSH端口隧道转发功能 48
3.2.9利用SSH做Socket代理 50
3.3小结 50
第4章 Linux下的一些常用工具 52
4.1SNMP 53
4.1.1SNMP简介 53
4.1.2常见设备的SNMP配置 54
4.1.3SNMP工具 56
4.2网络可达性检测工具 58
4.2.1Nmap 59
4.2.2Nping 62
4.2.3iPerf 63
4.2.4Fping 64
4.3MTR 65
4.4其他工具 66
4.4.1watch 66
4.4.2Wget 68
4.4.3CURL 68
4.5小结 69
第5章 处理网络设备输出的文本 70
5.1正则表达式基础 70
5.1.1正则表达式到底是什么 71
5.1.2单字符的匹配 71
5.1.3多字符的匹配与次数匹配 75
5.1.4在网络设备上的正则表达式 77
5.2使用grep进行搜索与获取信息 78
5.2.1什么是grep 78
5.2.2命令选项的解释 78
5.2.3匹配控制 80
5.2.4输出结果控制 81
5.2.5输入控制 83
5.3使用awk进行文本处理 84
5.3.1认识一下awk 84
5.3.2awk的执行方式与语法 84
5.3.3截取部分信息 85
5.3.4使用内置变量 86
5.3.5对特定内容进行统计分析 86
5.3.6多文件操作 88
5.4使用sed进行文本编辑 89
5.4.1什么是sed 89
5.4.2sed语法简介 89
5.4.3删除文件中的指定信息 90
5.4.4在文件中进行查找替换 91
5.4.5在文件中插入内容 92
5.5文本编辑工具vi和vim 92
5.5.1vi和vim简介 92
5.5.2vim编辑器的模式 93
5.6小结 97
第6章 常用基础服务搭建 99
6.1Docker基础 100
6.1.1什么是Docker 100
6.1.2Docker的基本概念 101
6.1.3Docker的运行环境 104
6.1.4启动Docker镜像 105
6.1.5构建Docker镜像 106
6.2TFTP服务器 110
6.2.1定制一个TFTP服务镜像 111
6.2.2启动一个TFTP服务器的容器 112
6.2.3服务的检查 112
6.3DNS服务器 113
6.3.1构建DNS镜像 113
6.3.2启动和配置DNS 114
6.3.3用DNS记录设备的接口与IP的对应关系 115
6.4搭建DHCP服务器 118
6.4.1构建DHCP镜像 119
6.4.2启动和配置DHCP服务 120
6.5小结 121
第三篇 提高篇 124
第7章 Linux编程基础 124
7.1Bash编程基础 124
7.2第一个Bash程序 125
7.3变量 126
7.4数组 128
7.4.1定义数组 128
7.4.2数组取值 129
7.4.3获取数组的长度 129
7.4.4截取数组的内容 130
7.4.5替换元素中的内容 130
7.4.6删除数组中的元素或者数组 130
7.5运算符 131
7.5.1算术运算符 131
7.5.2位运算符 132
7.5.3自增/自减运算 136
7.6测试 136
7.6.1测试语法的结构 136
7.6.2文件测试 136
7.6.3整数测试 138
7.6.4字符串测试 138
7.6.5逻辑关系 139
7.7判断结构 140
7.7.1if结构 140
7.7.2case结构 141
7.8循环结构 141
7.8.1for结构 141
7.8.2while结构 143
7.8.3until结构 144
7.8.4select结构 144
7.9函数 145
7.10用expect实现与设备的交互式操作 147
7.10.1expect简介 147
7.10.2用expect实现与设备的交互 148
7.10.3用expect实现批量备份设备配置 150
7.11网络设备上的Bash 152
7.12小结 154
第8章 Python编程基础 155
8.1Python简介 155
8.1.1Python的版本差异 155
8.1.2主机与网络设备上的Python 156
8.1.3构建Python运行环境 158
8.1.4缩进在Python中的重要性 161
8.2基本数据类型 161
8.2.1数字 162
8.2.2列表 163
8.2.3元组 166
8.2.4字符串 167
8.2.5字典 170
8.2.6集合 173
8.3基本结构 175
8.3.1选择结构 175
8.3.2循环结构 177
8.4函数 181
8.4.1函数的定义 181
8.4.2函数的参数 183
8.5对象 186
8.5.1什么是对象 186
8.5.2对象的属性和方法 186
8.5.3创建对象 187
8.5.4对象的继承 188
8.6模块 190
8.6.1什么是模块 190
8.6.2如何使用模块 190
8.7小结 191
第9章 常用数据类型与数据结构定义 192
9.1JSON 192
9.1.1JSON简介 193
9.1.2网络设备上的JSON 194
9.1.3JSON-RPC 196
9.1.4用Python处理JSON 196
9.2XML 198
9.2.1XML简介 198
9.2.2XML Schema 200
9.2.3NETCONF 201
9.2.4用Python处理XML 202
9.3YAML 204
9.3.1YAML简介 205
9.3.2YAML语法 206
9.3.3用Python处理YAML 207
9.4YANG 208
9.4.1YANG简介 208
9.4.2YANG语法 211
9.4.3OpenConfig 214
9.4.4Pyang工具 214
9.5小结 216
第四篇 实践篇 218
第10章 网络设备的连接与登录 218
10.1命令行方式登录 218
10.1.1telnetlib 219
10.1.2paramiko 221
10.1.3netmiko 224
10.1.4pexpect 227
10.2通过NETCONF连接到网络设备 231
10.2.1安装ncclient 231
10.2.2获取配置信息 231
10.2.3获取接口信息 233
10.3REST 235
10.3.1测试REST接口 236
10.3.2安装requests模块 237
10.3.3使用HTTP get方法 237
10.3.4使用HTTP post方法 238
10.4小结 239
第11章 命令行文本处理 240
11.1命令行文本输出 240
11.1.1关于TextFSM 241
11.1.2安装TextFSM 241
11.1.3TextFSM模板 242
11.1.4如何编写TextFSM模板 243
11.1.5在Python代码中使用TextFSM 248
11.2Cisco配置类型 249
11.2.1ciscoconfparse模块 249
11.2.2安装模块 250
11.2.3获取配置内容 251
11.2.4修改设备配置 252
11.2.5配置审计 253
11.3JUNOS配置类型 254
11.3.1层次化配置 255
11.3.2set命令行配置 256
11.4小结 259
第12章 网络特有数据类型处理 260
12.1Jupyter 260
12.1.1安装Juypter 260
12.1.2启动Juypter 261
12.1.3使用Jupyter 263
12.2使用netaddr处理网络地址 264
12.2.1安装netaddr模块 264
12.2.2IP地址的基本属性 264
12.2.3处理IP地址的基本方法 265
12.2.4IP地址的加减法 266
12.2.5地址的聚合 267
12.2.6IPv6地址 268
12.2.7使用netaddr处理MAC地址 268
12.3使用ipaddr处理网络地址 269
12.4网络拓扑的处理 271
12.4.1描述一个网络拓扑 271
12.4.2最短路径的计算 273
12.4.3可用路径的计算 276
12.5小结 278
第五篇 案例篇 280
第13章 网络设备的配置管理 280
13.1环境的准备 280
13.1.1测试拓扑说明 280
13.1.2Linux服务器的准备 281
13.2网络设备的配置获取 282
13.2.1登录网络设备 282
13.2.2处理多厂家问题 287
13.2.3处理并行问题 290
13.3网络设备的配置版本管理 295
13.3.1用git创建一个本地设备配置管理仓库 296
13.3.2保存设备配置文件到本地仓库 296
13.3.3使用git检查版本信息 297
13.4小结 299
第14章 网络拓扑的处理与应用 300
14.1环境的准备 300
14.1.1测试拓扑说明 300
14.1.2Linux服务器的准备 300
14.2网络拓扑的获取与分析 304
14.2.1物理拓扑的获取 304
14.2.2ISIS协议拓扑的获取 311
14.2.3网络拓扑的路径分析 313
14.3网络流量工程应用 314
14.3.1基本信息 315
14.3.2路径计算 316
14.3.3BGP服务 318
14.3.4调用BGP HTTP API 324
14.3.5结果测试 324
14.4小结 325