前言對(duì)于初學(xué)網(wǎng)絡(luò)的人來說,配置網(wǎng)絡(luò)設(shè)備就是敲命令,包括我之前開發(fā)的網(wǎng)絡(luò)設(shè)備腳本也是圍繞命令行開發(fā)的。配置網(wǎng)絡(luò)設(shè)備的方法不只有命令行,更常見的是利用網(wǎng)頁來配" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > 用python編寫控制網(wǎng)絡(luò)設(shè)備的自動(dòng)化腳本8:網(wǎng)頁

用python編寫控制網(wǎng)絡(luò)設(shè)備的自動(dòng)化腳本8:網(wǎng)頁

時(shí)間:2023-07-06 00:09:01 | 來源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-07-06 00:09:01 來源:網(wǎng)站運(yùn)營(yíng)

用python編寫控制網(wǎng)絡(luò)設(shè)備的自動(dòng)化腳本8:網(wǎng)頁:項(xiàng)目地址:

前言

對(duì)于初學(xué)網(wǎng)絡(luò)的人來說,配置網(wǎng)絡(luò)設(shè)備就是敲命令,包括我之前開發(fā)的網(wǎng)絡(luò)設(shè)備腳本也是圍繞命令行開發(fā)的。配置網(wǎng)絡(luò)設(shè)備的方法不只有命令行,更常見的是利用網(wǎng)頁來配置。在淘寶上搜“路由器”,大部分是家用級(jí)路由器。而這些路由器大部分只支持網(wǎng)頁操作,不支持命令行。于是我寫了一些代碼,用來自動(dòng)化地配置這些塑料設(shè)備。

準(zhǔn)備工作

文章中的代碼依賴selenium庫,所以寫代碼運(yùn)行代碼之前先準(zhǔn)備好運(yùn)行環(huán)境。

第一步,安裝selenium庫,電腦聯(lián)網(wǎng)的話直接用pip安裝。

pip install selenium第二步,下載瀏覽器驅(qū)動(dòng),selenium要調(diào)用瀏覽器驅(qū)動(dòng)才能使用。我比較喜歡用火狐,火狐瀏覽器驅(qū)動(dòng)可以從GitHub下載(https://github.com/mozilla/geckodriver/releases),下載下來的壓縮包解壓后得到geckodriver.exe,隨便扔到一個(gè)%PATH%目錄中(C:/Program Files/Python38/Scripts)。

獲取網(wǎng)頁元素和操控網(wǎng)頁的過程

在開始寫網(wǎng)絡(luò)設(shè)備腳本之前,先簡(jiǎn)單介紹一下如何用瀏覽器獲取網(wǎng)頁元素以及使用selenium操控網(wǎng)頁內(nèi)容。

這次我拿真機(jī)作為例子,一臺(tái)放在家里的塑料路由器。

瀏覽器輸入路由器地址,進(jìn)入登錄頁面。

按F12,打開開發(fā)人員工具,找到密碼框、登錄按鈕對(duì)應(yīng)的元素,記下其中的id屬性。

編寫代碼,讓python打開瀏覽器,輸入密碼,然后點(diǎn)登錄按鈕。

import timeimport selenium.webdriver #seleniumv瀏覽器 = selenium.webdriver.Firefox()v瀏覽器.get("http://192.168.1.1")time.sleep(1)w密碼 = v瀏覽器.find_element_by_id("lgPwd")w密碼.send_keys("********")time.sleep(1)w確定 = v瀏覽器.find_element_by_id("loginSub")w確定.click()time.sleep(1)運(yùn)行結(jié)果如圖:

下面開始編寫用來控制網(wǎng)絡(luò)設(shè)備的代碼。

三層架構(gòu)

網(wǎng)絡(luò)設(shè)備腳本按照代碼組織結(jié)構(gòu)分成3個(gè)不同的層:

三層架構(gòu)

連接層:只有selenium

使用網(wǎng)絡(luò)設(shè)備腳本的第一步是創(chuàng)建連接。實(shí)際上,為了方便使用,我會(huì)把selenium封裝一下,簡(jiǎn)化創(chuàng)建連接的過程。

cflw代碼庫py/cflw網(wǎng)頁連接.py

import selenium.webdriverdef f創(chuàng)建連接(a地址): v瀏覽器 = selenium.webdriver.Firefox() v瀏覽器.get(a地址) return v瀏覽器f創(chuàng)建連接 的功能是創(chuàng)建一個(gè)瀏覽器對(duì)象,并打開具體地址。這段代碼只是一個(gè)簡(jiǎn)單例子,實(shí)際的 f創(chuàng)建連接 要處理不同瀏覽器的情況,代碼更復(fù)雜。

設(shè)備層:網(wǎng)頁設(shè)備(編程)接口

根據(jù)三層架構(gòu),設(shè)備層用來承上啟下,必須對(duì)連接層進(jìn)行封裝。如果不封裝,讓模式層直接調(diào)用連接層,會(huì)形成高耦合,以后不管是排錯(cuò)還是重構(gòu)都會(huì)非常麻煩。

一般來說,操縱網(wǎng)頁其實(shí)就是操縱瀏覽器和里面的網(wǎng)頁元素,所以只要寫2個(gè)類就夠了。一個(gè)是設(shè)備類,表示瀏覽器。一個(gè)是元素類,表示網(wǎng)頁元素。

網(wǎng)絡(luò)設(shè)備腳本/網(wǎng)頁接口/設(shè)備.py

from ..基礎(chǔ)接口 import 設(shè)備from selenium.common import exceptions #seleniumclass I設(shè)備(設(shè)備.I設(shè)備): def __init__(self, a連接): self.m連接 = a連接 def fs地址(self, a地址): self.m連接.get(a地址) def fg地址(self): return self.m連接.current_url def f查找(self, a找: str): try: v元素 = self.m連接.find_element_by_xpath(a找) return 元素.C元素(v元素) except exceptions.NoSuchElementException as e: return None網(wǎng)絡(luò)設(shè)備腳本/網(wǎng)頁接口/元素.py

class C元素: """對(duì)selenium網(wǎng)頁元素的封裝""" def __init__(self, a元素): self.m元素 = a元素 def f查找(self, a找): return C元素(self.m元素.find_element_by_xpath(a找)) def f點(diǎn)擊(self): self.m元素.click() def f清除(self): self.m元素.clear() def f輸入(self, a): self.m元素.send_keys(a) def fg文本(self): if self.m元素.tag_name in ("input",): #表單控件從值屬性取文本 return self.m元素.get_attribute("value") return self.m元素.text def fg屬性(self, a屬性名): return self.m元素.get_attribute(a屬性名)

根據(jù)連接創(chuàng)建設(shè)備

使用網(wǎng)絡(luò)設(shè)備腳本的第二步是創(chuàng)建設(shè)備。從簡(jiǎn)單易用的角度考慮,用戶不需要知道具體的設(shè)備類名,只需要知道連接、品牌、型號(hào)、版本就夠了。f創(chuàng)建設(shè)備 就是用來隱藏具體細(xì)節(jié)的函數(shù),根據(jù)傳入的參數(shù),創(chuàng)建合適的設(shè)備返回給用戶。調(diào)用過程就像這樣:

import cflw代碼庫py.cflw網(wǎng)頁連接 as 網(wǎng)頁連接import 網(wǎng)絡(luò)設(shè)備腳本.普聯(lián) as 普聯(lián)v連接 = 網(wǎng)頁連接.f創(chuàng)建連接("http://192.168.1.1")v設(shè)備 = 普聯(lián).f創(chuàng)建設(shè)備(v連接, 普聯(lián).E型號(hào).wdr5620)這里說一下如何判斷一個(gè)連接是否是網(wǎng)頁連接。一般python中判斷一個(gè)類型是否和另外一個(gè)類型相同或存在繼承關(guān)系可以用type(a) == Aisinstance(a, A)這樣的方法。selenium里面瀏覽器類都繼承自selenium.webdriver.remote.webdriver.WebDriver,寫出來就變成isinstance(連接, selenium.webdriver.remote.webdriver.WebDriver),并且要在文件頂部寫一句import selenium,代碼如下:

import selenium.webdriver.remote.webdriverdef fi網(wǎng)頁連接(a連接): return isinstance(a連接, selenium.webdriver.remote.webdriver.WebDriver)#好像沒什么問題這段判斷代碼看起來好像沒什么問題,如果傳進(jìn)去的是其他連接就返回False,看起來很合理。但是忽略了一種重要情況,用戶沒有安裝selenium的話,第一行會(huì)拋出ModuleNotFoundError異常。所以這時(shí)候就要尋找一種不導(dǎo)入模塊也能判斷網(wǎng)頁連接的辦法。

一個(gè)方法是使用__class__屬性,一般 a連接.__class__ 會(huì)得到像 <class 'selenium.webdriver.firefox.webdriver.WebDriver'> 這樣的一個(gè)類,只要揪著這個(gè)類名做判斷就行。

網(wǎng)絡(luò)設(shè)備腳本/基礎(chǔ)接口/連接層.py

def fi網(wǎng)頁(a連接): if "selenium" in str(a連接.__class__): #selenium return True return False至于判斷型號(hào)判斷版本沒什么好說的,用一堆if...elif...else就行了。

最終的f創(chuàng)建設(shè)備長(zhǎng)得像這樣:

網(wǎng)絡(luò)設(shè)備腳本/普聯(lián).py

from .基礎(chǔ)接口 import 連接層def f創(chuàng)建設(shè)備(a連接, a型號(hào), a版本 = 0): if 連接層.fi網(wǎng)頁(a連接): from .普聯(lián)網(wǎng)頁 import 設(shè)備 return 設(shè)備.C設(shè)備(a連接, a型號(hào), a版本) raise ValueError("不支持的連接")其中的C設(shè)備就是具體的設(shè)備類,其構(gòu)造函數(shù)接收連接、型號(hào)、版本,供模式層使用。

網(wǎng)絡(luò)設(shè)備腳本/普聯(lián)網(wǎng)頁/設(shè)備.py

from ..網(wǎng)頁接口 import 設(shè)備class C設(shè)備(設(shè)備.I設(shè)備): def __init__(self, a連接, a型號(hào), a版本): 設(shè)備.I設(shè)備.__init__(self, a連接) self.m型號(hào) = a型號(hào) self.m版本 = a版本

模式層

模式層負(fù)責(zé)接收用戶傳遞的參數(shù),整理成具體操作傳給設(shè)備層。在實(shí)際網(wǎng)頁中,一個(gè)頁面能做的操作是有限的,模式接口提供的操作和一個(gè)網(wǎng)頁頁面提供的操作不一定能對(duì)的上。所以網(wǎng)頁的模式層有必要分成2層,上層的模式接口供用戶調(diào)用,并調(diào)度下面的網(wǎng)頁模式,或者為了省事直接合并寫成一個(gè)類。這種設(shè)計(jì)可以讓模式接口適配各式各樣的頁面,并且根據(jù)需要在不同頁面來回切換。

接口與實(shí)現(xiàn)
用戶模式是前往其他模式的總?cè)肟?。用戶模式用來處理登錄和提升?quán)限等控制設(shè)備時(shí)必須經(jīng)歷的操作,其他操作則由其他模式來完成,比如查看操作由顯示模式負(fù)責(zé),配置操作由配置模式負(fù)責(zé)。這么設(shè)計(jì)的目的是為了盡可能地解耦,拆分文件,合理組織代碼,避免出現(xiàn)龐然大類。

在腳本中實(shí)現(xiàn)登錄過程

把三層架構(gòu)理完了,開始最基礎(chǔ)的第一步,實(shí)現(xiàn)登錄設(shè)備的過程。

一般來說,這個(gè)登錄過程應(yīng)該在連接層或模式層完成,常見的在連接層登錄的協(xié)議有安全外殼(SSH)、等,這些協(xié)議在建立連接過程中攜帶了登錄信息,建立完連接不需要再登錄。網(wǎng)頁中更常見的是在打開的登錄頁面中輸入用戶名密碼登錄,我把這個(gè)過程歸類到模式層。在腳本中,相關(guān)的登錄過程代碼在模式層完成。

接著上面的“根據(jù)連接創(chuàng)建設(shè)備”一節(jié)的代碼,通過調(diào)用f創(chuàng)建設(shè)備得到設(shè)備對(duì)象后,接著獲取一個(gè)用戶模式,用戶模式是網(wǎng)絡(luò)設(shè)備正常運(yùn)行情況下通往其他模式的入口,既然是入口,也就包含了登錄操作。在腳本中,這個(gè)過程就像這樣:

import cflw代碼庫py.cflw網(wǎng)頁連接 as 網(wǎng)頁連接import 網(wǎng)絡(luò)設(shè)備腳本.普聯(lián) as 普聯(lián)v連接 = 網(wǎng)頁連接.f創(chuàng)建連接("http://192.168.0.1")v設(shè)備 = 普聯(lián).f創(chuàng)建設(shè)備(v連接, 普聯(lián).E型號(hào).wdr5620)v用戶模式 = v設(shè)備.f模式_用戶()v用戶模式.f登錄(a密碼 = "******")f模式_用戶的內(nèi)容很簡(jiǎn)單,直接創(chuàng)建一個(gè)用戶模式對(duì)象并返回。

網(wǎng)絡(luò)設(shè)備腳本/普聯(lián)網(wǎng)頁/設(shè)備.py

from ..網(wǎng)頁接口 import 設(shè)備class C設(shè)備(設(shè)備.I設(shè)備): def f模式_用戶(self): from . import 用戶模式 return 用戶模式.C用戶模式(self)接著是用戶模式。在網(wǎng)頁中,一個(gè)網(wǎng)頁模式總是保存設(shè)備對(duì)象,以實(shí)現(xiàn)對(duì)網(wǎng)頁的操控。所以這個(gè)C用戶模式有2個(gè)函數(shù),一個(gè)構(gòu)造函數(shù),一個(gè)登錄函數(shù)。

網(wǎng)絡(luò)設(shè)備腳本/普聯(lián)網(wǎng)頁/用戶模式.py

import timefrom ..基礎(chǔ)接口 import 用戶模式class C用戶模式(用戶模式.I用戶模式): def __init__(self, a設(shè)備): self.m設(shè)備 = a設(shè)備 def f登錄(self, a密碼 = "", a用戶名 = None): w密碼框 = self.m設(shè)備.f查找("//input[@id='lgPwd']") w密碼框.f輸入(a密碼) w確定 = self.m設(shè)備.f查找("//input[@id='loginSub']") w確定.f點(diǎn)擊()其中的f登錄就是把“獲取網(wǎng)頁元素和操控網(wǎng)頁的過程”一節(jié)的代碼拿過來改一改,就變成了封裝過一遍的代碼。

登錄過程中處理驗(yàn)證碼

有些設(shè)備會(huì)在登錄時(shí)加一個(gè)驗(yàn)證碼防腳本防機(jī)器人,驗(yàn)證碼自然也把腳本擋住了,讓腳本無法繼續(xù)運(yùn)行。

深信服防火墻的登錄頁面
處理驗(yàn)證碼的過程很簡(jiǎn)單,腳本填寫完用戶名密碼后,把輸入焦點(diǎn)聚焦在驗(yàn)證碼框,然后等待人輸入驗(yàn)證碼,腳本檢測(cè)到輸完驗(yàn)證碼了就繼續(xù)運(yùn)行。(機(jī)器識(shí)別驗(yàn)證碼?不存在的。)

f手動(dòng)輸入驗(yàn)證碼用來把焦點(diǎn)聚集在輸入框中,讓用戶手動(dòng)輸入驗(yàn)證碼,并且判斷驗(yàn)證碼是否輸入完畢。

網(wǎng)絡(luò)設(shè)備腳本/網(wǎng)頁接口/圖片.py

import cflw代碼庫py.cflw時(shí)間 as 時(shí)間from . import 元素def f手動(dòng)輸入驗(yàn)證碼(a元素, a長(zhǎng)度): a元素.f聚焦() v循環(huán)阻塞 = 時(shí)間.C循環(huán)阻塞(60, a間隔 = 1) while v循環(huán)阻塞.f滴答(): if len(a元素.fg文本()) >= a長(zhǎng)度: #有輸入 return True else: #沒有輸入 return Falsef登錄中,先獲取網(wǎng)頁元素,自動(dòng)輸入用戶名密碼,接著手動(dòng)輸入驗(yàn)證碼,最后判斷是否登錄成功。

網(wǎng)絡(luò)設(shè)備腳本/深信服防火墻網(wǎng)頁/用戶模式.py

import timefrom ..基礎(chǔ)接口 import 用戶模式from ..基礎(chǔ)接口 import 異常from ..網(wǎng)頁接口 import 圖片class C用戶模式(用戶模式.I用戶模式): def f登錄(self, a用戶名, a密碼): w用戶名 = self.m設(shè)備.f查找("//*[@id=/"user/"]") w用戶名.f輸入(a用戶名) w密碼 = self.m設(shè)備.f查找("//*[@id=/"password/"]") w密碼.f輸入(a密碼) w驗(yàn)證碼 = self.m設(shè)備.f查找("//*[@id=/"verify/"]") w登錄 = self.m設(shè)備.f查找("//*[@id=/"button/"]") v驗(yàn)證碼 = 圖片.f手動(dòng)輸入驗(yàn)證碼(w驗(yàn)證碼, 4) if v驗(yàn)證碼: w登錄.f點(diǎn)擊() time.sleep(1) # 結(jié)束 self.m設(shè)備.f查找_直到('//*[@id="ext-gen100"]') time.sleep(1)

切換模式,模式組

網(wǎng)頁有一個(gè)特點(diǎn),不管處于哪個(gè)模式,總能從最頂級(jí)模式一步步進(jìn)入更深的模式??匆幌侣酚善鞯闹鹘缑婢湍馨l(fā)現(xiàn),一級(jí)菜單總是在任何模式中出現(xiàn)。

手動(dòng)切換模式的過程
照著上面的思路,把每一個(gè)模式名稱和相應(yīng)按鈕的id屬性都記下來,按照進(jìn)入順序?qū)懗稍妗?br>
網(wǎng)絡(luò)設(shè)備腳本/普聯(lián)網(wǎng)頁/模式.py

class C模式wdr5620: c網(wǎng)絡(luò)狀態(tài) = ("netStateMbtn",) c設(shè)備管理 = ("routeMgtMbtn",) c設(shè)備管理_主人網(wǎng)絡(luò) = ("routeMgtMbtn", "linkedEpt_rsMenu") c設(shè)備管理_已禁設(shè)備 = ("routeMgtMbtn", "limitedEpt_rsMenu") c應(yīng)用管理 = ("appsMgtMbtn",) c路由設(shè)置 = ("routerSetMbtn",) c路由設(shè)置_tplinkid = ("routerSetMbtn", "cloudAnt_rsMenu") c路由設(shè)置_上網(wǎng)設(shè)置 = ("routerSetMbtn", "network_rsMenu") c路由設(shè)置_無線設(shè)置 = ("routerSetMbtn", "wireless2G_rsMenu") c路由設(shè)置_lan口設(shè)置 = ("routerSetMbtn", "lanSet_rsMenu") c路由設(shè)置_dhcp服務(wù)器設(shè)置 = ("routerSetMbtn", "dhcpServer_rsMenu") c路由設(shè)置_修改管理員密碼 = ("routerSetMbtn", "changeWebPwd_rsMenu") c路由設(shè)置_備份和載入配置 = ("routerSetMbtn", "bakRrestore_rsMenu") c路由設(shè)置_重啟和恢復(fù)出廠 = ("routerSetMbtn", "reBootSet_rsMenu") c路由設(shè)置_系統(tǒng)日志 = ("routerSetMbtn", "sysLog_rsMenu")然后在設(shè)備類中實(shí)現(xiàn)切換過程

網(wǎng)絡(luò)設(shè)備腳本/普聯(lián)網(wǎng)頁/設(shè)備.py

class C設(shè)備: def __init__(self, a連接, a型號(hào), a版本): #省略其他代碼 self.ma模式 = [] def f切換模式(self, aa模式: tuple): if self.ma模式 == aa模式: return for v模式 in aa模式: v元素 = self.f查找(f"//*[@id='{v模式}']") v元素.f點(diǎn)擊() self.ma模式 == aa模式其實(shí)這里還可以優(yōu)化一下,從最頂級(jí)開始逐級(jí)判斷是否不同模式,然后從那個(gè)不同的地方開始切換,這樣可以減少點(diǎn)擊次數(shù),加快切換模式的速度。我懶得優(yōu)化了,反正python很慢,網(wǎng)絡(luò)也很慢,所以慢就慢了。

在網(wǎng)頁中敲命令

在適配各種型號(hào)的過程中,發(fā)現(xiàn)一個(gè)很神奇的型號(hào) 思科c7200,它的網(wǎng)頁界面非常簡(jiǎn)單,雖說提供網(wǎng)頁操作,但是瀏覽器打開一看還是敲命令。

既然是敲命令,那么可以直接把命令行的代碼拿來用。具體做法是繼承命令行設(shè)備,重寫輸入輸出函數(shù),把命令行敲命令的過程轉(zhuǎn)換成網(wǎng)頁中敲命令。

網(wǎng)絡(luò)設(shè)備腳本/思科網(wǎng)頁/命令行設(shè)備.py

import selenium.webdriver #seleniumfrom ..網(wǎng)頁接口 import 設(shè)備 as 網(wǎng)頁設(shè)備from ..命令行接口 import 命令from ..命令行接口 import 設(shè)備 as 命令行設(shè)備from ..思科命令行.常量 import *from . import 命令行用戶模式 as 實(shí)現(xiàn)用戶模式class C設(shè)備(網(wǎng)頁設(shè)備.I設(shè)備, 命令行設(shè)備.I設(shè)備): """適用于: c7200""" def __init__(self, a連接, a型號(hào), a版本): 網(wǎng)頁設(shè)備.I設(shè)備.__init__(self, a連接) 命令行設(shè)備.I設(shè)備.__init__(self, a連接) self.m型號(hào) = a型號(hào) self.m版本 = a版本 self.ma模式棧 = [] #網(wǎng)頁 def fg命令框(self, a包裝 = True): w命令框 = self.f查找("/html/body/pre/form/dt/input[2]", a包裝) return w命令框 #適配 def f輸出(self): w輸出框 = self.f查找("/html/body/pre/form/dt/pre", False) return w輸出框.text def f輸入(self, a文本): w命令框 = self.fg命令框(False) w命令框.send_keys(str(a文本)) def f刷新(self): w命令框 = self.fg命令框(False) w命令框.clear() w命令框.send_keys(selenium.webdriver.common.keys.Keys.ENTER) #模式 def f模式_用戶(self): return 實(shí)現(xiàn)用戶模式.C用戶模式(self) #命令 def f退出(self): self.f執(zhí)行命令("exit") def f執(zhí)行命令(self, a命令): w命令框 = self.fg命令框(False) w命令框.send_keys(str(a命令)) w命令框.send_keys(selenium.webdriver.common.keys.Keys.ENTER) time.sleep(0.5) return self.f輸出()這里有一部分模式類也要重寫,比如用戶模式,思科c7200的登錄過程在打開網(wǎng)頁的過程中彈出的登錄框中輸入用戶名密碼登錄。這個(gè)登錄框由瀏覽器控制,不屬于網(wǎng)頁元素。所以用戶模式的 f登錄 要省略掉。

網(wǎng)絡(luò)設(shè)備腳本/思科網(wǎng)頁/命令行用戶模式.py

import timefrom ..思科命令行 import 用戶模式class C用戶模式(用戶模式.C用戶模式): def __init__(self, a): 用戶模式.C用戶模式.__init__(self, a) def f登錄(self): time.sleep(0.5) self.m設(shè)備.f輸入_結(jié)束符() def f模式_全局配置(self): from . import 命令行全局配置 return 命令行全局配置.C全局配置(self)要重寫的還有全局配置模式,思科網(wǎng)頁中進(jìn)入全局配置模式的命令是“configure http”,和命令行不一樣,所以進(jìn)入模式命令也得改:

網(wǎng)絡(luò)設(shè)備腳本/思科網(wǎng)頁/命令行全局配置.py

from ..思科命令行 import 全局配置class C全局配置(全局配置.C全局配置): def __init__(self, a): 全局配置.C全局配置.__init__(self, a) def fg進(jìn)入命令(self): return "configure http"

應(yīng)用示例:修改接口地址

這一節(jié)應(yīng)用示例代碼就是本篇文章的封面圖,這段代碼最早出自網(wǎng)絡(luò)設(shè)備腳本的第一篇文章《用python編寫控制網(wǎng)絡(luò)設(shè)備的自動(dòng)化腳本1:框架設(shè)計(jì)》的封面圖,就是為了展示網(wǎng)絡(luò)設(shè)備腳本的目標(biāo):以相同的代碼以各種方式來控制不同的網(wǎng)絡(luò)設(shè)備。這個(gè)項(xiàng)目從一開始到現(xiàn)在,代碼內(nèi)部架構(gòu)已經(jīng)發(fā)生了很多變化,把封面代碼改一改還能用真是個(gè)奇跡。

我手頭上沒有合適的真機(jī)可以做實(shí)驗(yàn),所以只能拿模擬器做實(shí)驗(yàn)。在模擬器中擺一臺(tái)思科c7200路由器,把路由器連接到真實(shí)網(wǎng)絡(luò),相關(guān)配置加上。

ip http serverusername asdf privilege 15 password 123456interface fastethernet 0/0 ip address dhcpline vty 0 4 login local檢查路由器獲取到的地址,然后確認(rèn)電腦是否能訪問路由器。

寫代碼

import cflw代碼庫py.cflw網(wǎng)頁連接 as 網(wǎng)頁連接import 網(wǎng)絡(luò)設(shè)備腳本 as 腳本import 網(wǎng)絡(luò)設(shè)備腳本.思科 as 思科def main(): v連接 = 網(wǎng)頁連接.f創(chuàng)建連接("http://asdf:123456@192.168.44.129") v設(shè)備 = 思科.f創(chuàng)建設(shè)備(v連接, 思科.E型號(hào).c7200, 15.2) #用戶 v用戶模式 = v設(shè)備.f模式_用戶() v用戶模式.f登錄() #全局配置 v全局配置 = v用戶模式.f模式_全局配置() #接口配置l0 v接口配置 = v全局配置.f模式_接口("l0") v接口配置.fs網(wǎng)絡(luò)地址4("1.1.1.1/32") #接口配置f0/0 v接口配置 = v全局配置.f模式_接口("f0/1") v接口配置.fs網(wǎng)絡(luò)地址4("12.0.0.1/24") #用戶配置 v用戶配置 = v全局配置.f模式_用戶("asdf") v用戶配置.fs密碼("123456")if __name__ == "__main__": main()運(yùn)行結(jié)果:



關(guān)鍵詞:自動(dòng)化,腳本,設(shè)備,編寫,控制,網(wǎng)絡(luò)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉