目錄
Contents
本書贊譽
前言
**篇 概念篇
第1章 NetDevOps理念與要義2
1.1 從SDN開始說起2
1.1.1 OpenFlow打開了新的一扇窗3
1.1.2 簡單聊聊SDN控制器4
1.1.3 NFV5
1.1.4 云和SDN6
1.1.5 SD-WAN8
1.2 NetDevOps,你需要知道的事8
1.2.1 什么是NetDevOps8
1.2.2 NetDevOps適用環境9
1.2.3 為什么我們需要NetDevOps10
1.2.4 NetDevOps需要什么樣的人10
1.3 小結11
第2章 如何開始NetDevOps12
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.1 Ansible22
2.3.2 Puppet23
2.3.3 Chef23
2.3.4 SaltStack24
2.3.5 如何選擇24
2.4 網絡設備的編程接口25
2.4.1 網絡設備接口的分類25
2.4.2 網絡設備編程接口的特征27
2.5 小結29
第二篇 基礎篇
第3章 認識命令行工具32
3.1 用screen實現終端的會話管理33
3.1.1 安裝screen34
3.1.2 screen基本語法34
3.1.3 screen基本操作35
3.1.4 定制你的screen36
3.1.5 用screen連接串口36
3.1.6 管理screen的日志38
3.1.7 多人共享一個會話38
3.2 用Telnet和SSH管理設備39
3.2.1 Telnet39
3.2.2 SSH介紹40
3.2.3 SSH的基本使用40
3.2.4 利用SSH遠程執行命令42
3.2.5 SSH客戶端常用配置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.1 SNMP53
4.1.1 SNMP簡介53
4.1.2 常見設備的SNMP配置54
4.1.3 SNMP工具56
4.2 網絡可達性檢測工具58
4.2.1 Nmap59
4.2.2 Nping62
4.2.3 iPerf63
4.2.4 Fping64
4.3 MTR65
4.4 其他工具66
4.4.1 watch66
4.4.2 Wget68
4.4.3 CURL68
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 什么是grep78
5.2.2 命令選項的解釋78
5.2.3 匹配控制80
5.2.4 輸出結果控制81
5.2.5 輸入控制83
5.3 使用awk進行文本處理84
5.3.1 認識一下awk84
5.3.2 awk的執行方式與語法84
5.3.3 截取部分信息85
5.3.4 使用內置變量86
5.3.5 對特定內容進行統計分析86
5.3.6 多文件操作88
5.4 使用sed 進行文本編輯89
5.4.1 什么是sed89
5.4.2 sed語法簡介89
5.4.3 刪除文件中的指定信息90
5.4.4 在文件中進行查找替換91
5.4.5 在文件中插入內容92
5.5 文本編輯工具vi和vim92
5.5.1 vi和vim簡介92
5.5.2 vim編輯器的模式93
5.6 小結97
第6章 常用基礎服務搭建99
6.1 Docker基礎100
6.1.1 什么是Docker100
6.1.2 Docker的基本概念101
6.1.3 Docker的運行環境104
6.1.4 啟動Docker鏡像105
6.1.5 構建Docker鏡像106
6.2 TFTP服務器110
6.2.1 定制一個TFTP服務鏡像111
6.2.2 啟動一個TFTP服務器的容器112
6.2.3 服務的檢查112
6.3 DNS 服務器113
6.3.1 構建DNS鏡像113
6.3.2 啟動和配置DNS114
6.3.3 用DNS記錄設備的接口與IP的對應關系115
6.4 搭建DHCP服務器118
6.4.1 構建DHCP鏡像119
6.4.2 啟動和配置DHCP服務120
6.5 小結121
第三篇 提高篇
第7章 Linux編程基礎124
7.1 Bash編程基礎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.1 if結構140
7.7.2 case結構141
7.8 循環結構141
7.8.1 for結構141
7.8.2 while結構143
7.8.3 until結構144
7.8.4 select結構144
7.9 函數145
7.10 用expect實現與設備的交互式操作147
7.10.1 expect簡介147
7.10.2 用expect實現與設備的交互148
7.10.3 用expect實現批量備份設備配置150
7.11 網絡設備上的Bash152
7.12 小結154
第8章 Python編程基礎155
8.1 Python簡介155
8.1.1 Python的版本差異155
8.1.2 主機與網絡設備上的Python156
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.1 JSON192
9.1.1 JSON簡介193
9.1.2 網絡設備上的JSON194
9.1.3 JSON-RPC196
9.1.4 用Python處理JSON196
9.2 XML198
9.2.1 XML簡介198
9.2.2 XML Schema200
9.2.3 NETCONF201
9.2.4 用Python處理XML202
9.3 YAML204
9.3.1 YAML簡介205
9.3.2 YAML語法206
9.3.3 用Python處理YAML207
9.4 YANG208
9.4.1 YANG簡介208
9.4.2 YANG語法211
9.4.3 OpenConfig214
9.4.4 Pyang工具214
9.5 小結216
第四篇 實踐篇
第10章 網絡設備的連接與登錄218
10.1 命令行方式登錄218
10.1.1 telnetlib219
10.1.2 paramiko221
10.1.3 netmiko224
10.1.4 pexpect227
10.2 通過NETCONF連接到網絡設備231
10.2.1 安裝ncclient231
10.2.2 獲取配置信息231
10.2.3 獲取接口信息233
10.3 REST235
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 關于TextFSM241
11.1.2 安裝TextFSM241
11.1.3 TextFSM模板242
11.1.4 如何編寫TextFSM模板243
11.1.5 在Python代碼中使用TextFSM248
11.2 Cisco配置類型249
11.2.1 ciscoconfparse模塊249
11.2.2 安裝模塊250
11.2.3 獲取配置內容251
11.2.4 修改設備配置252
11.2.5 配置審計253
11.3 JUNOS配置類型254
11.3.1 層次化配置255
11.3.2 set命令行配置256
11.4 小結259
第12章 網絡特有數據類型處理260
12.1 Jupyter260
12.1.1 安裝Juypter260
12.1.2 啟動Juypter261
12.1.3 使用Jupyter263
12.2 使用netaddr處理網絡地址264
12.2.1 安裝netaddr模塊264
12.2.2 IP地址的基本屬性264
12.2.3 處理IP地址的基本方法265
12.2.4 IP地址的加減法266
12.2.5 地址的聚合267
12.2.6 IPv6地址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
第五篇 案例篇
第13章 網絡設備的配置管理280
13.1 環境的準備280
13.1.1 測試拓撲說明280
13.1.2 Linux服務器的準備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.2 Linux服務器的準備300
14.2 網絡拓撲的獲取與分析304
14.2.1 物理拓撲的獲取304
14.2.2 ISIS協議拓撲的獲取311
14.2.3 網絡拓撲的路徑分析313
14.3 網絡流量工程應用314
14.3.1 基本信息315
14.3.2 路徑計算316
14.3.3 BGP服務318
14.3.4 調用BGP HTTP
API324
14.3.5 結果測試324
14.4 小結325