You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python对比本地路由器running-config文件与实时配置?

路由器配置对比解决方案

原代码的问题

  • 错误地将字符串 'show running-config' 当作函数调用,根本无法获取实时配置
  • 首次保存配置时未使用更安全的 with 语句处理文件操作

修正后的完整代码

import difflib 
import netmiko

# 路由器连接信息
router_connect_info = {
    'device_type': 'cisco_ios',
    'host': '192.168.56.101',
    'username': 'christian',
    'password': 'romero',
    'secret': 'chicken'
}

# 建立SSH连接并进入特权模式
session = netmiko.ConnectHandler(**router_connect_info)
session.enable()

# --- 可选:如果需要重新生成本地参考配置,取消下面注释 ---
# # 获取配置并保存到本地文件
# with open("running_config_copied.txt", "w") as config_file:
#     config_file.write(session.send_command("show running-config"))

# 读取本地存储的配置文件
with open('running_config_copied.txt', 'r') as local_config_file:
    local_config_lines = local_config_file.readlines()

# 获取实时运行配置并转成按行的列表(保留换行符,和本地文件格式一致)
live_config = session.send_command("show running-config")
live_config_lines = live_config.splitlines(keepends=True)

# 对比两个配置的差异
print("=== 配置差异对比结果 ===")
for diff_line in difflib.ndiff(local_config_lines, live_config_lines):
    # 只显示有变化的行:+(新增)、-(删除)、?(差异标记)
    if diff_line.startswith(('+', '-', '?')):
        print(diff_line)

# 关闭SSH连接
session.disconnect()

关键说明

  • 实时配置获取:通过 session.send_command("show running-config") 再次拉取路由器最新配置,用 splitlines(keepends=True) 保证和本地文件读取的行格式一致,避免对比时出现无意义的换行符差异
  • 文件操作优化:所有文件读写都用 with 语句,自动处理文件关闭,避免资源泄漏
  • 差异过滤:只打印有变化的行,减少冗余输出,更直观看到配置变更
  • 连接管理:最后调用 session.disconnect() 关闭SSH连接,避免残留无效连接

内容的提问来源于stack exchange,提问作者christian romero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:25:44