网站首页
网站导航
Ctrl+D收藏
首 页
代码段
源码包
文档库
工具箱
代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Python
】
自动登录网络设备备份配置文件
作者:
Solon.Ring
/ 发布于
2012/3/6
/
821
<div>coding:utf-8</div> <div>!/usr/bin/python</div> <div>'''</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>program: run.py</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>程序名称:数通设备tftp备份 </div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>开发:gyh9711</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>日期:2012-3-2</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>www.disp2012.com</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>环境:【wind2003[open Tftp server] + virtualbox:ubuntn10 server】</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>tftp : Open TFTP Server </div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>ubuntn </div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>python + pyexpect</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>采用虚拟机原因: pyexpect 不支持windows </div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>注:原打算采用secrueCrt 脚本编写,因实践中发现没有使用linux下pexpect易用,灵活 ,之前习惯使用expect,因tcl【语法】没有python易用、易维护</div> <div></div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>编写些程序原因:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>最近出了比较严重故障:因netscreen设备bug,一个节点主备设备同时出故障,更换设备后,发现备份配置文件出现乱码【中文】,不能直接使用。</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>考虑设备在内网,目前有近300台数通设备,因此采用原始tftp备份方式</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>因备份设备不多:暂只考虑功能,程序效率放在次要</div> <div></div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>发布:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>2012-3-2 基本实现netscreen,cisco ios, hw vrp,h3c f1000设备 备份程序 version 0.1</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>2012-3-3 1.分离出设备信息配置 2.增加备份是否成功检测 version 0.2</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>问题:1 未解决ping 不可达主要,反馈慢问题 解决办法:ip 一项,不支持主机名,在 ipCheck函数中添加检查地址进行解决 2012-3-3</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>2.登录设备部署expect代码,没有处理认证失败情况,或者超时等基本检查问题</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre"> </span></div> <div>'''</div> import pexpect</div> import datetime</div> import time</div> import os</div> import re</div> <div></div> <div></div> <div>tftp服务器</div> <div>tftpServer='192.168.1.115'</div> <div></div> <div>备份主机列表【配置格式如下】</div> <div>ip 备份脚本[系统类型] 登录帐号 密码 super密码 是否需要备份</div> <div>backupHosts=[</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>{"ip":"192.168.1.27","script":"vrp","login":"test","passwd":"*****","su_passwd":"*****","check":"Y"},</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>{"ip":"192.168.1.28","script":"vrp","login":"test","passwd":"*****","su_passwd":"*****","check":"Y"},</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>{"ip":"192.10.100.100","script":"vrp","login":"test","passwd":"*****","su_passwd":"*****","check":"Y"},</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>{"ip":"192.10.100.101","script":"vrp","login":"test","passwd":"*****","su_passwd":"*****","check":"Y"},</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>{"ip":"192.10.98.167","script":"juniper","login":"netscreen","passwd":"*****","su_passwd":"*****","check":"Y"},</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>{"ip":"192.10.98.168","script":"juniper","login":"netscreen","passwd":"*****","su_passwd":"*****","check":"Y"},</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>{"ip":"192.168.1.124","script":"h3c_firewall","login":"test","passwd":"*****","su_passwd":"*****","check":"Y"},</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>{"ip":"192.168.1.125","script":"h3c_firewall","login":"test","passwd":"*****","su_passwd":"*****","check":"Y"},</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>{"ip":"192.10.98.233","script":"ios","login":"test","passwd":"*****","su_passwd":"*****","check":"Y"},</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>{"ip":"192.10.98sd","script":"ios","login":"test","passwd":"*****","su_passwd":"*****","check":"Y"},</div> <div>]</div> <div></div> <div></div> <div> 检查主机是否可达</div> <div>def ipCheck(ip):</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>if re.match(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}",ip):</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>if os.uname()[0] == "Linux":</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>output=os.popen("/bin/ping -c 1 -W 2 %s" % (ip)).read().split("\n")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>if "1 packets transmitted, 1 received, 0% packet loss, time 0ms" in output:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>return True</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>else:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>return False</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>else:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>return False</div> <div></div> <div> 产生日期</div> <div>def getToday():</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>return datetime.date.today()</div> <div></div> <div>'''核心代码'''</div> <div></div> <div>def telnet_hw3552(ip,login,passwd,su_passwd):</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>try:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo = pexpect.spawn('/usr/bin/telnet %s' % (ip))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>index = foo.expect(['sername:', 'assword:'])</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>if index == 0:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(login)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect("assword:")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(passwd)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>elif index == 1:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(passwd)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect(">")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("super")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect("assword:")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(su_passwd)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect(">")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("tftp %s put %s %s " % (tftpServer,"vrpcfg.cfg",ip+"_hw_"+str(getToday())+".cfg"))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>index=foo.expect(["successfully","Error"])</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>if index == 1:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(" ")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect(">")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("tftp %s put %s %s " % (tftpServer,"vrpcfg.zip",ip+"_hw_"+str(getToday())+".zip"))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("quit")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>except pexpect.EOF:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.close()</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>else:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.close<span class="Apple-tab-span" style="white-space:pre"> </span></div> <div></div> <div>思科ios系统交换机</div> <div>def telnet_ciscoios(ip,login,passwd,su_passwd):</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>try:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo = pexpect.spawn('/usr/bin/telnet %s' % (ip))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>index = foo.expect(['sername:', 'assword:'])<span class="Apple-tab-span" style="white-space:pre"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>if index == 0:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(login)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect("assword:")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(passwd)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>elif index == 1:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(passwd)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect(">")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("en")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect("assword:")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(su_passwd)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect("#")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("copy running-config tftp")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect(".*remote.*")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("%s" % (tftpServer))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect(".*filename.*")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("%s" % (ip+"_ciscoIos_"+str(getToday())+"_runningconfig.cfg"))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect("#")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("exit")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>except pexpect.EOF:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.close()</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>else:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.close</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span></div> <div>h3c防火墙</div> <div>def telnet_h3cfirewallf1000(ip,login,passwd,su_passwd):</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>try:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo = pexpect.spawn('/usr/bin/telnet %s' % (ip))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>index = foo.expect(['sername:', 'assword:'])<span class="Apple-tab-span" style="white-space:pre"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>if index == 0:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(login)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect("assword:")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(passwd)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>elif index == 1:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(passwd)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect(">")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("tftp %s put %s %s " % (tftpServer,"startup.cfg",ip+"_h3cf1000_"+str(getToday())+"_startup.cfg"))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect(">")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("tftp %s put %s %s " % (tftpServer,"system.xml",ip+"_h3cf1000_"+str(getToday())+"_system.xml"))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect(">")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("quit")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>except pexpect.EOF:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.close()</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>else:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.close<span class="Apple-tab-span" style="white-space:pre"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre"> </span></div> <div>netscreen firewall</div> <div>def telnet_netscren(ip,login,passwd,su_passwd):</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>try:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo = pexpect.spawn('/usr/bin/telnet %s' % (ip))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>index = foo.expect(['login:', 'assword:'])<span class="Apple-tab-span" style="white-space:pre"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>if index == 0:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(login)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect("assword:")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(passwd)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>elif index == 1:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(passwd)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect(">")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline(su_passwd)</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect(">")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("save config to tftp %s %s" % (tftpServer,ip+"_netscreen_"+str(getToday())+".cfg"))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect("Succeeded")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect(">")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("exit")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.expect(".*save.*")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.sendline("Y")<span class="Apple-tab-span" style="white-space:pre"> </span></div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>except pexpect.EOF:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.close()</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>else:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>foo.close<span class="Apple-tab-span" style="white-space:pre"> </span></div> <div></div> <div></div> <div>调用核心代码函数</div> <div>def run():</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>'''先查看配置,确认设备是否需要备份, 再确认设备是否网络可达,ok才进行备份操作'''</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>for i in backupHosts:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>if i['check'] == "Y":</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>if ipCheck(i['ip']):</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>print(" --->>> backup %s ......" % (i['ip']))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>if i['script'] == "vrp":</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>telnet_hw3552(i['ip'],i['login'],i['passwd'],i['su_passwd']) #cfg</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>elif i['script'] == "ios":</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>telnet_ciscoios(i['ip'],i['login'],i['passwd'],i['su_passwd']) #cisco</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>elif i['script'] == "juniper":</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>telnet_netscren(i['ip'],i['login'],i['passwd'],i['su_passwd']) #juniper netscreen</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>elif i['script'] == "h3c_firewall":</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>telnet_h3cfirewallf1000(i['ip'],i['login'],i['passwd'],i['su_passwd']) # h3c firewall</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>else:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>print("%s [%s] nonsupoort this type system host" % (i['ip'],i['script']))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>else:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>print("unknown host %s or hosts ip config error" % (i['ip']))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span></div> <div>+++++++++++++++++++++main+++++++++++++++++++=</div> if __name__ == "__main__":</div> <div>执行备份</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>run()</div> <div>检查备份是否成功</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>print("----------------------- report ------------------")</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>backupPath='/win_data/tftp_log' #备份路径</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>tftpList=[]</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>for i in os.popen("ls %s | grep \"%s\"" % (backupPath,getToday())).readlines(): #将备份到文件存放于列表中</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>tftpList.append(i.split("_")[0])</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>for i in backupHosts: #检查需要备份设备,是否备份到[tftp上有没有文件] 没:则提示</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>if i['check'] == "Y":</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>if i['ip'] not in tftpList:</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span>print("%s backup error" % (i['ip']))</div> <div><span class="Apple-tab-span" style="white-space:pre"> </span></div> <div>'''</div> <div>测试</div> <div>testistrator@python:/win_data$ python run.py</div> <div>--->>> backup 192.168.1.27 ......</div> <div>--->>> backup 192.168.1.28 ......</div> <div>--->>> backup 192.10.100.100 ......</div> <div>--->>> backup 192.10.100.101 ......</div> <div>--->>> backup 192.10.98.167 ......</div> <div>--->>> backup 192.10.98.168 ......</div> <div>--->>> backup 192.168.1.124 ......</div> <div>--->>> backup 192.168.1.125 ......</div> <div>--->>> backup 192.10.98.233 ......</div> <div>unknown host 192.10.98sd or hosts ip config error</div> <div>----------------------- report ------------------</div> <div>192.10.98sd backup error</div> <div>'''</div>
评论列表
本站所提供的代码,版权归原作者所有,若有侵犯作者版权,请与我们联系,我们将立即删除或修改。谢谢!
本站所有代码发布及提供者。
试试其它关键字
guoyh
同语言下
.
比较两个图片的相似度
.
过urllib2获取带有中文参数的url内容
.
不下载获取远程图片的宽度和高度及文件大小
.
通过qrcode库生成二维码
.
通过httplib发送GET和POST请求
.
Django下解决小文件下载
.
遍历windows的所有窗口并输出窗口标题
.
根据窗口标题调用窗口
.
python 抓取搜狗指定公众号
.
pandas读取指定列
可能有用的
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
.
实现对图片上传的接收
.
判断用户输入的是否为IP地址
Solon.Ring
贡献的其它代码
(
2
)
.
自动登录网络设备备份配置文件
.
图片上传,管理
地图
本站
我们
服务
版权
联系
回馈
博客