地址:http://hi.baidu.com/tuyah/blog/item/044dec11aea55218b8127b47.html/cmtid/f9fc9812b474bbc2c2fd78e5
路由器批量自动巡检脚本v1.0
最近更新版本下载:v2.1 (2009-5-22)
进去点freedownload即可等待30秒下载(2009-6-20)
具体更新内容请查看那原帖:v1.1 v1.2 v1.3 v2.0 v2.1
2009-3-3
1.需要在data文件中输入要巡检设备的ip地址,端口,login用户名,login密码,
enable密码,并且以空格或制表隔开;
2.将巡检的设备保存成文件ip_log.txt;
3.如果列表中的设备不可达或者因为密码错误等原因登陆不上去,会产生日志信息,
保存在debug.txt文件中以便查阅;
4.可以自行在脚本中定义巡检需要输入的命令;
注意:
1.目前仅支持出login字样的登陆;
2.目前仅支持MORE翻页;
3.使用前先将bat文件中的crt路径改为本机的crt安装路径;
4.SecureCRT 5.0.5测试通过;
====================需要巡检的设备放到data.txt文件中=================
192.168.1.1 23 admin admin admin
192.168.1.100 23 admin admin admin
==========================自动运行bat文件=========================
@echo off
rem 把这个路径改成crt的安装路径即可
"d:/Program Files/SecureCRT/SecureCRT.EXE" /SCRIPT xunjian.js
=====================JS脚本文件(xunjian.js)=========================
# $language = "JScript"
# $interface = "1.0"
//-------------------------------------------------
// Name: 自动巡检脚本
// date: 2009-3-2
// ver: 0.1
// author: 2楼水饺
//-------------------------------------------------
function main()
{
//================================================
//脚本启动项:
// 可以改动的有:debug开关--打开以后有提示和日志
// cmd[x]命令集--要执行的命令
//================================================
//debug开关
var isdebug = true;
//定义要执行的命令
var cmd = new Array();
cmd[0] = "show run";
cmd[1] = "show ver";
cmd[2] = "show ip route";
cmd[3] = "show int"
//文档存放路径
var DATA = "data.txt";
var debugfile = "debug.txt"; //这个是脚本的debug文件,脚本出错放在这里
var logfile; //每个设备一个show run文件名
//定义设备和设备参数存放的数组
var devices = new Array();
var params = new Array();
//定义循环变量
var i_cmd,i_device;
//其他变量定义
var mflag; //标记是否还有---more---
var re; //正则表达式
//定义文件对象
var fso, fso_data, data_fi, debug_fi;
fso = new ActiveXObject("Scripting.FileSystemObject");
fso_data = new ActiveXObject("Scripting.FileSystemObject");
fso.CreateTextFile(debugfile);
debug_fi = fso.OpenTextFile(debugfile, 2, true); //建立并打开脚本的debug文件
//将数据文件内容存到devices数组中,每一行作为一个设备
try
{
data_fi = fso_data.OpenTextFile(DATA, 1, true); //打开数据文件
devices = data_fi.ReadAll().split("/r/n"); //读取每一行
}
catch (E)
{
if (isdebug)
{
crt.Dialog.MessageBox(DATA + " is empty, script terminated.", "Error", 16 | 0);
writeLog(debug_fi, DATA + " is empty, script terminated.");
}
crt.quit();
}
//for (i=0; i<devices.length; i++)
//{
// crt.Dialog.MessageBox(devices[i], "test", 64 | 0);
//}
if (isdebug)
{
writeLog(debug_fi, "Script Start.");
}
//^^^^^^^^^^^^^^^脚本启动2009-3-3^^^^^^^^^^^^^^
//================================================
//根据devices数组中存的设备地址信息登陆设备
//并且将数据存入相应的文件,如果出错,则在日志
//中打印出错误信息,然后继续下一个设备操作
//================================================
for (i_device=0; i_device<devices.length; i_device++ )
{
//读取各字段
re = //s+/; //匹配空白符号(tab,空格,回车等等)一次或者多次
params = devices[i_device].split(re);
//for (i=0; i<params.length; i++)
//{
// crt.Dialog.MessageBox(params[i], "test", 64 | 0);
//}
//遇到空行
if (params[0]=="")
{
continue;
}
//打开屏幕同步
crt.screen.Synchronous = true;
//自动连接
if (!autoConnect(params[0], params[1], params[2], params[3], params[4]))
{
if (isdebug)
{
writeLog(debug_fi, params[0] + ":" + params[1] + " connect failed.");
crt.Dialog.MessageBox(params[0] + ":" + params[1] + " connect failed.", "Warnning", 48 | 0);
}
continue;
}
//命名log文件,打开log,
logfile = params[0] + "_log.txt";
try
{
crt.Session.LogFileName = logfile;
crt.Session.Log(1);
}
catch (E)
{
crt.Dialog.MessageBox(params(0) + " logging failed.", "Warnning", 48 | 0);
writeLog(debug_fi, params[0] + " logging failed.");
continue;
}
//执行命令
//清屏,发送一堆回车先
for (var i=0; i<5; i++)
{
crt.Screen.Send("/n");
crt.Screen.WaitForStrings("#", 3);
}
//这个才是发送命令
//re = /more/[i];
for (i_cmd=0; i_cmd<cmd.length; i_cmd++)
{
crt.Screen.Send(cmd[i_cmd] + "/n");
while(true)
{
mFlag = crt.Screen.WaitForStrings("MORE", 5);
if (mFlag)
{
//crt.Sleep(1000);
crt.Screen.Send(" ");
}
else
{
break;
}
}//end while
}
//断开连接
crt.Session.Disconnect();
//关闭屏幕同步
crt.screen.Synchronous = false;
//关闭log
crt.Session.Log(0);
}
writeLog(debug_fi, "Script finished.");
crt.Dialog.MessageBox("Script finished.", "Script", 64 | 0);
//debug_fi.close;
crt.quit();
}
//-------------------------------------------------
// Name: writeLog,将脚本debug信息写入文件
// date: 2008-2-28
// ver: 1.0
//-------------------------------------------------
function writeLog(ts, str)
{
var tmpTime = new Date();
ts.WriteLine(tmpTime.toString() + "/t" + str);
}
//-------------------------------------------------
// name: autoConnect,telnet登陆设备
// date: 2009-3-3
// ver: 1.0
//-------------------------------------------------
function autoConnect(ip, port, login, pass, enpass)
{
//连接设备
try
{
crt.session.Connect("/TELNET " + ip + " " + port);
}
catch (E)
{
return false;
}
if(!crt.Screen.WaitForStrings("ogin:", 5))
{
crt.Screen.Send("/n");
if (!crt.Screen.WaitForStrings("sername:", 5))
{
return false;
}
}
// 输入用户名
crt.Screen.Send(login + "/n");
if(!crt.Screen.WaitForStrings("assword:", 5)){
return false;
}
// 输入密码
crt.Screen.Send(pass + "/n");
if(!crt.Screen.WaitForStrings(">", 5)){
return false;
}
// 进入enable模式
crt.Screen.Send("enable/n");
if(!crt.Screen.WaitForStrings("assword:", 5)){
return false;
}
// 输入enable密码
crt.Screen.Send(enpass + "/n");
if(!crt.Screen.WaitForStrings("#", 5)){
return false;
}
return true;
}