使用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快速查找算法应用实例
Sep 26 Python
Python中处理字符串之endswith()方法的使用简介
May 18 Python
详解python如何调用C/C++底层库与互相传值
Aug 10 Python
解决python2.7 查询mysql时出现中文乱码
Oct 09 Python
使用Python实现简单的服务器功能
Aug 25 Python
利用Pandas 创建空的DataFrame方法
Apr 08 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
Python标准库shutil用法实例详解
Aug 13 Python
python 中pyqt5 树节点点击实现多窗口切换问题
Jul 04 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
Aug 23 Python
Python Web静态服务器非堵塞模式实现方法示例
Nov 21 Python
python上下文管理的使用场景实例讲解
Mar 03 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
UCenter 批量添加用户的php代码
2012/07/17 PHP
10条php编程小技巧
2015/07/07 PHP
Laravel 5.5 异常处理 & 错误日志的解决
2019/10/17 PHP
jquery中this的使用说明
2010/09/06 Javascript
javascript来定义类的规范小结
2010/11/19 Javascript
jQuery select表单提交省市区城市三级联动核心代码
2014/06/09 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
javascript对象的相关操作小结
2016/05/16 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
JavaScript 数组去重并统计重复元素出现的次数实例
2017/12/14 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
vue2 v-model/v-text 中使用过滤器的方法示例
2019/05/09 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
Python进程间通信Queue实例解析
2018/01/25 Python
浅谈python在提示符下使用open打开文件失败的原因及解决方法
2018/11/30 Python
python实现Flappy Bird源码
2018/12/24 Python
Python Pandas分组聚合的实现方法
2019/07/02 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
python重要函数eval多种用法解析
2020/01/14 Python
Anaconda配置pytorch-gpu虚拟环境的图文教程
2020/04/16 Python
Python 列表反转显示的四种方法
2020/11/16 Python
Canvas 帧动画吃苹果小游戏
2020/08/05 HTML / CSS
西班牙网上书店:Casa del Libro
2016/11/01 全球购物
大学生村官心得体会范文
2014/01/04 职场文书
2015年电工工作总结
2015/04/10 职场文书
工程技术员岗位职责
2015/04/11 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
代码复现python目标检测yolo3详解预测
2022/05/06 Python