SecureCRT脚本实现自动备份华为交换机配置

合集下载

利用SecureCRT的脚本功能自动定时执行任务

利用SecureCRT的脚本功能自动定时执行任务

利⽤SecureCRT的脚本功能⾃动定时执⾏任务SecureCRT是⼀款仿真终端⼯具,常⽤来telnet到路由器或交换机上,它还⽀持VBscript和Jscript脚本。

下边讲述⼀种在WINDOWS下利⽤SecureCRT的脚本功能⾃动定时执⾏⼀些登录到路由器或交换机来执⾏的任务:1.写好要SecureCRT执⾏的脚本,可登录执⾏任何操作。

如se800.vbs,保存在d:\se800下。

内容附在最后。

2.写好启动SecureCRT执⾏脚本的批处理⽂件。

如add_cmd.bat,保存在d:\se800下内容如下:d:cd \se800"C:\Program Files\SecureCRT\SecureCRT.EXE" /T /SCRIPT se800.vbs3.在WINDOWS的控制⾯板的任务计划⾥增加任务,如在23:30执⾏add_cmd.bat,⼤功告成。

====================se800.vbs的内容:====================# $language = "VBScript"# $interface = "1.0"Function my_Date()dim y,m,d,h,mmDim nowDate,mytimenowDate=Now()mytime=time()y=Year(nowDate)m=Month(nowDate)d=Day(nowDate)h=hour(mytime)mm=minute(mytime)my_Date=y & "-" & m & "-" & dEnd FunctionSub mainDim fso, fHost,fCMDbsn,fCMDscs, strLineHost,strLineCommand,strLogfile,strArrayConst ForReading = 1Const Hostip=0Const user=1Const password=2Const superpwd=3Const hostname=0Const NodeType=4Const my_user="jhxsy"Const my_pass="2381654"Const ScriptPath="D:\se800\"Const LogPath="D:\se800\log\"Set fso = CreateObject("Scripting.FileSystemObject")Set fHost = fso.OpenTextFile(ScriptPath& "ip.txt", ForReading, 0) 'Do While fHost.AtEndOfStream <> Truecrt.Screen.Synchronous = TruestrLineHost = Trim(fHost.Readline ) '获取fhost⽂件中的⼀⾏,如192.168.0.9 null password en_pwd BASstrArray=split(strLineHost,vbtab,-1) '按tab将获取的⾏分割成⼀个数组strArray[0]=192.168.0.9 .... strArray[4]=BAS strLogfile=LogPath & strArray(hostname)& "-" & my_date() &".txt"crt.Session.LogFileName = strLogfilecrt.Session.Log Truecrt.Session.Connect "/telnet" & " " & strArray(Hostip) & vbcr 'telnet strArray[0] vbcr=回车crt.screen.waitforstring "login:"crt.screen.send my_user & vbcr 'strArray(user) & vbcrcrt.screen.waitforstring "assword:"crt.screen.send my_pass & vbcrIf strArray(NodeType)="BAS" ThenSet fCMDbsn=fso.OpenT extFile(ScriptPath& "cmd.txt", ForReading, 0) '如果是bas 打开cmd.txt⽂件并按forreading⽅式读取Do While fCMDbsn.AtEndOfStream <> True '如果没结束strLineCommand=Trim(fCMDbsn.Readline)'获取读取的⾏Do While strLineCommand="wait"'?不解crt.sleep 5000strLineCommand=Trim(fCMDbsn.Readline)Loopcrt.Screen.WaitforString "#"'等待出现超级权限的提⽰crt.Screen.Send strLineCommand & vbcr'发送命令Call CheckEnd()LoopSet fCMDbsn=nothingElseSet fCMDscs=fso.OpenT extFile(ScriptPath& "cmdscs.txt", ForReading, 0)Do While fCMDscs.AtEndOfStream <> TruestrLineCommand=Trim(fCMDscs.Readline)crt.Screen.WaitforString ">"crt.Screen.Send strLineCommand & vbcrcrt.Screen.Send "y" & vbcrLoopSet fCMDscs=nothingEnd If'Logout nodecrt.screen.waitforstring "#"'crt.Session.Log Falsecrt.screen.send " exit" & vbcr'Stop log file action'crt.screen.waitforstring "$"'crt.screen.send vbcrcrt.Session.Log False'crt.screen.send vbcrcrt.Session.Disconnectcrt.Screen.Synchronous = FalseLoopSet fso=nothingcrt.quitEnd SubSub CheckEnd()Do Until crt.Screen.WaitForString ("#" , 1)=Truecrt.Screen.Send " "Loopcrt.Screen.Send vbcrExit SubEnd Sub经常遇到需要对⼀批⽹络设备进⾏同⼀种操作的情况,⽐如备份,或者查找arp表等,⽤telnet⼀个个登上去看确实⽐较⿇烦,于是想到是否有⾃动化的办法来做,编程序太⿇烦改起来不⽅便,每天都在⽤securecrt这个软件做telnet客户端,有⼀次⽆意间在软件⽬录下发现⼀些脚本,原来securecrt也可以⽤脚本,于是有了下⾯这个脚本,⽤来⾃动登录到设备上去执⾏某个操作,并把屏幕内容记录到⽇志⽂件中供进⼀步处理。

通过SecureCRT自动批量备份交换机的vbs脚本

通过SecureCRT自动批量备份交换机的vbs脚本
crt.Screen.Send params(1) & vbcr
'读入登录密码
crt.Screen.WaitForString "Password:"
crt.Screen.Send params(2) & vbcr
crt.Screen.waitForString "#"
crt.session.LogFileName = "D:\SecureCRT\Data\log\" & params(3) & params(4) & params(5) & ".txt"
crt.session.Log(true)
'Telnet到这个设备上,也可以修改为ssh,参数参考crt文档
End Sub
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso,file1,line,str1,params
Set fso = CreateObject("Scripting.FileSystemObject")
Set file1 = fso.OpenTextFile("D:\SecureCRT\Data\scripts\list.txt",Forreading, False)
crt.Screen.Synchronous = True
DO While file1.AtEndOfStream <> True
'读出每行
line = file1.ReadLine
'分离每行的参数 IP地址params(0) 登录用户名params(1),密码params(2),备份文件命名规则params(3)等

如何用python实现每天定时备份交换机配置文件?

如何用python实现每天定时备份交换机配置文件?

如何用python实现每天定时备份交换机配置文件?1思路1、编写好python脚本。

2、交换机开启FTP服务,即把交换机设置成FTP服务器,配置ftp 账号密码。

3、利用window的任务计划程序,设置定时任务,如每天某个时刻运行该python脚本,实现定时备份。

2编写python脚本python代码如下,很简单。

大家要使用的话,复制后修改IP地址、ftp用户名、密码即可。

如果备份其他网络设备,需要修改一下设备默认的配置文件名,如华为交换机默认为:vrpcfg.zip# more ftp-huawei.py# -*- coding=utf-8 -*-from ftplib import FTPimport time,oshostid="192.168.1.200"Today = time.strftime("%Y-%m-%d", time.localtime())#获取当天时间ftp = FTP()#创建变量ftp.set_debuglevel(2)#开启debug模式ftp.connect(host=hostid,port=21)#FTP地址(交换机地址)ftp.login(user="along",passwd="along123")#FTP账号密码print(ftp.getwelcome())#打印ftp登陆成功信息os.chdir('./')#改变当前路径至(已经在该目录下创建了这个文件夹)bufsize=1024filename=hostid + "--{}.zip".format(Today)#创建日期为前缀的zip文件file_handle=open(filename,"wb").write#创建写操作ftp.retrbinary("RETR vrpcfg.zip",file_handle,bufsize)#ftp后获取vrpcfg.zip这个文件并写入本地文件ftp.set_debuglevel(0)#关闭调试模式ftp.quit()#关闭FTP复制上面代码,粘贴到python IDLE,相关参数修改后,文件名后缀记得保存为.py 格式。

(完整版)SecureCRT脚本编写方法

(完整版)SecureCRT脚本编写方法

SecureCRT脚本编写方法一、SecureCRT工具常用到的几个函数阐述如下:在SecureCRT里,用得最多的应该就是crt.Screen,基本上很多操作都是基于屏幕的返回字来决定下一步该作何操作:第一:crt.Screen.WaitForString("KeyString",timewaiting)该函数是单字符串判断,KeyString是需要查找的关键字,timewaiting是一个超时阀值,例如:crt.Screen.WaitForString("people:",5)该行代码的意思就是在5秒内没有检测到people:出现,就执行下一条语句,如果改成:crt.Screen.WaitForString("people:")那就是指直到people:出现才执行下一行代码WaitForString是有返回值的,返回值是True或者False 因此,可以根据返回值进行条件判断以确定一下条代码例如:If(crt.Screen.WaitForString("currentstate:UP",1)<>False)ThenportStatus="PortUP"ElseportStatus="PortDown"EndIfmsgboxportStatus这段代码用于判断端口状态情况并记录下来.第二:crt.Screen.WaitForStrings("KeyString1","KeyString2",...,timeout)用于多个字符串的判断,timeout的作用是一样的例如:crt.Screen.WaitForStrings("cisco","huawei","H3C",5)意思就是在5秒内有检测到相应的字符时,返回相应的索引号(索引号是从1开始的)如果都没有检查到,则返回0.因此,该函数的使用可以如下:Dim SwitchKeySwitchKey=crt.Screen.WaitForStrings("cisco","huawei","H3C",5)Select case SwitchKeycase 1MsgBox"思科设备"case 2MsgBox"华为设备"case 3MsgBox"华三设备"case elseMsgBox"未知设备"End Select几个对话性的函数其实SecureCRT支持的脚本语言就是VBS,这个脚本语言与VB有较大的不同,对于界面的支持性较差不过也有几个对话性的函数1、InputBox:提示用户输入参数temp=inputbox("提示用户你输入参数的名称","对话框的名称"):需要将输入的参数赋值给某一个参数进行使用2、输出函数msgboxmsgbox“给用户输出的信息对话框”eg.求正方形面积的脚本dimr,sr=inputbox("请输入正方形的边长:","求正方形面积的程序")s=r*rmsgbox(s)巡检代码示例下面就我的工作性质,跟我同事一块制作的一个脚本程序——维护着N台路由器设备,每天需要对这些设备进行例行巡检下面是程序的所有代码,希望对各位有所帮助*************************************************************************************** ********************************************************************************************************** *******************#$language="VBScript"#$interface="1.0"'说明:'本代码可在CRT工具中实现Cosico,华为,爱立信路由器交换机数据的自动配置或作为设备巡检之用;Setscreen=crt.Screen'创建屏幕对象'定义全局变量:'Device变量为操作设备对象数组,作为存储设备名用;'CiscoAggreOfCommands变量为思科设备命令集合数组,作为存储思科设备命令用;'NE40EAggreOfCommands变量为华为NE40E设备命令集数组,作为存储华为NE设备命令用;'SE800AggreOfCommands变量为爱立信SE800设备命令集数组,作为存储爱立信SE800设备命令用;'ArrreOfRiskCommands变量为各厂家设备存在风险性操作命令的数组,作为存储过滤风险操作命令之用;'DeviceNumth变量为Device数组序号;'CommandNumth变量为各厂家命令数组的序号;'ResultOfType变量为判断设备类型标识符;'TypeOfCommand变量作为存储当前命令类型用;DimDevice,CiscoAggreOfCommands,NE40EAggreOfCommands,SE800AggreOfCommands,ArrreOfRiskComm andsDimDeviceNumth,CommandNumth,ResultOfTypeDimTypeOfCommand'爱立信设备集合'Device=Array("CE35-ERICSE800","CE36-ERICSE800","CE37-ERICSE800","CE38-ERICSE800")'华为设备集合Device=Array("CE07-HWNE40E","CE08-HWNE40E",_"CE09-HWNE40E","CE10-HWNE40E",_"CE11-HWNE40E","CE12-HWNE40E",_"CE21-HWNE40E","CE22-HWNE40E",_"CE23-HWNE40E","CE24-HWNE40E",_"CE25-HWNE40E","CE26-HWNE40E",_"CE29-HWNE40E","CE30-HWNE40E",_"CE33-HWNE40E","CE34-HWNE40E",_"CE45-HWNE40E","CE46-HWNE40E",_"CE47-HWNE40E","CE48-HWNE40E",_"CE49-HWNE40E","CE50-HWNE40E")'思科设备命令集合CiscoAggreOfCommands=Array("showcdp",_ "showconf",_"showhard",_"showinterface",_"showiproute",_"showconf")'华为NE40E设备命令集合'健康检查'告警检查'日志检查'单板运行状态检查'CPU占用率检查'内存占用率检查'接口和链路状态以及流量检查'NE40E接口状态检查'OSPF邻居状态检查'路由信息检查NE40EAggreOfCommands=Array("displayhealth",_ "displaytrapbuffer",_ "displaylogbuffer",_"displaydevice",_"displaycpu-usage",_"displaymemory-usage",_ "displayinterface",_"disospfpeer",_"displayiprouting-table")'爱立信SE800设备命令集合'单板注册信息'办卡加电自检'单板运行状态检查'检查背板运行状态'检查主控板冗余性'存储设备利用率'CPU利用率'内存利用率检查'端口运行状态检查'端口数据收发状态检查'电源使用情况检查。

SecureCRT脚本编写方法

SecureCRT脚本编写方法

SecureCRT脚本编写方法一、SecureCRT工具常用到的几个函数阐述如下:在SecureCRT里,用得最多的应该就是crt.Screen,基本上很多操作都是基于屏幕的返回字来决定下一步该作何操作:第一:crt.Screen.WaitForString("KeyString",timewaiting)该函数是单字符串判断,KeyString是需要查找的关键字,timewaiting是一个超时阀值,例如:crt.Screen.WaitForString("people:",5)该行代码的意思就是在5秒内没有检测到people:出现,就执行下一条语句,如果改成:crt.Screen.WaitForString("people:")那就是指直到people:出现才执行下一行代码WaitForString是有返回值的,返回值是True或者False 因此,可以根据返回值进行条件判断以确定一下条代码例如:If(crt.Screen.WaitForString("currentstate:UP",1)<>False)ThenportStatus="PortUP"ElseportStatus="PortDown"EndIfmsgboxportStatus这段代码用于判断端口状态情况并记录下来.第二:crt.Screen.WaitForStrings("KeyString1","KeyString2",...,timeout)用于多个字符串的判断,timeout的作用是一样的例如:crt.Screen.WaitForStrings("cisco","huawei","H3C",5)意思就是在5秒内有检测到相应的字符时,返回相应的索引号(索引号是从1开始的)如果都没有检查到,则返回0.因此,该函数的使用可以如下:Dim SwitchKeySwitchKey=crt.Screen.WaitForStrings("cisco","huawei","H3C",5)Select case SwitchKeycase 1MsgBox"思科设备"case 2MsgBox"华为设备"case 3MsgBox"华三设备"case elseMsgBox"未知设备"End Select几个对话性的函数其实SecureCRT支持的脚本语言就是VBS,这个脚本语言与VB有较大的不同,对于界面的支持性较差不过也有几个对话性的函数1、InputBox:提示用户输入参数temp=inputbox("提示用户你输入参数的名称","对话框的名称"):需要将输入的参数赋值给某一个参数进行使用2、输出函数msgboxmsgbox“给用户输出的信息对话框”eg.求正方形面积的脚本dimr,sr=inputbox("请输入正方形的边长:","求正方形面积的程序")s=r*rmsgbox(s)巡检代码示例下面就我的工作性质,跟我同事一块制作的一个脚本程序——维护着N台路由器设备,每天需要对这些设备进行例行巡检下面是程序的所有代码,希望对各位有所帮助*************************************************************************************** ********************************************************************************************************** *******************#$language="VBScript"#$interface="1.0"'说明:'本代码可在CRT工具中实现Cosico,华为,爱立信路由器交换机数据的自动配置或作为设备巡检之用;Setscreen=crt.Screen'创建屏幕对象'定义全局变量:'Device变量为操作设备对象数组,作为存储设备名用;'CiscoAggreOfCommands变量为思科设备命令集合数组,作为存储思科设备命令用;'NE40EAggreOfCommands变量为华为NE40E设备命令集数组,作为存储华为NE设备命令用;'SE800AggreOfCommands变量为爱立信SE800设备命令集数组,作为存储爱立信SE800设备命令用;'ArrreOfRiskCommands变量为各厂家设备存在风险性操作命令的数组,作为存储过滤风险操作命令之用;'DeviceNumth变量为Device数组序号;'CommandNumth变量为各厂家命令数组的序号;'ResultOfType变量为判断设备类型标识符;'TypeOfCommand变量作为存储当前命令类型用;DimDevice,CiscoAggreOfCommands,NE40EAggreOfCommands,SE800AggreOfCommands,ArrreOfRiskComm andsDimDeviceNumth,CommandNumth,ResultOfTypeDimTypeOfCommand'爱立信设备集合'Device=Array("CE35-ERICSE800","CE36-ERICSE800","CE37-ERICSE800","CE38-ERICSE800")'华为设备集合Device=Array("CE07-HWNE40E","CE08-HWNE40E",_"CE09-HWNE40E","CE10-HWNE40E",_"CE11-HWNE40E","CE12-HWNE40E",_"CE21-HWNE40E","CE22-HWNE40E",_"CE23-HWNE40E","CE24-HWNE40E",_"CE25-HWNE40E","CE26-HWNE40E",_"CE29-HWNE40E","CE30-HWNE40E",_"CE33-HWNE40E","CE34-HWNE40E",_"CE45-HWNE40E","CE46-HWNE40E",_"CE47-HWNE40E","CE48-HWNE40E",_"CE49-HWNE40E","CE50-HWNE40E")'思科设备命令集合CiscoAggreOfCommands=Array("showcdp",_ "showconf",_"showhard",_"showinterface",_"showiproute",_"showconf")'华为NE40E设备命令集合'健康检查'告警检查'日志检查'单板运行状态检查'CPU占用率检查'内存占用率检查'接口和链路状态以及流量检查'NE40E接口状态检查'OSPF邻居状态检查'路由信息检查NE40EAggreOfCommands=Array("displayhealth",_ "displaytrapbuffer",_ "displaylogbuffer",_"displaydevice",_"displaycpu-usage",_"displaymemory-usage",_ "displayinterface",_"disospfpeer",_"displayiprouting-table")'爱立信SE800设备命令集合'单板注册信息'办卡加电自检'单板运行状态检查'检查背板运行状态'检查主控板冗余性'存储设备利用率'CPU利用率'内存利用率检查'端口运行状态检查'端口数据收发状态检查'电源使用情况检查'检查OSPF状态SE800AggreOfCommands=Array("showchassis",_ "showdiagon-demanddetail",_"showhardware",_"showbackplane-status",_"showredundancy",_"showdisk",_"showprocess",_"showmemory",_"showportdetail",_"showportcountersdetail",_"showchassispower",_"contextChinaMobile_NGN_SG",_ "showospfneighbor",_"contextChinaMobile_NGN_Media",_ "showospfneighbor")'风险命令过滤集合ArreOfRiskCommands=Array("reb","rel")'CE汇聚网管平台登陆子函数FunctionLandIPNETscreen.Send""&chr(13)screen.WaitForString"ogin:"screen.Send"XXXXXXXXXX"&chr(13)screen.WaitForString"Password:"screen.Send"XXXXXXXXXX"&chr(13)EndFunction'各厂家设备选择登陆子函数FunctionLandDevicescreen.Send""&chr(13)screen.WaitForString"Console&gt;&gt;"screen.Send"open"&Device(DeviceNumth)ResultOfType=screen.WaitForStrings("Cisco","NE40E","SE800",4) IfResultOfType=1ThenTypeOfCommand=CiscoAggreOfCommands'CommandNumth=0ElseIfResultOfType=2ThenTypeOfCommand=NE40EAggreOfCommands'CommandNumth=0ElseIfResultOfType=3ThenTypeOfCommand=SE800AggreOfCommands'CommandNumth=0ElseMsgBox"ErrorTypeOfDevice"DoLoopEndIfscreen.Send""&chr(13)screen.WaitForStrings"Username:","ogin:"screen.send"XXXXXXXXXX"&chr(13)screen.WaitForString"Password:"screen.Send"XXXXXXXXXX"&chr(13)DoLoopUntil(screen.WaitForStrings("NE40E&gt;","SE800#",5)<>False) EndFunction'退出设备子函数FunctionExitDeviceIfResultOfType=1ThenElseIfResultOfType=2Thenscreen.Send""&"quit"&chr(13)Doscreen.Send""&chr(13)LoopUntil(screen.WaitForString("Console&gt;&gt;",1)<>False) ElseIfResultOfType=3Thenscreen.Send""&"exit"&chr(13)Doscreen.Send""&chr(13)LoopUntil(screen.WaitForString("Console&gt;&gt;",1)<>False)ElseEndIfEndFunctionFunctionShowAllDowhile(screen.WaitForStrings("More","more",3)<>False)crt.Screen.Send""LoopEndFunction'风险命令过滤子函数FunctionRiskCommandsDimresultresult=screen.WaitForStrings(ArreOfRiskCommands,1)Ifresult<>FalseThen MsgBox"Thecommandyouareimportingexistsrisk!"DoLoopEndIfEndFunctionSubMaincrt.Screen.Synchronous=TrueLandIPNETForDeviceNumth=LBound(Device)ToUBound(Device)LandDeviceCommandNumth=0ForCommandNumth=LBound(TypeOfCommand)ToUBound(TypeOfCommand) screen.Send""&TypeOfCommand(CommandNumth)RiskCommandsscreen.Send""&chr(13)ShowAllIfscreen.WaitForString("More",1)<>FalseThenShowAllcrt.Sleep4000screen.Send""&chr(13)NextExitDeviceNextcrt.Screen.Synchronous=FalseEndSub二、自动化脚本编写三段模式模板从一个文件(目录为C:\Users\lilf\Desktop\ip.txt)里面自动读取设备IP地址,密码等,自动登录设备进入特权模式第一种情况:用户名+密码+特权密码方式# $language = “VBScript”# $interface = “1.0″Sub Main‘打开保存设备管理地址以及密码的文件Const ForReading = 1, ForWriting = 2, ForAppending = 8Dim fso,file1,line,paramsSet fso = CreateObject(“Scripting.FileSystemObject”)Set file1 = fso.OpenText File(“C:\Users\lilf\Desktop\ip.txt”,Forreading, False)crt.Screen.Synchronous = TrueDO While file1.AtEndOfStream <> True‘读出每行line = file1.ReadLine‘分离每行的参数IP地址用户名密码特权密码params = Split (line)‘Telnet到这个设备上crt.Session.Connect (“/TELNET ” & params(0))‘输入telnet用户名和密码crt.Screen.WaitForString “sername:”crt.Screen.Send params(1) & vbcrcrt.Screen.WaitForString “assword:”crt.Screen.Send params(2) & vbcr‘进特权模式crt.Screen.Send “enable” & vbcr‘输入特权密码crt.Screen.WaitForString “assword:”crt.Screen.Send params(3) & vbcrcrt.Screen.waitForString “#”ip.txt里相对应的IP地址、用户名、密码、特权密码,分别如下:192.168.1.1 admin ruijie ruijie192.168.1.2 admin ruijie ruijie192.168.2.1 admin ruijie ruijie……第二种情况:密码+特权密码方式# $language = “VBScript”# $interface = “1.0″Sub Main‘打开保存设备管理地址以及密码的文件Const ForReading = 1, ForWriting = 2, ForAppending = 8Dim fso,file1,line,paramsSet fso = CreateObject(“Scripting.FileSystemObject”)Set file1 = fso.OpenTextFile(“C:\Users\lilf\Desktop\ip.txt”,Forreading, False)crt.Screen.Synchronous = TrueDO While file1.AtEndOfStream <> True‘读出每行line = file1.ReadLine‘分离每行的参数IP地址密码特权密码params = Split (line)‘Telnet到这个设备上crt.Session.Connect (“/TELNET ” & params(0))‘输入telnet密码crt.Screen.WaitForString “assword:”crt.Screen.Send params(1) & vbcr‘进特权模式cr t.Screen.Send “enable” & vbcr‘输入特权密码crt.Screen.WaitForString “assword:”crt.Screen.Send params(2) & vbcrcrt.Screen.waitForString “#”ip.txt里相对应的IP地址、密码、特权密码,分别如下:192.168.1.1 admin ruijie192.168.1.2 admin ruijie192.168.2.1 admin ruijie……脚本发送命令:crt.Screen.Send”要发送的命令”& chr(13) //这个是回车,并且每行只发送一个命令如下,进入全局模式下,去掉OSPF进程号800crt.Screen.Send “conf t” & chr(13)crt.Screen.WaitForString “(config)#”crt.Screen.Send “no router ospf 800″& chr(13)crt.Screen.WaitForString “(config)#”crt.Screen.Send “end” & chr(13)crt.Screen.WaitForString “#”crt.Screen.Send “wr” & chr(13)J 这样去写是相当困难的,所以我们可以用先录制好需要进行相关操作的脚本,打开那个录制好的,复制那些相关的命令这样不用自己逐条手写了完成一台设备的操作之后,退出并进入下一台设备‘完成后退出crt.Screen.waitForString “#”,3 //等待3S后如果没有其它操作,则自动断开crt.Session.Disconnectloopcrt.Screen.Synchronous = FalseEnd Sub三、应用案例真实场景:客户升级,客户有145台设备需要升级,其中有rgos.bin,也有少部分的rgnos.bin首先查找当前运行的是rgos.bin还是rgnos.bin运行脚本,并记录日志到一个文本中,按2.1.2图即可脚本如下:# $language = “VBScript”# $interface = “1.0″Sub MainConst ForReading = 1, ForWriting = 2, ForAppending = 8Dim fso,file1,line,paramsSet fso = CreateObject(“Scripting.FileSystemObject”)Set file1 = fso.OpenTextFile(“C:\Users\lilf\Desktop\ip.txt “,Forreading, False)crt.Screen.Synchronous = TrueDO While file1.AtEndOfStream <> Trueline = file1.ReadLineparams = Split (line)crt.Session.Connect “/TELNET ” & params(0)crt.Screen.WaitForString “sername:”crt.Screen.Send params(1) & vbcrcrt.Screen.WaitForString “assword:”crt.Screen.Send params(2) & vbcrcrt.Screen.Send “enable” & vbcrcrt.Scree n.waitForString “#”crt.Screen.Send “show ver” & vbcrcrt.Screen.WaitForString “#”crt.Screen.Send vbcrcrt.Screen.waitForString “#”,3crt.Session.Disconnectloopcrt.Screen.Synchronous = FalseEnd SubC:\Users\lilf\Desktop\ip.txt中的内容如下10.243.124.1 XXXX XXXX10.243.124.10 XXXX XXXX完成show ver后,查看日记记录,找到当前运行的是rgnos.bin设备,并把他的IP地址从ip.txt中去掉,新建ip1.txt升级rgos.bin:# $language = “VBScript”# $interface = “1.0″Sub MainConst ForReading = 1, ForWriting = 2, ForAppending = 8Dim fso,file1,line,paramsSet fso = C reateObject(“Scripting.FileSystemObject”)Set file1 = fso.OpenTextFile(“C:\Users\lilf\Desktop\ip.txt “,Forreading, False)crt.Screen.Synchronous = TrueDO While file1.AtEndOfStream <> Trueline = file1.ReadLineparams = Split (line)crt.Session.Connect “/TELNET ” & params(0)crt.Screen.WaitForString “sername:”crt.Screen.Send params(1) & vbcrcrt.Screen.WaitForString “assword:”crt.Screen.Send params(2) & vbcrcrt.Screen.Send “enable” & vbcrcrt.Screen.waitForString “#”crt.Screen.Send “copy tftp://10.14.192.13/R2700_94674_install.bin flash:rgos.bin” & vbcr crt.Screen.WaitForString “UPGRADING OK.”crt.Screen.WaitForString “#”crt.Screen.Send vbcrcrt.Screen.waitForString “#”,3crt.Session.Disconnectloopcrt.Screen.Synchronous = FalseEnd Subrgnos.bin的升级方法也是同样的在合适的时间重启:# $language = “VBScript”# $interface = “1.0″Sub MainConst ForReading = 1, ForWriting = 2, ForAppending = 8Dim fso,file1,line,paramsSet fso = CreateObject(“Scripting.FileSystemObject”)Set file1 = fso.OpenTextFile(“C:\Users\lilf\Desktop\ip.txt “,Forreading, False)crt.Screen.Synchronous = TrueDO While file1.AtEndOfStream <> Trueline = file1.ReadLineparams = Split (line)crt.Session.Connect “/TELNET ” & params(0)crt.Screen.WaitForString “sername:”crt.Screen.Send params(1) & vbcrcrt.Screen.WaitForString “assword:”crt.Screen.Send params(2) & vbcrcrt.Screen.Send “enable” & vbcrcrt.Screen.waitForString “#”crt.Screen.Send “reload in 1″& vbcrcrt.Screen.WaitForString “#”crt.Screen.Send vbcrcrt.Screen.waitForString “#”,3crt.Session.Disconnectloopcrt.Screen.Synchronous = FalseEnd Sub重启过程中用批量ping工具监视,重启完成后查看是否都正常说明注意事项:如果运行过程中telnet到一台不可达的设备后,则脚本会中断,刚需要人工去再次运行,故运行之前先用批量ping工具测试设备连通性自动登录脚本下面是我根据上面的文档编写的没有用户名的自动登录# $language = "VBScript"# $interface = "1.0"Sub Main'打开保存设备管理地址以及密码的文件Const ForReading = 1, ForWriting = 2, ForAppending = 8Dim fso,file1,line,paramsSet fso = CreateObject("Scripting.FileSystemObject")Set file1 = fso.OpenTextFile("C:\ip.txt",Forreading, False)crt.Screen.Synchronous = TrueDO While file1.AtEndOfStream <> True'读出每行line = file1.ReadLine'分离每行的参数IP地址密码特权密码params = Split (line)'Telnet到这个设备上crt.Session.Connect ("/TELNET " & params(0))'输入telnet用户名和密码crt.Screen.WaitForString "assword:"crt.Screen.Send "cisco" & vbcr'进特权模式crt.Screen.Send "enable" & vbcr'输入特权密码crt.Screen.WaitForString "assword:"crt.Screen.send "cisco" & vbcrcrt.Screen.waitForString "#"crt.Screen.Send "show ver" & vbcrcrt.Screen.waitForString "#"crt.Screen.Send "clear counters" & vbcr & vbcrcrt.Screen.waitForString "#" ,300crt.Session.Disconnectloopcrt.Screen.Synchronous = FalseEnd Sub四、其他示例【示例一】简单自动登录# $language = "VBScript"# $interface = "1.0"'本脚本示范:自动登录到某台3550交换机设备,自动输入远程登录密码,同时自动进入特权模式'自动输入特权密码,同时运行show version命令Sub Maincrt.Screen.Synchronous = True'通过telnet连接到192.168.1.1crt.Session.Connect "/TELNET 192.168.1.1"crt.Screen.WaitForString "Password:"crt.Screen.Send "cisco" & vbCrcrt.Screen.waitForString ">"crt.Screen.Send "enable" & vbcrcrt.Screen.WaitForString "Password:"crt.Screen.Send "cisco" & vbcrcrt.Screen.waitForString "#"crt.Screen.Send "show version" & vbcrcrt.Screen.waitForString "--More--"crt.Screen.Send " "crt.Screen.Synchronous = FalseEnd Sub【示例二】自动备份配置# $language = "VBScript"# $interface = "1.0"'本脚本示范:从一个文件里面自动读取设备IP地址,密码等,自动将设备配置备份Sub Main'打开保存设备管理地址以及密码的文件Const ForReading = 1, ForWriting = 2, ForAppending = 8Dim fso,file1,line,str1,paramsSet fso = CreateObject("Scripting.FileSystemObject")Set file1 = fso.OpenTextFile("d:\config.txt",Forreading, False)crt.Screen.Synchronous = TrueDO While file1.AtEndOfStream <> True'读出每行line = file1.ReadLine'分离每行的参数IP地址密码En密码params = Split (line)'Telnet到这个设备上crt.Session.Connect "/TELNET " & params(0)'输入telnet密码crt.Screen.WaitForString "Password:"crt.Screen.Send params(1) & vbcr'进特权模式crt.Screen.Send "enable" & vbcrcrt.Screen.WaitForString "Password:"crt.Screen.Send params(2) & vbcrcrt.Screen.waitForString "#"'备份目前Startup配置str1 = "copy startup t ftp://192.168.1.2/"str1 = str1 & "backup(" & params(0) &")" & ".cfg"crt.Screen.Send str1 & vbcrcrt.Screen.WaitForString "]?"crt.Screen.Send vbcrcrt.Screen.WaitForString "]?"crt.Screen.Send vbcr'备份完成后退出crt.Screen.waitForString "#",3crt.Session.Disconnectloopcrt.Screen.Synchronous = FalseEnd Subconfig.txt文本文件为事先编辑好的格式如:192.168.1.1 cisco cisco192.168.1.254 cisco cisco前面是IP地址,后面是telnet密码,最后是enable密码【示例三】多会话操作VBScript# $language = “VBScript”# $interface = “1.0″‘~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Sub Main()crt.screen.Synchronous = trueDim NameDim NametreDim nTabCountnTabCount = crt.GetTabCount()for index = 1 to nTabCountset tab = crt.GetTab(index)tab.activateIf tab.Session.Connected = True Then‘这里以上都没有什么可以说的,之前的文章已经介绍的很多很多了,如果有不清楚的朋友可以看本文上提供的该系列脚本的其它部分的文章链接‘从这里往下就是最最核心的部分的了:)‘获取激活会话的名称Name = tab.Caption‘开始做匹配,并根据匹配的结果输入相应命令Select Case NametreCase “你的会话的名称1″‘等待1秒钟crt.sleep 1000tab.Screen.Send “在名称1的会话中你要输入的命令1″& chr(13)‘等待1秒钟crt.sleep 1000tab.Screen.Send “在名称1的会话中你要输入的命令2″& chr(13)crt.sleep 1000……..Case “你的会话的名称2″‘等待1秒钟crt.sleep 1000tab.Screen.Send “在名称2的会话中你要输入的命令1″& chr(13)‘等待1秒钟crt.sleep 1000tab.Screen.Send “在名称2的会话中你要输入的命令2″& chr(13)crt.sleep 1000……..Case “你的会话的名称3″‘等待1秒钟crt.sleep 1000tab.Screen.Send “在名称3的会话中你要输入的命令1″& chr(13)‘等待1秒钟crt.sleep 1000tab.Screen.Send “在名称3的会话中你要输入的命令2″& chr(13)crt.sleep 1000……..‘其它情况输出”the name of this session is wrong!”Case Else MsgBox “the name of this session is wrong!”End SelectElseMsgBox “this session is not connected,can not input any command!”End IfNextEnd Sub【示例四】多会话操作2以下可以实现在已经打开的绘画窗口中,按照打开顺序输入固定的命令,即第一个窗口输入****,然后激活第二个窗口输入*****,多窗口的命令输入是解决了,但是在实际的工作中发现,这样的一个脚本存在不少的缺陷:第一,会话窗口需要按照顺序手动打开,且要按照一定的顺序打开;第二,打开的顺序一旦有错,命令就会输入错误,命令输入没有自适应性;第三,会话的打开是要输入相应的命令,可是命令的结果仍然需要手动保存【示例五】设备log保存这个脚本主要是用来将我们在第一步中打开的会话用log保存在一个我们设定的路径上,这样就可以将后续输入命令的结果自动保存在本地,方便后续的查看对比等工作,下面就让我们来看看这个“打开各个板卡log脚本”的具体的编写情况:# $language = “VBScript”# $interface = “1.0″‘~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Sub Main()crt.screen.Synchronous = true‘定义两个变量Dim NameDim nCurrentTab‘nTabCount赋值为打开的会话的总个数nTabCount = crt.GetTabCount()‘做循环for index = 1 to nTabCount‘激活第index个会话set tab = crt.GetTab(index)tab.activate‘判断log的情况并获取会话的名称‘log到路径“D:\新建文件夹\”中,并命名为“会话名称.log”If tab.Session.Connected = True ThenIf tab.Session.Logging = False ThenName = tab.Captiontab.Session.LogFileName = “D:\新建文件夹\”&Name&”.log”tab.Session.Log TrueElseIf tab.Session.Logging = True Thentab.Session.Log FalseName = tab.Captiontab.Session.LogFileName = “D:\新建文件夹\”&Name&”.log”tab.Session.Log TrueElse MsgBox “something unknown is wrong!”End IfElse MsgBox “this session is not connected,no need to be logged!”End IfNextEnd Sub【示例六】批量关闭log# $language = “VBScript”# $interface = “1.0″‘脚本开始Sub Main()‘从左到右激活每一个已经连接上的会话,并输入相关命令‘第一个连接的会话Set objCurrentTab1 = crt.GetTab(1)objCurrentTab1.ActivateIf objCurrentTab1.Session.Connected = True thenobjCurrentTab1.Screen.Send “相关命令1″& chr(13)objCurrentTab1.Screen.WaitForString “-> “objCurrentTab1.Screen.Send “相关命令2 ”& chr(13)objCurrentTab1.Screen.WaitForString “-> ”objCurrentTab1.Screen.Send “相关命令3 ”& chr(13)objCurrentTab1.S creen.WaitForString “-> ”End If‘第二个连接的会话Set objCurrentTab2 = crt.GetTab(2)objCurrentTab2.ActivateIf objCurrentTab2.Session.Connected = True thenobjCurrentTab2.Screen.Send “相关命令1″& chr(13)objCurren tTab2.Screen.WaitForString “-> “objCurrentTab2.Screen.Send “相关命令2 ”& chr(13)objCurrentTab2.Screen.WaitForString “-> “objCurrentTab2.Screen.Send “相关命令3″& chr(13)objCurrentTab2.Screen.WaitForString “-> “objCurrentTab2.Screen.Send “相关命令4″& chr(13) End if‘‘第N个连接的会话‘’脚本结束End Sub个脚本主要是用来将我们在可以一次性关闭“打开所有板卡会话脚本”中打开的会话log,这样在需要的操作完成后就可以及时的关闭log,达到控制log文件大小的作用:# $language = “VBScript”# $interface = “1.0″‘~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Sub Main()crt.screen.Synchronous = true‘定义两个变量Dim NameDim nCurrentTab‘nTabCount赋值为打开的会话的总个数nTabCount = crt.GetTabCount()‘做循环for index = 1 to nTabCountset tab = crt.GetTab(index)‘激活第index个会话tab.activate‘关闭logIf tab.Session.Connected = True ThenIf tab.Session.Logging = False ThenMsgBox “this session is already unlogged!”ElseIf tab.Session.Logging = True Thentab.Session.Log FalseElse MsgBox “something unknown is wrong!”End IfElse MsgBox “this session is not connected,no need to be unlogged!”End IfNextEnd Sub【示例七】打开会话这个脚本要实现的就是一次性的打开我们要输入不同命令的所有的会话# $language = “VBScript”# $interface = “1.0″‘~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Sub Main()crt.screen.Synchronous = true‘打开在SecureCRT中已经保存在huaye文件夹下的会话set tab1 = crt.session.Connectintab(”/s huaye/已存会话1″) set tab2 = crt.session.Connectintab(”/s huaye/已存会话2″) set tab3 = crt.session.Connectintab(”/s huaye/已存会话3″) set tab4 = crt.session.Connectintab(”/s huaye/已存会话4″)End Sub。

华为交换机配置方法

华为交换机配置方法

华为交换机配置方法华为交换机是一种高性能网络交换设备,广泛应用于企业、政府机构、教育机构等各种网络环境中。

下面是华为交换机配置的详细方法:登录华为交换机使用终端软件,如SecureCRT或PuTTY,连接到华为交换机的管理口,并输入用户名和密码进行登录。

一般情况下,用户名为admin,密码为admin。

进入系统视图华为交换机采用层级结构的管理视图,系统视图是最高层级的视图。

在登录成功后,可以通过输入system-view命令进入系统视图。

配置基本网络参数在系统视图下,可以配置华为交换机的基本网络参数,包括IP地址、子网掩码、网关和DNS服务器等。

具体命令如下:配置IP地址:interface vlanif 1,ip address 192.168.1.1 24配置网关:ip route-static 0.0.0.0 0.0.0.0 192.168.1.254 配置DNS服务器:ip dns server-address 8.8.8.8其中,vlanif 1是虚拟接口编号,192.168.1.1是华为交换机的IP地址,24是子网掩码的长度,0.0.0.0 0.0.0.0表示默认路由,192.168.1.254是网关的IP地址,8.8.8.8是DNS服务器的IP地址。

配置VLANVLAN是一种虚拟局域网技术,可以将不同的物理端口划分到不同的逻辑网络中。

华为交换机支持IEEE 802.1Q标准的VLAN。

具体命令如下:创建VLAN:vlan batch 10 20配置VLAN接口:interface vlanif 10,ip address 192.168.10.1 24配置端口所属VLAN:interface gigabitethernet 1/0/1,port link-type access,port default vlan 10其中,vlan batch 10 20是批量创建VLAN 10和VLAN 20,interface vlanif 10是VLAN 10的虚拟接口,192.168.10.1是VLAN 10的IP地址,gigabitethernet 1/0/1是物理端口的接口编号。

SecureCRT批量备份路由器设置

SecureCRT批量备份路由器设置

在日常工作中,可能面临几百台网络设备的管理,如何高速可靠的对这些设备进行管理备份下面以华为H3C为例:实测1百多台设备非常高效且容错效果好不易中断,耗时几分钟即对所有路由器配置进行了备份给出的示例脚本并非网上所流传的VBS脚本,而是用python编写的脚本,进行了大量容错处理与测试。

具有如下特点:1、在log目录下自动建立当前日期命名的文件夹,用于存放导出的配置文件2、在log目录下自动生成当前日期命名的日志文件,记录操作失败的设备3、对于不能成功连接的设备或登录失败的设备,会自动跳过,不影响后续操作,不会卡在中间,不会造成批量操作中断4、首先使用列表中用户名和密码尝试登录,若失败,则尝试使用列表中的用户名和”123456”(可在脚本中自己修改)进行登录脚本运行准备工作:1、首先建立如下目录: d:\h3cbackup\log ,此目录可配合脚本修改成其它目录2、建立list设备列表文件,文件类型为文本文件,每行为1台设备相关信息,用空格分割,如下:IP地址用户名密码192.168.1.1admin123321192.168.1.2root321123―――――――这里是分割线,下面是脚本――――――――――――――复制分割线间的内容到记事本,修改扩展名为py――――# $language = "Python"# $interface = "1.0"#本脚本用途:从一个文件里面自动读取设备IP地址,密码等,自动将设备配置备份import datetimeimport os#获取当前系统日期并格式化日期格式为YYYYMMDDtoday = datetime.date.today()monthStr="{0:02}".format(today.month)dayStr="{0:02}".format(today.day)todayStr=str(today.year)+monthStr+dayStr#打开保存设备管理地址密码列表文件filePath=crt.Dialog.FileOpenDialog("请选择设备列表文件","打开","list.txt","(*.txt)|*.txt")listfile=open(filePath,"r")crt.Screen.Synchronous = True#创建日志文件,记录操作失败设备列表logfile=open("d:\\h3cbackup\\log\\"+todayStr+".txt","w+") #在log目录下自动创建日期命名的文件夹path="d:\\h3cbackup\\log\\"+todayStrif os.path.exists(path)==False:os.mkdir(path)#numSuc记录成功操作个数,numFai记录操作失败个数numSuc=0numFai=0#读出每行,循环操作for line in listfile:#如果遇到只有换行符无内容的行直接跳过if line=="\n":continue#分离每行的参数IP地址用户名密码超级密码params=line.split()#Telnet到这个设备上并判断是否连接成功errcode = 0try:crt.Session.Connect("/TELNET "+params[0]) except ScriptError:errcode = crt.GetLastError()if errcode != 0:#连接失败跳过后续代码进入下次循环logfile.write("连接失败:"+params[0]+"\n")numFai+=1continueelif crt.Session.Connected:r=crt.Screen.WaitForStrings(['login:','Username:'],1)crt.Screen.Send(params[1]+"\r")crt.Screen.WaitForString('Password:',1)if r==1:crt.Screen.Send(params[2]+"\r")if r==2:crt.Screen.Send("123456\r")if crt.Screen.WaitForString(">",2)==False:crt.Screen.WaitForStrings(['login:','Username:'],10)crt.Screen.Send(params[1]+"\r")crt.Screen.Send(params[2]+"\r")#备份目前runing-config配置crt.Session.LogFileName = path+"\\" + params[0] + ".txt"if crt.Session.Logging==False:crt.Session.Log(True)crt.Screen.Send("dis cu\r")while crt.Screen.WaitForString("---- More ----",2):crt.Screen.Send(" ")#备份完成后退出if crt.Screen.WaitForString("return",1):crt.Screen.Send(" ")crt.Session.Disconnect()numSuc+=1else:logfile.write("未知原因:"+params[0]+"\n")numFai+=1logfile.close()crt.Screen.Synchronous = Falsecrt.Dialog.MessageBox("操作完毕\n共:"+str(numSuc)+"个设备操作成功\n共:"+str(numFai)+"个设备操作失败","",64|0)―――――――――这里是分割线――――――――――结束如不是以return 结束,可以自行修改这里的关键字if crt.Screen.WaitForString("return",1):想偷懒的赶紧试试吧附:Crt脚本运行方法,打开CRT软件―〉选择Script-〉选择脚本文件-〉选择设备列表list文件-〉等待运行结束查看结果。

基于SecureCRT的网络设备配置批量备份实践

基于SecureCRT的网络设备配置批量备份实践

操作 的网络设 备相关 信息。 由于不同厂商的设
备, 配置语言略有 区别 , 配置文件除了记录设备I P 地址
c a s e’ ’ CI S CO”
外, 还须记录设备品牌 , 最后通过脚本遍历 配置文件,
逐—对每台设备进行操作。 ‘ 配置文件格式 : 设备品牌+ 设备I P
‘ CI S CO x x . X X . x x . x x ‘ H3 C X X . X X . X X . x x
C I S C O ( i p )
c a s e e l s e
‘ 调用对思科设备操作过程
Ms g B o x” 设备类 型未知: ” &p a r a m s ( O 1 &” ! ”
e n d s e l e c t l o o p
‘ 打开保存设备管理地址以及密码的文件
‘ l o g


Di m f s o , il f e l , l i n e , s t r l , p a r a ms
d i r 为日志保存路径

S e t f s o :C r e a t e O b j e c t ( ” S c r i p t i n g . F i l e S y s t e m O b j e e t ” 、

2 01 4 年 ・ 第5 期
栏 目编辑 :罗锦莉 E - ma i l : l u o l 0 2 5 0 0 @1 6 3 c o m
c r t . S c r e e n . S e n d v b c r
c r t . S c r e e n . Wa i t F o r S t r i n g’ ’ b y t e s / s e c ) ”

securecrt连接交换机

securecrt连接交换机

1、连接好交换机的电源线,用COM口转网口线及网线与PC连接。

2、打开secureCRT,选择左上角的文件—>连接,弹出连接对话框,点击“新建会话框”按钮。

3、点击“新建回话框”按钮,弹出新建会话框向导对话框,在协议下拉框中选择“Serial”,下一步。

4、在电脑的“设备管理器”里面看,Com口转网口线的驱动安装的是哪个Com 口(这个是Com5)
5选择端口为Com5(在“设备管理器”中查看)
6、选择波特率为9600
7、去掉流控中的选择,就是将对勾全部去掉。

8、选择要连接的session
9、此时,就能使用secureCRT连上交换机了,输入正确的用户名密码就能对交换机进行配置了。

SecureCRT批量备份不同型号交换机说明及脚本配置

SecureCRT批量备份不同型号交换机说明及脚本配置

shebei.txt为设备IP地址等信息shebei.txt格式如下设备名称登录帐号登录密码超级密码IP 端口Telnet 设备型号XXX交换机123 **** **** 192.168.1.1 23 Telnet 3300在做CRT脚本的时候,不同的设备获取配置文件的命令稍微有些不通,所以这个脚本做了设备型号的判断。

(这个案例是以华为的设备为例,如果网络中存在思科或者中兴等设备可以对脚本稍作修改即可)# $language = "VBScript"# $interface = "1.0"'==========================================================================' NAME: Backup Of IP-MAN' AUTHOR: LiuBin'==========================================================================Sub MainConst DEVICE_FILE_PATH = "shebei.txt"Dim fsoSet fso = CreateObject("Scripting.FileSystemObject")Dim filSet fil = fso.OpenTextFile(DEVICE_FILE_PATH)Dim ipDim nameDim protocolDim lineDim cnxnStringWhile Not fil.AtEndOfStreamline = fil.ReadLinename = Split(line, " ")(0)username =Split(line, " ")(1)password =Split(line, " ")(2)super =Split(line, " ")(3)ip = Split(line, " ")(4)port = Split(line, " ")(5)protocol = Split(line, " ")(6)devicetype = Split(line, " ")(7)Select Case protocolCase "Telnet"cnxnString = "/TELNET " & ip & " "& portEnd Select'Logcrt.Session.LogFileName = "E:\\easy\\备份\\"+name+" "+ip+".log"‘备份的目标地址crt.Session.Log True' Connectcrt.Screen.Synchronous = TrueOn Error Resume Nextcrt.session.Connect cnxnStringIf Err.Number<>0 Thencrt.Session.Log "Connect failed"crt.Screen.Synchronous = Falsecrt.Session.Log Falseelseif devicetype="9306" or devicetype="9303" or devicetype="8505" or devicetype="3928" or devicetype="3528" or devicetype="2300" then‘判断设备型号crt.Screen.WaitForString "Username:"crt.Screen.Send username & vbCrcrt.Screen.WaitForString "Password:"crt.Screen.Send password & vbCrcrt.Screen.WaitForString ">"crt.Screen.Send "super" & vbCrcrt.Screen.WaitForString " Password:"crt.Screen.Send super & vbCrcrt.Screen.WaitForString ">"crt.Screen.Send "dis cu" & chr(13)crt.Screen.Send " "‘这个是发送空格,就是交换机打dis cu的时候需要打空格或者回车才会显示另外一页crt.Screen.Send chr(13)crt.Screen.WaitForString ">"crt.Screen.Send "quit" & chr(13)crt.Screen.Synchronous = Falsecrt.Session.Disconnectcrt.Session.Log Falseelseif devicetype="3300" thencrt.Screen.WaitForString "Username:"crt.Screen.Send username & vbCrcrt.Screen.WaitForString "Password:"crt.Screen.Send password & vbCrcrt.Screen.WaitForString ">"crt.Screen.Send "dis cu" & chr(13)crt.Screen.Send " "crt.Screen.Send chr(13)crt.Screen.WaitForString ">"crt.Screen.Send "quit" & chr(13)crt.Session.Log falsecrt.Session.Disconnect()elseif devicetype="ME60" thencrt.Screen.WaitForString "Password:"crt.Screen.Send password & vbCrcrt.Screen.WaitForString ">"crt.Screen.Send "super" & vbCrcrt.Screen.WaitForString " Password:"crt.Screen.Send super & vbCrcrt.Screen.WaitForString ">"crt.Screen.Send "dis cu" & chr(13)crt.Screen.Send " "crt.Screen.Send chr(13)crt.Screen.WaitForString ">"crt.Screen.Send "quit" & chr(13)crt.Screen.Synchronous = Falseend ifEnd IfWendfil.CloseEnd Sub。

SECURECRT软件实现华为交换机自动备份

SECURECRT软件实现华为交换机自动备份

无需脚本通过SecureCRT软件实现华为交换机全备份
首先下载中文版的SecureCRT 5.1 ,中文版更方便操作,没有中文版的也没关系,我会图示例出。

打开SecureCRT 5.1软件,新建一个交换机连接(新建应该会的吧,要是用中文版的很简单的)-----点击这个新建的连接-再点下会话选项如图1-1
1-1
出现会话选项—连接---点击登录脚本,把自动登录勾打上,期望其实解释是指当登入界面出现什么时,
所以期望后面的框,这里大家可以根据自身交换机来填,发送:这个后面填命令,例:期望:password: 发送:这里输入密码(当出现password: 时输入对应的密码),如图
1-2
如果觉得要输入的命令太少了,这也没关系,不过要用脚本了,把登录脚本的勾打上,选择脚本文件。

利用secureCRT脚本对华为交换机进行批量备份

利用secureCRT脚本对华为交换机进行批量备份

利用secureCRT脚本对华为交换机进行批量备份软件:secureCRT 7.0 作者:鲍继川邮箱:bc5367@原理价绍:利用SecrureCRT的脚本对交换机进行批量登录后记录回话即可完成备份。

首先有个交换机所有的ip,用户名,密码。

Su密码文件,用来读取。

比如e:\\easy\\allswip.txt 里面格式如下:192.168.1.10 username1 password1 supassword1192.168.1.11 username2 password2 supassword2中间是空格,以方便读取。

先telent交换机ip登录,依次自动输入username password等等。

然后dis cu 即可完成备份了。

运行效果图如下:选择脚本后执行以下代码:脚本代码如下:# $language = "JScript"# $interface = "1.0"var ForReading = 1, ForWriting = 2;var objTab= crt.GetScriptTab();crt.Screen.Synchronous = true;function main(){var fso, f,f2,tex;fso = new ActiveXObject("Scripting.FileSystemObject");f = fso.OpenTextFile("e:\\easy\\allswip.txt", 1);//读取交换机ip文件e:\\easy\\allswip.txt//var tex=f2.ReadALL();while ( f.AtEndOfStream != true ){ var str,t;str=f.Readline();params=str.split(" ");//依次登录后dis duobjTab.Session.Connect("/telnet " + params[0]);objTab.Screen.WaitForString("Username:");objTab.Screen.Send(params[1]+"\r");objTab.Screen.WaitForString( "Password:");objTab.Screen.Send(params[2] + "\r");objTab.Screen.WaitForString( ">");objTab.Screen.Send ("super 3" + "\r");objTab.Screen.WaitForString( " Password:");objTab.Screen.Send (params[3] + "\r");objTab.Screen.WaitForString( ">");objTab.Screen.Send ("sys" + "\r");objTab.Screen.WaitForString("]");//记录日志,即备份objTab.Session.LogFileName = "E:\\easy\\备份\\"+params[0]+" "+params[1]+".log"; objTab.Session.Log(true);objTab.Screen.Send("dis cu\r");//这里是发送空格哦就是那个什么more 需要的objTab.Screen.Send(" ");objTab.Screen.Send(" ");//objTab.Screen.WaitForString("@",15)objTab.Screen.WaitForString("]");//objTab.Session.Log(false);objTab.Screen.Send("quit\r");//objTab.Screen.WaitForString("]");objTab.Session.Log(false);//objTab.Screen.Send("quit\r");//objTab.Screen.WaitForString(">");//objTab.Screen.Send("save\r");//objTab.Screen.Send("y\r");objTab.Screen.WaitForString("@",2)objTab.Session.Disconnect();}}完成后发现e盘下面有E:\easy\备份这个文件夹里面都是备份的内容了。

华为交换机自动透传vbs脚本1

华为交换机自动透传vbs脚本1

单个华为交换机自动透传vlan工具:secureCRT 语言:vbs 整理:鲍继川邮箱:bc5367@gmailaaa1.Vlan.txt 文件Xxxx_93062012G1/0/0 G1/0/2 g1/0/3第一行为交换机名称第二行为vlan第三行为要透传的端口2 交换机信息文件交换机.txt1.1.1.1 用户名密码super3密码2.2.2.2 用户名密码super3密码———————————————————————————————————————3 通过读取vlan.txt 文件的第一行,找到交换机信息文件里德信息后登陆进去,取得vlan.txt 的第二行为vlan信息。

取得第三行作为交换机端口,准备透传。

完整代码如下:# $language = "VBScript"# $interface = "1.0"Sub MainConst ForReading = 1, ForWriting = 2, ForAppending = 8Dim objTab,flagon error goto 0flag=0Set objTab = crt.GetScriptTabSet fso1 = CreateObject("Scripting.FileSystemObject")Set fso4 = CreateObject("Scripting.FileSystemObject")objTab.Screen.Synchronous = Truestr1="e:/easy/vlan.txt"if not fso1.FileExists(str1) thencrt.Dialog.MessageBox "交换机透传文件不存在" & vbcrlf & _ vbcrlf & _str1 & vbcrlf & vbcrlf & _"请重新运行脚本!"exit Subend ifSet file1 = fso1.OpenTextFile(str1,1, False)line1=""line1 = Trim(file1.ReadLine)if line1="" thencrt.Dialog.MessageBox "交换机为空!"exit subend ifdim line2,line3,line4str4="E:\easy\交换机ip.txt"Set file4= fso4.OpenTextFile(str4,1, False)doline4=Trim(file4.ReadLine)if(line4="") thenexit subend ifparams=Split(line4)if(line1=params(1)) thenflag=1'msgbox(flag)exit doend ifloop until file4.AtEndOfStream=Trueif flag=0 thenmsgbox("没找到交换机")exit subend ifline2 = Trim(file1.ReadLine)line3 = Trim(file1.ReadLine)l=Split(line3)if(line2="")thenmsgbox("vlan为空")exit Subend ifif(line3="")thenmsgbox("端口为空")exit Subend ifobjTab.session.LogFileName = "e:easy\log\" & Date & "\" & params(0) & ".txt"objTab.session.Log(true)'Telnet到这个设备上objTab.Session.Connect "/TELNET " & params(0)objTab.Screen.Synchronous = TrueobjTab.Screen.WaitForString "Username:"objTab.Screen.Send params(1) & chr(13)objTab.Screen.WaitForString "Password:"objTab.Screen.Send params(2) & chr(13)objTab.Screen.WaitForString ">"objTab.Screen.Send "super 3" & chr(13)objTab.Screen.WaitForString " Password:"objTab.Screen.Send params(3) & chr(13)objTab.Screen.WaitForString ">"objTab.Screen.Send "sys" & chr(13)objTab.Screen.WaitForString "]"skey=InStr(params(1),5)select case skeycase 0crt.Screen.Send "vlan ba " & line2 & chr(13)for i=0 to UBound(l)objTab.Screen.WaitForString "]"objTab.Screen.Send "int "& l(i)&chr(13)objTab.Screen.WaitForString "]"objTab.Screen.Send "port tr al vl "&line2&chr(13)objTab.Screen.WaitForString "]"objTab.Screen.Send "quit"&chr(13)nextcase elseobjTab.Screen.Send "vlan " & line2 & chr(13)for i=0 to UBound(l)objTab.Screen.WaitForString "]"objTab.Screen.Send "int "& l(i)&chr(13)objTab.Screen.WaitForString "]"objTab.Screen.Send "port tr per vl "&line2&chr(13)objTab.Screen.WaitForString "]"objTab.Screen.Send "quit"&chr(13)nextend selectobjTab.Screen.WaitForString "]"objTab.Screen.Send "quit" & chr(13)objTab.Screen.WaitForString ">"objTab.Screen.Send "sa" & chr(13)'objTab.Screen.WaitForString "Are you sure to continue?[Y/N]"'objTab.Screen.WaitForString "@",1objTab.Screen.Send "y" & chr(13)objTab.Screen.WaitForString "#", 2objTab.Session.Disconnectfile1.Close()Call objTab.Session.Log(False)objTab.Screen.Synchronous = Falseend Sub实际运行效果如下:************************************************************ All rights reserved (2003-2009) ** Without the owner's prior written consent, ** no decompiling or reverse-engineering shall be allowed. ** Notice: ** This is a private communication system. ** Unauthorized access or use may lead to prosecution. ************************************************************Login authenticationUsername:_9306Password:Info: The max number of VTY users is 10, and the numberof current VTY users on line is 1.<_S9306>super 3Password:Warning: Now user privilege is level 3, and only those commands whose level is equal to or less than this level can be used.Privilege note: 0-VISIT, 1-MONITOR, 2-SYSTEM, 3-MANAGE<_S9306>sysEnter system view, return user view with Ctrl+Z.[_S9306]vlan ba 2016[_S9306]int g1/0/6[_S9306-GigabitEthernet1/0/6]port tr al vl 2016[_S9306-GigabitEthernet1/0/6]quit[_S9306]quit<_S9306>saThe current configuration will be written to the device. Continue? [Y/N]:yNow saving the current configuration to the device...Info: Succeeded in saving the current configuration to the master board device..[文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意!]。

SecureCRT登录对多台H3C设备进行配置自动备份

SecureCRT登录对多台H3C设备进行配置自动备份

版权说明Copyright ©2006-2007 杭州华三通信技术有限公司及其许可者 版权所有,保留一切权利。

未经本公司书面许可,任何单位和个人不得擅自摘抄、复制本书内容的部分或全部,并不得以任何形式传播。

H3C 、、Aolynk 、、H 3Care 、、TOP G 、、IRF 、NetPilot 、Neocean 、NeoVTL 、SecPro 、SecPoint 、SecEngine 、SecPath 、Comware 、Secware 、Storware 、NQA 、VVG 、V 2G 、V n G 、PSPT 、XGbus 、N-Bus 、TiGem 、InnoVision 、HUASAN 、华三均为杭州华三通信技术有限公司的商标。

对于本手册中出现的其它公司的商标、产品标识及商品名称,由各自权利人拥有。

保密承诺本次服务中获取客户的保密信息仅用于H3C 公司向客户交付涉及H3C 解决方案与产品服务(网络规划、设计、实施、运维、优化)。

未经客户同意,H3C 公司承诺对保密信息不用于其他与客户服务无关的用途,不向任何与客户服务无关的第三方披露。

Any Confidential Information acquired in service will be used by H3C for the solely purpose of providing solutions and products service (networkarchitecture, design, execute, running and maintenance, and optimization). Without the consent of customer, H3C shall not use the ConfidentialInformation in any way that is not related to Customer’s service, or disclose to any third party that is not relevant to Customer’s service.杭州华三通信技术有限公司Un Re gi st er ed使用SecureCRT 登录对多台H3C 设备进行配置自动备份版本建议:SecureCRT 版本用6.2以上版本 使用范围:该文档适用于H3C 网络设备一、 对于采用用户名-密码或用户名-密码-超级密码的情形。

华为交换机配置备份与还原

华为交换机配置备份与还原

华为交换机配置备份与还原
备份配置:
1、直接进⼊主题交换机通过console线连接,使⽤xshell软件,设置serial(查看相关⽂章,度娘上有)
2、启动机器进⼊配置!
3、更改名称、进⼊aaa模式、打开ftp服务器ftp-server enable,设置访问⽤户名、密码,更改模式等保存。

4、不好意思上⾯的有点错误补充⼀下,
5、使⽤windows终端命令(看好⽬录,这是保存配置的位置,要不到时候找不到)
进⼊之后执⾏get flash:/config.cfg backup.cfg 前⾯的是⽂件位置后⾯的是备份的⽂件名字,get为下载命令。

恢复配置:
1、前⾯都是相同的不做论述
2、只是后⾯的get更改为put后⾯跟着备份的配置⽂件,使⽤dir查看是否上传成功。

3、然后应⽤配置重启(没有截图引⽤⼀下别的⼤神的⽂件)。

如何使用SecureCRT导出华为,思科设备配置

如何使用SecureCRT导出华为,思科设备配置

如何使用Secure CRT导出华为,思科设备配置
华为,思科的网络设备配置,是需要经常备份,以防特殊情况丢失。

下面是店铺收集整理的如何使用Secure CRT 导出华为,思科设备配置,希望对大家有帮助~~
使用Secure CRT 导出华为,思科设备配置的方法
工具/原料
Secure CRT
方法/步骤
为了方便举例,使用一台装有 LINUX 的机器说明
连接上设备进入就要看设备配置的地方,可以先输入命令,但是不要按回车
点击文件--会话日志
不要选择原始回话日志,这样会把你输入的空格和显示出来的类似“press any key to continue" 或者 --More-- 也放进去,这样就不美观,而且段落不连贯看起也费劲
选择保存日志的名字和路径,通常日志的扩展名都是 .log, 这个暂时不要改,你可以之后改成TXT,或是其它文档格式。

点击保存
现在开始输入查看配置的命令,华为,H3C简写为dis cu ,思科为 sh run
因为有的配置很长,所以要不停的敲击空格键,直至出现提示符完毕
现在就不要输其它命令了,现在取消会话日志选项
到刚才保存路径查看下刚才保存的配置,在Secure CRT下会分段的地方,不粗现分段了,也没有--MORE-- 提示,和按了空格的提示
如何使用Secure CRT 导出华为,思科设备配置。

使用 SecureCRT 批处理备份锐捷交换机配置脚本

使用 SecureCRT 批处理备份锐捷交换机配置脚本

使用SecureCRT 批处理备份锐捷交换机配置脚本已测试了SecureCRT 脚本批量执行备份锐捷交换机配置文件的功能。

此脚本可以根据你的需要修改,改成其他功能,希望有需要的同学扩展思路。

使用SecureCRT 批处理备份所有交换机配置的脚本,使用方法:1、在 C 盘新建一个文件夹,命名为SW_bak,打开文件夹,新建一个文本文件swlist.txt,编辑并保存这个文本文件.每行输入4 列分别是:交换机IP 用户名密码enable密码;例如:192.168.11.1 root password password192.168.12.1 root password password(有多少交换机就写多少行)2、新建一个文本文件,将下面的代码(两条分割线内的内容,不包括分割线)复制到文本文件内,保存关闭。

将文本文件重命名为:备份交换机配置批处理.vbs# $language ="VBScript"# $interface = "1.0"'本脚本示范:从一个文件里面自动读取设备IP 地址,密码等,自动将设备配置备份Sub Main'打开保存设备管理地址以及密码的文件Const ForReading = 1, ForWriting = 2, ForAppending = 8Dim fso,file1,line,str1,paramsSet fso = CreateObject("Scripting.FileSystemObject")Set file1 = fso.OpenTextFile("c:\ SW_bak\swlist.txt ",Forreading,False)crt.Screen.Synchronous = TrueDO While file1.AtEndOfStream <> True'读出每行line = file1.ReadLine'分离每行的参数交换机IP 用户名密码enable密码;params = Split (line)crt.session.LogFileName = " c:\ SW_bak\log\20120713\" & params(0) & ".txt"crt.session.Log(true)'Telnet 到这个设备上crt.Session.Connect "/TELNET " & params(0)'输入Username 密码crt.Screen.WaitForString " Username:"crt.Screen.Send params(1) & vbcr'输入telnet 密码crt.Screen.WaitForString "Password:"crt.Screen.Send params(2) & vbcr'进特权模式crt.Screen.Send "enable" & vbcrcrt.Screen.WaitForString "Password:"crt.Screen.Send params(3) & vbcrcrt.Screen.waitForString "#"'备份目前runing-config 配置str1 = "show run"crt.Screen.Send str1 & vbcrcrt.Screen.WaitForString " --More-- "crt.Screen.Send " & vbcr " '备份完成后退出crt.Screen.waitForString "!" & vbcrlf & "end"crt.Session.Disconnect loopcrt.Screen.Synchronous = False End Sub复制备份交换机配置批处理.vbs 到c:\ SW_bak\ 文件夹内;3、在c:\ SW_bak\ 文件夹中新建一个log 文件夹,用于保存配置文件。

华为交换机(LANSWITCH)连接方法

华为交换机(LANSWITCH)连接方法

一、首先将电脑连接交换机C ONSOLE口,这里介绍终端仿真程序secureCRT使用方法
1、电脑安装secureCRT(或是使用电脑自带的超级终端),在secureCRT建一个新的连接(文
件——快速连接),详细配置如下图:
协议选择Serial
端口COM,需要与电脑配置同一个COM口
波特率:9600,其他参数默认
2、配置电脑的COM1。

我的电脑——属性——设备管理器——端口——端口属性(务必将
电脑的端口与secureCRT配置的端口保持一致,否则无法连接)
3、
如果左上角变绿,说明连接成功。

4、华为交换机指令:
dis cu 查看全局配置
sys 进入配置模式
int GigabitEthernet1/0/4 进入交换机端口1/0/4
dis th 查看端口的配置
shutdown 闭掉该端口
undo shutdown 解闭端口
如下:
[SDZOZ-MC-CMNET-SW10-S9312-ZXL2]int gi 1/0/4
[SDZOZ-MC-CMNET-SW10-S9312-ZXL2-GigabitEthernet1/0/4]dis th
#
interface GigabitEthernet1/0/4
undo negotiation auto
description TO-[BeiEr]-PTN-GongYingCangKu
eth-trunk 3
carrier down-hold-time 200
#
return
[SDZOZ-MC-CMNET-SW10-S9312-ZXL2-GigabitEthernet1/0/4]。

交换机自动登录、批量备份、批量配置以及自动透传vlan的实现

交换机自动登录、批量备份、批量配置以及自动透传vlan的实现

交换机自动登录、批量备份、批量配置以及自动透传vlan的实现作者:鲍继川时间:2013.5.13目录1前言2.交换机自动登录实现3..交换机自动批量备份实现4..交换机批量配置实现5.交换机自动透传vlan实现5.1 对交换机编号,记录接口信息5.2 生成交换机接口信息矩阵5.3 实现深度优先算法和测试路径5.4 生成ie输入界面5.5 实现两个交换机之间透传vlan6.总结7.附录代码备注:文档所有的代码针对华为系列交换机,可能有些交换机3526等等,在执行保存时会出错,所有程序如果看懂能自己改就非常好了。

这需要学习javascript编程和securecrt编程,我是边写边学的。

我以前所有的代码全部用vbscript写的,后来考虑到vbscript循环控制不好,全部用javascript改写了一遍。

后来我自己开专线业务,比如F400自动开局,9806H开局等等,全部用可视化的ie界面开局。

非常自动化,也非常好用,用自己写的东西开局,非常流畅。

联系电话:1899667799 邮箱:bc5367@1前言自从进入事数据方面工作以来,不断的感觉到了对交换机和其他设备数据操作的繁琐和重复。

很多业务的开通都是重复性的操作,只是几个参数的不同。

为了节省时间和提高效率,通过不断的摸索和学习,查看各种资料,结合编程和算法,慢慢研究出对设备的自动批量控制和自动开通业务。

比如,从交换机A透传vlan到交换机B,我们不再需要考虑中间的交换机走向,而让程序自动寻路去透传vlan。

下面就交换机为例详细阐述如何实现对交换机的自动登录,批量配置,批量备份,以及自动透传vlan。

2.交换机自动登录实现假设交换机的拓扑图如下:在图中我们一共可以看到9个交换机分别为A、B、C、D、E、F、G、H、I,然后对交换机的信息保存为以下txt格式文件,每行分别依次为交换机的登录ip、用户名、密码、二级密码,中间用空格隔开。

如allswip.txt:100.100.100.X 用户名A 密码A 二级密码A100.100.100.X 用户名B 密码B 二级密码B100.100.100.X 用户名C 密码C 二级密码C …………………………………………………………………………………………………………等等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

下面这个脚本能批量对交换机做配置备份工作,在使用时请根据情况更改脚本中交换机的登录密码如下位置
crt.Screen.WaitForString ">"
crt.Screen.Send "su" & VbCr
crt.Screen.WaitForString "Password:"
crt.Screen.Send "huawei" & VbCr
crt.Screen.WaitForString ">"
其中,name.txt文件就是一行一个交换机的IP地址,如:
172.16.1.1
172.16.1.2
------------------------------------------------------------请将下列脚本保存为*.VBS文件-----
# $language = "VBScript"
# $interface = "1.0"
' This script shows how to read in a file, and it demonstrates how to
' perform some preprocessing on data (splitting the file data into
' separate strings) before sending it to a server.
' Constant used by OpenTextFile()
Const ForReading = 1
Sub main
' Open a file, read it in & send it one line at a time
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("d:\name.txt", ForReading, 0)
Dim line, params
Do While f.AtEndOfStream True
' Read each line of the printers file.
'
line = f.Readline
' Split the line up. Each line should contain 3 space-separated parameters
params = Split( line )
' params(0) holds parameter 1, params(1) holds parameter 2, etc.
'
' Send "mycommand" with the appended parameters from the file with
' an appended CR.
'
crt.Screen.Send "telnet " & params(0) & " " & vbCR
'wait for switch prompt
crt.Screen.WaitForString "Username:"
crt.Screen.Send "admin" & VbCr
' Wait for a tring that looks like "password: " or "Password: "
crt.Screen.WaitForString "Password:"
' Send your password followed by a carriage return
crt.Screen.Send "admin" & VbCr
crt.Screen.WaitForString ">"
crt.Screen.Send "su" & VbCr
crt.Screen.WaitForString "Password:"
crt.Screen.Send "huawei" & VbCr
crt.Screen.WaitForString ">"
' execute some commands
crt.Screen.Send "tftp 172.16.1.250 put vrpcfg.cfg " & params(0) & ".txt " & VbCr crt.Screen.Send "quit" & VbCr
'leave out switch,stay in linux
crt.Screen.WaitForString "#", 3
' Cause a 3-second pause between sends by waiting for something "unexpected"
' with a timeout value.
Loop
End Sub。

相关文档
最新文档