用python管理Cisco路由器


目前DevOps是整個運維發展的方向,Network的運維也一樣。使用程序控制底層的路由器是最基本的要求之一。

本文簡單解釋如何用Python控制路由器,對網絡設備進行配置。

Python和網絡設備連接,一般采用SSH。本文采用Paramiko的ssh來與路由器通訊。

一、安裝Paramiko

Paramiko可以通過標准的pip install安裝,也可以通過集成的安裝包Anaconda2種的conda安裝。具體如下:

1. pip install

  Linux自帶Paramiko模塊,不需要安裝。如果沒有,可以通過一下命令安裝:

yum install python-pip
pip install paramiko

2. conda install

C:\Program Files\Anaconda2\Scripts>conda.exe install paramiko
Fetching package metadata ...........
Solving package specifications: .
Package plan for installation in environment C:\Program Files\Anaconda2:
The following NEW packages will be INSTALLED:
    paramiko: 2.0.2-py27_0
The following packages will be UPDATED:
    conda:    4.3.11-py27_0 --> 4.3.14-py27_1
Proceed ([y]/n)? y
paramiko-2.0.2 100% |###############################| Time: 0:00:00 703.11 kB/s
conda-4.3.14-p 100% |###############################| Time: 0:00:00   2.33 MB/s

安裝完成后,開始編寫我們的代碼。

二、代碼

代碼分幾塊

1. import

需要用到如下的包

#!/usr/bin/env python
import paramiko
import os,platform
import time

2. 定義變量

# 檢查節點的信息
pinghost="www.sina.com.cn"
# 路由器相關信息
host='42.159.x.x'
user='azureuser'
password="xxxx"

3.定義SSH# SSH參數ssh=paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:
    ssh.connect(host,username=user,password=password,look_for_keys=False,allow_agent=False)
except ValueError:
    print "Can't connect to Router"

ssh_con=ssh.invoke_shell() output=ssh_con.recv(500) # 路由器參數初始化 ssh_con.send("\n") ssh_con.send("show ip int brie\n") ssh_con.send("conf t\n") ssh_con.send("int gi 2\n") ssh_con.send("no shutdown\n") ssh_con.send("end\n")
至此,做好了准備工作。

4. 探測、判斷、控制

while True:
    # 判斷節點是否通
    response=os.system("ping " + ("-n 1 " if  platform.system().lower()=="windows" else "-c 1 ") + pinghost)
    if response == 0:
        pingstatus = "Network Active"
    else:
        # 如果不通,對路由器進行修改
        pingstatus = "Network Down"
        ssh_con.send("conf t\n")
        ssh_con.send("int gi 2\n")
        ssh_con.send("shutdown\n")
        ssh_con.send("end\n")
        time.sleep(2)
        output = ssh_con.recv(500)
        print output
    print pingstatus
    # 每10s探測一次
    time.sleep(10)
 
        
通過ping進行檢測,並且可以判斷是否windows機器,並相應的參數不同。

如果能ping通,不做動作,如果ping不通,修改路由器端口shutdown。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM