Python获取思科设备配置并写入数据库思路整理

 

摘要

在网络运维中,面临着网络运维人员水平的层次不齐,为了能够定期维护网络环境中设备的配置信息,故设计以下程序,来初步实现网络配置的定期检查以及自动化备份与操作。

本系统由Python通过用户自定义的网络运维方式,周期性的检测网络设备配置的变更情况,计算并记录配置的MD5信息以及自动备份配置至数据库中。

 

第1章 引言

1.1 课题背景

网络运维至今,网络系统越来越庞大,为了维持系统的稳定性,能够在定期的备份网络设备的配置信息变得越来越重要。

1.2 目的和意义

通过此系统,实现7*24小时的网络配置检测以及定期的将配置信息保存至数据库实现备份。

1.3 系统设计思想

本系统后端通过Python获取思科网络设备的配置数据,将数据解析并且落盘到SQLite,以实现配置的定期备份。

1.4 系统开发环境

操作系统:Windows 10

开发工具:Pycharm

服务器:Linux CentOS 7

数据库:SQLite

1.5 系统运行要求

后端获取数据,因为数据量不大,使用SQLite进行存储。

第2章 需求分析

2.1 系统功能分析

在Python 3.6环境中,使用paramiko进行远程登录操作, hashlib计算MD5, sqlite3作为数据库。

2.2 系统整体业务流程

第3章 总体设计

3.1 系统总体设计

实时监控基于Python程序开发语言,主要分为监控模块,存储模块与数据库模块。

监控模块:主要负责定期登录检测设备配置状态

存储模块:负责数据存储、读取/查询

数据库模块:作为存储模块的支撑,负责创建数据库

3.1.1 系统模块功能

通过监控模块获取设备的实时状态,再由存储模块判断是否更新创新数据库。

3.2 数据库设计概述

3.2.1 数据库选择

系统采用SQLite作为数据库。SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,不需要在系统中配置。

就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。

3.2.2 数据库特性

在 SQLite 中,SQL92 不支持的特性如下所示:

3.3.2 数据表的设计

 图1:数据表及细节表

 

 

第4章 详细设计

4.1 数据获取(paramiko)

4.1.1 获取网络设备配置信息

代码讲解:

通过paramiko使用ssh的方式登录网络设备,获取需要的配置信息。

代码如下:

import paramiko
def qytang_ssh(ip, username, password, port='22', cmd='sh run'):
    ssh = paramiko.SSHClient()
    ssh.load_system_host_keys()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(ip, port=port, username=username, password=password, timeout=5, compress=True)
    stdin, stdout, stderr = ssh.exec_command(cmd)
    result = stdout.read()
    ssh.close()
    return str(result)

 

代码1paramiko 实现SSH登录

 

 

4.2 数据存储(SQLite)

Python与MySQL连接,需要通过sqlite3(import sqlite3)

4.2.1 与数据库连接/关闭

代码讲解:设置连接数据库必要的属性,创建连接,建立游标,返回conn、cursor

4.2.2 创建数据库表格

代码如下:

import sqlite3
conn = sqlite3.connect('qytangconfig.sqlite')
cursor = conn.cursor()
cursor.execute("create table config_md5 (ip varchar(40), config varchar(99999), md5_config varchar(999))")

代码2sqlite 实现数创建据库   

4.3计算MD5值(hashilib)

为了确保获取数据的唯一性,我们将获取的数据进行MD5校验,通过对比MD5数据确保能够准确地知道配置是否发生变化。

4.3.1获取配置并计算MD5值

from qytang_ssh import *
import hashlib
import re
import sqlite3

def get_config_md5(ip,username,password):
    try:
        # ssh
提前将没编码的字符串返回到函数,通过re模块找到hostname~end之间的配置
        run_config_raw = qytang_ssh2(ip, username, password)
        run_config = re.search('hostnam[\s\S]*end', run_config_raw).group()
        #
计算md5
        m = hashlib.md5()
        m.update(run_config.encode())
        md5_value = m.hexdigest()
        #
返回 配置以及md5
        return run_config,md5_value
    except Exception:
        print("
报错")
        return

代码3hashlib实现计算MD5

 

4.4数据处理

代码讲解:

通过4.2.1创建数据库的连接,通过预设的设备list递归查询需要检查的设备信息,通过4.1.1返回的配置信息,交给4.3.1计算MD5值,对比MD5值的差异确定是否存入数据库。

并且运行结束,最终打印输出整张数据库的信息。

 

4.1.4 实现配置对比MD5并更新数据库

def write_config_md5_to_db():
    conn = sqlite3.connect('qytangconfig.sqlite')
    cursor = conn.cursor()
    #
逐个迭代读取设备信息,并写入数据库
    for device in device_list:
        #
获取配置以及md5信息
        config_and_md5 = get_config_md5(device,username,password)
        #
查询数据库中,是否包含此设备的md5信息
        cursor.execute(f"select md5_config from config_md5 where ip='{device}'")
        #
查询结果赋值
        md5_result = cursor.fetchall()
        #
如何为空,则写入,否则比较md5值,改变则写入db
        if not md5_result:
            # print('test1')
            # cursor.execute(f"insert into config_md5 values ('{device}', '{config_and_md5}[0]', '{config_and_md5}[1]')")
            cursor.execute("insert into config_md5 values ('%s','%s','%s')"%(device,config_and_md5[0],config_and_md5[1]))
        else:
            #
对比新旧MD5
            if md5_result[0][0] == config_and_md5[1]:
                continue
            else:
                cursor.execute("update config_md5 set config='%s',md5_config='%s' where ip = '%s'"
                               %(config_and_md5[0], config_and_md5[1],device))
    cursor.execute("select * from config_md5")
    all_result = cursor.fetchall()
    #
打印IPMD5
    for x in all_result:
        print(f"IP:{x[0]},MD5:{x[2]}")
    conn.commit()
    cursor.close()
    conn.close()

代码4:实现配置读取对比MD5并更新创建数据库

 

 

第5章 实验展示

截图说明:

第一次运行时的结果:

分别记录了2台监控设备的IP + MD5信息,以及数据库中存储了相应的配置数据。

  

1:第一次测试--数据表及细节表

 

第二次运行时的结果:

本次修改了192.168.6.100单台网络设备的配置信息:hostname RR37256

MD5值以及数据库都进行了更新!

  2:第二次测试修改单设备配置,数据表及细节表

 

 

第6章 系统测试

6.1 测试方案概述

测试环境: Linux Centos 7

测试平台: Python 3.6、SQLite

测试功能:

1、是否正确获取到配置数据

2、是否正确落盘到数据库

 

6.2 测试计划与实施

6.2.1 是否正确获取到配置数据

 

左:设备测运行中的配置   右:数据库中获取的配置

 

6.2.2 是否正确落盘到数据库

 

6.2.2数据库查询的详细配置信息

结论

通过本次实验,增强了python的语法使用,其次初步掌握SQL操作的过程,并且明白了读写操作的整个流程。

在系统开发过程中遇到许多问题,通过不断查阅资料来解决,也认识到本系统仍有许多可以改进的地方,比如应该使用自动调度技术循环运行脚本,通过此方式可以记录详细的运行信息,使得后台能够拥有详细的日志信息等等。

 参考文献

[1] Python基础教程

[2] SQLite 基础操作

[3] Python与SQLite交互

[4] 乾颐堂-乾颐盾系列Python课程支持

致谢

学习语言的过程,单单学习语法是很枯燥的,最好的学习方式是以项目为导向进行学习,这样才能边在实操过程中掌握基础语法的使用,虽说不能面面俱到,但能完成工作即可。通过这次的实验我收获颇丰,希望以后可以更进一步。感谢老师的付出,谢谢老师!

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Database Schema Guide for Cisco Unified Contact Center Enterprise 8.5(1) March 2011 THE SPECIFICATIONS AND INFORMATION REGARDING THE PRODUCTS IN THIS MANUAL ARE SUBJECT TO CHANGE WITHOUT NOTICE.ALL STATEMENTS, INFORMATION, AND RECOMMENDATIONS IN THIS MANUAL ARE BELIEVED TO BE ACCURATE BUT ARE PRESENTEDWITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. USERS MUST TAKE FULL RESPONSIBILITY FOR THEIR APPLICATION OFANY PRODUCTS. THE SOFTWARE LICENSE AND LIMITED WARRANTY FOR THE ACCOMPANYING PRODUCT ARE SET FORTH IN THE INFORMATION PACKETTHAT SHIPPED WITH THE PRODUCT AND ARE INCORPORATED HEREIN BY THIS REFERENCE. IF YOU ARE UNABLE TO LOCATE THESOFTWARE LICENSE OR LIMITED WARRANTY, CONTACT YOUR CISCO REPRESENTATIVE FOR A COPY. The Cisco implementation of TCP header compression is an adaptation of a program developed by the University of California, Berkeley (UCB) aspart of UCBs public domain version of the UNIX operating system. All rights reserved. Copyright 1981, Regents of the University of California. NOTWITHSTANDING ANY OTHER WARRANTY HEREIN, ALL DOCUMENT FILES AND SOFTWARE OF THESE SUPPLIERS ARE PROVIDED"AS IS" WITH ALL FAULTS. CISCO AND THE ABOVE-NAMED SUPPLIERS DISCLAIM ALL WARRANTIES, EXPRESSED OR IMPLIED, INCLUDING,WITHOUT LIMITATION, THOSE OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OR ARISINGFROM A COURSE OF DEALING, USAGE, OR TRADE PRACTICE. IN NO EVENT SHALL CISCO OR ITS SUPPLIERS BE LIABLE FOR ANY INDIRECT, SPECIAL, CONSEQUENTIAL, OR INCIDENTAL DAMAGES,INCLUDING, WITHOUT LIMITATION, LOST PROFITS OR LOSS OR DAMAGE TO DATA ARISING OUT OF THE USE OR INABILITY TO USETHIS MANUAL, EVEN IF CISCO OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Cisco and the Cisco Logo are trademarks of Cisco Systems, Inc. and/or its affiliates in the U.S. and other countries. A listing of Cisco's trademarkscan be found at http://www.cisco.com/go/trademarksThird party trademarks mentioned are the property of their respective owners.The use of theword partner does not imply a partnership relationship between Cisco and any other company. (1005R) Any Internet Protocol (IP) addresses used in this document are not intended to be actual addresses. Any examples, command display output, andfigures included in the document are shown for illustrative purposes only. Any use of actual IP addresses in illustrative content is unintentional andcoincidental. Copyright 2011 Cisco Systems, Inc. All rights reserved.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ImTheRx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值