關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
精通Python網(wǎng)絡(luò)編程(第三版)
本書(shū)首先從Python的基本概述開(kāi)始,介紹如何與遺留設(shè)備以及支持API的網(wǎng)絡(luò)設(shè)備交互。了解如何利用高級(jí)Python包和框架來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)自動(dòng)化任務(wù)、監(jiān)控、管理和增強(qiáng)的網(wǎng)絡(luò)安全性,然后介紹Azure和AWS云網(wǎng)絡(luò)。最后,使用Jenkins實(shí)現(xiàn)持續(xù)集成,并使用測(cè)試工具驗(yàn)證網(wǎng)絡(luò)。
前言
正如查爾斯·狄更斯在《雙城記》中所寫(xiě):“這是最好的時(shí)代,這是最壞的時(shí)代;這是智慧的時(shí)代,這是愚昧的時(shí)代”。這些看似矛盾的語(yǔ)句完美地描述了變革與轉(zhuǎn)型時(shí)期的混亂和情緒。毫無(wú)疑問(wèn),隨著網(wǎng)絡(luò)工程領(lǐng)域的快速變化,我們正經(jīng)歷著類(lèi)似的時(shí)期。隨著軟件開(kāi)發(fā)日益集成到網(wǎng)絡(luò)的各個(gè)方面,傳統(tǒng)的命令行界面和垂直集成的網(wǎng)絡(luò)棧方法不再是管理當(dāng)今網(wǎng)絡(luò)的最佳方法。對(duì)網(wǎng)絡(luò)工程師來(lái)說(shuō),我們看到的變化充滿(mǎn)了興奮和機(jī)遇,但也充滿(mǎn)挑戰(zhàn),尤其是對(duì)于那些需要快速適應(yīng)并跟上變化的人。寫(xiě)這本書(shū)的目的是要提供一個(gè)實(shí)用指南,介紹如何從一個(gè)傳統(tǒng)平臺(tái)發(fā)展為基于軟件驅(qū)動(dòng)實(shí)踐構(gòu)建的平臺(tái),幫助網(wǎng)絡(luò)專(zhuān)業(yè)人員更輕松地適應(yīng)這種轉(zhuǎn)型。 在這本書(shū)中,我們選擇使用Python作為掌握和處理網(wǎng)絡(luò)工程任務(wù)的編程語(yǔ)言。Python是一個(gè)易于學(xué)習(xí)的高級(jí)編程語(yǔ)言,可以有效地激發(fā)網(wǎng)絡(luò)工程師的創(chuàng)造力,并提供他們解決問(wèn)題的能力,以?xún)?yōu)化日常操作。Python正在成為很多大型網(wǎng)絡(luò)不可少的組成部分,我希望能夠通過(guò)這本書(shū)與你分享我的一些經(jīng)驗(yàn)教訓(xùn)。 自這本書(shū)第1版和第2版出版以來(lái),我與本書(shū)的很多讀者進(jìn)行了有趣而有意義的對(duì)話(huà)。 前兩版的成功讓我受寵若驚,并把收到的反饋銘記于心。在第3版中,我努力加入了很多更新的庫(kù),使用最新的軟件和更新的硬件平臺(tái)來(lái)更新現(xiàn)有的例子,另外還增加了我認(rèn)為對(duì)當(dāng)今網(wǎng)絡(luò)工程師很重要的兩章。 變革的時(shí)代為技術(shù)進(jìn)步提供了巨大機(jī)遇。這本書(shū)中的概念和工具對(duì)我的職業(yè)生涯有很大幫助,希望對(duì)你也能有同樣的幫助。 本書(shū)面向?qū)ο?/span> 這本書(shū)非常適合IT專(zhuān)業(yè)人員和運(yùn)維工程師,他們已經(jīng)在管理網(wǎng)絡(luò)設(shè)備組,希望擴(kuò)展他們的知識(shí)使用Python和其他工具來(lái)迎接網(wǎng)絡(luò)挑戰(zhàn)。學(xué)習(xí)這本書(shū)建議具備基本的網(wǎng)絡(luò)和Python知識(shí)。 本書(shū)內(nèi)容 第1章 TCP/IP協(xié)議簇和Python回顧回顧了當(dāng)今互聯(lián)網(wǎng)通信的基礎(chǔ)技術(shù),從OSI和客戶(hù)-服務(wù)器模型談到TCP、UDP和IP協(xié)議簇。這一章還回顧了Python語(yǔ)言的基礎(chǔ)知識(shí),例如類(lèi)型、操作符、循環(huán)、函數(shù)和包。 第2章 低層網(wǎng)絡(luò)設(shè)備交互使用實(shí)際示例來(lái)說(shuō)明如何在一個(gè)網(wǎng)絡(luò)設(shè)備上使用Python執(zhí)行命令,還將討論自動(dòng)化中只使用CLI接口面對(duì)的挑戰(zhàn)。這一章將使用Pexpect、Paramiko、Netmiko和Nornir庫(kù)給出一些例子。 第3章 API和意圖驅(qū)動(dòng)網(wǎng)絡(luò)討論支持應(yīng)用編程接口(API)和其他高層交互方法的更新的網(wǎng)絡(luò)設(shè)備。這里還介紹了支持低層任務(wù)抽象同時(shí)關(guān)注網(wǎng)絡(luò)工程師意圖的工具。這一章對(duì)CiscoNX-API、Meraki、JuniperPyEZ、AristaPyeapi和VyattaVyOS做了討論并給出了相關(guān)示例。 第4章 Python自動(dòng)化框架:Ansible基礎(chǔ)討論了Ansible基礎(chǔ)知識(shí),這是一個(gè)開(kāi)源的、基于Python的自動(dòng)化框架。Ansible比API更進(jìn)了一步,重點(diǎn)關(guān)注聲明性的任務(wù)意圖。這一章中,我們將介紹使用Ansible及其高層架構(gòu)的優(yōu)勢(shì),還會(huì)看到在Cisco、Juniper和Arista設(shè)備上使用Ansible的一些實(shí)際例子。 第5章 Python自動(dòng)化框架:進(jìn)階建立在前一章知識(shí)的基礎(chǔ)上,涵蓋了更高級(jí)的Ansible主題,包括條件、循環(huán)、模板、變量、AnsibleVault和角色。此外,還會(huì)介紹編寫(xiě)自定義模塊的基礎(chǔ)知識(shí)。 第6章 使用Python實(shí)現(xiàn)網(wǎng)絡(luò)安全將介紹幾個(gè)幫助保護(hù)網(wǎng)絡(luò)安全的Python工具,這里將討論使用Scapy完成安全性測(cè)試、使用Ansible快速實(shí)現(xiàn)訪(fǎng)問(wèn)列表,以及使用Python進(jìn)行網(wǎng)絡(luò)取證分析。 第7章 使用Python實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)控:第1部分將介紹使用不同的工具監(jiān)控網(wǎng)絡(luò)。這一章包含使用SNMP和PySNMP來(lái)查詢(xún)以獲得設(shè)備信息的一些例子。另外會(huì)給出Matplotlib和Pygal示例,繪圖顯示結(jié)果,這一章最后會(huì)給出一個(gè)使用Python腳本作為輸入源的Cacti示例。 第8章 使用Python實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)控:第2部分將介紹更多網(wǎng)絡(luò)監(jiān)控工具。這一章首先介紹使用Graphviz由LLDP信息繪制網(wǎng)絡(luò)圖。接下來(lái)使用NetFlow和其他技術(shù)實(shí)現(xiàn)基于推送機(jī)制的網(wǎng)絡(luò)監(jiān)控示例。我們將使用Python解碼流數(shù)據(jù)包并使用ntop可視化結(jié)果,還將對(duì)Elasticsearch做一個(gè)概述,并介紹這個(gè)工具如何用于網(wǎng)絡(luò)監(jiān)控。 第9章 使用Python構(gòu)建網(wǎng)絡(luò)Web服務(wù)將介紹如何使用PythonFlaskWeb框架創(chuàng)建你自己的網(wǎng)絡(luò)自動(dòng)化API。網(wǎng)絡(luò)API有很多好處,如從網(wǎng)絡(luò)詳細(xì)信息抽象請(qǐng)求者、整合和定制操作,以及通過(guò)限制可用操作來(lái)提供更好的安全性。 第10章 AWS云網(wǎng)絡(luò)將展示如何使用AWS構(gòu)建一個(gè)功能強(qiáng)大而且有彈性的虛擬網(wǎng)絡(luò)。我們將介紹一些虛擬私有云技術(shù),如CloudFormation、VPC路由表、訪(fǎng)問(wèn)列表、彈性IP、NAT網(wǎng)關(guān)、DirectConnect以及其他一些相關(guān)主題。 第11章 Azure云網(wǎng)絡(luò)將介紹Azure提供的網(wǎng)絡(luò)服務(wù)以及如何由此構(gòu)建網(wǎng)絡(luò)服務(wù)。我們將討論AzureVNet、ExpressRoute和VPN、Azure網(wǎng)絡(luò)負(fù)載均衡器以及其他一些相關(guān)的網(wǎng)絡(luò)服務(wù)。 第12章 使用ElasticStack完成網(wǎng)絡(luò)數(shù)據(jù)分析會(huì)展示如何使用ElasticStack作為一組緊密集成的工具來(lái)幫助我們分析和監(jiān)控網(wǎng)絡(luò)。我們將介紹從安裝、配置、用Logstash和Beats導(dǎo)入數(shù)據(jù),以及使用Elasticsearch搜索數(shù)據(jù),直到用Kibana進(jìn)行可視化的各個(gè)方面。 第13章 使用Git將介紹怎樣充分利用Git進(jìn)行協(xié)作和代碼版本控制。這一章將給出使用Git完成網(wǎng)絡(luò)操作的實(shí)際示例。 第14章 使用Jenkins持續(xù)集成將介紹使用Jenkins自動(dòng)創(chuàng)建操作流水線(xiàn),從而節(jié)省時(shí)間并提高可靠性。 第15章 網(wǎng)絡(luò)測(cè)試驅(qū)動(dòng)開(kāi)發(fā)將解釋如何使用Python的unittest和pytest創(chuàng)建簡(jiǎn)單的測(cè)試來(lái)驗(yàn)證代碼。我們還會(huì)看到為驗(yàn)證可達(dá)性、網(wǎng)絡(luò)延遲、安全性和網(wǎng)絡(luò)事務(wù)編寫(xiě)網(wǎng)絡(luò)測(cè)試的例子。另外會(huì)介紹如何在持續(xù)集成工具(例如Jenkins)中集成測(cè)試。
目錄
序一 序二 前言 第1章 TCP/IP協(xié)議簇和Python回顧 1 1.1 互聯(lián)網(wǎng)概述 2 1.1.1 服務(wù)器、主機(jī)和網(wǎng)絡(luò)組件 3 1.1.2 數(shù)據(jù)中心的興起 3 1.2 OSI模型 6 1.3 客戶(hù)-服務(wù)器模型 8 1.4 網(wǎng)絡(luò)協(xié)議簇 8 1.4.1 傳輸控制協(xié)議 9 1.4.2 用戶(hù)數(shù)據(jù)報(bào)協(xié)議 10 1.4.3 Internet協(xié)議 11 1.5 Python語(yǔ)言概述 13 1.5.1 Python版本 14 1.5.2 操作系統(tǒng) 15 1.5.3 運(yùn)行Python程序 15 1.5.4 Python內(nèi)置類(lèi)型 16 1.5.5 Python操作符 22 1.5.6 Python控制流工具 23 1.5.7 Python函數(shù) 25 1.5.8 Python類(lèi) 26 1.5.9 Python模塊和包 26 1.6 小結(jié) 28 第2章 低層網(wǎng)絡(luò)設(shè)備交互 29 2.1 CLI的挑戰(zhàn) 30 2.2 構(gòu)建虛擬實(shí)驗(yàn)室 31 2.2.1 物理設(shè)備 31 2.2.2 虛擬設(shè)備 31 2.2.3 CiscoVIRL 32 2.2.4 CiscoDevNe和dCloud 36 2.2.5 GNS3 37 2.3 PythonPexpect庫(kù) 39 2.3.1 Python虛擬環(huán)境 39 2.3.2 Pexpect安裝 40 2.3.3 Pexpect概述 41 2.3.4 第一個(gè)Pexpect程序 46 2.3.5 更多Pexpect特性 47 2.3.6 Pexpect和SSH 48 2.3.7 Pexpect示例集成 49 2.4 PythonParamiko庫(kù) 51 2.4.1 Paramiko安裝 51 2.4.2 Paramiko概述 52 2.4.3 第一個(gè)Paramiko程序 55 2.4.4 更多Paramiko特性 56 2.4.5 Paramiko示例集成 57 2.5 Netmiko庫(kù) 59 2.6 Nornir框架 61 2.7 小結(jié) 64 第3章 API和意圖驅(qū)動(dòng)網(wǎng)絡(luò) 65 3.1 基礎(chǔ)設(shè)施即代碼 66 3.1.1 意圖驅(qū)動(dòng)網(wǎng)絡(luò) 66 3.1.2 屏幕抓取與API結(jié)構(gòu)化輸出 67 3.1.3 基礎(chǔ)設(shè)施即代碼的數(shù)據(jù)建模 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 面向開(kāi)發(fā)人員的JuniperPyEZ 89 3.5 AristaPythonAPI 93 3.5.1 AristaeAPI管理 94 3.5.2 AristaPyeapi庫(kù) 98 3.6 VyOS示例 103 3.7 其他庫(kù) 104 3.8 小結(jié) 105 第4章 Python自動(dòng)化框架:Ansible基礎(chǔ) 106 4.1 Ansible:更具聲明性的框架 107 4.2 一個(gè)簡(jiǎn)單的Ansible示例 108 4.2.1 控制節(jié)點(diǎn)安裝 109 4.2.2 從源代碼運(yùn)行不同版本的Ansible 110 4.2.3 實(shí)驗(yàn)室設(shè)置 111 4.2.4 第一個(gè)Ansibleplaybook 111 4.3 Ansible的優(yōu)點(diǎn) 115 4.3.1 無(wú)代理 116 4.3.2 冪等性 116 4.3.3 簡(jiǎn)單而且可擴(kuò)展 116 4.3.4 網(wǎng)絡(luò)供應(yīng)商支持 117 4.4 Ansible架構(gòu) 118 4.4.1 YAML 119 4.4.2 清單文件 120 4.4.3 變量 121 4.4.4 使用Jinja2模板 126 4.5 Ansible網(wǎng)絡(luò)模塊 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 小結(jié) 138 第5章 Python自動(dòng)化框架:進(jìn)階 140 5.1 實(shí)驗(yàn)室準(zhǔn)備 140 5.2 Ansible條件 141 5.2.1 when子句 141 5.2.2 Ansible網(wǎng)絡(luò)fact 144 5.2.3 網(wǎng)絡(luò)模塊條件 147 5.3 Ansible循環(huán) 149 5.3.1 標(biāo)準(zhǔn)循環(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 組和主機(jī)變量 160 5.5.1 組變量 161 5.5.2 主機(jī)變量 162 5.6 AnsibleVault 163 5.7 Ansibleinclude和角色 165 5.7.1 Ansibleinclude語(yǔ)句 165 5.7.2 Ansible角色 167 5.8 編寫(xiě)你自己的自定義模塊 171 5.8.1 第一個(gè)自定義模塊 171 5.8.2 第二個(gè)自定義模塊 174 5.9 小結(jié) 175 第6章 使用Python實(shí)現(xiàn)網(wǎng)絡(luò)安全 176 6.1 實(shí)驗(yàn)室設(shè)置 176 6.2 PythonScapy 180 6.2.1 安裝Scapy 181 6.2.2 交互式示例 182 6.2.3 使用Scapy捕獲數(shù)據(jù)包 185 6.2.4 TCP端口掃描 186 6.2.5 ping收集 191 6.2.6 常見(jiàn)攻擊 192 6.2.7 Scapy資源 193 6.3 訪(fǎng)問(wèn)列表 193 6.3.1 用Ansible實(shí)現(xiàn)訪(fǎng)問(wèn)列表 194 6.3.2 MAC訪(fǎng)問(wèn)列表 197 6.4 syslog搜索 199 6.5 其他工具 202 6.5.1 私有VLAN 202 6.5.2 用Python使用UFW 203 6.6 延伸閱讀 204 6.7 小結(jié) 204 第7章 使用Python實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)控:第1部分 206 7.1 實(shí)驗(yàn)室設(shè)置 207 7.2 SNMP 207 7.2.1 設(shè)置 208 7.2.2 PySNMP 210 7.3 Python實(shí)現(xiàn)數(shù)據(jù)可視化 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 小結(jié) 232 第8章 使用Python實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)控:第2部分 233 8.1 Graphviz 234 8.1.1 實(shí)驗(yàn)室設(shè)置 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擴(kuò)展 256 8.3.2 sFlow 260 8.4 小結(jié) 265 第9章 使用Python構(gòu)建網(wǎng)絡(luò) Web服務(wù) 266 9.1 比較PythonWeb框架 267 9.2 Flask和實(shí)驗(yàn)室設(shè)置 269 9.3 Flask介紹 270 9.3.1 HTTPie客戶(hù) 271 9.3.2 URL路由 273 9.3.3 URL變 量 274 9.3.4 URL生成 275 9.3.5 Jsonify返回 277 9.4 網(wǎng)絡(luò)資源API 278 9.4.1 Flask-SQLAlchemy 278 9.4.2 網(wǎng)絡(luò)內(nèi)容API 280 9.4.3 設(shè)備API 283 9.4.4 設(shè)備IDAPI 286 9.5 網(wǎng)絡(luò)動(dòng)態(tài)操作 286 9.6 認(rèn)證和授權(quán) 292 9.7 在容器中運(yùn)行Flask 295 9.8 小結(jié) 298 第10章 AWS云網(wǎng)絡(luò) 300 10.1 AWS設(shè)置 301 10.2 AWS網(wǎng)絡(luò)概述 305 10.3 虛擬私有云 311 10.3.1 路由表和路由目標(biāo) 315 10.3.2 用CloudFormation實(shí)現(xiàn)動(dòng)畫(huà) 317 10.3.3 安全組和網(wǎng)絡(luò)ACL 321 10.3.4 彈性IP 323 10.3.5 NAT網(wǎng)關(guān) 325 10.4 DirectConnect和VPN 326 10.4.1 VPN網(wǎng)關(guān) 326 10.4.2 DirectConnect 326 10.5 網(wǎng)絡(luò)伸縮服務(wù) 328 10.5.1 彈性負(fù)載均衡 328 10.5.2 Route53DNS服務(wù) 329 10.5.3 CloudFrontCDN服務(wù) 329 10.6 其他AWS網(wǎng)絡(luò)服務(wù) 330 10.7 小結(jié) 330 第11章 Azure云網(wǎng)絡(luò) 332 11.1 Azure和AWS網(wǎng)絡(luò)服務(wù)比較 333 11.2 Azure設(shè)置 334 11.3 Azure管理和API 336 11.3.1 Azure服務(wù)原則 339 11.3.2 Python與PowerShell 341 11.4 Azure全球基礎(chǔ)設(shè)施 341 11.5 Azure虛擬網(wǎng)絡(luò) 343 11.5.1 互聯(lián)網(wǎng)訪(fǎng)問(wèn) 344 11.5.2 網(wǎng)絡(luò)資源創(chuàng)建 348 11.5.3 VNet服務(wù)端點(diǎn) 349 11.5.4 VNet對(duì)等連接 350 11.6 VNet路由 353 11.7 AzureVPN 360 11.8 AzureExpressRoute 363 11.9 Azure網(wǎng)絡(luò)負(fù)載均衡器 364 11.10 其他Azure網(wǎng)絡(luò)服務(wù) 365 11.11 小結(jié) 366 第12章 使用ElasticStack完成網(wǎng)絡(luò)數(shù)據(jù)分析 367 12.1 ElasticStack是什么? 367 12.2 實(shí)驗(yàn)室拓?fù)?369 12.3 ElasticStack作為服務(wù) 373 12.4 第一個(gè)端到端示例 375 12.5 Elasticsearch與Python客戶(hù)端交互 379 12.6 使用Logstash實(shí)現(xiàn)數(shù)據(jù)攝取 381 12.7 使用Beats實(shí)現(xiàn)數(shù)據(jù)攝取 383 12.8 使用Elasticsearch實(shí)現(xiàn)搜索 389 12.9 使用Kibana實(shí)現(xiàn)數(shù)據(jù)可視化 394 12.10 小結(jié) 398 第13章 使用Git 399 13.1 內(nèi)容管理問(wèn)題和Git 399 13.2 Git介紹 400 13.2.1 Git的好處 401 13.2.2 Git術(shù)語(yǔ) 402 13.2.3 Git和GitHub 402 13.3 設(shè)置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 自動(dòng)化配置備份 423 13.8 使用Git協(xié)作 425 13.9 小結(jié) 426 第14章 使用Jenkins持續(xù)集成 427 14.1 傳統(tǒng)變更管理過(guò)程 427 14.2 持續(xù)集成介紹 429 14.3 安裝Jenkins 429 14.4 Jenkins示例 432 14.4.1 執(zhí)行Python腳本的第一個(gè)作業(yè) 432 14.4.2 Jenkins插件 437 14.4.3 網(wǎng)絡(luò)持續(xù)集成示例 439 14.5 使用Python操作Jenkins 446 14.6 網(wǎng)絡(luò)的持續(xù)集成 448 14.7 小結(jié) 448 第15章 網(wǎng)絡(luò)測(cè)試驅(qū)動(dòng)開(kāi)發(fā) 449 15.1 測(cè)試驅(qū)動(dòng)開(kāi)發(fā)概述 449 15.2 拓?fù)渥鳛榇a 451 15.2.1 Python的unittest模塊 456 15.2.2 關(guān)于Python測(cè)試 460 15.2.3 pytest示例 461 15.3 編寫(xiě)網(wǎng)絡(luò)測(cè)試 464 15.3.1 測(cè)試可達(dá)性 464 15.3.2 測(cè)試網(wǎng)絡(luò)延遲 466 15.3.3 測(cè)試安全性 467 15.3.4 測(cè)試事務(wù) 467 15.3.5 測(cè)試網(wǎng)絡(luò)配置 468 15.3.6 測(cè)試Ansible 468 15.4 pytest與Jenkins集成 469 15.5 pyATS和Genie 473 15.6 小結(jié) 477
你還可能感興趣
我要評(píng)論
|