在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何通過Python腳本批量采集華為交換機配置

網絡技術干貨圈 ? 來源:CSDN-煜成 ? 2023-01-09 10:32 ? 次閱讀

實驗目的

通過學習python網絡運維自動化減少重復無意義的工作量,本次實驗雖然只是一條命令,通過display current-configuration采集設備配置,但是在有大量設備需要采集配置文件時,又無相應的網管平臺時,小而便捷的python成為了一種選擇,而且可以python腳本可以根據需要自行增加需要的命令。

設備環境

通過ENSP模擬華為交換機,橋接云跟主機通信,SSH配置可達。
342fb0d2-8f22-11ed-bfe3-dac502259ad0.png
設備配置命令:

sysnameSW1
#不同設備IP不同,sysname不同,其他配置一致
interfaceVlanif1
ipaddress192.168.111.10255.255.255.0
#
aaa
local-useradminpasswordcipher

其余兩臺按這個模板配置
347852f6-8f22-11ed-bfe3-dac502259ad0.png
橋接云配置
完成設備配置后測試SSH連接是否正常
34ae705c-8f22-11ed-bfe3-dac502259ad0.png
通過CRT測試,三臺設備都能正常登錄

python環境

首先看一下項目的結構
34c7e7c6-8f22-11ed-bfe3-dac502259ad0.png

目錄說明

backup_Script包是本次實驗的主要代碼,分為了三個模塊來寫的。

Dest目錄是采集配置文件后保存的目錄。

log是日志文件保存目錄。

source是中存在一個entry_table.csv,這是填寫登錄IP跟用戶名的。

34e6ebd0-8f22-11ed-bfe3-dac502259ad0.png

不能更改列數,更改IP跟用戶名密碼的時候,就按照這個來更改

requirements.txt里面內容是項目的依賴包及其對應版本號的信息列表,即項目依賴關系清單,其作用是用來重新構建項目所需要的運行環境依賴。

run.py作為本次實驗的入口文件,在運行項目的時候就運行該文件

環境搭建

:版本Python 3.10.2
環境的搭建就從創建虛擬環境開始寫,python安裝之類的參考官方網站
35573ee4-8f22-11ed-bfe3-dac502259ad0.png
在最初項目的結構是這樣的,然后進入到text目錄下構建虛擬環境。

首先進入項目的目錄,創建虛擬環境

#ven是可變的
python-mvenvven

35824666-8f22-11ed-bfe3-dac502259ad0.png
構建完成后在次查看目錄,會發現目錄中多了一個目錄ven,這個ven就是所創建的虛擬環境。
35e2059c-8f22-11ed-bfe3-dac502259ad0.png
當然,虛擬環境創建好后不代表就結束了,還需要進入到虛擬環境中,稱為激活虛擬環境

#通過該方法激活虛擬環境,激活后會有一個括號在前面
venScriptsactivate
#以下是激活后的顯示
(ven)D:	ext>
#激活完成更新以下pip庫
python.exe-mpipinstall--upgradepip
#安裝所需依賴
pipinstall-rrequirements.txt
#通過入口文件啟用
run.py

35f9aed6-8f22-11ed-bfe3-dac502259ad0.png
361d7a32-8f22-11ed-bfe3-dac502259ad0.png
從控制臺輸出的日志可以看出,腳本已經成功運行結束,那么查看一下相關的目錄是否存在這文件
364b2054-8f22-11ed-bfe3-dac502259ad0.png
查看Dest目錄,已經存在三個文件,打開看一下是否已經獲取到內容
367e05be-8f22-11ed-bfe3-dac502259ad0.png
查看日志文件夾

36a4fe62-8f22-11ed-bfe3-dac502259ad0.png
也存在相關的日志

python源碼分享

一、backup_Script包中的源碼
_init_.py

from.Read_sourceimportlogin
from.Loggerimportlog
importparamiko
importtime
importsocket
importre
importsys

sys.path.append('backup_Script')
ssh_client=None
switch_with_authentication_issue=[]
switch_not_reachable=[]


deflogon_failed():
globalswitch_with_authentication_issue
globalswitch_not_reachable
ifswitch_with_authentication_issueandswitch_not_reachableisNone:
log.error('無登錄失敗記錄')
else:
log.error('登錄失敗,詳細查看文件log/switch_not_reachable.txt為不可達,switch_with_authentication_issue.txt為認證失敗')
withopen('./log/switch_with_authentication_issue.txt','w')asf:
f.write('
'.join(switch_with_authentication_issue))
withopen('./log/switch_not_reachable.txt','w')asf:
f.write('
'.join(switch_not_reachable))


defrun():
globalssh_client
globalswitch_with_authentication_issue
globalswitch_not_reachable
ip_list=login.get_entry_ip()
name_list=login.get_entry_name()
passwd_list=login.get_entry_passwd()
regex='sysname.*'
foriinzip(ip_list[1:],name_list[1:],passwd_list[1:]):
ip=i[0]
name=i[1]
passwd=i[2]
try:
ssh_client=paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(
hostname=ip,
username=name,
password=passwd,
look_for_keys=False
)
print('連接成功:',ip)
command=ssh_client.invoke_shell()
command.send("screen-length0temporary
")
command.send("displaycurrent-configuration
")
time.sleep(2)
output=command.recv(65535)
print(output.decode('ascii'))
save_file=re.search(regex,output.decode('ascii')).group()
sw_name=save_file[8:].strip()
f=open(f"./Dest/{sw_name}.txt",'w')
f.write(output.decode(encoding='UTF-8'))
f.close()
exceptparamiko.ssh_exception.AuthenticationException:
log.critical(f"用戶認證失敗的{ip}.")
switch_with_authentication_issue.append(ip)
exceptsocket.error:
log.critical(f"{ip}不可達,請檢查網絡.")
switch_not_reachable.append(ip)
ssh_client.close()
logon_failed()

Logger.py

importlogging
importos


classLogger:
def__init__(self):
selfdef_fmt='%(asctime)s-%(funcName)s-%(levelname)s-%(message)s'
self.log_name=os.path.join('./log/Business.log')
self.logger=logging.getLogger('Sw_Script')
self.logger.setLevel(logging.DEBUG)
self.formatter=logging.Formatter(selfdef_fmt)

def__console(self,level,message):
fh=logging.FileHandler(self.log_name,'a',encoding='utf-8')
fh.setLevel(logging.DEBUG)
fh.setFormatter(self.formatter)
self.logger.addHandler(fh)

ch=logging.StreamHandler()#創建一個StreamHandler,用于輸出到控制臺
ch.setLevel(logging.DEBUG)
ch.setFormatter(self.formatter)
self.logger.addHandler(ch)

iflevel=='info':
self.logger.info(message)
eliflevel=='debug':
self.logger.debug(message)
eliflevel=='warning':
self.logger.warning(message)
eliflevel=='error':
self.logger.error(message)
eliflevel=='critical':
self.logger.critical(message)

self.logger.removeHandler(ch)
self.logger.removeHandler(fh)
fh.close()

defdebug(self,message):
self.__console('debug',message)

definfo(self,message):
self.__console('info',message)

defwarning(self,message):
self.__console('warning',message)

deferror(self,message):
self.__console('error',message)

defcritical(self,message):
self.__console('critical',message)


log=Logger()

Read_source.py

importcsv


classRead_date(object):
def__init__(self,path:str):
self._path=path

defget_entry_ip(self)->list[str]:
withopen(self._path)asf:
entry=csv.reader(f)
ip=[ip[0]foripinentry]
returnip

defget_entry_name(self)->list[str]:
withopen(self._path)asf:
entry=csv.reader(f)
name=[name[1]fornameinentry]
returnname

defget_entry_passwd(self)->list[str]:
withopen(self._path)asf:
entry=csv.reader(f)
passwd=[passwd[2]forpasswdinentry]
returnpasswd


login=Read_date('./source/entry_table.csv')

run.py

importbackup_Script
frombackup_Scriptimportlog

if__name__=="__main__":
log.error('運行腳本')
backup_Script.run()
log.error('執行完成')

requirements.txt

bcrypt==4.0.0
certifi==2022.6.15
cffi==1.15.1
charset-normalizer==2.1.1
cryptography==37.0.4
docopt==0.6.2
idna==3.3
logger==1.4
paramiko==2.11.0
pipreqs==0.4.11
pycparser==2.21
PyNaCl==1.5.0
requests==2.28.1
six==1.16.0
urllib3==1.26.12
yarg==0.1.9

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 華為
    +關注

    關注

    216

    文章

    34534

    瀏覽量

    253006
  • 交換機
    +關注

    關注

    21

    文章

    2656

    瀏覽量

    100180
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85039
  • 腳本
    +關注

    關注

    1

    文章

    392

    瀏覽量

    14938
  • 華為交換機
    +關注

    關注

    0

    文章

    13

    瀏覽量

    6331

原文標題:如何通過Python腳本批量采集華為交換機配置,值得每位網絡工程師參考!

文章出處:【微信號:網絡技術干貨圈,微信公眾號:網絡技術干貨圈】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    華為路由器交換機VLAN配置實例

    華為路由器交換機VLAN配置實例[hide]華為路由器交換機VLAN配置實例使用4臺PC(pc多
    發表于 05-25 00:21

    如何配置以太網交換機

    如何配置以太網交換機 串口通過配置電纜與以太網交換機的Console 口連接。一、通過Cons
    發表于 12-07 14:07 ?1.8w次閱讀
    如何<b class='flag-5'>配置</b>以太網<b class='flag-5'>交換機</b>

    交換機GVRP配置

    交換機GVRP配置
    發表于 12-27 16:15 ?0次下載

    交換機路由配置

    交換機路由配置
    發表于 12-27 16:31 ?0次下載

    交換機基礎配置

    交換機基礎配置
    發表于 12-27 16:50 ?0次下載

    交換機VLAN配置

    交換機VLAN配置
    發表于 12-27 16:49 ?0次下載

    交換機STP配置

    交換機STP配置
    發表于 12-27 16:46 ?0次下載

    華為交換機

    華為交換機
    發表于 03-24 14:17 ?5次下載

    光纖交換機的種類_光纖交換機配置

    本文主要介紹了光纖交換機的種類和光纖交換機配置
    發表于 11-30 16:04 ?2274次閱讀

    交換機的6種配置模式

    我們在配置交換機的時候首先要了解的就是交換機命令模式,小編用Cisco思科交換機為例帶大家了解交換機的6種
    的頭像 發表于 09-26 15:01 ?9469次閱讀

    華為三層交換機配置實例

    有朋友討論華為三層交換機配置問題,今天小編也整理了下華為交換機的文章,大家來一起學習交流下!
    的頭像 發表于 06-05 11:19 ?1422次閱讀
    <b class='flag-5'>華為</b>三層<b class='flag-5'>交換機</b><b class='flag-5'>配置</b>實例

    華為交換機如何批量清除接口配置信息

    華為交換機如何批量清除接口配置信息
    的頭像 發表于 08-14 10:43 ?3202次閱讀

    使用python批量備份華為交換機配置文件

    保證PC能分別和五臺交換機通信。五臺交換機的IP地址如圖上所示。
    的頭像 發表于 01-19 09:28 ?1549次閱讀
    使用<b class='flag-5'>python</b><b class='flag-5'>批量</b>備份<b class='flag-5'>華為</b><b class='flag-5'>交換機</b><b class='flag-5'>配置</b>文件

    使用Python腳本備份華為交換機配置信息

    在現代網絡管理中,備份交換機配置信息是一項至關重要的任務。備份可以確保在交換機發生故障或配置錯誤時,能夠迅速恢復到之前的工作狀態。本文將詳細介紹如何使用
    的頭像 發表于 08-12 17:50 ?686次閱讀
    使用<b class='flag-5'>Python</b><b class='flag-5'>腳本</b>備份<b class='flag-5'>華為</b><b class='flag-5'>交換機</b>的<b class='flag-5'>配置</b>信息

    利用Python腳本登錄到交換機并創建VLAN

    本文將詳細介紹如何利用Python腳本登錄到交換機并創建VLAN。
    的頭像 發表于 08-12 17:59 ?634次閱讀
    主站蜘蛛池模板: 干夜夜| 天天操天天操天天干 | 丁香视频在线 | 五月天婷婷精品视频 | 四虎国产精品永久地址51 | 男女免费视频 | 婷婷丁香花 | 四虎影院在线免费观看 | 综合久久99| 国产美女一区二区三区 | 日韩一二三级 | 欧美激情区 | 又粗又大又爽又色又过瘾视频 | 天天狠天天干 | 日本丰满毛茸茸熟妇 | 国产精品1区2区3区在线播放 | 天堂在线视频观看 | 欧美极品在线视频 | 亚洲夂夂婷婷色拍ww47 | 天天操穴 | 亚洲人成电影在线 | 国产高清网站 | 在线毛片网 | 性欧美丰满xxxx性久久久 | 超级黄色毛片 | 婷婷在线观看网站 | 欧美亚洲综合另类成人 | 国产精品9999 | 日本黄色视 | 黄网站色| 天堂资源站 | 亚洲第成色999久久网站 | 午夜欧美电影 | 天堂在线中文无弹窗全文阅读 | 手机国产看片 | 天天摸天天做天天爽在线 | 亚洲综合色一区二区三区小说 | 久久大伊人 | 国产一卡2卡3卡四卡精品网站 | 久久国产精品免费专区 | 国产色综合天天综合网 |