SecureCRT對于每一位網工來說并不陌生,相信每個網工的電腦上肯定都裝着這款軟體。以前剛開始玩的時候覺得就是普通的仿真終端程式而已,其實它軟體還有更加強大的腳本功能,SecureCRT可以支援VBScript、javascript、python腳本語言等等。通過腳本我可以來拓展更多豐富的功能,比如可以通過腳本實作自動化的指令執行。
剛巧社群裡面的小夥伴最近在做一個大項目,有上百台交換機配置需要收集。剛好最近有研究,于是就搞起來了。 今天我們來說說如何使用SecureCRT制作一個自動化批量巡檢交換機的腳本,這裡我們用VBScript腳本語言來制作,官方對這個支援的也挺好的,還有幫助文檔,而且網上關于用VBScript編寫CRT腳本的教程也很多,遇到問題還可以百度下。通過腳本自動化的執行提升工作效率,在也不用自己來搬磚了。
制作腳本;
這裡我們以cisco交換機為例子,講解下沒段代碼的含義,然後您可以根據附件提供的代碼根據下面的教程自己進行修改腳本,适應自己的環境。腳本适用于可以通過CRT登陸裝置,比如華三、華為交換機或在linux作業系統。
1、首先我們需要讓腳本來自動幫我們登入交換機并進入到enable模式,請看下面的腳本:
crt.Screen.WaitForString ("Username:") ‘等待字元串Username出現,區分大小寫
crt.screen.Send("cisco")&chr(13) ‘發送字元串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)
注:裝置的賬号密碼可以在上面的腳本中修改發送的字元串即可
2、通常我們都會在crt界面點選記錄會話日志,這裡我們就不需要手動,用腳本就解決了。
crt.session.LogFileName="192.168.1.1.log" ‘設定記錄的日志檔案名稱
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 ‘調用自定義函數
crt.Screen.Send "show version" & chr(13)
nextmore ‘調用自定義函數
那麼如果想加入其它指令怎麼辦呢?直接在這塊腳本上附加上下面的代碼即可。
crt.Screen.Send "show vlan" & chr(13)
crt.Screen.WaitForString "#"
如果輸出内容較多會出現more,隻要稍作修改,調用我們自定義的函數即可。
crt.Screen.Send "show vlan" & chr(13)
nextmore
4、我們知道當crt界面不能輸出所有資訊的時候,就會出現“—more—”的字元串,這個時候需要手動執行空格或者回車檢視更多的内容,但是因為裝置的不通需要執行的空格數量又不确定,于是我們這裡就編寫一個循環語句,當遇到More字元串出現的時候就自動發送空格。由于很多指令都會出現類似的情況,于是我們可以将整循環編寫為一個函數,用于調用即可。以簡化我們的代碼。
編寫函數:
Function nextmore
do while ( crt.screen.waitforstring("--More--",3)=true)
crt.screen.Send(chr(32))
loop
End Function
腳本含義:當3秒内等等到字元串"--More--"的出現則執行下面的語句發送一個chr(32)(空格鍵的ASCII值),while判斷條件成立執行,不成立則退出循環。
5、關閉日志記錄,當然這個操作我們也可以自動化。
crt.screen.waitforstring("#")
crt.session.Log(false)
注:當等待到“#”出現,也就是指令都執行完畢後,停止日志記錄。
6、登入下一台交換機執行上面操作,一台裝置的所有操作都做完,下面我們要讓這些腳本自動一台一台的去執行。這裡我們就需要再次用到循環語句。
for i=1 to 254 ‘循環從1到254依次循環,i的值會自動遞增
dim ip ‘建立變量ip
ip="192.168.1."&i ‘定義變量,作為IP位址,ip随着循環變化而變
crt.screen.Send("telnet "&ip)&chr(13) ‘telnet登入交換機
'判斷是否telnet成功,如果31秒内出現Username登入則執行下面語句
if(crt.Screen.WaitForString ("Username:",31)=true) then
'下面語句為條件成立後執行的語句内容
crt.session.LogFileName=ip&".log" ‘以IP位址作為日志的檔案名
crt.session.Log(true)
。。。。
end if ‘if語句結束
next ‘和for循環對應,執行下一次循環
腳本知識
crt.Screen.Send 發送一個字元串
crt.Screen.WaitForString 等待字元串出現,如果比對到字元串後執行下面的操作
chr(13) 這是Enter鍵的ASCII碼值
chr(32) 這是空格鍵的ASCII碼值
& VBScript裡面的連接配接字元串連接配接符
' 注釋行符号,在文本前打上英文的單引号後,表示此行語句不被執行
Do...Loop 語句
運作循環,當條件為 true 或者直到條件為 true 時。
Do while(判斷條件)
執行語句
Loop
For...Next 語句
運作一段語句指定的次數
For i=1 to 254
執行語句
Next
IF語句
假如你希望在條件為 true 時執行一系列的代碼,可以使用這個語句。
If (判斷條件) then
執行語句
End if
如果還有不明白的地方可以跟帖回複,或者百度下去學習下VBScript腳本語言,腳本語言比較簡單,短時間可以學會基礎,有基礎了搞個crt腳本是沒問題的。