如何用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
相关产品推荐
相关产品推荐

