吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3270|回复: 36
收起左侧

[Python 原创] Python批量备份路由器或交换机配置

  [复制链接]
winty 发表于 2023-3-21 11:12
本帖最后由 winty 于 2023-3-21 11:14 编辑

首先建立excel表格,填入设备相关连接信息,如图:
image.png
然后安装excel处理模块openpyxl,用于读取excel文件。安装netmiko模块用于连接交换机。
[Bash shell] 纯文本查看 复制代码
pip install openpyxl
pip install netmiko
完整代码如下,仅实现了ssh,telnet还没来得及写,大佬们轻喷,本菜鸟班门弄斧了
[Python] 纯文本查看 复制代码
from netmiko import ConnectHandler
from openpyxl import load_workbook
import os
from sys import exit
# 读取excel内设备列表信息
def check_and_get_dev_list(filename, sheet_name):
    """
    filename:  为Excel文件名
    sheet_name: 表名
    从表格中逐行遍历,获取设备相关信息
    """
    excel_information = []
    sheet_header = []

    wb = load_workbook(filename)
    sh = wb[sheet_name]
    # 获取最大行数
    row = sh.max_row
    # 获取最大列数
    column = sh.max_column
    data = []
    # 获取表头写入列表中方便调用
    for data_1 in range(1, column+1):
        get_sheet_header = sh.cell(row=1, column=data_1).value
        sheet_header.append(get_sheet_header)

    # 第一行为表头, 此处 row +1 是pyton循环时不读取最后一个数
    for row_1 in range(2, row + 1):
        # 存储一行信息
        sheet_data_1 = dict()
        # 逐行读取表中的数据
        for b in range(1, column + 1):
            cell = sh.cell(row=row_1, column=b).value
            # 将数据已字典形式写入 sheet_data_1 中
            # if cell != None:
            sheet_data_1[sheet_header[b-1]] = cell
        excel_information.append(sheet_data_1)

    for i in excel_information:
        if i['ip'] != None:
            data.append(i)
    return data


# 配置批量备份导出
def cisco_ssh_confbak():
    # 创建备份文件夹
    try:
        path = './conf_bak'
        os.makedirs(path)
    except FileExistsError:
        pass
    res = check_and_get_dev_list('./resource.xlsx', 'Sheet1')

    for i in res:

        dev = {'device_type':i['type'],
               'host': i['ip'],
               'username': i['username'],
               'password': i['password'],
               'secret': i['enpassword'],
               'port': i['port'],}
        with ConnectHandler(**dev) as conn:
            conn.enable()
            if dev['device_type'] == 'cisco_ios':
                output = conn.send_command(command_string='show run')
            elif dev['device_type'] == 'huawei' or 'hp_comware':
                output = conn.send_command(command_string='dis current-configuration')
            else:
                print('error')
            with open('./conf_bak/'+ dev['host'] +'_conf_bak.txt', mode='w', encoding='utf8') as f:
                print('正在备份:'+dev['host'])
                f.write(output)
                print('备份成功!')
    return 1
a = cisco_ssh_confbak()
print(a)
执行后会在程序根目录生成conf_bak文件夹以及设备IP为名称的txt配置文件,执行结果如下图:
image.png
image.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
15016432842 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

那些年打的飞机 发表于 2023-3-21 15:43


大哥人家提前你一年哦

『精品软件区』 [Windows] 网工必备华为、华三、思科交换机配置自动采集工具(支持telnet、ssh、命令自定义)
因工作需求客户的网络设备要季度进行巡检,由于维护的设备超过百台以上,特地找人弄了一个华为、华三、锐捷、思科等交换机的自动采集保存的脚本,日常采集交换机的配置,端口信息,vlan、邻居关系等等,支持win10系统。
目前此脚本支持自定义命令设置,支持telnet、ssh,不支持console。
脚本已经更新为多线程,当然为了安全所见手动备份也可以,这个适合偷懒用,大家自行斟酌。

支持ssh、telnet、自定义命令的新版地址
链接:https://pan.baidu.com/s/18T7BS097SUc6xp9--2uKqw
提取码:5krb
vip0739 发表于 2023-3-21 12:42
wkwx 发表于 2023-3-21 13:02
AaronZero 发表于 2023-3-21 13:03
我去试试,谢谢大佬的code
jinyuanchen 发表于 2023-3-21 13:07
我不懂,感觉很专业!
nitian0963 发表于 2023-3-21 13:13
我去试试,谢谢大佬
chengsheng16 发表于 2023-3-21 14:04
不知道路由器的管理密码可以爬吗?
135544 发表于 2023-3-21 14:29
谢谢大佬,我们是telnet,没开SSH,可以写个telnet嘛
baigei2333 发表于 2023-3-21 14:39
膜拜大佬,我也是网工。大佬加个关注一起交流python!!
 楼主| winty 发表于 2023-3-21 14:41
baigei2333 发表于 2023-3-21 14:39
膜拜大佬,我也是网工。大佬加个关注一起交流python!!

我是菜鸟,才入行而已,关注你了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 15:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表