使用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操作json数据的一个简单例子
Apr 17 Python
django 自定义用户user模型的三种方法
Nov 18 Python
linux 下实现python多版本安装实践
Nov 18 Python
使用Python求解最大公约数的实现方法
Aug 20 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
Python探索之ModelForm代码详解
Oct 26 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
django manage.py扩展自定义命令方法
May 27 Python
python调用staf自动化框架的方法
Dec 26 Python
解决Django一个表单对应多个按钮的问题
Jul 18 Python
Atom Python 配置Python3 解释器的方法
Aug 28 Python
Tensorflow使用Anaconda、pycharm安装记录
Jul 29 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
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
js parsefloat parseint 转换函数
2010/01/21 Javascript
js精度溢出解决方案
2012/12/02 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
2015/06/09 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
Angularjs中使用轮播图指令swiper
2017/05/30 Javascript
微信小程序 websocket 实现SpringMVC+Spring+Mybatis
2017/08/04 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
2019/10/28 Javascript
node.js中module模块的功能理解与用法实例分析
2020/02/14 Javascript
javascript中正则表达式语法详解
2020/08/07 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
ptyhon实现sitemap生成示例
2014/03/30 Python
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
python实现学生管理系统开发
2020/07/24 Python
python通过cython加密代码
2020/12/11 Python
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
东方红海科技面试题软件测试方面
2012/02/08 面试题
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
英语版自我评价,35句话轻松搞定
2019/10/08 职场文书
解决Go gorm踩过的坑
2021/04/30 Golang