




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
項(xiàng)目1Python編程基礎(chǔ)Python編程基礎(chǔ)1.5文件處理1.1Python簡(jiǎn)介1.2Python編程基礎(chǔ)1.3函數(shù)1.4異常處理1.6網(wǎng)絡(luò)模塊1.7任務(wù)實(shí)施1.1Python簡(jiǎn)介Python是一種高級(jí)編程語言,由荷蘭人GuidovanRossum于1989年圣誕節(jié)期間發(fā)明并首次發(fā)布。Python官網(wǎng):Python的特點(diǎn)是易于學(xué)習(xí)、易于閱讀、易于維護(hù),并且具有良好的跨平臺(tái)特性,能夠在多個(gè)操作系統(tǒng)上運(yùn)行,如
Windows、Linux、MacOS
等。它擁有豐富的標(biāo)準(zhǔn)庫和第三方庫,覆蓋了廣泛的領(lǐng)域需求。目前,Python的主要應(yīng)用領(lǐng)域如下:1Python簡(jiǎn)介1.1Python簡(jiǎn)介2Python應(yīng)用領(lǐng)域⑤自動(dòng)化運(yùn)維selenium⑥WEB開發(fā)Web框架如Django,web2py等⑦科學(xué)計(jì)算NumPy,SciPy,Matplotlib⑧常規(guī)軟件開發(fā)軟件開發(fā)、腳本編寫、網(wǎng)絡(luò)編程①人工智能機(jī)器學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)、深度學(xué)習(xí)②云計(jì)算開源云計(jì)算解決方案OpenStack③大數(shù)據(jù)數(shù)據(jù)分析、數(shù)據(jù)可視化、數(shù)據(jù)挖掘④網(wǎng)絡(luò)爬蟲主流爬蟲設(shè)計(jì)語言,Scrapy框架Python應(yīng)用場(chǎng)合Python編程基礎(chǔ)1.5文件處理1.1Python簡(jiǎn)介1.2Python編程基礎(chǔ)1.3函數(shù)1.4異常處理1.6網(wǎng)絡(luò)模塊1.7任務(wù)實(shí)施1.3Python函數(shù)所謂標(biāo)識(shí)符就是變量、常量、函數(shù)、類等對(duì)象使用的名字。變量命名規(guī)則:名稱第一字符為英文字母或者下劃線名稱第一字符后可以使用英文字母、下劃線和數(shù)字名稱不能使用python的關(guān)鍵字或保留字符名稱區(qū)分大小寫,單詞與單詞之間使用下劃線連接1標(biāo)識(shí)符1.2Python編程基礎(chǔ)Python關(guān)鍵字,也叫保留字,是Python語言官方確定的用作語法功能的專用標(biāo)識(shí)符,標(biāo)識(shí)符不能與Python的關(guān)鍵字和內(nèi)置函數(shù)的名字相同。關(guān)鍵字只包含小寫字母。Python的標(biāo)準(zhǔn)庫提供了一個(gè)keyword模塊。2
關(guān)鍵字1.2Python編程基礎(chǔ)在Python中,以符號(hào)”#“為單行注釋的開始,從它往后到本行末尾的內(nèi)容,都是注釋。如果想注釋多行語句,只能在每行的開頭加上符號(hào)”#“。很多時(shí)候,在一些Python腳本文件的開頭都能看到以“#“開頭的兩行代碼,它們不是注釋,而是一些設(shè)定。這兩行代碼的特點(diǎn)是位置在文件的頂行、頂左,沒有空格和空行。3注釋#!/usr/bin/python#-*-coding:UTF-8-*-第一行用于指定運(yùn)行腳本的Python解釋器,為L(zhǎng)inux專用,Windows中不需要。第二行用于指定代碼的編碼方式。Python3全面支持Unicode,默認(rèn)采用UTF-8編碼,本行可以不需要。但在Python2中,通常都需要這一行。1.2Python編程基礎(chǔ)Python最具特色的語法格式就是使用縮進(jìn)來表示代碼塊,不像其他編程語言使用花括號(hào)或其他符號(hào)。相同層次的語句具有相同的縮進(jìn)。Python縮進(jìn)規(guī)則是指在定義類、函數(shù)、流程控制語句、異常處理語句等時(shí),行尾的冒號(hào)和下一行的縮進(jìn)表示下一個(gè)代碼塊的開始,而縮進(jìn)的結(jié)束則表示代碼塊的結(jié)束。Python官方的代碼規(guī)范PEP8建議使用4個(gè)空格作為縮進(jìn)。如果縮進(jìn)的空格數(shù)不一致,會(huì)拋出名為"IndentationError"的異常。4語句縮進(jìn)1.2Python編程基礎(chǔ)Python中通常一行就是一條語句,一條語句通常也不會(huì)超過一行。但Python并沒有從語法層面完全禁止在一行中使用多條語句,可以使用分號(hào)實(shí)現(xiàn)多條語句在一行。若一條語句實(shí)在太長(zhǎng),也是可以占用多行的,可以使用反斜線來實(shí)現(xiàn)多行語句。如下面的字符串:4多行語句>>>importos;s="NetworkAutomatic";print(s)string="Thisbookispythonfornetworkengineers"\+"toworkfornetworkautomatic."1.2Python編程基礎(chǔ)Python是一門弱類型語言,變量使用前無須聲明,變量名可以看作對(duì)象的引用。Python中有許多內(nèi)置的基本數(shù)據(jù)類型,分為數(shù)字(number)、字符串(string)、列表(list)、元組(tuple)、字典(dict)、集合(set)以及一些不太常用的數(shù)據(jù)類型,如字節(jié)串(byte)等。這些數(shù)據(jù)類型可以分成以下幾種類型。(1)可變類型:列表(list)、字典(dict)和集合(set)。(2)不可變類型:數(shù)字(number)、字符串(string)和元組(tuple)。(3)序列類型:字符串(string)、列表(list)、元組(tuple)和字典(dict)。(4)非序列類型:集合(det)。5數(shù)據(jù)類型1.2Python編程基礎(chǔ)Python是一門弱類型語言,流程控制指的是代碼運(yùn)行邏輯、分支走向、循環(huán)控制,是體現(xiàn)程序執(zhí)行順序的操作。流程控制結(jié)構(gòu)一般分為順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
(1)順序結(jié)構(gòu)是程序逐行執(zhí)行,所有語句都按照它們?cè)谖募袑懭氲捻樞驁?zhí)行。
(2)選擇結(jié)構(gòu)也稱分支結(jié)構(gòu),是指程序有選擇地執(zhí)行代碼,可以跳過沒用的代碼,只執(zhí)行有用的代碼。通常有如下兩種選擇結(jié)構(gòu)。條件判斷:if/elif/else。異常處理:try/except
(3)循環(huán)結(jié)構(gòu)是指程序不斷地重復(fù)執(zhí)行同一段代碼。通常有如下兩種循環(huán)結(jié)構(gòu):for循環(huán)。while循環(huán)5流程控制1.3Python函數(shù)Python是一門弱類型語言,流程控制指的是代碼運(yùn)行邏輯、分支走向、循環(huán)控制,是體現(xiàn)程序執(zhí)行順序的操作。流程控制結(jié)構(gòu)一般分為順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
(1)順序結(jié)構(gòu)是程序逐行執(zhí)行,所有語句都按照它們?cè)谖募袑懭氲捻樞驁?zhí)行。
(2)選擇結(jié)構(gòu)也稱分支結(jié)構(gòu),是指程序有選擇地執(zhí)行代碼,可以跳過沒用的代碼,只執(zhí)行有用的代碼。通常有如下兩種選擇結(jié)構(gòu)。條件判斷:if/elif/else。異常處理:try/except
(3)循環(huán)結(jié)構(gòu)是指程序不斷地重復(fù)執(zhí)行同一段代碼。通常有如下兩種循環(huán)結(jié)構(gòu):for循環(huán)。while循環(huán)6流程控制Python編程基礎(chǔ)1.5文件處理1.1Python簡(jiǎn)介1.2Python編程基礎(chǔ)1.3函數(shù)1.4異常處理1.6網(wǎng)絡(luò)模塊1.7任務(wù)實(shí)施1.3Python函數(shù)定義函數(shù)使用保關(guān)鍵def,def后跟函數(shù)名和圓括號(hào),在圓括號(hào)內(nèi)定義函數(shù)接收的參數(shù),也可以不定義參數(shù)。圓括號(hào)后是冒號(hào),函數(shù)體(函數(shù)的代碼塊)以冒號(hào)開始,并且統(tǒng)一縮進(jìn)。使用return語句結(jié)束函數(shù),默認(rèn)返回None。return語句依然在函數(shù)體內(nèi)部,不能回退縮進(jìn)。直到函數(shù)的所有代碼寫完,才回退縮進(jìn),表示函數(shù)結(jié)束。函數(shù)定義語法如下:1函數(shù)定義def函數(shù)名(參數(shù)):#內(nèi)部代碼
return表達(dá)式1.3Python函數(shù)2函數(shù)調(diào)用函數(shù)只有在被調(diào)用時(shí)才會(huì)被執(zhí)行。要調(diào)用函數(shù),必須使用函數(shù)名后跟圓括號(hào)的方式。調(diào)用時(shí)要根據(jù)函數(shù)的定義,提供相應(yīng)個(gè)數(shù)和類型的參數(shù),每個(gè)參數(shù)之間用逗號(hào)分隔。在Python中,用def語句創(chuàng)建函數(shù)時(shí),可以用return語句指定函數(shù)返回的值,返回值可以是任意類型的。需要注意的是,return語句在同一個(gè)函數(shù)中可以有多條,但只要有一條得到執(zhí)行,就會(huì)直接結(jié)束函數(shù)。>>>defconfigure_intf(intf_name,ip,mask): config=f'interface{intf_name}\nipaddress{ip}{mask}' returnconfig>>>ret=configure_intf('Fa0/0','','')>>>print(ret)interfaceFa0/0ipaddressPython編程基礎(chǔ)1.5文件處理1.1Python簡(jiǎn)介1.2Python編程基礎(chǔ)1.3函數(shù)1.4異常處理2.6網(wǎng)絡(luò)模塊1.7任務(wù)實(shí)施1.4異常處理1
異常處理一個(gè)程序發(fā)生異常,代表該程序在執(zhí)行時(shí)出現(xiàn)了非正常的情況,無法再執(zhí)行下去。默認(rèn)情況下,程序是要終止的。如果要避免程序退出,可以使用捕獲異常的方式獲取異常的名稱,再通過其他的邏輯代碼讓程序繼續(xù)運(yùn)行,這種根據(jù)異常做出的邏輯處理稱為異常處理。Python定義了3種異常處理結(jié)構(gòu):try/except結(jié)構(gòu);try/except/else結(jié)構(gòu);try/except/finally結(jié)構(gòu)。1.4異常處理2try/except結(jié)構(gòu)try/except結(jié)構(gòu)的執(zhí)行流程如下:首先執(zhí)行try中的代碼塊,如果程序執(zhí)行過程中出現(xiàn)異常,系統(tǒng)會(huì)自動(dòng)生成一個(gè)異常類型,并將該異常提交給Python解釋器,此過程被稱為捕獲異常。當(dāng)Python解釋器收到異常時(shí),會(huì)尋找能處理該異常的except塊,如果找到合適的except塊,就把該異常交給該except塊處理,此過程被稱為處理異常。如果Python解釋器找不到能處理異常的except塊,則程序終止運(yùn)行,Python解釋器也將退出。try:
a=input("Enterfirstnumber:")
b=input("Entersecondnumber:")
print("Result:",int(a)/int(b))
exceptValueError:
print("Pleaseenteronlynumbers")
exceptZeroDivisionError:
print("Youcan'tdividebyzero")1.4異常處理3try/except/else結(jié)構(gòu)try/except/else結(jié)構(gòu)的執(zhí)行流程如下:在try/except結(jié)構(gòu)的基礎(chǔ)上,Python
異常處理機(jī)制還提供了增加一個(gè)else塊的結(jié)構(gòu),即try/except/else結(jié)構(gòu)。當(dāng)try塊沒有捕獲到任何異常時(shí),才會(huì)執(zhí)行使用else包裹的代碼。如果try塊捕獲到異常,只會(huì)執(zhí)行except塊中的代碼處理異常,不會(huì)執(zhí)行else包裹的代碼。try:
a=input("Enterfirstnumber:")
b=input("Entersecondnumber:")
result=int(a)/int(b)
except(ValueError,ZeroDivisionError):
print("Somethingwentwrong...")
else:
print("Resultissquared:",result)1.4異常處理4try/except/finally結(jié)構(gòu)try/except/finally結(jié)構(gòu)的執(zhí)行流程如下:Python
異常處理機(jī)制還提供了增加一個(gè)finally塊的結(jié)構(gòu),即try/except/finally結(jié)構(gòu)。在整個(gè)異常處理過程中,無論try塊是否捕獲到異常,最終都要進(jìn)入finally塊,并執(zhí)行其中的代碼。try:
a=input("Enterfirstnumber:")
b=input("Entersecondnumber:")
result=int(a)/int(b)
except(ValueError,ZeroDivisionError):
print("Somethingwentwrong...")
else:
print("Resultissquared:",result)
finally:
print("Andtheylivedhappilyeverafter.")Python編程基礎(chǔ)1.5文件處理1.1Python簡(jiǎn)介1.2Python編程基礎(chǔ)1.3函數(shù)1.4異常處理1.6網(wǎng)絡(luò)模塊1.7任務(wù)實(shí)施1.5文件處理Python
提供了內(nèi)置的文件對(duì)象,以及用于對(duì)文件、目錄進(jìn)行操作的內(nèi)置模塊,通過這些可以很方便地將數(shù)據(jù)保存到文件中。在Windows上,書寫路徑時(shí)使用反斜””線作為路徑分隔符,但在OSX和Linux上,使用正斜””線作為路徑分隔符。r/R表示原始字符串。所有的字符串都是直接按照字面的意思來使用的,沒有轉(zhuǎn)義特殊或不能打印的字符。1文件路徑>>>print("D:\python\\test\n")#字符串前不加r或RD:\python\test
>>>print(r"D:\python\test\n")#字符串前加r或R。輸出的是原始字符串D:\python\test\n1.5文件處理Python
中文件操作有很多種,常見的操作是對(duì)文件進(jìn)行讀取和寫入。文件必須在打開之后才能進(jìn)行操作,在操作結(jié)束之后,還應(yīng)該將其關(guān)閉。因此文件操作可以分為以下3步,每一步都需要借助對(duì)應(yīng)的函數(shù)實(shí)現(xiàn)。打開文件:使用內(nèi)置的open()函數(shù),該函數(shù)會(huì)返回一個(gè)文件對(duì)象。對(duì)已打開的文件進(jìn)行讀/寫操作:讀取文件內(nèi)容可使用read()、readline()以及readlines()函數(shù);向文件中寫入內(nèi)容,可以使用write()函數(shù)。關(guān)閉文件:完成對(duì)文件的讀/寫操作之后,需要關(guān)閉文件,可以使用close()函數(shù)。2文件操作1.5文件處理在Python中,要操作文件,首先需要?jiǎng)?chuàng)建或者打開指定的文件,并創(chuàng)建文件對(duì)象,而這些工作可以通過內(nèi)置的open()函數(shù)完成。3打開文件file=open('file_name.txt','r')模式作用說明r以只讀模式打開文件
文件必須存在rb以二進(jìn)制格式、只讀模式打開文件,一般用于非文本文件,如圖片文件、音頻文件等w以只寫模式打開文件,若該文件存在,打開時(shí)會(huì)清空文件中原有的內(nèi)容文件存在,會(huì)清空;不存在,則創(chuàng)建文件wb以二進(jìn)制格式、只寫模式打開文件,一般用于非文本文件a以追加模式打開文件,如果文件已經(jīng)存在,新寫入內(nèi)容會(huì)追加到已有內(nèi)容之后;否則會(huì)創(chuàng)建新文件
a+以二進(jìn)制格式打開文件,并采用追加模式,如果文件已存在,新寫入內(nèi)容會(huì)追加到已有內(nèi)容之后;否則創(chuàng)建新文件。
1.5文件處理Python
提供了如下3種函數(shù)來實(shí)現(xiàn)讀取文件中數(shù)據(jù)的操作。read()函數(shù):逐個(gè)字節(jié)或者字符讀取文件中的內(nèi)容。readline()函數(shù):逐行讀取文件中的內(nèi)容。readlines()函數(shù):一次性讀取文件中多行內(nèi)容4文件讀取>>>f=open('R1.txt','r')>>>f.readlines()#將文件中的每一行作為列表的一個(gè)元素['!\n','servicetimestampsdebugdatetimemseclocaltimeshow-timezoneyear\n','servicetimestampslogdatetimemseclocaltimeshow-timezoneyear\n','servicepassword-encryption\n','servicesequence-numbers\n','!\n','noipdomainlookup\n','!\n','ipsshversion2\n','!']>>>f.close()1.5文件處理寫入文件時(shí),指定正確的文件打開模式非常重要,以免誤刪。w打開文件進(jìn)行寫入。如果文件存在,則刪除其內(nèi)容。a打開文件以添加數(shù)據(jù)。數(shù)據(jù)添加到文件末尾。如果文件不存在,在兩種模式下都會(huì)創(chuàng)建一個(gè)文件。以下函數(shù)用于寫入文件。write():將一行內(nèi)容寫入文件writelines():允許將字符串列表作為參數(shù)發(fā)送5文件寫入>>>f=open("R2.txt","w")#以w模式打開文件>>>cfg_lines_as_string='\n'.join(cfg_lines)#將列表用“\n”連接成字符串>>>f.write(cfg_lines_as_string)#將字符串寫入文件231>>>f.close()>>>os.listdir()#列出文件列表['.idea','R1.txt','R2.txt']>>>
1.5文件處理文件操作時(shí),一直強(qiáng)調(diào)打開的文件最后一定要關(guān)閉,否則會(huì)給程序的運(yùn)行造成意想不到的隱患。但是,即便使用close()函數(shù),如果在打開文件或文件操作過程中拋出了異常,還是無法及時(shí)關(guān)閉文件。為了更好地避免此類問題,Python提供了withas語句用來操作上下文管理器(contextmanager),它能夠幫助我們自動(dòng)分配并且釋放資源,保證文件自動(dòng)關(guān)閉。6關(guān)閉寫入>>>withopen('R1.txt','r')asf:
forlineinf:
print(line)Python編程基礎(chǔ)1.5文件處理1.1Python簡(jiǎn)介1.2Python編程基礎(chǔ)1.3函數(shù)1.4異常處理1.6網(wǎng)絡(luò)模塊1.7任務(wù)實(shí)施1.6網(wǎng)絡(luò)模塊1ipaddress模塊ipaddress模塊包括IPv4和IPv6地址的類,可以用來生成、驗(yàn)證、查找IP地址。從Python3.3開始,ipaddress模塊正式成為Python標(biāo)準(zhǔn)庫中的模塊之一,不需要安裝,可直接使用。ipaddress模塊中有IPv4Address
類和IPv6Address類可分別用來處理IPv4和IPv6地址。由于IPv4Address和IPv6Address對(duì)象共享許多共同屬性,后面的案例將只處理IPv4地址,可以以類似的方式處理IPv6地址1.6網(wǎng)絡(luò)模塊1ipaddress模塊ipaddress.ip_address()
函數(shù)會(huì)根據(jù)傳入的字符串自動(dòng)創(chuàng)建IPv4/IPv6Address對(duì)象使用ipaddress.ip_network()函數(shù)創(chuàng)建IPv4/IPv6Address對(duì)象>>>importipaddress>>>ipv4=ipaddress.ip_address("")>>>print(ipv4)>>>subnet1=ipaddress.ip_network("/24")#給定網(wǎng)段>>>subnet1.broadcast_address#獲取網(wǎng)段的廣播地址IPv4Address('55')>>>subnet1.with_netmask'/'#獲取網(wǎng)段加子網(wǎng)掩碼>>>subnet1.with_hostmask#獲取網(wǎng)段加主機(jī)掩碼'/55'>>>subnet1.prefixlen#獲取掩碼長(zhǎng)度241.6網(wǎng)絡(luò)模塊1ipaddress模塊使用ipaddress.ip_address()
創(chuàng)建IPv4Address對(duì)象有很多IPv4地址的屬性:>>>ipv4.pressedipv4.is_loopbackipv4.is_unspecifiedipv4.versionipv4.explodedipv4.is_multicastipv4.max_prefixlenipv4.is_globalipv4.is_privateipv4.packedipv4.is_link_localipv4.is_reservedipv4.reverse_pointer1.6網(wǎng)絡(luò)模塊2netaddr模塊netaddr模塊是Python處理IP地址和MAC地址的開源第三方庫,是用于對(duì)網(wǎng)絡(luò)地址段進(jìn)行定義和操作的一個(gè)工具。netaddr模塊不是Python的標(biāo)準(zhǔn)模塊,使用前需要安裝.IPAddress對(duì)象表示單個(gè)IP地址,可以接收一個(gè)IPv4或IPv6地址字符串地址>>>fromnetaddrimportIPAddress#導(dǎo)入IPAddress類>>>ip=IPAddress("")#IPAddress類的對(duì)象>>>ipIPAddress('')>>>type(ip)#獲取對(duì)象的類型<class'netaddr.ip.IPAddress'>>>>ip.version#查看ip對(duì)象是IPv4還是IPv64>>>ip.bits()#轉(zhuǎn)成點(diǎn)分二進(jìn)制'11000000.10101000.00000001.00000001'>>>ip.bin#將IP地址轉(zhuǎn)成二進(jìn)制的值'0b11000000101010000000000100000001'>>>ip.words#獲取IP地址的4部分的值(192,168,1,1)1.6網(wǎng)絡(luò)模塊2netaddr模塊IPNetwork()是處理IP網(wǎng)段的方法,同樣可以接收一個(gè)IPv4或IPv6地址字符串>>>fromnetaddrimportIPNetwork>>>ip=IPNetwork("/24")>>>ipIPNetwork('/24')>>>ip.cidrIPNetwork('/24')>>>ip.hostmaskIPAddress('55')>>>workIPAddress('')>>>maskIPAddress('')>>>
1.6網(wǎng)絡(luò)模塊3tabulate模塊通過tabulate模塊可以精美地顯示數(shù)據(jù)。tabulate模塊不是Python的標(biāo)準(zhǔn)模塊,使用前需要安裝tabulate模塊支持列表、字典等表格數(shù)據(jù)類型。模塊中tabulate()函數(shù)用于制表。>>>fromtabulateimporttabulate#導(dǎo)入tabulate模塊,并定義列表dis_ip_int_br>>>dis_ip_int_br=[("FastEthernet0/0","","up","up"),("FastEthernet0/1","","up","up"),("FastEthernet0/2","","up","up"),("Loopback0","","up","up"),("Loopback100","","up","up")]>>>
>>>print(tabulate(dis_ip_int_br))#使用tabulate()使輸出相對(duì)整齊---------------------------FastEthernet0/0upupFastEthernet0/1upupFastEthernet0/2upupLoopback0upupLoopback100
upup---------------------------1.6網(wǎng)絡(luò)模塊3tabulate模塊tabulate()函數(shù)還可以使用headers參數(shù)指定列名>>>columns=['Interface','IP','Status','Protocol']#定義列名>>>print(tabulate(dis_ip_int_br,headers=columns))#加上headers參數(shù)InterfaceIPStatusProtocol------------------------------------------FastEthernet0/0upupFastEthernet0/1upupFastEthernet0/2upupLoopback0
upupLoopback100
upup>>>
1.6網(wǎng)絡(luò)模塊3tabulate模塊使用參數(shù)tablefmt輸出網(wǎng)格>>>print(tabulate(dis_ip_int_br,headers=columns,tablefmt="grid"))+-----------------+-----------+----------+------------+|Interface|IP|Status|Protocol|+=================+===========+==========+|FastEthernet0/0||up|up|+-----------------+-----------+----------+------------+|FastEthernet0/1||up|up|+-----------------+-----------+----------+------------+|FastEthernet0/2||up|up|+-----------------+-----------+----------+------------+|Loopback0||up|up|+-----------------+-----------+----------+------------+|Loopback100||up|up|+-----------------+-----------+----------+------------+Python編程基礎(chǔ)1.5文件處理1.1Python簡(jiǎn)介1.2Python編程基礎(chǔ)1.3函數(shù)1.4異常處理1.6網(wǎng)絡(luò)模塊1.7任務(wù)實(shí)施1.7任務(wù)實(shí)施ping命令是運(yùn)維工程師檢查網(wǎng)絡(luò)連通性的常用命令,作為運(yùn)維工程師,基本上每天都會(huì)用到,它可以很好地幫助運(yùn)維工程師分析和判定網(wǎng)絡(luò)故障。但是ping命令每次只能ping一個(gè)IP地址,對(duì)于公司A中大量的網(wǎng)絡(luò)設(shè)備,顯然不能一個(gè)一個(gè)地ping。為此公司安排運(yùn)維工程師小李使用Python編寫一個(gè)批量ping的網(wǎng)絡(luò)檢查工具,該工具需要具備如下功能:可以批量pingIP地址;可以處理ping一段IP地址,如00-00,00-200;可以讀取包含IP的TXT文件;打印出可以ping通和ping不通的IP地址1.7任務(wù)實(shí)施ping命令是運(yùn)維工程師檢查網(wǎng)絡(luò)連通性的常用命令,作為運(yùn)維工程師,基本上每天都會(huì)用到,它可以很好地幫助運(yùn)維工程師分析和判定網(wǎng)絡(luò)故障。但是ping命令每次只能ping一個(gè)IP地址,對(duì)于公司A中大量的網(wǎng)絡(luò)設(shè)備,顯然不能一個(gè)一個(gè)地ping。為此公司安排運(yùn)維工程師小李使用Python編寫一個(gè)批量ping的網(wǎng)絡(luò)檢查工具,該工具需要具備如下功能:可以批量pingIP地址;可以處理ping一段IP地址,如00-00,00-200;可以讀取包含IP的TXT文件;打印出可以ping通和ping不通的IP地址項(xiàng)目2使用telnetlib下發(fā)網(wǎng)絡(luò)配置項(xiàng)目2使用telnetlib下發(fā)網(wǎng)絡(luò)配置2.1telnetlib模塊對(duì)象與方法2.2telnetlib登錄設(shè)備
2.3任務(wù)實(shí)施2.1telnetlib模塊對(duì)象與方法telnetlib是Python標(biāo)準(zhǔn)庫中的內(nèi)置模塊,無需額外安裝。它提供了實(shí)現(xiàn)Telnet功能的類telnetlib.Telnet。telnetlib.Telnet類里的不同方法實(shí)現(xiàn)不同功能。Telnet
表示到Telnet服務(wù)器的連接.實(shí)例初始化后默認(rèn)不連接;必須使用
open()
方法來建立連接?;蛘?,可選參數(shù)host和port也可以傳遞給構(gòu)造函數(shù),在這種情況下,到服務(wù)器的連接將在構(gòu)造函數(shù)返回前建立??蛇x參數(shù)
timeout
為阻塞操作(如連接嘗試)指定一個(gè)以秒為單位的超時(shí)時(shí)間(如果沒有指定,將使用全局默認(rèn)設(shè)置)。1telnetlib模塊介紹class
telnetlib.Telnet(host=None,
port=0[,
timeout])
1.1telnetlib模塊對(duì)象與方法Telnet
實(shí)例有以下幾種常用方法:2Telnet類對(duì)象及方法方法功能Telnet.read_until(expected,timeout=None)讀取直到給定的字符串expected或超時(shí)秒數(shù)。Telnet.read_all()讀取所有數(shù)據(jù)直到EOF(EndOfFile)。阻塞直到連接關(guān)閉。Telnet.read_very_eager()讀取從上次IO阻斷到現(xiàn)在所有的內(nèi)容,返回字節(jié)串。連接關(guān)閉或者沒有數(shù)據(jù)時(shí)觸發(fā)EOFError異常。Telnet.write(buffer)寫入數(shù)據(jù)。在套接字(Socket)上寫一個(gè)字節(jié)串,加倍任何IAC(InterpretAsCommand)字符。Telnet.close()關(guān)閉連接。Telnet.open(host,
port=0[,
timeout])連接主機(jī)。第二個(gè)可選參數(shù)是端口號(hào),默認(rèn)為標(biāo)準(zhǔn)Telnet端口(23)Telnet.write(buffer)向套接字寫入一個(gè)字節(jié)字符串Teract()交互函數(shù),模擬一個(gè)命令行Telnet客戶端。Telnet.expect(list,
timeout=None)一直讀取,直到匹配列表中的某個(gè)正則表達(dá)式。項(xiàng)目2使用telnetlib下發(fā)網(wǎng)絡(luò)配置2.1telnetlib模塊對(duì)象與方法2.2telnetlib登錄設(shè)備
2.3任務(wù)實(shí)施2.2telnetlib登錄設(shè)備
現(xiàn)有一臺(tái)網(wǎng)絡(luò)設(shè)備S5700交換機(jī)作為Telnet服務(wù)器,需要實(shí)現(xiàn)使用Pythontelnetlib作為Telnet客戶端登錄此設(shè)備。在eNSP中搭建以下拓?fù)洌和ㄟ^Cloud1連接本地主機(jī)和S5700,安裝華為eNSP模擬器后會(huì)自動(dòng)在本地主機(jī)(Windows)上產(chǎn)生一個(gè)虛擬網(wǎng)卡:Cloud1的作用就是將本地主機(jī)通過這個(gè)虛擬網(wǎng)卡連接到交換機(jī)S5700。1telnetlib登錄設(shè)備VirtualBoxHost-OnlyNetwork-IP:,即本地主機(jī)上的IP地址為:。2.2telnetlib登錄設(shè)備
2telnetlib登錄設(shè)備Cloud1的設(shè)置:2.2telnetlib登錄設(shè)備
3telnetlib登錄設(shè)備使用telnetlib登錄S5700可為四個(gè)步驟:配置設(shè)備Telnet服務(wù),使用密碼方式。手動(dòng)驗(yàn)證和查看Telnet登錄步驟,作為代碼實(shí)現(xiàn)的參考。編寫和運(yùn)行Python代碼。驗(yàn)證結(jié)果。2.2telnetlib登錄設(shè)備
4telnetlib登錄設(shè)備:配置交換機(jī)[Huawei]user-interfacevty04[Huawei-ui-vty0-4]authentication-modepassword[Huawei-ui-vty0-4]setauthenticationpasswordsimpleHuawei@123[Huawei-ui-vty0-4]protocolinboundtelnet[Huawei-ui-vty0-4]userprivilegelevel15[Huawei-ui-vty0-4]quit[Huawei]telnetserverenable[Huawei]intfacevlanif1[Huawei-Vlanif1]ipaddress0024[Huawei-Vlanif1]quit[Huawei]interfaceGE0/0/1[Huawei-GE1/0/0]undoshutdown配置設(shè)備接口地址:配置設(shè)備Telnet服務(wù):2.2telnetlib登錄設(shè)備
5telnetlib登錄設(shè)備:手工驗(yàn)證telnet交換機(jī)C:\Users\Administrator>telnet00LoginauthenticationPassword:Info:ThemaxnumberofVTYusersis5,andthenumberofcurrentVTYusersonlineis1.Thecurrentlogintimeis2020-01-1521:12:57.<Huawei>登錄命令--
回顯信息--輸入密碼--回顯信息--2.2telnetlib登錄設(shè)備
6telnetlib登錄設(shè)備
–編碼Python中encode()和decode()函數(shù)的作用是,以指定的方式編碼格式編碼字符串和解碼字符串。password.encode(‘a(chǎn)scii‘)表示將字符串’Huawei@123’轉(zhuǎn)為為ASCII。此處編碼格式遵守telnetlib模塊官方要求。Python字符串增加b,b’str‘表示這是字符串是bytes對(duì)象。b’Password:’表示將字符串’Password:’轉(zhuǎn)換為bytes類型字符串。項(xiàng)目2使用telnetlib下發(fā)網(wǎng)絡(luò)配置2.1telnetlib模塊對(duì)象與方法2.2telnetlib登錄設(shè)備
2.3任務(wù)實(shí)施2.3任務(wù)實(shí)施2.3任務(wù)實(shí)施整個(gè)網(wǎng)絡(luò)已經(jīng)部署和實(shí)現(xiàn)了路由、交換等各項(xiàng)功能,并實(shí)現(xiàn)了全網(wǎng)互通。本任務(wù)主要是向深圳總部園區(qū)網(wǎng)絡(luò)和服務(wù)器區(qū)網(wǎng)絡(luò)的路由器和交換機(jī)下發(fā)配置,工程師需要完成的任務(wù)如下。(1)手動(dòng)在路由器SZ1和SZ2,交換機(jī)S1.、S2和S4上配置Telnet服務(wù),Telnet登錄用戶名python,密碼Huawei12#$。(2)使用telnetlib在所有路由器和交換機(jī)上配置運(yùn)維用戶,用戶的安全級(jí)別為1,用戶名yunwei_001,密碼Huawei@123(3)手動(dòng)配置ISP路由器作為NTP的朱時(shí)鐘源,使用IP地址,配置路由器SZ2作為深圳總部園區(qū)網(wǎng)絡(luò)和服務(wù)器區(qū)網(wǎng)絡(luò)所有設(shè)備的NTP服務(wù)器,IP地址是,使用telnetlib在所有路由器和交換機(jī)下發(fā)NTP配置,與其進(jìn)行時(shí)間同步。(4)使用telnetlib在所有路由器和交換機(jī)上配置SNMPv3,SNMPv3用戶名為user01,所屬組名為group01,鑒別方式為SHA,鑒別密碼為Huawei@123,加密方式為AES128,加密密碼為Huawei@123。項(xiàng)目3使用paramiko實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備自動(dòng)化巡檢項(xiàng)目3使用paramiko實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備自動(dòng)化巡檢3.1Paramiko模塊介紹3.2Paramiko模塊的類3.3任務(wù)實(shí)施3.1PythonParamiko模塊SSH是一個(gè)是一種用于在不安全網(wǎng)絡(luò)上進(jìn)行安全遠(yuǎn)程登錄和實(shí)現(xiàn)其他安全網(wǎng)絡(luò)服務(wù)的協(xié)議,OpenSSH是其中一個(gè)開源實(shí)現(xiàn)。Paramiko是Python實(shí)現(xiàn)SSHv2協(xié)議的模塊,它支持口令認(rèn)證和公鑰認(rèn)證兩種方式??梢詫?shí)現(xiàn)安全的遠(yuǎn)程命令執(zhí)行、文件傳輸?shù)裙δ?。Paramiko可以使用SSHv2遠(yuǎn)程連接到Linux服務(wù)器或網(wǎng)絡(luò)設(shè)備,查看上面的日志狀態(tài),批量配置遠(yuǎn)程服務(wù)器或設(shè)備,文件上傳,文件下載等1Paramiko模塊-介紹3.1PythonParamiko模塊Paramiko模塊中有很多組件,可以歸納為:常用協(xié)議類和密鑰相關(guān)類。常用協(xié)議類主要有以下組件:最常用的兩個(gè)類為SSHClient類和SFTPClient類,分別提供SSH和SFTP功能。2Paramiko模塊–組件Channel類:該類用于創(chuàng)建在SSHTransport上的安全通道。Message類:SSHMessage是字節(jié)流。該類對(duì)字符串、整數(shù)等進(jìn)行編碼。Packetizer類:數(shù)據(jù)包處理類。Transport類:該類用于在現(xiàn)有套接字或類套接字對(duì)象上創(chuàng)建一個(gè)Transport會(huì)話對(duì)象。SFTPClient類:該類通過一個(gè)打開的SSHTransport會(huì)話創(chuàng)建SFTP會(huì)話通道并執(zhí)行遠(yuǎn)程文件操作。SSHClient類:該類是與SSH服務(wù)器會(huì)話的高級(jí)表示,集成了Transport,Channel和SFTPClient類。3.1PythonParamiko模塊密鑰相關(guān)類主要有以下組件:OpenSSH是SSH協(xié)議的免費(fèi)開源實(shí)現(xiàn)。OpenSSH提供了服務(wù)端后臺(tái)程序和客戶端工具。所有的Linux操作系統(tǒng)均集成了OpenSSH。OpenSSH把用戶訪問過每個(gè)計(jì)算機(jī)的公鑰都記錄在~/.ssh/known_hosts。當(dāng)下次訪問相同計(jì)算機(jī)時(shí),OpenSSH會(huì)核對(duì)公鑰。如果公鑰不同,OpenSSH會(huì)發(fā)出警告,避免用戶受到中間人攻擊等。3Paramiko模塊–組件SSHAgent類:該類用于SSH代理。Hostkeys類:該類與OpenSSHknown_hosts文件相關(guān),用于創(chuàng)建一個(gè)hostkeys對(duì)象。Keyhandling類:該類用于創(chuàng)建對(duì)應(yīng)密鑰類型的實(shí)例,如RSA密鑰,DSS(DSA)密鑰。3.1PythonParamiko模塊在Windows主機(jī),打開Win10的命令行CMD,執(zhí)行:pipinstallparamiko命令。建議使用國內(nèi)pip源安裝。測(cè)試paramiko,可以看出paramiko的版本為2.7.24Paramiko模塊安裝C:\Users\Administrator>pipinstallparamiko-i/pypi/simple/--trusted-hostC:\Users\Administrator>pythonPython3.9.6(tags/v3.9.6:db3ff76,Jun282021,15:26:21)[MSCv.192964bit(AMD64)]onwin32Type"help","copyright","credits"or"license"formoreinformation.>>>>>>importparamiko>>>paramiko.__version__'2.7.2'>>>>>>exit()C:\Users\Administrator>項(xiàng)目3使用paramiko實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備自動(dòng)化巡檢3.1Paramiko模塊介紹3.2Paramiko模塊的類3.3Paramiko案例3.2
Paramiko模塊的類SSHClient的作用類似于Linux的SSH命令,是對(duì)SSH會(huì)話的封裝,該類封裝了傳輸(Transport),通道(Channel)及SFTPClient類,通常用于執(zhí)行遠(yuǎn)程命令。SSHClient常用方法如下:1SSHClient類及其方法connect():實(shí)現(xiàn)遠(yuǎn)程服務(wù)器的連接與認(rèn)證,對(duì)于該方法只有hostname是必傳參數(shù)。常用參數(shù):Hostname:
連接的目標(biāo)主機(jī);
port:SSH_PORT指定端口
username:驗(yàn)證的用戶名;
password:驗(yàn)證的用戶密碼
pkey:私鑰方式用于身份驗(yàn)證;key_filename:一個(gè)文件名或文件列表,指定私鑰文件
timeout:可選的tcp連接超時(shí)時(shí)間;compress:是否打開壓縮
allow_agent:是否允許連接到ssh代理,默認(rèn)為True允許
look_for_keys:是否在~/.ssh中搜索私鑰文件,默認(rèn)為True允許3.2
Paramiko模塊的類2SSHClient類及其方法set_missing_host_key_policy():設(shè)置遠(yuǎn)程服務(wù)器沒有在know_hosts文件中記錄時(shí)的應(yīng)對(duì)策略。load_system_host_keys():從系統(tǒng)文件加載主機(jī)密鑰,如果沒有參數(shù),那么就嘗試從用戶本地的“knownhosts”文件中讀取密鑰信息。目前支持三種策略:AutoAddPolicy:自動(dòng)添加主機(jī)名及主機(jī)密鑰到本地HostKeys對(duì)象,不依賴load_system_host_key的配置。即新建立ssh連接時(shí)不需要再輸入yes或no進(jìn)行確認(rèn)WarningPolicy用于記錄一個(gè)未知的主機(jī)密鑰的python警告。并接受,功能上和AutoAddPolicy類似,但是會(huì)提示是新連接RejectPolicy自動(dòng)拒絕未知的主機(jī)名和密鑰,依賴load_system_host_key的配置。此為默認(rèn)選項(xiàng)3.2
Paramiko模塊的類3SSHClient類及其方法exec_command():在遠(yuǎn)程服務(wù)器執(zhí)行Linux命令的方法。invoke_shell():基于SSH會(huì)話連接,啟動(dòng)一個(gè)交互式shell會(huì)話。open_sftp():在當(dāng)前ssh會(huì)話的基礎(chǔ)上創(chuàng)建一個(gè)sftp會(huì)話。該方法會(huì)返回一個(gè)SFTPClient對(duì)象。利用SSHClient對(duì)象的open_sftp()方法,可以直接返回一個(gè)基于當(dāng)前連接的sftp對(duì)象,可以進(jìn)行文件的上傳等操作。如
sftp=client.open_sftp()
sftp.put('test.txt','text.txt')3.2
Paramiko模塊的類SFTPCLient類作為一個(gè)sftp的客戶端對(duì)象,根據(jù)SSH傳輸協(xié)議的sftp會(huì)話,實(shí)現(xiàn)遠(yuǎn)程文件操作,如上傳、下載、權(quán)限、狀態(tài)。常用的方法:4SFTPClient類及其方法from_transport():從開啟的Transport通道創(chuàng)建一個(gè)SFTP客戶端通道。常用到的參數(shù):
T:一個(gè)認(rèn)證過的開啟的Transport會(huì)話;window_size:可選參數(shù),SFTP會(huì)話窗口大小max_packet_size:可選參數(shù),SFTP會(huì)話最大數(shù)據(jù)包大小3.2
Paramiko模塊的類5SFTPClient類及其方法get():將遠(yuǎn)程文件(remotepath)從SFTP服務(wù)器復(fù)制到本地主機(jī)的指定路徑中(localpath),操作引發(fā)的任何異常都將被傳遞。put():將本地文件(localpath)從本地主機(jī)復(fù)制到SFTP服務(wù)器的指定路徑中(remotepath),操作引發(fā)的任何異常都將被傳遞。mkdir()在服務(wù)器上創(chuàng)建目錄remove()在服務(wù)器上刪除目錄rename()在服務(wù)器上重命名目錄stat()查看服務(wù)器文件狀態(tài)listdir()列出服務(wù)器目錄下的文件3.2
Paramiko模塊的類Keyhandling類用于創(chuàng)建對(duì)應(yīng)密鑰類型的實(shí)例,如RSA密鑰,DSS(DSA)密鑰。這個(gè)類包含了密鑰的讀取,寫入等相關(guān)方法。常用方法:6Keyhandling類及其方法RSAKey.from_private_key_file(filename):從文件讀取RSA私鑰來創(chuàng)建密鑰對(duì)象DSSKey.from_private_key_file(filename):從文件讀取DSS私鑰來創(chuàng)建密鑰對(duì)象項(xiàng)目3使用paramiko實(shí)現(xiàn)網(wǎng)絡(luò)設(shè)備自動(dòng)化巡檢3.1Paramiko模塊介紹3.2Paramiko模塊的類3.3Paramiko任務(wù)實(shí)施3.3使用Paramiko登錄設(shè)備公司A的網(wǎng)絡(luò)已經(jīng)在正常運(yùn)行?,F(xiàn)在考慮對(duì)運(yùn)行中的網(wǎng)絡(luò)設(shè)備進(jìn)行日常巡檢,除了日常的設(shè)備環(huán)境檢查外,還要檢查設(shè)備基本信息和設(shè)備運(yùn)行狀態(tài)等。本任務(wù)將收集網(wǎng)絡(luò)設(shè)備的版本信息、補(bǔ)丁信息、時(shí)鐘信息、板卡運(yùn)行狀態(tài)、CPU使用率和內(nèi)存使用率以及日志信息,便于分析網(wǎng)絡(luò)運(yùn)行狀態(tài)。如圖2-1所示,本任務(wù)只考慮深圳總部園區(qū)網(wǎng)絡(luò)和服務(wù)器區(qū)網(wǎng)絡(luò),各設(shè)備的IP地址連接參見表2-3。按照公司的整體網(wǎng)絡(luò)規(guī)劃,運(yùn)維工程師將對(duì)深圳總部園區(qū)網(wǎng)絡(luò)和服務(wù)器區(qū)網(wǎng)絡(luò)使用paramiko模塊實(shí)現(xiàn)網(wǎng)絡(luò)自動(dòng)化巡檢,需要完成的任務(wù)如下。
(1)配置并驗(yàn)證SSH服務(wù)端。
(2)使用paramiko登錄設(shè)備。
(3)自動(dòng)執(zhí)行網(wǎng)絡(luò)巡檢的各項(xiàng)命令。項(xiàng)目4使用netmiko發(fā)現(xiàn)網(wǎng)絡(luò)拓?fù)漤?xiàng)目4使用netmiko發(fā)現(xiàn)網(wǎng)絡(luò)拓?fù)?.1Netmiko模塊介紹4.2Netmiko的方法4.3任務(wù)實(shí)施4.1Netmiko模塊Paramiko實(shí)現(xiàn)了SSH2的功能,但它并不是專門為網(wǎng)設(shè)備開的模塊。在用Paramiko和網(wǎng)絡(luò)設(shè)備交互時(shí)并不很簡(jiǎn)單和通用。Netmiko基于Paramiko開發(fā)專門處理網(wǎng)絡(luò)設(shè)備的SSH模塊。這個(gè)模塊目前能支持很多廠商設(shè)備SSH連接。1Netmiko模塊-介紹4.1Netmiko模塊Netmiko支持各種設(shè)備。這些設(shè)備分為三類,具體參閱鏈接:https://ktbyers.github.io/netmiko/PLATFORMS.html2Netmiko模塊-介紹定期測(cè)試:在每次NetMiko發(fā)布之前,都會(huì)嘗試對(duì)這組設(shè)備運(yùn)行完整的測(cè)試套件。定期測(cè)試支持平臺(tái),如AristavEOS、CiscoASA、CiscoIOS、CiscoSG300、Linux(更多參閱鏈接網(wǎng)站);有限測(cè)試:有限的測(cè)試意味著配置和顯示操作系統(tǒng)測(cè)試在某個(gè)時(shí)間點(diǎn)通過了該平臺(tái)上的測(cè)試,因此,可以認(rèn)為netmiko可以在這些平臺(tái)是可以工作的。有限測(cè)試支持平臺(tái)如下:HPEComware7、Huawei、IPInfusionOcNOS、JuniperScreenOS等(更多參閱鏈接網(wǎng)站)實(shí)驗(yàn)性:沒有警告過定期測(cè)試和有限測(cè)試,但通過檢查PR,應(yīng)當(dāng)是可以支持的,但是關(guān)于是否完全通過單元測(cè)試或其可靠性如何,沒有足夠的數(shù)據(jù)。實(shí)驗(yàn)室支持平臺(tái)如下:A10、Accedian、Aruba、CienaSAOS、CheckPointGAiA(更多參閱鏈接網(wǎng)站)4.1Netmiko模塊Netmiko基于Paramiko開發(fā)專門處理網(wǎng)絡(luò)設(shè)備的SSH模塊,是網(wǎng)絡(luò)運(yùn)維工程師日常工作中最常用的模塊之一。相對(duì)Paramiko,Netmiko將很多細(xì)節(jié)優(yōu)化和簡(jiǎn)化,如不需要導(dǎo)入time模塊做休眠,輸入每條命令不需要在后面加換行符\n,不需要執(zhí)行system-view,quit等命令。方便提取、打印回顯內(nèi)容,還可以配合Jinja2模塊調(diào)用配置模板,以及配合TextFSM、pyATS、Genie等模塊將回顯內(nèi)容以有序的JSON格式輸出,方便過濾和提取出所需的數(shù)據(jù)等3Netmiko模塊–更容易使用4.1Netmiko模塊在Windows主機(jī),打開Win10的命令行CMD,執(zhí)行:pipinstallnetmiko命令。建議使用國內(nèi)pip源安裝。測(cè)試netmiko,可以看出netmiko的版本為3.4.0
4netmiko模塊安裝C:\Users\Administrator>pipinstallnetmiko-i/pypi/simple/--trusted-hostC:\Users\Administrator>pythonPython3.9.6(tags/v3.9.6:db3ff76,Jun282021,15:26:21)[MSCv.192964bit(AMD64)]onwin32Type"help","copyright","credits"or"license"formoreinformation.>>>importnetmiko>>>netmiko.__version__'3.4.0'>>>exit()C:\Users\Administrator>項(xiàng)目4使用netmiko發(fā)現(xiàn)網(wǎng)絡(luò)拓?fù)?.1Netmiko模塊介紹4.2Netmiko的方法4.3Netmiko案例4.2Netmiko方法Netmiko的核心對(duì)象主要是ConnectHandler類。ConnetHandler()用來登錄設(shè)備,包含幾個(gè)必要的參數(shù)和可選參數(shù),必要參數(shù)包括device_type,ip(或host),username和password,可選參數(shù)包括port,secret,use_keys,key_file,conn_timeout等。ConnetHandler()的參數(shù)有2中方式。一種是直接傳入?yún)?shù),一種是通過字典傳入?yún)?shù)。注意,通過字典傳入?yún)?shù)時(shí)要用2個(gè)星號(hào)。1Netmiko登錄設(shè)備方法importnetmikonet_connect=netmiko.ConnectHandler(device_type="huawei",ip="00",username="python",password="Huawei12#$")importnetmikoSW1={"device_type":"huawei","ip":"00","username":"python","password":"Huawei12#$"}#注意:參數(shù)中上2個(gè)星號(hào)net_connect=netmiko.ConnectHandler(**SW1)4.2Netmiko方法Netmiko主要用到3個(gè)方法向設(shè)備做配置:send_command(),send_config_set()以及send_config_from_file();還有一個(gè)不太常用的send_command_timing():send_command()方法:2Netmiko配置設(shè)備方法send_command()只支持向設(shè)備發(fā)送一條命令,通常是`display`之類的查詢、排錯(cuò)命令或者`save`這樣保存配置的命令。發(fā)出命令后,這個(gè)函數(shù)默認(rèn)情況下一直等待,直到接收到設(shè)備的完整回顯內(nèi)容為止。如果超時(shí),則會(huì)返回一個(gè)**OSError**的異常。如果想要指定netmiko從回顯內(nèi)容中讀到需要的內(nèi)容,則需要用到expect_string參數(shù)(expect_string默認(rèn)值為None),如果send_command()從回顯內(nèi)容中讀到了expect_string參數(shù)指定的內(nèi)容,則send_command()依然返回完整的回顯內(nèi)容,如果沒讀到expect_string參數(shù)指定的內(nèi)容,則netmiko同樣會(huì)返回一個(gè)OSError異常.4.2Netmiko方法send_config_set()方法:send_config_from_file()方法:3Netmiko配置設(shè)備方法send_config_set()向設(shè)備發(fā)送一條或多條配置命令,注意是配置命令,不是show/display之類的查詢命令,send_config_set()本身會(huì)自動(dòng)加上一個(gè)system-view命令進(jìn)入配置模式(以及在命令末尾自動(dòng)加上一個(gè)return命令)。send_config_set()一般配合列表使用。send_config_from_file()在配置命令數(shù)量較多的時(shí)候,可以先將所有的配置命令寫入一個(gè)配置文件中,然后使用該方法去讀取文件的內(nèi)容完成配置。send_config_from_file()也會(huì)自動(dòng)添加system-view和return兩個(gè)命令,在配置文件里無需加入這兩個(gè)命令。項(xiàng)目4使用netmiko發(fā)現(xiàn)網(wǎng)絡(luò)拓?fù)?.1Netmiko模塊介紹4.2Netmiko的方法4.3任務(wù)實(shí)施4.3任務(wù)實(shí)施按照公司的整體網(wǎng)絡(luò)規(guī)劃,運(yùn)維工程師將對(duì)深圳總部園區(qū)網(wǎng)絡(luò)和服務(wù)器區(qū)網(wǎng)絡(luò)使用netmiko模塊實(shí)現(xiàn)自動(dòng)網(wǎng)絡(luò)拓?fù)涞陌l(fā)現(xiàn),需要完成的任務(wù)如下。
(1)配置并驗(yàn)證設(shè)備SSH服務(wù)。
(2)配置設(shè)備LLDP功能。
(3)編寫Python腳本。
(4)運(yùn)行Python腳本。
(5)查看拓?fù)鋱D。項(xiàng)目5使用PySNMP獲取網(wǎng)絡(luò)數(shù)據(jù)項(xiàng)目5使用PySNMP獲取網(wǎng)絡(luò)數(shù)據(jù)5.1SNMP介紹5.2PySNMP的方法5.3任務(wù)實(shí)施5.1SNMP介紹隨著網(wǎng)絡(luò)規(guī)模越來越龐大,網(wǎng)絡(luò)中不同種類、不同廠家、不同型號(hào)設(shè)備共存,網(wǎng)絡(luò)管理繁瑣低效。為解決這個(gè)問題,SNMP(SimpleNetworkManagementProtocol,簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議)應(yīng)運(yùn)而生,規(guī)范了網(wǎng)絡(luò)管理的接口和協(xié)議,實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)中所有設(shè)備的統(tǒng)一管理。為應(yīng)對(duì)網(wǎng)絡(luò)中復(fù)雜多變的運(yùn)維需求,工程師有必要具備代碼編程能力以提高運(yùn)維效率。Python中的PySNMP模塊可以實(shí)現(xiàn)SNMP功能,是工程師提升運(yùn)維能力的有力工具。1SNMP概述5.1SNMP介紹互聯(lián)網(wǎng)工程任務(wù)組(IETF,InternetEngineeringTaskForce)定義了SNMP(簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議),以此實(shí)現(xiàn)設(shè)備統(tǒng)一管理。所有支持SNMP協(xié)議的網(wǎng)絡(luò)設(shè)備,都可將其統(tǒng)一納入管理。2SNMP概述5.1SNMP介紹SNMP的發(fā)展經(jīng)歷了SNMPv1,SNMPv2c,SNMPv3,這是一個(gè)不斷完善改進(jìn)的過程。3SNMP概述SNMPv1協(xié)議SNMP的最初版本,容易實(shí)現(xiàn)且成本低。缺少大量讀取數(shù)據(jù)的能力,沒有足夠的安全機(jī)制。適合規(guī)模較小,設(shè)備較少,安全性要求不高或本身就比較安全的網(wǎng)絡(luò),如校園網(wǎng),小型企業(yè)網(wǎng)。SNMPv2擴(kuò)充了SNMPv1的功能,增加GetBulk和inform操作。沒有足夠的安全機(jī)制。適合規(guī)模較大,設(shè)備較多,安全性要求不高或本身就比較安全,但業(yè)務(wù)比較繁忙,有可能發(fā)生流量擁塞的網(wǎng)絡(luò)。SNMPv3增加了身份驗(yàn)證和加密處理。新的SNMP體系結(jié)構(gòu),適應(yīng)性強(qiáng)、方便管理、擴(kuò)展性好。適合各種規(guī)模,尤其是對(duì)安全性要求較高,只有合法的管理員才能對(duì)設(shè)備進(jìn)行管理的網(wǎng)絡(luò)。5.1SNMP介紹NMS(NetworkManagementSystem):采用SNMP協(xié)議對(duì)網(wǎng)絡(luò)設(shè)備進(jìn)行管理的系統(tǒng)。Agent:被管理設(shè)備中的一個(gè)代理進(jìn)程,與NMS進(jìn)行交互。MIB(Managementinformationbase):被管理設(shè)備所維護(hù)的變量(能夠被Agent查詢和設(shè)置的信息)構(gòu)成的數(shù)據(jù)庫。Managementobject:被管理對(duì)象,如設(shè)備中的某個(gè)硬件(如接口板),也可以是在硬件或軟件上配置的參數(shù)集合。Device:被管理設(shè)備。4SNMP原理5.1SNMP介紹MIB是一個(gè)數(shù)據(jù)庫,指明了被管理設(shè)備所維護(hù)的變量(即能夠被Agent查詢和設(shè)置的信息)。MIB在數(shù)據(jù)庫中定義了被管理設(shè)備的一系列屬性:對(duì)象標(biāo)識(shí)符(ObjectIDentifier,OID)對(duì)象的狀態(tài)對(duì)象的訪問權(quán)限對(duì)象的數(shù)據(jù)類型等MIB給出了一個(gè)數(shù)據(jù)結(jié)構(gòu),包含了網(wǎng)絡(luò)中所有可能的被管理對(duì)象的集合。因?yàn)閿?shù)據(jù)結(jié)構(gòu)與樹相似,MIB又被稱為對(duì)象命名樹。5SNMP原理-MIB5.1SNMP介紹NMS通過SNMPv3向被管理設(shè)備下發(fā)查詢和設(shè)置操作指令,并接收操作響應(yīng)信息,同時(shí)監(jiān)聽被管理設(shè)備發(fā)送的告警信息。6SNMP原理–基本操作5.1SNMP介紹SNMP在執(zhí)行Get、Set等基本操作時(shí)面臨安全威脅,SNMPv3版本較v1,v2c在安全性方面做了提升。SNMPv1\v2c使用團(tuán)體名進(jìn)行安全認(rèn)證。存在以下安全風(fēng)險(xiǎn):大多數(shù)網(wǎng)絡(luò)產(chǎn)品出廠時(shí)設(shè)定只讀團(tuán)體名缺省值為“Public”,讀寫操作團(tuán)體名缺省值為“Private”。許多網(wǎng)絡(luò)管理人員從未修改過該默認(rèn)值。團(tuán)體名在網(wǎng)絡(luò)中明文傳輸,易泄露。SNMPv3安全性增強(qiáng):7SNMP原理–安全性基本概念:用戶組(Group):擁有特定安全級(jí)別屬性的一個(gè)用戶集合。安全級(jí)別:1級(jí):privacy(鑒權(quán)且加密)2級(jí):authentication(只鑒權(quán))3級(jí):noauthentication(不鑒權(quán)不加密)視圖(View):允許用戶訪問的mib節(jié)點(diǎn)集合。用戶安全模塊USM(User-basedSecurityModel):身份驗(yàn)證:Agent或NMS接到信息時(shí)首先必須確認(rèn)信息是否來自有權(quán)限的NMS或Agent,并且信息在傳輸過程中未被改變。數(shù)據(jù)加密:通過對(duì)稱密鑰系統(tǒng),NMS和Agent共享同一密鑰對(duì)數(shù)據(jù)進(jìn)行加密和解密?;谝晥D的訪問控制模塊VACM:對(duì)用戶組實(shí)現(xiàn)基于視圖的訪問控制5.1SNMP介紹如下拓?fù)?,配置路由器AR18SNMP原理–被管理設(shè)備配置<Huawei>system-viewEntersystemview,returnuserviewwithCtrl+Z.[Huawei]sysnameR1[R1]intg0/0/1[R1-GigabitEthernet0/0/1]ipaddress0024[R1-GigabitEthernet0/0/1]quit接口配置5.1SNMP介紹配置路由器SNMP9SNMP原理–被管理設(shè)備配置#使能SNMP功能,配置版本為v3[R1]snmp-agent[R1]snmp-agentsys-infoversionv3#配置
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)勞動(dòng)合同范本:全員適用版
- 追討合同違約金起訴書范本
- 快遞企業(yè)委托代理合同
- 汽車保險(xiǎn)合同模板
- 土地租賃經(jīng)營權(quán)合同書樣本
- 技術(shù)研發(fā)勞動(dòng)合同規(guī)定
- 機(jī)織服裝的綠色包裝設(shè)計(jì)考核試卷
- 無線傳輸技術(shù)在野生動(dòng)物保護(hù)中的應(yīng)用考核試卷
- 方便食品市場(chǎng)趨勢(shì)與消費(fèi)者需求分析考核試卷
- 批發(fā)商客戶關(guān)系持續(xù)優(yōu)化策略研究考核試卷
- 初中物理競(jìng)賽及自主招生講義:第7講 密度、壓強(qiáng)與浮力(共5節(jié))含解析
- 高中主題班會(huì) 梁文鋒和他的DeepSeek-由DeepSeek爆火開啟高中第一課-高中主題班會(huì)課件
- 污水處理設(shè)施運(yùn)維服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 一年級(jí)下冊(cè)書法教案 (一)
- 《浙江省應(yīng)急管理行政處罰裁量基準(zhǔn)適用細(xì)則》知識(shí)培訓(xùn)
- 2024年八年級(jí)語文下冊(cè)《經(jīng)典常談》第一章《說文解字》練習(xí)題卷附答案
- 華為基建項(xiàng)目管理手冊(cè)
- 《黑龍江省住房和城鄉(xiāng)建設(shè)系統(tǒng)行政處罰裁量基準(zhǔn)》
- 發(fā)育生物學(xué)1-9章全
- 基于單片機(jī)的交通信號(hào)燈模擬控制系統(tǒng)設(shè)計(jì) 答辯PPT
- 中國舞蹈家協(xié)會(huì)《中國舞蹈考級(jí)》 第四版教材
評(píng)論
0/150
提交評(píng)論