Contents 目 錄
譯者序
前言
關于作者
關于審稿人
第1章 回顧TCP/IP協(xié)議簇和Python1
1.1 互聯(lián)網概述2
1.1.1 服務器、主機和網絡組件2
1.1.2 數(shù)據(jù)中心的興起3
1.2 OSI模型5
1.3 客戶端–服務器模型6
1.4 網絡協(xié)議簇7
1.4.1 傳輸控制協(xié)議7
1.4.2 用戶數(shù)據(jù)報協(xié)議8
1.4.3 互聯(lián)網協(xié)議9
1.5 Python語言概述10
1.5.1 Python版本11
1.5.2 操作系統(tǒng)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函數(shù)19
1.5.8 Python類19
1.5.9 Python模塊和包20
1.6 小結21
第2章 低級網絡設備交互22
2.1 CLI面臨的挑戰(zhàn)23
2.2 搭建虛擬實驗24
2.2.1 Cisco VIRL25
2.2.2 Cisco DevNet和Cisco dCloud28
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 基礎設施的數(shù)據(jù)建模作為代碼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 開發(fā)者的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 控制節(jié)點安裝79
4.2.2 運行不同版本的Ansible源代碼80
4.2.3 實驗建立81
4.2.4 個Ansible playbook示例81
4.3 Ansible的優(yōu)點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參數(shù)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循環(huán)109
5.2.1 標準循環(huán)109
5.2.2 循環(huán)字典110
5.3 模板112
5.3.1 Jinja2模板113
5.3.2 Jinja2循環(huán)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 搭建實驗環(huán)境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實現(xiàn)訪問列表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下的網絡監(jiān)控—部分150
7.1 實驗準備151
7.2 SNMP151
7.2.1 準備152
7.2.2 PySNMP154
7.3 用于數(shù)據(jù)可視化的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下的網絡監(jiān)控—第二部分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 基于流程的監(jiān)控185
8.2.1 Python下的NetFlow解析185
8.2.2 ntop流量監(jiān)視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 網絡動態(tài)操作218
9.6 安