使用python telnetlib批量备份交换机配置的方法


Posted in Python onJuly 25, 2019

使用了telnetlib模块,首先登录到交换机,列出并获取配置文件的名称,然后通过tftp协议将配置文件传输到文件服务器上,为避免配置文件覆盖,将备份的配置文件名称统一加入日期以作区分。

1. 登录方式和口令有好几种,比较懒惰,通过不同列表以做区分,如果每个交换机口令都不相同的话,就需要额外处理了。

2. 交换机的配置文件也有多种类型,也是通过列表进行区分。

3. 有些交换机支持ftp和sftp,但测试发现有些虽然有相应的客户端命令,但传输总有问题。也不能将每个交换机都配置为ftp服务器,不安全也不方便。最后采用tftp解决。tftp比较简单,没有办法创建目录以区分不同日期的备份。好在配置文件已经加入了日期做区分,马马虎虎可以运行了。

import telnetlib,sys

from datetime import date
today=date.today()
print(today)
ipaddrset1=['192.168.1.19','192.168.1.29','192.168.1.59']
ipaddrset2=['192.168.1.39','192.168.1.49','192.168.1.69','192.168.1.56','192.168.1.6','192.168.1.9','192.168.1.24',
      '192.168.1.72','192.168.1.73','192.168.1.74','192.168.1.75','192.168.1.76','192.168.1.41','192.168.1.16','192.168.1.32',]
ipaddrset3=['192.168.1.51','192.168.1.52','192.168.1.53','192.168.1.54','192.168.1.55',
      '192.168.1.15','192.168.1.16','192.168.1.22','192.168.1.23','192.168.1.25','192.168.1.26','192.168.1.27',
      '192.168.1.28','192.168.1.7']
hostname='192.168.8.201'
tn=telnetlib.Telnet(hostname)
print(tn.read_until(b'Username:').decode('ascii'))
tn.write(b'**********\n')
print(tn.read_until(b'Password:').decode('ascii'))
tn.write(b'************\n')
print(tn.read_until(b'>').decode('ascii'))
for ipaddr in ipaddrset1:
  telnet_dest="telnet "+ipaddr
  tn.write(telnet_dest.encode('ascii')+b'\n')
  tn.read_until(b'Password:').decode('ascii')
  tn.write(b'**********\n')
  tn.read_until(b'>').decode('ascii')
  tn.write(b'dir\n')
  tn.read_until(b'>').decode('ascii')
  fn=str(today)+"_"+str(ipaddr)+"_vrpcfg.zip \n"
  cmdli="tftp 192.168.5.33 put vrpcfg.zip " +str(fn)
  tn.write(cmdli.ede('ascii'))
  tmp=tn.read_until(b'>').decode('ascii')
  if "successfully" in tmp:
    print(str(ipaddr)+" backup successfully!")
  else:
    print(str(ipaddr)+" backup NOT successfully!")
  tn.write(b'quit\n')
  tn.read_until(b'>')
for ipaddr in ipaddrset2:
  telnet_dest="telnet "+ipaddr
  tn.write(telnet_dest.encode('ascii')+b'\n')
  tn.read_until(b'Password:').decode('ascii')
  tn.write(b'**********\n')
  tn.read_until(b'>').decode('ascii')
  tn.write(b'dir\n')
  tn.read_until(b'>').decode('ascii')
  fn=str(today)+"_"+str(ipaddr)+"_startup.cfg \n"
  cmdli="tftp 192.168.5.33 put startup.cfg " +str(fn)
  tn.write(cmdli.encode('ascii'))
  tmp=tn.read_until(b'>').decode('ascii')
  if "successfully" in tmp:
    print(str(ipaddr)+" backup successfully!")
  else:
    print(str(ipaddr)+" backup NOT successfully!")
  tn.write(b'quit\n')
  tn.read_until(b'>')
for ipaddr in ipaddrset3:
  telnet_dest="telnet "+ipaddr
  tn.write(telnet_dest.encode('ascii')+b'\n')
  tn.read_until(b'Password:').decode('ascii')
  tn.write(b'************\n')
  tn.read_until(b'>').decode('ascii')
  tn.write(b'dir\n')
  tn.read_until(b'>').decode('ascii')
  fn=str(today)+"_"+str(ipaddr)+"_startup.cfg \n"
  cmdli="tftp 192.168.5.33 put startup.cfg " +str(fn)
  tn.write(cmdli.encode('ascii'))
  tmp=tn.read_until(b'>').decode('ascii')
  if "successfully" in tmp:
    print(str(ipaddr)+" backup successfully!")
  else:
    print(str(ipaddr)+" backup NOT successfully!")
  tn.write(b'quit\n')
  tn.read_until(b'>')

tn.write(b'exit\n')
tn.close()

以上这篇使用python telnetlib批量备份交换机配置的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详细介绍Python中的偏函数
Apr 27 Python
解决Linux系统中python matplotlib画图的中文显示问题
Jun 15 Python
Python3 queue队列模块详细介绍
Jan 05 Python
python使用itchat实现手机控制电脑
Feb 22 Python
Python闭包函数定义与用法分析
Jul 20 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
PyCharm2018 安装及破解方法实现步骤
Sep 09 Python
Pandas 解决dataframe的一列进行向下顺移问题
Dec 27 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
Python爬虫之Selenium实现窗口截图
Dec 04 Python
python复合条件下的字典排序
Dec 18 Python
python利用opencv实现颜色检测
Feb 23 Python
python找出因数与质因数的方法
Jul 25 #Python
HTML的form表单和django的form表单
Jul 25 #Python
Python3 批量扫描端口的例子
Jul 25 #Python
python3 批量获取对应端口服务的实例
Jul 25 #Python
Python实现微信小程序支付功能
Jul 25 #Python
Form表单及django的form表单的补充
Jul 25 #Python
python实现切割url得到域名、协议、主机名等各个字段的例子
Jul 25 #Python
You might like
判“新”函数:得到今天与明天的秒数
2006/10/09 PHP
php下使用无限生命期Session的方法
2007/03/16 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
jQuery实现连续动画效果实例分析
2015/10/09 Javascript
JS优化与惰性载入函数实例分析
2017/04/06 Javascript
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
Vue.use源码学习小结
2018/06/20 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
解决Layui中templet中a的onclick参数传递的问题
2019/09/20 Javascript
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
vue + el-form 实现的多层循环表单验证
2020/11/25 Vue.js
深入理解python对json的操作总结
2017/01/05 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
浅谈python中的占位符
2017/11/09 Python
python如何实现异步调用函数执行
2019/07/08 Python
Python有参函数使用代码实例
2020/01/06 Python
毕业生自荐书
2013/12/18 职场文书
幼儿园家长寄语
2014/04/02 职场文书
中专生自荐信
2014/06/25 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
幼儿园个人总结
2015/02/28 职场文书
人与自然的观后感
2015/06/18 职场文书
大学升旗仪式主持词
2015/07/04 职场文书
毕业感言怎么写
2015/07/31 职场文书
Java Socket实现多人聊天系统
2021/07/15 Java/Android
一篇文章弄清楚Ajax请求的五个步骤
2022/03/17 Javascript
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android
JS实现简单的九宫格抽奖
2022/06/28 Javascript