序
身為一名網路工程師,你有沒有在工作中遇到過類似這樣的3 個需求?
需求1:某大型企業的生產網路裡有5000 台思科交換機,最近公司更換了TACACS 伺服器,將思科的ACS 取代成了ISE,因為ISE 的IP 位址和ACS 的不同,你需要在這5000 台交換機上為ISE 做相關的AAA 設定,並移除原有的ACS 的AAA 設定。
需求2:公司的網路安全部門提醒你這5000 台思科交換機現有的IOS(Internetwork Operating System,網際網路作業系統)版本有很多安全性漏洞,需要儘快升級它們的IOS 版本。
需求3:公司聘請的技術稽核人員在隨機抽樣檢查了一些現有的交換機設定後,發現還有很多交換機的設定需要做安全強化和最佳化,例如部分交換機在Line VTY 的設定下依然允許透過Telnet 協定遠端存取,部分交換機沒有按要求設定DHCP Snooping 和Spanning Tree Portfast 等,你的上司讓你在最短的時間內從這5000 台交換機裡找出哪些需要做安全強化和最佳化,列出它們的Hostname 和IP 位址,以及詳細說明它們各自需要強化和最佳化哪些設定。
時間回到2013 年, 剛剛考取CCIE 的我第一次聽說軟體定義網路(Software Defined Network,SDN)。當時我在國外某技術討論區讀到一篇關於SDN 的發文,作者把SDN 寫得神乎其神,中心思想就是:完全依靠傳統網路工程師手動設定和手動校正,效率不佳的傳統網路運行維護遲早會迎來「壽終正寢」的一天,取而代之的就是能帶來「革命性改變」的SDN。讀完該文後,作為傳統網路工程師的我感覺到一股強烈的危機感,當時自己花了很長時間去學習和研究Mininet 這個以OpenFlow 為主、輕量級的SDN 模擬器。在研究了一段時間的Mininet 後,除了對OpenFlow 有一些了解,我並沒有感覺到 SDN(OpenFlow)為自己從事的網路運行維護工作帶來什麼實質性的幫助和改變。公司裡思科路由器和交換機的設定依然需要一台一台登入去改,IOS 作業系統的升級依然需要一台一台地手動去做;當對裝置的設定、硬體類型和序號做稽核檢查時,依然需要一台一台登入裝置去執行各種show 指令,對輸出結果用肉眼去篩選和檢查。
這些完全依靠網路工程師人工的傳統運行維護工作方式不僅效率不佳,而且容易出現人為失誤,造成不必要的麻煩。自己一度對SDN 嗤之以鼻,認為該技術的應用場景太過侷限,傳統企業網連線層的運行維護依然離不開網路工程師的手動管理。
2016 年,在新加坡工作將近7 年後,我有幸受聘於沙烏地阿拉伯阿布都拉國王科技大學(KAUST),從東到西跨越整個亞洲來到這個對很多人來說既熟悉又陌生的國度,在這裡擔任進階網路工程師一職。面對KAUST 近萬台思科裝置的龐大網路,看著網路運行維護組的同事依然日復一日地用手動的方式一台一台透過SSH 登入裝置去完成開篇提到的3 個需求及其他重複、單調、費時的日常工作,我認為需要做些改變來打破傳統,提升工作效率,因為你無法想像每隔半年就需要透過人工手動給超過5000 台思科交換機升級IOS 是一項多麼龐大並且費時的工程。以此為契機,在工作之餘,我花了近半年的時間從零開始自學了Python,並在KAUST 的生產網路裡進行了實作,寫了大大小小幾十個網路運行維護自動化的指令稿,最後成功透過Python 語言實現了全面的網路運行維護自動化,相當大地加強了KAUST 網路運行維護組的工作效率和準確率,讓同事有更多的時間和精力學習其他與電腦網路相關的專業技能,幫助他們從傳統網路工程師向NetDevOps 工程師轉型。
眾所皆知,Python 這門程式語言的應用場景十分廣泛,人工智慧、資料分析、爬蟲、Web 開發、遊戲製作等領域都能看到Python 的身影,隨著近幾年Python 的大熱,與上述Python 應用場景相關的書籍、視訊、網站等教學資源隨處可見,而Python 的基礎入門教學更是多如牛毛。
遺憾的是,在如此豐富的Python 教學資源中,為網路工程師量身打造的電腦網路運行維護方面的教學書籍卻相當匱乏。市面上有部分以NetDevOps 為主題、說明網路運行維護自動化技術的書籍,這種書籍會走馬觀花地把Linux、Bash、XML/JSON/YANG、NETCONFIG、Jinja、StackStorm 等技術都講一遍,雖然其中有關於Python 的篇幅,但是內容有限,說明不夠深入,沒有系統地以網路運行維護工作中的實戰程式深入淺出地說明Python 在大型網路運行維護中的實際應用。很多想學Python 的網路工程師在讀完這種書籍後依然一頭霧水,不知道怎樣將Python 運用到工作中。還有一種系統說明Python 的基礎入門教材,則把Python 講得過於詳細,其中有很多基礎知識在網路運行維護中很少用到,甚至根本用不到,導致讀者學習週期過長,學習效果也不夠理想。另外,這種教材的作者都是專業程式設計師出身,術業有專攻,他們對網路技術、網路運行維護的了解不如專業網路工程師透徹,自然也就不可能量身打造地寫一本適合網路工程師學習的Python 教學。
有鑑於此,作為網路工程師出身、已經從事網路運行維護10 年的我決定結合自己在學習Python 和在工作中使用Python 時累積的心得和經驗,寫一本為網路工程師量身打造的Python 教學,以幫助所有希望轉型或正準備轉型的傳統網路工程師,讓大家在學習網路運行維護自動化技術的道路上少走一些彎路。
另外,Python 核心團隊已經宣佈從2020 年1 月1 日起不再對Python 2 提供維護和社區支援,由於Python 3 不相容Python 2,因此本書所有內容將以截稿前最新為基礎的Python 3.8.2 做示範。鑑於部分讀者具有一定Python 2 的基礎,本書也會對Python 2 和Python 3 有明顯差異的技術點做說明和示範。
●本書內容簡介
本書共6 章,分別介紹以下內容。
第1 章 Python 的安裝和使用
工欲善其事,必先利其器。本章將詳細介紹Python 在Windows 和Linux作業系統上的安裝和使用方法。
第2 章 Python 基本語法
為網路工程師量身打造的Python 程式設計基礎知識的詳細說明是本書的重點內容,分為基本語法(本章)和進階語法(第3 章)兩部分。本章主要介紹Python 的變數、方法與函數、資料類型等基礎內容。
第3 章 Python 進階語法
承接第2 章的內容,本章將說明Python 中的條件(判斷)敘述、循環敘述、文字檔的讀/ 寫、自訂函數、模組、正規表示法及異常處理等網路工程師必須掌握的Python 進階基礎知識。
第4 章 Python 網路運行維護實驗(GNS3 模擬器)
第4 章和第5 章將分別以實驗和實戰的形式說明Python 在網路運行維護中的實際應用。本章共分為4 個實驗,實驗難度循序漸進,所有實驗都將在GNS3 模擬器上示範,實驗程式難度由淺入深,配合詳細的說明,幫助讀者學習和了解。
第5 章 Python 網路運行維護實戰(實機)
本章提供3 個在生產網路裡的裝置上實戰執行的Python 程式說明和示範。每個Python 指令稿都將提供詳細的分段說明,並且提供指令稿執行前、指令稿執行中、指令稿執行後的畫面,幫助讀者清晰、直觀地了解Python 是如何把繁雜、單調、耗時的傳統網路運行維護工作實現自動化的。
第6 章 Python 協力廠商模組詳解
在第4、5 章的基礎上, 本章舉例介紹更多實用的以Netmiko 為基礎的Python 協力廠商模組在網路運行維護中的應用, 如TextFSM、ntctemplate、Napalm、pyntc、netdev 等,說明它們如何幫助沒有API 的老舊網路裝置實現更多網路運行維護自動化的功能,如何透過單執行緒非同步及多執行緒的方式加強Python 指令稿的執行效率。
●適合讀者群
本書適用於熟練掌握了電腦網路技術基礎知識,並且希望學習以Python 為代表的網路運行維護自動化技術的網路工程師、網路安全工程師、網路顧問、網路架構師,以及電腦網路專業的在校學生。本書也適合已經具備一定Python 程式設計基礎,並且對網路運行維護自動化技術有興趣的Linux/Windows 系統工程師和系統架構師。
●本書特色
本書是為網路工程師量身打造的Python 學習教學,本身就是網路工程師的作者提煉和精選了一些適合網路工程師學習的Python 基礎知識來說明,幫助對包含Python 在內任何程式語言都是零基礎的傳統網路工程師快速學習和上手Python。本書並不是一本全方位的Python 教學,畢竟術業有專攻,網路工程師不等於全職軟體開發人員。
另外, 本書會列出Python 各種專業術語對應的英文詞彙, 例如字串(String)、程式縮排(Indentation)、異常處理(Exception Handling)等,方便讀者在延伸學習和查詢與Python 相關的英文資料時能快速適應。
最後,本書所有程式都將在Linux(CentOS)作業系統上執行,並在思科裝置上進行示範。