• 用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 FilesAnaconda2Scripts>conda.exe install paramiko
    Fetching package metadata ...........
    Solving package specifications: .
    Package plan for installation in environment C:Program FilesAnaconda2:
    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(" ") ssh_con.send("show ip int brie ") ssh_con.send("conf t ") ssh_con.send("int gi 2 ") ssh_con.send("no shutdown ") ssh_con.send("end ")
    至此,做好了准备工作。

    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
    ")
            ssh_con.send("int gi 2
    ")
            ssh_con.send("shutdown
    ")
            ssh_con.send("end
    ")
            time.sleep(2)
            output = ssh_con.recv(500)
            print output
        print pingstatus
        # 每10s探测一次
        time.sleep(10)
    
    
    通过ping进行检测,并且可以判断是否windows机器,并相应的参数不同。

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

  • 相关阅读:
    MySQL系列(四)--数据库结构优化、范式化与反范式化
    Java数据结构和算法(二)--队列
    Java数据结构和算法(一)--栈
    MySQL系列(三)--MySQL存储引擎
    Java集合(六)--ArrayList、LinkedList和Vector对比
    Java集合(五)--LinkedList源码解读
    Java集合(四)--基于JDK1.8的ArrayList源码解读
    P1048 采药(洛谷,动态规划递推,01背包原题)
    P1091 合唱队形题解(洛谷,动态规划LIS,单调队列)
    语法摔过的坑(用来给自己看的,粗糙,勿点)
  • 原文地址:https://www.cnblogs.com/hengwei/p/6567624.html
Copyright © 2020-2023  润新知