目錄
序一
序二
前言
第1章 TCP/IP協(xié)議簇和Python回顧 1
1.1 互聯(lián)網概述 2
1.1.1 服務器、主機和網絡組件 3
1.1.2 數(shù)據中心的興起 3
1.2 OSI模型 6
1.3 客戶-服務器模型 8
1.4 網絡協(xié)議簇 8
1.4.1 傳輸控制協(xié)議 9
1.4.2 用戶數(shù)據報協(xié)議 10
1.4.3 Internet協(xié)議 11
1.5 Python語言概述 13
1.5.1 Python版本 14
1.5.2 操作系統(tǒng) 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函數(shù) 25
1.5.8 Python類 26
1.5.9 Python模塊和包 26
1.6 小結 28
第2章 低層網絡設備交互 29
2.1 CLI的挑戰(zhàn) 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虛擬環(huán)境 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 基礎設施即代碼的數(shù)據建模 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 面向開發(fā)人員的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 控制節(jié)點安裝 109
4.2.2 從源代碼運行不同版本的Ansible 110
4.2.3 實驗室設置 111
4.2.4 第一個Ansibleplaybook 111
4.3 Ansible的優(yōu)點 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參數(shù) 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循環(huán) 149
5.3.1 標準循環(huán) 149
5.3.2 基于字典的循環(huán) 151
5.4 模板 154
5.4.1 Jinja2模板變量 156
5.4.2 Jinja2循環(huán) 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實現(xiàn)網絡安全 176
6.1 實驗室設置 176
6.2 PythonScapy 180
6.2.1 安裝Scapy 181
6.2.2 交互式示例 182
6.2.3 使用Scapy捕獲數(shù)據包 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實現(xiàn)訪問列表 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實現(xiàn)網絡監(jiān)控:第1部分 206
7.1 實驗室設置 207
7.2 SNMP 207
7.2.1 設置 208
7.2.2 PySNMP 210
7.3 Python實現(xiàn)數(shù)據可視化 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實現(xiàn)網絡監(jiān)控:第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 基于流的監(jiān)控 248
8.3 ntop流量監(jiān)控 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 網絡動態(tài)操作 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實現(xiàn)動畫 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 互聯(lián)網訪問 344
11.5.2 網絡資源創(chuàng)建 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完成網絡數(shù)據分析 367
12.1 ElasticStack是什么? 367
12.2 實驗室拓撲 369
12.3 ElasticStack作為服務 373
12.4 第一個端到端示例 375
12.5 Elasticsearch與Python客戶端交互 379
12.6 使用Logstash實現(xiàn)數(shù)據攝取 381
12.7 使用Beats實現(xiàn)數(shù)據攝取 383
12.8 使用Elasticsearch實現(xiàn)搜索 389
12.9 使用Kibana實現(xiàn)數(shù)據可視化 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協(xié)作 425
13.9 小結 426
第14章 使用Jenkins持續(xù)集成 427
14.1 傳統(tǒng)變更管理過程 427
14.2 持續(xù)集成介紹 429
14.3 安裝Jenkins 429
14.4 Jenkins示例 432
14.4.1 執(zhí)行Python腳本的第一個作業(yè) 432
14.4.2 Jenkins插件 437
14.4.3 網絡持續(xù)集成示例 439
14.5 使用Python操作Jenkins 446
14.6 網絡的持續(xù)集成 448
14.7 小結 448
第15章 網絡測試驅動開發(fā) 449
15.1 測試驅動開發(fā)概述 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