用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。