精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

使用Python批量連接華為網絡設備

網絡技術干貨圈 ? 來源:網絡技術干貨圈 ? 2024-08-12 17:48 ? 次閱讀

轉載請注明以下內容:

來源:公眾號【網絡技術干貨圈】

作者:圈圈

ID:wljsghq

隨著網絡規模的擴大和設備數量的增加,手動配置和管理每臺網絡設備變得越來越不現實。因此,自動化工具和腳本變得尤為重要。Python語言以其簡潔性和強大的第三方庫支持,成為了網絡自動化領域的首選。本篇文章將詳細介紹如何使用Python批量連接華為網絡設備,實現自動化配置和管理。

環境準備

在開始編寫腳本之前,需要確保我們的工作環境具備以下條件:

安裝Python 3.x。

安裝paramiko庫,用于實現SSH連接。

安裝netmiko庫,這是一個基于paramiko的高級庫,專門用于網絡設備的自動化操作。

安裝Python和相關庫

首先,確保你已經安裝了Python 3.x。如果尚未安裝,可以從Python官方網站https://www.python.org/downloads下載并安裝。

然后,使用pip安裝paramiko和netmiko庫:

pipinstallparamiko
pipinstallnetmiko

基礎知識

在實際操作之前,我們需要了解一些基礎知識:

SSH協議:用于安全地遠程登錄到網絡設備。

華為網絡設備的基本命令:了解一些基本的配置命令有助于編寫自動化腳本。

使用Netmiko連接單個設備

首先,我們來看看如何使用netmiko連接到單個華為網絡設備并執行基本命令。

連接單個設備

fromnetmikoimportConnectHandler

#定義設備信息
device={
'device_type':'huawei',
'host':'192.168.1.1',
'username':'admin',
'password':'admin123',
'port':22,
}

#連接到設備
connection=ConnectHandler(**device)

#執行命令
output=connection.send_command('displayversion')
print(output)

#斷開連接
connection.disconnect()

在上面的代碼中,我們定義了一個包含設備信息的字典,并使用ConnectHandler類來建立連接。然后,我們使用send_command方法來發送命令并獲取輸出,最后斷開連接。

批量連接多個設備

在實際應用中,我們通常需要批量處理多個設備。接下來,我們將介紹如何使用Python腳本批量連接多個華為網絡設備。

定義設備列表

首先,我們需要定義一個設備列表,每個設備的信息以字典形式存儲:

devices=[
{
'device_type':'huawei',
'host':'192.168.1.1',
'username':'admin',
'password':'admin123',
'port':22,
},
{
'device_type':'huawei',
'host':'192.168.1.2',
'username':'admin',
'password':'admin123',
'port':22,
},
#可以繼續添加更多設備
]

批量連接和執行命令

接下來,我們編寫一個函數來批量連接這些設備并執行命令:

defbatch_execute_commands(devices,command):
results={}
fordeviceindevices:
try:
connection=ConnectHandler(**device)
output=connection.send_command(command)
results[device['host']]=output
connection.disconnect()
exceptExceptionase:
results[device['host']]=f"Connectionfailed:{e}"
returnresults

#批量執行命令
command='displayversion'
results=batch_execute_commands(devices,command)

#輸出結果
fordevice,outputinresults.items():
print(f"Device:{device}")
print(output)
print('-'*40)

在這個函數中,我們遍歷設備列表,逐個連接設備并執行指定命令。結果存儲在一個字典中,最后輸出每個設備的結果。

高級應用:并行連接設備

當設備數量較多時,逐個連接和執行命令的效率會很低。為了解決這個問題,我們可以使用并行處理來同時連接多個設備。

使用多線程并行連接

我們可以使用Python的concurrent.futures模塊來實現多線程并行連接:

importconcurrent.futures
fromnetmikoimportConnectHandler

defconnect_and_execute(device,command):
try:
connection=ConnectHandler(**device)
output=connection.send_command(command)
connection.disconnect()
returndevice['host'],output
exceptExceptionase:
returndevice['host'],f"Connectionfailed:{e}"

defbatch_execute_commands_parallel(devices,command):
results={}
withconcurrent.futures.ThreadPoolExecutor(max_workers=5)asexecutor:
future_to_device={executor.submit(connect_and_execute,device,command):devicefordeviceindevices}
forfutureinconcurrent.futures.as_completed(future_to_device):
device=future_to_device[future]
try:
host,output=future.result()
results[host]=output
exceptExceptionase:
results[device['host']]=f"Executionfailed:{e}"
returnresults

#并行批量執行命令
command='displayversion'
results=batch_execute_commands_parallel(devices,command)

#輸出結果
fordevice,outputinresults.items():
print(f"Device:{device}")
print(output)
print('-'*40)

在這個示例中,我們使用ThreadPoolExecutor來創建一個線程池,并行處理多個設備的連接和命令執行。這樣可以顯著提高處理效率。

實戰案例:批量配置華為交換機

接下來,我們通過一個實際案例來演示如何批量配置多個華為交換機。假設我們需要配置一批交換機的基本網絡設置。

定義配置命令

首先,我們定義需要執行的配置命令。假設我們要配置交換機的主機名和接口IP地址:

defgenerate_config_commands(hostname,interface,ip_address):
return[
f"system-view",
f"sysname{hostname}",
f"interface{interface}",
f"ipaddress{ip_address}",
f"quit",
f"save",
f"y",
]

批量執行配置命令

然后,我們編寫一個函數來批量執行這些配置命令:

defconfigure_devices(devices,config_generator):
results={}
fordeviceindevices:
try:
connection=ConnectHandler(**device)
commands=config_generator(
hostname=f"Switch-{device['host']}",
interface="GigabitEthernet0/0/1",
ip_address=f"192.168.1.{device['host'].split('.')[-1]}/24"
)
output=connection.send_config_set(commands)
results[device['host']]=output
connection.disconnect()
exceptExceptionase:
results[device['host']]=f"Configurationfailed:{e}"
returnresults

#批量配置設備
results=configure_devices(devices,generate_config_commands)

#輸出結果
fordevice,outputinresults.items():
print(f"Device:{device}")
print(output)
print('-'*40)

在這個函數中,我們為每臺設備生成配置命令,并使用send_config_set方法批量執行這些命令。配置完成后,輸出每臺設備的結果。

處理異常情況

在實際操作中,我們需要處理各種可能的異常情況。例如,設備連接失敗、命令執行錯誤等。我們可以在腳本中加入詳細的異常處理機制,確保腳本在出現問題時能夠適當處理并記錄錯誤信息。

增強異常處理

defconfigure_devices_with_error_handling(devices,config_generator):
results={}
fordeviceindevices:
try:
connection=ConnectHandler(**device)
commands=config_generator(
hostname=f"Switch-{device['host']}",
interface="GigabitEthernet0/0/1",
ip_address=f"192.168.1.{device['host'].split('.')[-1]}/24"
)
output=connection.send_config_set(commands)
results[device['host']]=output
connection.disconnect()
exceptExceptionase:
results[device['host']]=f"Configurationfailed:{e}"
returnresults

#批量配置設備并處理異常
results=configure_devices_with_error_handling(devices,generate_config_commands)

#輸出結果
fordevice,outputinresults.items():
print(f"Device:{device}")
print(output)
print('-'*40)

在這個示例中,我們在每個設備的配置過程中加入了異常處理。如果某個設備出現問題,會捕獲異常并記錄錯誤信息,而不會影響其他設備的配置。

日志記錄

為了更好地管理和排查問題,我們可以在腳本中加入日志記錄功能。通過記錄詳細的日志信息,可以方便地了解腳本的運行情況和設備的配置狀態。

使用logging模塊記錄日志

importlogging

#配置日志記錄
logging.basicConfig(filename='network_config.log',level=logging

.INFO,format='%(asctime)s-%(levelname)s-%(message)s')

defconfigure_devices_with_logging(devices,config_generator):
results={}
fordeviceindevices:
try:
connection=ConnectHandler(**device)
commands=config_generator(
hostname=f"Switch-{device['host']}",
interface="GigabitEthernet0/0/1",
ip_address=f"192.168.1.{device['host'].split('.')[-1]}/24"
)
output=connection.send_config_set(commands)
results[device['host']]=output
logging.info(f"Successfullyconfigureddevice{device['host']}")
connection.disconnect()
exceptExceptionase:
error_message=f"Configurationfailedfordevice{device['host']}:{e}"
results[device['host']]=error_message
logging.error(error_message)
returnresults

#批量配置設備并記錄日志
results=configure_devices_with_logging(devices,generate_config_commands)

#輸出結果
fordevice,outputinresults.items():
print(f"Device:{device}")
print(output)
print('-'*40)

在這個示例中,我們使用logging模塊記錄日志信息。成功配置設備時記錄INFO級別日志,配置失敗時記錄ERROR級別日志。

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

    關注

    215

    文章

    34064

    瀏覽量

    248850
  • 網絡設備
    +關注

    關注

    0

    文章

    285

    瀏覽量

    29500
  • python
    +關注

    關注

    53

    文章

    4747

    瀏覽量

    83927

原文標題:如何使用Python批量連接華為網絡設備?

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

收藏 人收藏

    評論

    相關推薦

    外網訪問家里的網絡設備

    網絡設備
    學習電子知識
    發布于 :2023年07月17日 20:06:18

    網絡設備選擇技巧

    1.硬件要兼容  在網絡設備選擇上,盡量使所有網絡設備都采用一家公司的產品,這樣可以最大限度地減少高端與低端甚至是同等級別不同設備間的不兼容問題。而且不要為了省幾十塊錢而選擇沒有質量保證的網絡
    發表于 04-08 09:34

    各類網絡設備

    ` 網絡設備,銳捷,艾泰,D-link,華為,H3C,思科,韓電,安普`
    發表于 11-29 11:15

    Linux常用網絡設備

    網絡設備是計算機體系結構中必不可少的一部分,處理器如果想與外界通信,通常都會選擇網絡設備作為通信接口。眾所周知,在 OSI(Open Systems Interconnection,開放網際互連)中,網絡被劃分為七個層次,從下到
    發表于 07-25 07:37

    如何利用華為網絡設備去查看電源狀態檢查命令呢

    描述:華為網絡設備查看風扇狀態電源狀態檢查命令命令:displaydevice fan
    發表于 12-31 07:07

    網絡設備監管系統的設計與實現

    網絡設備監管是指對IP 網絡中的關鍵設備進行實時監控和管理,使網絡管理員對網絡設備的使用情況有更為深入的了解。在研究分析
    發表于 06-23 13:33 ?24次下載

    家用網絡設備簡介

    家用網絡設備簡介 就在幾年前,家用網絡設備還相當簡單。使用一根直連電纜、一部網絡集線器或以太網路由器,您可以將兩部或多部計算機連接在一起,共享外設、
    發表于 08-05 10:26 ?1019次閱讀

    家用網絡設備的無線功能

    家用網絡設備的無線功能 目前,家庭網絡設備正朝著無線的方向發展。大多數新的家庭網絡都采用了Wi-Fi技術,在家庭的各種設備之間共享寬帶互聯網連接
    發表于 08-05 10:26 ?700次閱讀

    華為計劃拓展企業網絡設備市場 挑戰思科和Juniper

    8月8日下午消息,全球最大電信設備供應商華為致力于開展多元化業務,但在企業網絡設備市場仍占據很小的份額,而這一領域主導企業依然是美國思科和Juniper,企業網絡設備作為一項新業務,對
    發表于 08-09 10:41 ?1102次閱讀

    華為網絡設備查看電源狀態檢查命令

    描述:華為網絡設備查看風扇狀態電源狀態檢查命令命令:display device fan
    發表于 01-11 10:06 ?0次下載
    <b class='flag-5'>華為</b><b class='flag-5'>網絡設備</b>查看電源狀態檢查命令

    利用python腳本批量登錄網絡設備修改配置

    按照下圖,在ensp模擬器上搭建環境,為了演示批量修改設備,龍哥這里實驗4臺路由器,當然了,如果你電腦性能足夠牛逼,你也可以多用幾臺路由器咯!然后標注好IP地址。
    的頭像 發表于 10-19 09:12 ?1442次閱讀

    Python寫SecureCRT批量登錄/巡檢網絡設備腳本

    因為有約200臺的網絡設備需要每天登錄巡檢、查看配置、保存配置、定期更改密碼(每周改一次),如果都手動去登錄、配置將是非常耗費時間和人力的,所以就有了整理出腳本的想法。查看了網上大多是VBS編寫的腳本,我對VBS不熟悉,剛好前段時間初步學習了Python,就想用
    的頭像 發表于 12-28 09:32 ?3893次閱讀

    如何使用Python通過SNMP監控網絡設備

    豐富的第三方庫,實現繪圖入庫等,該方式比較繁瑣,我們管理的設備還有一些網絡設備,這些設備無法通過開發程序來實現監控,為了實現全平臺全設備監控,我決定使用SNMP實現監控任務。
    的頭像 發表于 01-09 10:38 ?1125次閱讀

    網絡工程師學Python-遠程連接管理Telnet

    Python Telnet是一種用于遠程連接和管理網絡設備Python庫。
    的頭像 發表于 04-28 09:47 ?779次閱讀

    你靠什么來連接這些網絡設備

    ,你靠什么來連接這些網絡設備?二層、三層、 四層交換機都有什么不一樣? 「交換機」同時需要配合設備線纜,即可實現設備間的互連互通。
    發表于 05-29 14:14 ?501次閱讀
    你靠什么來<b class='flag-5'>連接</b>這些<b class='flag-5'>網絡設備</b>?