使用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 解析XML文件
Apr 15 Python
玩转python selenium鼠标键盘操作(ActionChains)
Apr 12 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
pycharm+django创建一个搜索网页实例代码
Jan 24 Python
PyQt5每天必学之进度条效果
Apr 19 Python
Python数据结构之哈夫曼树定义与使用方法示例
Apr 22 Python
django2.0扩展用户字段示例
Feb 13 Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 Python
python如何写出表白程序
Jun 01 Python
深入浅析python 中的self和cls的区别
Jun 20 Python
浅谈TensorFlow中读取图像数据的三种方式
Jun 30 Python
Python使用BeautifulSoup4修改网页内容
May 20 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 syntax error, unexpected $end 错误的一种原因及解决
2008/10/25 PHP
用PHP将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
php cc攻击代码与防范方法
2012/10/18 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
jquery随意添加移除html的实现代码
2011/06/21 Javascript
Jquery实现自定义窗口随意的拖拽
2014/03/12 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
2016/09/20 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
Vue数据驱动模拟实现1
2017/01/11 Javascript
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
countup.js实现数字动态叠加效果
2019/10/17 Javascript
jquery实现聊天机器人
2020/02/08 jQuery
原生javascript中this几种常见用法总结
2020/02/24 Javascript
react antd表格中渲染一张或多张图片的实例
2020/10/28 Javascript
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
Python中的startswith和endswith函数使用实例
2014/08/25 Python
Python列表list数组array用法实例解析
2014/10/28 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
2015/05/05 Python
python中异常捕获方法详解
2017/03/03 Python
python基础_文件操作实现全文或单行替换的方法
2017/09/04 Python
python numpy元素的区间查找方法
2018/11/14 Python
python 产生token及token验证的方法
2018/12/26 Python
Scrapy框架爬取Boss直聘网Python职位信息的源码
2019/02/22 Python
Python多进程入门、分布式进程数据共享实例详解
2019/06/03 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
html5唤醒APP小记
2019/03/27 HTML / CSS
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
Dockers鞋官网:Dockers Shoes
2018/11/13 全球购物
2014年关于两会精神的心得体会
2014/03/17 职场文书
小学新学期寄语
2014/04/02 职场文书
高三语文复习计划
2015/01/19 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
使用Redis实现秒杀功能的简单方法
2021/05/08 Redis
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server