SecureCRT指令碼環境類(python)

2021-12-30 07:39:18 字數 4289 閱讀 3407

重構看的七七八八了,感覺應該練練手,自己打包乙個securecrt的環境類。不過暫時沒讓我想到如何將這個類放在檔案中,然後每次寫指令碼的時候import進來就好了,等有空再想想怎麼解決。

所以現在還是只能複製貼上後用。

其實再寫個裝置類,然後從裝置類中呼叫crt環境類,就可以達到裝置相關的東西和環境分開的效果。以後如果沒有crt了,只要把crt環境類換掉就行了。

沒有打包log功能,這個類是我用來直接在記憶體中處理回顯字串用的,所以不需要log。

# $language = "python"

# $inte***ce = "1.0"

class crtenv():

@staticmethod

def promptbox(szmessage, sztitle):

return crt.dialog.prompt(szmessage, sztitle, "", true)

@staticmethod

def inputbox(szmessage, sztitle):

return crt.dialog.prompt(szmessage, sztitle, "", false)

@staticmethod

def messagebox(szmessage, sztitle):

crt.dialog.messagebox(szmessage, sztitle)

def __init__(self):

self.__otab = none

self.__szprompt = ""

self.__szhostname = ""

def login(self, szhostname, szusername, szpassword):

self.__szhostname = szhostname

if self.__ssh(szusername,szpassword):

return true

if self.__telnet(szusername,szpassword):

return true

return false

def logout(self):

self.__otab.session.disconnect()

def send(self, szcmd):

self.__checkenv()

self.__send(szcmd)

self.__otab.screen.waitforstring(szcmd)

return str(self.__getresult())

def changeprompt(self, szcmd):

self.__send(szcmd)

self.__otab.screen.waitforstring(szcmd)

self.__otab.screen.waitforstring("some string will not echo.", 1)

self.__updateprompt()

def gettabname(self):

if self.__istabempty():

self.__getcurrenttab()

return str(self.__otab.caption)

def __ssh(self, szusername, szpassword):

szconnectstring = "/ssh2 /l \"%s\" /password \"%s\" %s" % \

(szusername, szpassword, self.__szhostname)

if self.__connect(szconnectstring) == false:

return false

self.__otab.screen.synchronous = true

self.__waitdevicetabinit()

return true

def __telnet(self, szusername, szpassword):

szconnectstring = "/telnet %s" % (self.__szhostname)

if self.__connect(szconnectstring) == false:

return false

self.__otab.screen.synchronous = true

self.__otab.screen.waitforstring("ame")

crt.sleep(200)

self.__send(szusername)

self.__otab.screen.waitforstring("assword")

crt.sleep(200)

self.__send(szpassword)

self.__waitdevicetabinit()

return true

def __connect(self, szconnectstring):

try:

self.__otab = crt.session.connectintab(szconnectstring)

return true

except:

return false

def __waitdevicetabinit(self, szstring = "#"):

crt.sleep(300)

self.__otab.screen.waitforstring(szstring)

def __send(self, szcmd):

szcmd = szcmd + '\r'

self.__otab.screen.send(szcmd)

def __checkenv(self):

if self.__istabempty():

self.__getcurrenttab()

self.__otab.screen.synchronous = true

if self.__ispromptempty():

self.__updateprompt()

def __ispromptempty(self):

if self.__szprompt == "":

return true

return false

def __istabempty(self):

if self.__otab == none:

return true

return false

def __getcurrenttab(self):

self.__otab = crt.getactivetab()

def __getresult(self):

return self.__otab.screen.readstring(self.__szprompt)

def __updateprompt(self):

crt.sleep(300)

rowindex = self.__otab.screen.currentrow

colindex = self.__otab.screen.currentcolumn - 1

self.__szprompt = self.__otab.screen.get(rowindex, 0, rowindex, colindex)

self.__szprompt = str(self.__szprompt.strip())

def main():

# 測試用。獲取當前tab標籤,並直接向裝置傳送命令

test1 = crtenv()

test1.send("terminal length 0")

crtenv.messagebox(test1.send("sh int status"),"run")

crtenv.messagebox(test1.gettabname(), "gettabname")

test1.changeprompt("conf t")

crtenv.messagebox(test1.send("do sh ip int br"),"run")

test1.changeprompt("end")

crtenv.messagebox(test1.send("sh int status"),"run")

# 新登入一台裝置

test2 = crtenv()

test2.login("192.168.1.1","qw er","wqerqwer")

test1.logout()

test2.logout()

main()

secureCRT指令碼編寫

securecrt支援三種指令碼語言 vbs,js,python。三種指令碼分別以一下三種形式開頭 vbs language vbscript inte ce 1.0 js language jscript inte ce 1.0 python language python inte ce 1.0...

securecrt的vbs指令碼

vbs檔案內容 language vbscript inte ce 1.0 sub main crt.screen.synchronous true 獲取securecrt物件,定義變數 dim objtab set objtab crt.getscripttab 1.跳轉到相應的目錄,vbcr表示...

利用SecureCRT錄製linux指令碼

序 在利用securecrt連線linux系統後,進行各種操作,其中有些操作是經常性進行的,如果是一條命令就能搞定的事,可以把這條命令拷貝起來,以後直接貼上就可以。但如果乙個操作需要多條命令才能夠實現,就不得不多反覆拷幾次才行,對於這樣沒有任何技術含量的純體力的重複性工作,如果能夠有一種方法從其中解...