SecureCRT對于每一位網(wǎng)工來說并不陌生,相信每個網(wǎng)工的電腦上肯定都裝著這款軟件。以前剛開始玩的時候覺得就是普通的仿真終端程序而已,其實它軟件還有更加強大的腳本功能,SecureCRT可以支持VBScript、JAVAscript、Python/ target=_blank class=infotextkey>Python腳本語言等等。通過腳本我可以來拓展更多豐富的功能,比如可以通過腳本實現(xiàn)自動化的命令執(zhí)行。
剛巧社區(qū)里面的小伙伴最近在做一個大項目,有上百臺交換機配置需要收集。剛好最近有研究,于是就搞起來了。 今天我們來說說如何使用SecureCRT制作一個自動化批量巡檢交換機的腳本,這里我們用VBScript腳本語言來制作,官方對這個支持的也挺好的,還有幫助文檔,而且網(wǎng)上關(guān)于用VBScript編寫CRT腳本的教程也很多,遇到問題還可以百度下。通過腳本自動化的執(zhí)行提升工作效率,在也不用自己來搬磚了。
制作腳本;
這里我們以cisco交換機為例子,講解下沒段代碼的含義,然后您可以根據(jù)附件提供的代碼根據(jù)下面的教程自己進行修改腳本,適應(yīng)自己的環(huán)境。腳本適用于可以通過CRT登陸設(shè)備,比如華三、華為交換機或在linux操作系統(tǒng)。
1、首先我們需要讓腳本來自動幫我們登錄交換機并進入到enable模式,請看下面的腳本:
crt.Screen.WaitForString ("Username:") ‘等待字符串Username出現(xiàn),區(qū)分大小寫
crt.screen.Send("cisco")&chr(13) ‘發(fā)送字符串cisco并回車
crt.Screen.WaitForString "Password: "
crt.Screen.Send "cisco" & chr(13)
crt.Screen.WaitForString ">"
crt.Screen.Send "en" & chr(13)
crt.Screen.WaitForString "Password: "
crt.Screen.Send "cisco" & chr(13)
注:設(shè)備的賬號密碼可以在上面的腳本中修改發(fā)送的字符串即可
2、通常我們都會在crt界面點擊記錄會話日志,這里我們就不需要手動,用腳本就解決了。
crt.session.LogFileName="192.168.1.1.log" ‘設(shè)置記錄的日志文件名稱
crt.session.Log(true) ‘開始記錄日志
3、通常需要我們來手敲的命令,用下面的腳本就可以讓crt自己敲起來了。
crt.Screen.Send "show clock" & chr(13)
crt.Screen.WaitForString "#"
crt.Screen.Send "show running-config" & chr(13)
nextmore ‘調(diào)用自定義函數(shù)
crt.Screen.Send "show version" & chr(13)
nextmore ‘調(diào)用自定義函數(shù)
那么如果想加入其它命令怎么辦呢?直接在這塊腳本上附加上下面的代碼即可。
crt.Screen.Send "show vlan" & chr(13)
crt.Screen.WaitForString "#"
如果輸出內(nèi)容較多會出現(xiàn)more,只要稍作修改,調(diào)用我們自定義的函數(shù)即可。
crt.Screen.Send "show vlan" & chr(13)
nextmore
4、我們知道當(dāng)crt界面不能輸出所有信息的時候,就會出現(xiàn)“—more—”的字符串,這個時候需要手動執(zhí)行空格或者回車查看更多的內(nèi)容,但是因為設(shè)備的不通需要執(zhí)行的空格數(shù)量又不確定,于是我們這里就編寫一個循環(huán)語句,當(dāng)遇到More字符串出現(xiàn)的時候就自動發(fā)送空格。由于很多命令都會出現(xiàn)類似的情況,于是我們可以將整循環(huán)編寫為一個函數(shù),用于調(diào)用即可。以簡化我們的代碼。
編寫函數(shù):
Function nextmore
do while ( crt.screen.waitforstring("--More--",3)=true)
crt.screen.Send(chr(32))
loop
End Function
腳本含義:當(dāng)3秒內(nèi)等等到字符串"--More--"的出現(xiàn)則執(zhí)行下面的語句發(fā)送一個chr(32)(空格鍵的ASCII值),while判斷條件成立執(zhí)行,不成立則退出循環(huán)。
5、關(guān)閉日志記錄,當(dāng)然這個操作我們也可以自動化。
crt.screen.waitforstring("#")
crt.session.Log(false)
注:當(dāng)?shù)却?ldquo;#”出現(xiàn),也就是命令都執(zhí)行完畢后,停止日志記錄。
6、登錄下一臺交換機執(zhí)行上面操作,一臺設(shè)備的所有操作都做完,下面我們要讓這些腳本自動一臺一臺的去執(zhí)行。這里我們就需要再次用到循環(huán)語句。
for i=1 to 254 ‘循環(huán)從1到254依次循環(huán),i的值會自動遞增
dim ip ‘創(chuàng)建變量ip
ip="192.168.1."&i ‘定義變量,作為IP地址,ip隨著循環(huán)變化而變
crt.screen.Send("te.NET "&ip)&chr(13) ‘telnet登錄交換機
'判斷是否telnet成功,如果31秒內(nèi)出現(xiàn)Username登錄則執(zhí)行下面語句
if(crt.Screen.WaitForString ("Username:",31)=true) then
'下面語句為條件成立后執(zhí)行的語句內(nèi)容
crt.session.LogFileName=ip&".log" ‘以IP地址作為日志的文件名
crt.session.Log(true)
。。。。
end if ‘if語句結(jié)束
next ‘和for循環(huán)對應(yīng),執(zhí)行下一次循環(huán)
腳本知識
crt.Screen.Send 發(fā)送一個字符串
crt.Screen.WaitForString 等待字符串出現(xiàn),如果匹配到字符串后執(zhí)行下面的操作
chr(13) 這是回車鍵的ASCII碼值
chr(32) 這是空格鍵的ASCII碼值
& VBScript里面的連接字符串連接符
' 注釋行符號,在文本前打上英文的單引號后,表示此行語句不被執(zhí)行
Do...Loop 語句
運行循環(huán),當(dāng)條件為 true 或者直到條件為 true 時。
Do while(判斷條件)
執(zhí)行語句
Loop
For...Next 語句
運行一段語句指定的次數(shù)
For i=1 to 254
執(zhí)行語句
Next
IF語句
假如你希望在條件為 true 時執(zhí)行一系列的代碼,可以使用這個語句。
If (判斷條件) then
執(zhí)行語句
End if
如果還有不明白的地方可以跟帖回復(fù),或者百度下去學(xué)習(xí)下VBScript腳本語言,腳本語言比較簡單,短時間可以學(xué)會基礎(chǔ),有基礎(chǔ)了搞個crt腳本是沒問題的。